2016年8月21日日曜日

マクロクォーティングの話

恒例のマクロクォーティングの話ですね
いろんなところで書かれているのですが私も引っかかったので上げます

マクロ変数に格納するときには%nrstrとかで文字列をくくるとOKです
%let P = nrstr("&hoge");

call symputxを使うときは

data A;
    AA = "&hoge";
run;

data _null_;
    set A
    call symputx("P" , %nrstr(AA) );
run;
となります。

ここまではいいんですが、
マクロ変数から展開するときにクォートしたいときは
%superq()を使うことになります。

文字列をexcelに書いて、そのexcelをsasデータセットにして
マクロ変数に文字列を格納したい時に使いました。

文字列→(クォート処理)→変数→マクロ変数の時が%nrstr()関数
文字列→変数→(クォート処理)→マクロ変数の時に%superq()関数です

data _null_ ;
    call symputx("P" , ’ho&ge’);
run;

%put  %surperq(P);


で通ります

where文の条件分岐とかにマクロ変数を使う場合は
%superq()のほうが使いよいかもしれませんね。






0 件のコメント:

コメントを投稿