まず今後マクロを使ううえで便利な%PUTステートメントについて紹介します。
以下構文の通り、%PUTステートメントで指定した文字列をログに表示する事が出来ます。
%PUT 文字列;
|
例1
%let X = ABCDE;
%put &X;
ログ
ABCDE
|
マクロ変数Xの値をログに出力しています。
例2
%let X = ABCDE;
%put マクロ変数 X に "&X" を指定しました。;
ログ
マクロ変数 X に "ABCDE" を指定しました。
|
文字列とマクロ変数を組み合わせてログに出力しています。
以下は例2と同じようなプログラムですが、WARNINGが出てしまいます。
%let X = ABCDE;
%put マクロ変数 X に&Xを指定しました。;
ログ
WARNING: Xを指定しました。のシンボリック参照を解決できません。
|
これは 「&Xを指定しました。」 という名前のマクロ変数があるのだと解釈してしまったため、「そんな名前のマクロ変数存在しないぞ!」 というWARNINGです。
「&X」 と 「を指定しました。 」というように分けて解釈させたい場合、マクロ変数名の後に ドット「.」を入れてあげます。
%let X = ABCDE;
%put マクロ変数 X に&X.を指定しました。;
ログ
マクロ変数 X にABCDEを指定しました。
|
マクロ変数名の後のドットは展開後に消えます。
%let LIB=WORK;
data &LIB.DT1; A=1; run;
ログ
NOTE: データセットWORK.WORKDT1は1オブザベーション、1変数です。
|
上記はデータセットDT1を保存するライブラリをマクロ変数LIBで指定するプログラムのつもりです。
しかしログを見ると実際できたデータセットは「WORK.WORKDT1」 となっています。
これは「&LIB.DT1」という文をSASが見たときに、「&LIB.」はマクロ変数の後にドットがついてるから、マクロ変数展開後にドットが消えて「WORKDT1」となってしまうからです。
以下のようにドットを2つ入れてあげると、展開後に1つだけドットが残ります。
%let LIB=WORK;
data &LIB..DT1; A=1; run;
ログ
NOTE: データセットWORK.DT1は1オブザベーション、1変数です。
|
2. マクロの登録と実行
3. 定位置パラメータ
4. キーワードパラメータ
5. クォート処理
6. クォート処理2
7. ループ処理
8. 条件分岐処理
9. ドット
10. &&
11. 演算評価
12. 補足
0 件のコメント:
コメントを投稿