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()のほうが使いよいかもしれませんね。






2016年8月11日木曜日

repeat関数

指定した文字を指定した回数出力する関数。
構文は repeat("文字",n) です。
n+1回、指定した文字を出力します。
nには0以上の数しか入らないので、最低でも1回出力することになります。

x = repeat("hoge" , 2);
put x;

とすると
hogehogehogeと出力されます。


文字のところに" "とスペースも入れられます。
スペースの数をこの関数で制御して、
6 (  50.0)
7 (100.0)
2 (    2.0)
のように、めんどくさい桁そろえするときに重宝します。
あまり機会がないですが。

小数点の位置を揃える桁そろえのめんどくさいことめんどくさいこと