今回は、簡単そうで意外とわからない処理の話です。
data Q1;
A='赤';B='い';C='歩';X='A';output;
A='青';B='ろ';C='金';X='C';output;
A='黄';B='は';C='飛';X='B';output;
run;
というデータセットがあるとします。
ここから
というデータセットが欲しいとします。
つまり、Xの中に入っている値は、Yにどの変数の値を持ってくるかを指示しているわけです。
さて、1つ1つ
if X='A' then Y=A;
else if ・・・・と書いていいってもいいですが、仮に変数が100個とかあったら面倒ですね。
この処理を1行で書くことができます。
それは
data A1;
set Q1;
Y=vvaluex(X);
run;
です。
これだけで、上記の結果がでます。
vvaluex?、vvalueじゃないんですね。この関数って本来どういうのでしたでしょうか?
本来は
data Q2;
X=1;
format X Z2.;
run;
のように、フォーマットが設定された変数に対して、その変数に設定されたフォーマット
を使って、putして文字変数を作ってくれる便利関数です(デフォのlengthはいつもの$200.)
data A2;
set Q2;
XV=vvalue(X);
XVX=vvaluex('X');
format X best.;
run;
わかりにくいですが、XVとXVXは文字型変数です。
でvvalue関数がそのまま変数を引数にとるのに対して、vvaluexは変数名の文字値を引数に
とるんですね!括弧の中のXによくみると、シングルコーテーションがついてます。
そして変数に特にフォーマットが設定されていなければそのままデフォルトのフォーマットをつかいますので、つまり値そのまんまということです。
その性質をうまく使ってるんですね!!
vvaluexというと、フォーマットでputするだけの関数と思わせておいてのこの離れ業!
面白いですね!
0 件のコメント:
コメントを投稿