2017年4月13日木曜日

「いずれかの変数が●●」とか「すべての変数が●●」のような条件式の書き方


今回は、皆さんどう書いてますかっていう話です。


サンプルデータ

data DT1;
input (A B C)(:$) @@;
cards;
Y Y Y N N N N N Y
;
run;




いずれかの変数が●●


例えば、「変数A,B,Cのいずれかの値が ”Y"」だったらフラグを立てる。という場合、通常の書き方は以下の通りですよね。

data DT2;
  set DT1;
  if  (A="Y" or B="Y" or C="Y")  then FLG=1;
run;


ただ、これじゃ面白くないしもっと短い文で書きたいので、私は以下のように書いてます。
  if whichc("Y",A,B,C)>0 then FLG=1;


WHICHC関数の構文は「whichc(Y, X1,X2…)」で、Yと同じ値がXの何番目に初登場するか返してくれます。
引数が数値の場合はWHICHN、文字の場合はWHICHC関数といった感じで使い分けます。


またSASYAMAさんが紹介されている配列とinのコンボ技を使うのもカッコいい書き方だなと思いました。
http://sas-tumesas.blogspot.jp/2013/10/in.html

 array AR(*) A B C;
 if "Y" in AR then FLG=1;




すべての変数が●●


例えば、「変数A,B,Cすべての値が ”Y"」だったらフラグを立てる。という場合、通常の書き方は以下の通りですよね。

data DT3;
  set DT1;
  if  A="Y" and B="Y" and C="Y"  then FLG=1;
run;



これも、もっと短い文で書きたいので以下のように書いてます。
  if  (A=B=C="Y")  then FLG=1;



"Y"と一致する変数が何個あるか、みたいな関数があればいいんですが、SAS9.4にはそういう関数ないっぽい。

皆さんはどう書いてますか??

0 件のコメント:

コメントを投稿