2017年6月14日水曜日

My Favorite SAS Functions (6) VVALUE / VVALUEX関数



第6回目は、VVALUE / VVALUEX関数。
変数に割り当てられている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;
  X
Y
 2017-06-13 2017-06-13 


ここで、VVALUEまたはVVALUEX関数を使えば少しスッキリとした文になります。

After
data DT2;
  set DT1;
  length Y1 Y2 $20.;

  /* vvalue関数を使った例 */
  Y1 = vvalue( X );

  /* vvaluex関数を使った例 */
  Y2 = vvaluex( "X" );

run;
  X
Y1
Y2
 2017-06-13 2017-06-13  2017-06-13 




解説

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変換すると、、

  length Y3 $20.;
  Y3 = put( . , yymmdd10.);

→ 変換後の値は「         .」という感じで先頭に余計な空白が入ります。


また、フォーマットによっては、、

 length Y4 $20.;
 Y4 = put( 10, best12. );

→ 変換後の値は「          10」という感じでこちらも先頭に余計な空白が入る場合があります。


VVALUE / VVALUEX関数も同様に先頭に空白が入る場合があるのでご注意下さい


0 件のコメント:

コメントを投稿