今回は1行でカテゴリ変数 (数値) に置き換える方法。
[年齢]
20歳未満 → 1
20歳以上30歳未満 → 2
30歳以上 → 3
サンプルデータ
data DT1; input AGE; cards; 17 23 19 37 27 ; データセットDT1 AGE 17 23 19 37 27 AGE AGEGRP 17 1 23 2 19 1 37 3 27 2 |
1行で書く方法。
普通に書くとこんな感じですが、
data DT2; set DT1; if 0 < AGE <20 then AGEGRP = 1 ; if 20 <= AGE <30 then AGEGRP = 2 ; if 30 <= AGE then AGEGRP = 3 ; run; |
WHICHN関数で1行でいける。
data DT2; set DT1; if AGE^=. then AGEGRP = whichn(1, 0<AGE<20, 20<=AGE<30, 30<=AGE); run; |
- WHICHN関数の構文は「whichn(Y, X1,X2…)」で、Yと同じ数値がXの何番目に初登場するか返してくれます。
- Yと同じ数値がどのXにもない場合「0」が返されます。
- Yが欠損値の場合、欠損値が返される。
- リンクさせて頂いてる「データステップ100万回」の「whichn関数はwhereステートメントでも使える話とその応用をだらだら」で最後に提案されてるアイディアに再インスパイアされて今回の問題に当てはめて利用させて頂きました。
今回の使用法の注意点
・カテゴリ値が1~5くらいまでならいいけど、「年齢=NULL → 100」とか飛び離れたカテゴリ値を設定したい場合、関数の引数を100個指定しなきゃいけなくなるので実用的じゃなくなる → whichn(Y, X1,X2…X100)
0 件のコメント:
コメントを投稿