ラベル 関数: CHOOSEN の投稿を表示しています。 すべての投稿を表示
ラベル 関数: CHOOSEN の投稿を表示しています。 すべての投稿を表示

2017年5月20日土曜日

My Favorite SAS Functions (4) CHOOSEN / CHOOSEC関数


第4回目は、CHOOSEN / CHOOSEC関数。
これもいい関数ですよ!



構文


    CHOOSEN( Y , X1 , X2 , X3 , … )


・Y番目のXの値を返す。
・第2引数以降に数値型の変数または値を指定する場合はCHOOSEN関数を用いる。
・第2引数以降に文字型の変数または値を指定する場合はCHOOSEC関数を用いる。



例

以下のように、X1~X3のうち、Y番目の値を取得したいとします。。

  X1  
  X2  
  X3  
  Y  
  XVAL  
  aa    bb  cc  2     bb


以下、CHOOSEC関数を使わない場合(Before)と、使う場合(After)。

Before
  length XVAL $2.;
  if Y = 1 then XVAL=X1;
  if Y = 2 then XVAL=X2;
  if Y = 3 then XVAL=X3;


After
  length XVAL $2.;
  XVAL = choosec( Y ,X1,X2,X3 );



こんな感じでスッキリとした文になるんでよく使います。今日も使いました。


他の便利な使い方を過去記事でも紹介してるので是非見てくださいね。
http://sas-boubi.blogspot.jp/2014/03/12_25.html

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)