- 「%SUBSTR」 に対して 「%QSUBSTR」
- 「%UPCASE」 に対して 「%QUPCASE」
...のように、頭に「Q」がつくマクロ関数をご存知でしょうか?
今回は、このQつきマクロ関数を解説したいと思います。
以下はマクロ変数Xに「Mr&Mrs Smith」という文字を格納しています。
%let x = %nrstr(Mr&Mrs Smith);
|
ここからが問題。
このマクロ変数Xの「頭6バイトを抽出したい」とします。
%put %substr( &x, 1, 6 );
ログ WARNING: MRSのシンボリック参照を解決できません。 |
WARNINGが出ました。
これはマクロ関数「%SUBSTR」の戻り値が「Mr&Mrs」となるわけですが、「&Mrs」の部分をマクロ変数としてSASが認識してしまい、「そんなマクロ変数ないよ」って言われてます。
ここでQつきマクロ関数の出番!
%put %qsubstr( &x, 1, 6 );
ログ Mr&Mrs |
うまくいきました!
このQつきのやつは「マクロ関数の戻り値に特殊文字を含む場合、その文字をクォート処理」してくれます
まぁ以下のように%nrbquoteとか使ってクォート処理してもいいけど、、
%put %nrbquote( %substr( &x, 1, 6 ) );
ログ Mr&Mrs |
Qつきマクロ関数の用途を理解していれば、こんなめんどくさい書き方しなくてもOKってのが分かりますね!