2014年3月25日火曜日

1行プログラムその2:数値を任意の数値に置き換える。

その1」の続きです。
前回は1行のプログラムで「1→2」「2→1」と置き換えたけど、「1→10」「2→15」のように任意の値に置き換えたい場合どうすればいいでしょうか?

1 → 10
2 → 15
3 → 100

サンプルデータ

data DT1;
input V1;
cards;
1
3
2
;
run;

データセットDT1
V1
 1
 3
 2

求めたい結果
V1  V2
 1    10
 3    100
 2    15



1行で書く方法。

まじめに書くとこんな感じですが、
data DT2;
   set DT1;
   if V1 = 1 then V2=10;
   if V1 = 2 then V2=15;
   if V1 = 3 then V2=100;
run;


CHOOSEN関数を使うと1文でいけます。
data DT2;
   set DT1;
   if V1^=. then V2=choosen(V1, 10,15,100);
run;

CHOOSEN関数の構文は「choosen(N, X1,X2…)」でN番目のXの値を取得することが出来ます。
Xは数値型の変数または値である必要があります。

最近までこの関数なめてたけど、考えてみると色々使い道があっておもしろいです。


今回の使用法の注意点
V1に入る値は1~10くらいまでならいいけど、100とか飛び離れた値があると関数の引数を100個指定しなきゃいけなくなるので実用的じゃなくなる → choosen(N, X1,X2…X100)

0 件のコメント:

コメントを投稿