動かして覚えるマクロ変数の展開 - && など &が複数あるパターン - 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
コメント
コメントを投稿