前のページ|次のページ

%SUPERQ関数

マクロ実行時にすべての特殊文字とニーモニック演算子をマスクし、値の置換がそれ以降行われないようにします。

種類: マクロクォーティング関数
参照項目: %NRBQUOTE関数および %BQUOTE関数と%NRBQUOTE関数

構文

%SUPERQ(argument)

必須引数

argument

先頭にアンパサンドが付いていないマクロ変数名か、または先頭にアンパサンドが付いていないマクロ変数名を生成するテキスト式を指定します。

詳細

%SUPERQ関数は、値に含まれているマクロやマクロ変数参照を置換せずに、マクロ変数の値を返します。%SUPERQ関数は、次に示す特殊文字とニーモニック演算子をマスクします。
& % ' " ( ) + − * / < > = ¬ ^ ~ ; , #  blank
AND OR NOT EQ NE LE LT GE GT IN
%SUPERQ関数は、特にアンパサンドやパーセント記号を含んでいる可能性のあるマクロ変数が%INPUTステートメント、%WINDOWステートメント、SYMPUTルーチンなどで使用される場合に、そのような変数をマスクするのに使用すると便利です。
SASマクロ言語におけるクォーティングの詳細については、マクロクォーティングを参照してください。
注: マクロクォーティング関数の最大ネストレベルは10です。

比較

  • %SUPERQ関数は、指定されたマクロ変数の値に含まれているマクロ変数やマクロ参照が置換されないようにする唯一のクォーティング関数です。
  • %SUPERQ関数は、その引数として、アンパサンドが付いていないマクロ変数の名前のみを受け付けます。一方、それ以外のクォーティング関数は、定数テキストを含む任意のテキスト式を引数として受け付けます。
  • %SUPERQ関数は、%NRBQUOTE関数と同じ文字をマスクします。ただし、%SUPERQ関数は、マクロ変数の値に含まれているいかなるものも置換しません。%NRBQUOTE関数は、結果をマスクする前に、引数に含まれているマクロ参照やマクロ変数値を置換しようとします。

例: 未置換のマクロ変数の値を渡す

次の例では、%SUPERQ関数を使って、マクロ変数MV1およびMV2の値をマクロ変数TESTMV1およびTESTMV2に割り当てる前に、MV1およびMV2の値に含まれるマクロ参照がマクロプロセッサによって置換されないようにしています。
data _null_;
   call symput('mv1','Smith&Jones');
   call symput('mv2','%macro abc;');
run;
%let testmv1=%superq(mv1);
%let testmv2=%superq(mv2);
%put Macro variable TESTMV1 is &testmv1;
%put Macro variable TESTMV2 is &testmv2;
このプログラムを実行すると、SASログに次のメッセージが書き込まれます。
Macro variable TESTMV1 is Smith&Jones Macro variable TESTMV2 is %macro abc;
変数TESTMV1およびTESTMV2の値は、それぞれ変数MV1およびMV2の元の値の画像であると見なすことができます。%PUTステートメントは、そのような画像をテキストで出力します。マクロプロセッサは置換を行いません。マクロプロセッサは、未置換の参照&JONESに関する警告メッセージや、%LETステートメント内部でのマクロ定義の開始に関するエラーメッセージを発行しません。
前のページ|次のページ|ページの先頭へ