2019年7月30日火曜日

頭に「Q」がつくマクロ関数の用途




  • 「%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ってのが分かりますね!


0 件のコメント:

コメントを投稿