2022年11月29日火曜日

SQLプロシジャのINTO句の注意点


SQLのINTO句を使用する際の注意点を2つ紹介したいと思います。

 

1. 変数にフォーマットが割り当てられている場合

data DT1;
  format X yymmdd10.;
  X=1;
run;

proc sql noprint;
  select X into :X trimmed
  from DT1;
quit;
%put &X;

ログ
1960-01-02

マクロ変数にはフォーマットをあてた値が格納されるようです。この挙動、SASのリファレンスに書いてない気がする。。


もし、フォーマット値ではなく、変数値をマクロ変数に格納したい場合、
事前にフォーマットを除いておくか、もしくは数値変数ならデータに応じた適切な長さのBESTフォーマットを「FORMAT=」で便宜的にあてるなどの対応が必要になります。

proc sql noprint;
  select X format=best16. into :X trimmed
  from DT1;
quit;
%put &X;

ログ
1


2. 数値変数かつフォーマットが割り当てられていない場合

data DT2;
  X=123.456789;
run;

proc sql noprint;
  select X into :X trimmed
  from DT2;
quit;
%put &X;

ログ
123.4568

デフォルトの挙動として「BEST8.」の出力形式で格納されるようです。

状況によっては、もとの数値がだいぶ削られちゃいますね(これはINTO句に限ったことではないですが。。)