2014年3月28日金曜日

1行プログラムその4:カテゴリ変数の作成



今回は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 件のコメント:

コメントを投稿