前のページ|次のページ

%BQUOTE関数と%NRBQUOTE関数

マクロの実行時に、置換された値に含まれている特殊文字やニーモニック演算子をマスクします。

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

構文

%BQUOTE(character-string | text-expression)
%NRBQUOTE(character-string | text-expression)

詳細

%BQUOTE関数と%NRBQUOTE関数は、マクロまたはマクロ言語ステートメントの実行時に、文字列またはテキスト式の置換された値をマスクします。これらの関数は、次に示す特殊文字とニーモニック演算子をマスクします。
' " ( ) + − * / < > = ¬ ^ ~ ; , # blank
AND OR NOT EQ NE LE LT GE GT IN
さらに、%NRBQUOTE関数は次のものもマスクします。
& %
%NRBQUOTE関数は、置換された引数値が次のものを含んでいる場合に使用すると便利です。
  • マクロ変数参照のように見えるが実はそうではない文字列。この場合、マクロプロセッサがこのような文字列を次回検出した際に、マクロプロセッサが同文字列を置換しないようにする必要があります。
  • マクロプロセッサによる次回検出時に、マクロプロセッサによって置換されたくないマクロ呼び出し。
注: マクロクォーティング関数の最大ネストレベルは10です。
ヒント:%BQUOTE関数および%NRBQUOTE関数はマクロ言語の要素として解釈可能なすべての文字やニーモニック演算子をマスクするため、これらの関数はすべての実行時マクロクォーティングに対して使用できます。
引用符('") をマークする必要はありません。
SASマクロ言語におけるクォーティングの詳細については、マクロクォーティングを参照してください。

比較

%NRBQUOTE関数および%SUPERQ関数は、同じ項目をマスクします。ただし、%SUPERQ関数は、指定のマクロ変数の値に含まれているマクロ変数参照やマクロ呼び出しの置換を試みません。一方、%NRBQUOTE関数は、それらの参照の置換を試みます。%BQUOTE関数や%NRBQUOTE関数を使用する場合、引用符をマークする必要はありません。

例: 変数のクォーティング

次の例では、マクロFILEITに渡されるファイル名が引用符で始まるかどうかをテストしています。このテスト結果に基づいて、同マクロは正しいFILEコマンドを生成します。
%macro fileit(infile);
  %if %bquote(&infile) NE %then
     %do;
         %let char1 = %bquote(%substr(&infile,1,1));
         %if %bquote(&char1) = %str(%')
             or %bquote(&char1) = %str(%")
         %then %let command=FILE &infile;
         %else %let command=FILE "&infile";
     %end;
  %put &command;
%mend fileit;
%fileit(myfile)
%fileit('myfile')
このプログラムを実行すると、次のメッセージがログに出力されます。
FILE "myfile" FILE 'myfile'
前のページ|次のページ|ページの先頭へ