ありがとうございます。拝見いたしました。
頂いたコードを少しいじって試してみたのですが、うまく行かなかったです。。。
DATA a; length original $100 modified $200;/* 全角にするのでoriginalの2倍確保したい */ original = '東京都品川区広町2丁目1-306-F11棟5050号室'; modified = original; run;data b; set a; /* 正規表現識別子 */ length temp $4000 char $2; do i=1 to klength(original); char=ksubstr(original,i,1); if char in ('0','1','2','3','4','5','6','7','8','9') then do; cnt=cnt+1; temp=cats(temp,char); if i=klength(original) then do; if cnt>=3 then do; modified=cats(modified,KPROPCASE(temp,'FULL-ALPHABET, HALF-ALPHABET'),char); end; else do; modified=cats(modified,char); end; end; end; else if cnt>=3 then do; modified=cats(modified,KPROPCASE(temp,'FULL-ALPHABET, HALF-ALPHABET'),char); cnt=0; temp=''; end; else if 0<cnt<3 then do; modified=cats(modified,temp,char); cnt=0; temp=''; end; else do; modified=cats(modified,char); end; end; RUN;
実行後データセットを開けてみると、cntがブランクになっているのが気になりますが問題はないでしょうか。
また、そもそもロジックとして全角→半角の前に、半角文字を全角にしてその後3桁以上のものを全角に戻しているのですが、その際に3桁以上のものは全角に変換しない、というロジックのほうが楽だったりしますでしょうか。
... View more