動かして覚えるマクロ変数の展開 - && など &が複数あるパターン - SAS

マクロ変数の値を用いるには、& を使用します。この & を複数使用することで、マクロ変数を展開して、展開した値のマクロ変数を展開し、さらにその値のマクロ変数を・・・というような使い方ができます。

テストコード 1 - & が 1~3個

%let HELLO = SAS ;
%let SAS   = WORLD ;

%put HELLO = &HELLO. ;
%put HELLO = &&HELLO. ;
%put HELLO = &&&HELLO. ;
 59         %let HELLO = SAS ;
 60         %let SAS   = WORLD ;
 61         
 62         %put HELLO = &HELLO. ;
 HELLO = SAS
 63         %put HELLO = &&HELLO. ;
 HELLO = SAS
 64         %put HELLO = &&&HELLO. ;
 HELLO = WORLD

テストコード 2 - & いっぱい

%let NUM     = 1 ;
%let CLASS_1 = FIRST ;
%let FIRST   = LAST ;

%put CLASS = &CLASS._&NUM ;     /* WARNING */
%put CLASS = &CLASS_&NUM ;      /* WARNING */
%put CLASS = &&CLASS_&NUM ;
%put CLASS = &&&CLASS_&NUM ;
%put CLASS = &&&&CLASS_&NUM ;
%put CLASS = &&&&&CLASS_&NUM ;
%put CLASS = &&&&&&CLASS_&NUM ;
 67         %let NUM     = 1 ;
 68         %let CLASS_1 = FIRST ;
 69         %let FIRST   = LAST ;
 70         
 71         %put CLASS = &CLASS._&NUM ;     /* WARNING */
 WARNING: CLASSのシンボリック参照を解決できません。
 CLASS = &CLASS._1
 72         %put CLASS = &CLASS_&NUM ;      /* WARNING */
 WARNING: CLASS_のシンボリック参照を解決できません。
 CLASS = &CLASS_1
 73         %put CLASS = &&CLASS_&NUM ;
 CLASS = FIRST
 74         %put CLASS = &&&CLASS_&NUM ;
 CLASS = FIRST
 75         %put CLASS = &&&&CLASS_&NUM ;
 CLASS = FIRST
 76         %put CLASS = &&&&&CLASS_&NUM... ;
 CLASS = FIRST.
 77         %put CLASS = &&&&&&CLASS_&NUM ;
 CLASS = LAST

テストコード 3 - ドットの位置が重要

%let FIRST     = HELLO ;
%let SECOND    = SAS ;
%let HELLO_SAS = THANK_YOU ;

%put &FIRST_&SECOND ;     /* WARNING */
%put &FIRST._&SECOND ;
%put &&FIRST._&SECOND ;
%put &&&FIRST._&SECOND ;
 80         %let FIRST     = HELLO ;
 81         %let SECOND    = SAS ;
 82         %let HELLO_SAS = THANK_YOU ;
 83         
 84         %put &FIRST_&SECOND ;     /* WARNING */
 WARNING: FIRST_のシンボリック参照を解決できません。
 &FIRST_SAS
 85         %put &FIRST._&SECOND ;
 HELLO_SAS
 86         %put &&FIRST._&SECOND ;
 HELLO_SAS
 87         %put &&&FIRST._&SECOND ;
 THANK_YOU

テストコード 4 - %do ループ内で使ってみる

%let RESULT_1 = HELLO ;
%let RESULT_2 = SAS ;
%let RESULT_3 = GOODBYE ;

%macro TEST ;
  %do I=1 %to 3 ;
    %put &&RESULT_&I. ;
  %end ;
%mend TEST ;

%TEST ;

 90         %let RESULT_1 = HELLO ;
 91         %let RESULT_2 = SAS ;
 92         %let RESULT_3 = GOODBYE ;
 93         
 94         %macro TEST ;
 95           %do I=1 %to 3 ;
 96             %put &&RESULT_&I. ;
 97           %end ;
 98         %mend TEST ;
 99         
 100        %TEST ;
 HELLO
 SAS
 GOODBYE
 101        


参考サイト

コメント

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意