inとコロン(:)の合わせ技、文字型に対する接頭一致

リンクサイト「SAS忘備録」で
「条件式(IF/WHERE)におけるINオペレータの小技」
http://sas-boubi.blogspot.jp/2014/01/in.html

の中で

data DT1;
  do V=1 to 6 ;
   output;
  end;
run;
proc print data=DT1 noobs;
 where  V in (1, 3 : 5) ;
run;

とすると






となるように、inの中での3:5が3~5の範囲指定として実行されるという技を紹介されていました。

今回は、文字型について、括弧の中にコロンを入れるのではなく外に出したら、どうなるかを見てみます。

data Q1;
length X $20.;
X='ABCD';output;
X='ABCDEF';output;
X='DEFG';output;
X='AB';output;
X='BBC';output;
X='DBC';output;
run;










こういうデータがあって

data A1;
 set Q1;
 where X in:('ABC','DE','DB');
run;

としたら、どうなるでしょうか?

答えは








です。
これはつまり、Xの値がABCから始まるか、DEから始まるか、DBから始まる場合に抽出しているということです。

keepやdropステートメント等で X_:とするとX_から始まる変数名の変数が対象になったり
set X_:とするとX_から始まるデータセット名のデータセットが対象になったりするのと同じ
前方一致を意味するコロンな使い方です。

なんでinじゃなくて

data A2;
 set Q1;
 where X=:'ABCDE';
run;

でも使え、





こうなります。

コロンは色々使える分、ややこいですね



0 件のコメント:

コメントを投稿