ちょっとしたコンボ技を紹介。
複数のデータセットを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」
というコードの変数を作りたいとします。
・「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文で書けちゃうので楽。
・YとXは数値型の変数または値である必要があります
・Yと同じ値がXにない場合、0が返される
・Yが欠損値の場合、欠損値が返される
0 件のコメント:
コメントを投稿