変数に割り当てられているFORMATを使って、その変数を文字変換した値を返してくれる関数です。
VVALUE関数については以下記事で紹介済みです。
http://sas-boubi.blogspot.jp/2013/12/put-vs-vvalue.html
では、例を見ていきましょう。
例えば、以下のようにフォーマット「YYMMDD10.」を割り当てた変数Xがあったとします。
data DT1;
format X yymmdd10.;
X = '13jun2017'd;
run;
X
|
---|
2017-06-13 |
この変数XをYYMMDD10.形式のフォーマットで文字変換したい場合、普通以下のようにPUT関数を使いますよね。
Before
data DT2;
set DT1; length Y $20.; Y = put( X, yymmdd10.); run;
|
ここで、VVALUEまたはVVALUEX関数を使えば少しスッキリとした文になります。
After
data DT2;
set DT1; length Y1 Y2 $20.; /* vvalue関数を使った例 */ Y1 = vvalue( X ); /* vvaluex関数を使った例 */ Y2 = vvaluex( "X" ); run;
|
Y1 = vvalue( X );
「 vvalue( X ) 」で変数Xに割り当てられているFORMAT「YYMMDD10.」を使って文字変換した値「2017-06-13」を返しています。
Y2 = vvaluex( "X" );
vvaluex も vvalue と同じ機能を持っているのですが、違いは以下の通り。
・vvalue( X ) … 変数名を指定
・vvaluex( "X" ) … 変数名を表す文字値を指定
つまり、「 vvaluex( "X" ) 」で変数Xに割り当てられているFORMAT「YYMMDD10.」を使って文字変換した値「2017-06-13」を返しています。
また、以下のような書き方も可能です。
length VARNAME Y2 $20.;
VARNAME = "X";
Y2 = vvaluex( VARNAME ); |
変数名を格納した変数VARNAMEをVVALUEX関数の引数に指定することでも、
「vvaluex( VARNAME )」 → 「vvaluex( "X" )」 と展開されます。
PUT関数と挙動が似ています。
例えば、PUT関数で数値の欠損値を以下のようにFORMAT変換すると、、
例えば、PUT関数で数値の欠損値を以下のようにFORMAT変換すると、、
length Y3 $20.; Y3 = put( . , yymmdd10.); |
→ 変換後の値は「 .」という感じで先頭に余計な空白が入ります。
また、フォーマットによっては、、
length Y4 $20.; Y4 = put( 10, best12. ); |
→ 変換後の値は「 10」という感じでこちらも先頭に余計な空白が入る場合があります。
VVALUE / VVALUEX関数も同様に先頭に空白が入る場合があるのでご注意下さい。
6.VVALUE・VVALUEX関数
0 件のコメント:
コメントを投稿