2015年2月24日火曜日

PROC CONTENTSのSHORTオプションはアイディア次第で役に立ちそう。




CONTENTSプロシジャは、データセットの変数定義を出力できますが、、

*** サンプルデータ作成 ;
data DT1;
   retain A C B D  1;
run;

  A  
C
  B  
 D 
  1
  1  
  1  
  1  


*** 変数名を出力 ;
proc contents data=DT1  short  varnum ;
run;




  • SHORT」で出力が簡易的な「変数名のリスト」になります。
  • VARNUM」または「ORDER=VARNUM」で、データセットに格納されてる順 (上の例では「A C B D」の順) で変数名のリストが出力されます。


注意
  • 「SHORT」で出力する「変数名のリスト」の文字が長すぎると、文字が切り捨てられてログにWARNINGが出るらしいです。詳細はリファレンスを参照下さい。
  • 話それるけど、PROC CONTENTSの「OUT=オプション」で変数定義をデータセットに出力できますが、「SHORT」「VARNUM」「ORDER=」といったオプションの機能は「OUT=」で出力するデータセットには効力がないのでご注意を。





このオプション使えそうです。たとえば、、

*** 全変数名を(データセットに格納されてる順で)1つのマクロ変数に格納する ;
ods output PositionShort = OUT1;
    proc contents data=DT1  short  varnum;
    run;
ods output close;

data _NULL_ ;
    set OUT1 ;
    call symputx("VARS", VARIABLES);
run;

%put &VARS;

ログ
A C B D




あとデータステップ100万回のSASYAMAさんから、以下のように全変数名をアルファベット順で1つのマクロ変数に格納したい場合に役に立ったとコメントいただきました。なるほど~。
(すみません、色々いじってたら肝心のSASYAMAさんのコメント消してしまっていました。。)

*** 全変数名を(アルファベット順で)1つのマクロ変数に格納する ;
ods output VariablesShort = OUT2;
    proc contents data=DT1  short  order=casecollate;
    run;
ods output close;

data _NULL_ ;
    set OUT2;
    call symputx("VARS2", VARIABLES);
run;

%put &VARS2;

ログ
A B C D


  • 「ORDER=CASECOLLATE」でアルファベット順にしています。
  • また、「VARNUM」とか「ORDER=」のオプション設定値によって、「ODS OUTPUT」の出力オブジェクトの名前が「PositionShort」だったり「VariablesShort」だったり変わるみたいなのでご注意を。



0 件のコメント:

コメントを投稿