2013年11月8日金曜日

SUBSTR関数の小技




以下のデータセットがあったとして、、

data DT1;
    length VAR1 $20.;
    VAR1="abcde";
run;

変数「VAR1」の2~3バイト目を「XX」に置換したいとする。
だしたい結果は「aXXde」



「translate」とか「tranwrd」を思い浮かべるけど、以下みたいにも書ける。

data DT2;
    set DT1;
    substr(VAR1,2,2)="XX";
run;


substr関数の意外に知られてない書き方だと思う。ただし、

  • 2バイトを3バイトの文字に置換、みたいな異なる長さへの置換は出来ない。
    • 失敗例1: substr(VAR1,2,2)="XXX" → "aXXde"
    • 失敗例2: substr(VAR1,2,2)="X" → "aX de"
  • シングルバイト専用の関数のため、日本語などのマルチバイトは未対応。
  • 変数を上書きする(今回の例ではVAR1の変数値を置換した結果がVAR1に格納される)のでご注意下さい。

0 件のコメント:

コメントを投稿