2014年3月1日土曜日

IN=オプションとWHICHN関数のコンボ技。




ちょっとしたコンボ技を紹介。

複数のデータセットをSETして1つにまとめた時、
どのデータセットから持ってきたレコードなのか識別するために由来コードを振ることがあって、そういった時に使えます。


サンプルデータ作成

data DT1;
  do V=1 to 2;
     output;
  end;
run;

data DT2;
  do V=3 to 4;
     output;
  end;
run;

データセット「DT1」
V
1
2

データセット「DT2」
V
3
4




コンボ技

上記データセットを縦結合して、
・「DT1」由来のレコードであれば「ORIGIN=1」
・「DT2」由来のレコードであれば「ORIGIN=2」
というコードの変数を作りたいとします。

求めたい結果
V   ORIGIN
1      1
2      1
3      2
4      2



最近までこんな感じで書いてましたが、、
data OUT2;
   set DT1 (in=_IN1)
         DT2 (in=_IN2)
   ;
   if  _IN1=1 then ORIGIN = 1;
   if  _IN2=1 then ORIGIN = 2;
run;



WHICHN関数を組み合わせると、以下のように書けます。
data OUT2;
   set DT1 (in=_IN1)
         DT2 (in=_IN2)
   ;
   ORIGIN = whichn(1,_IN1, _IN2) ;
run;

結合するデータセットがいくつあっても1文で書けちゃうので楽。


WHICHN関数の構文は「whichn(Y, X1,X2…)」で、Yと同じ値がXの何番目に初登場するか返してくれます。
・YとXは数値型の変数または値である必要があります
・Yと同じ値がXにない場合、0が返される
・Yが欠損値の場合、欠損値が返される


0 件のコメント:

コメントを投稿