前のページ|次のページ

%QUOTE関数と%NRQUOTE関数

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

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

構文

%QUOTE(character-string | text-expression)
%NRQUOTE(character-string | text-expression)

詳細

%QUOTE関数と%NRQUOTE関数は、マクロまたはマクロ言語ステートメントの実行時に、文字列またはテキスト式の置換された値をマスクします。これらの関数は、次に示す特殊文字とニーモニック演算子をマスクします。
+ − * / < > = ¬ ^ ~ ; , # blank
AND OR NOT EQ NE LE LT GE GT IN
また、これらの関数は、次の文字がペアで検出された場合や、次の文字がペアマッチなしで検出され、その文字が先行する%によりマークされている場合に、その文字をマスクします。
' "
さらに、%NRBQUOTE関数は次のものもマスクします。
& %
%NRQUOTE関数は、置換したくないマクロ変数参照やマクロ呼び出しが引数に含まれている場合に使用すると便利です。
SASマクロ言語におけるクォーティングの詳細については、マクロクォーティングを参照してください。
マクロクォーティング関数の最大ネストレベルは10です。

比較

  • %QUOTE関数と%NRQUOTE関数は、それぞれ%STR関数と%NRSTR関数がマスクするのと同じ項目をマスクします。ただし、%STR関数と%NRSTR関数は、置換された値ではなく、定数テキストをマスクします。また、%STR関数と%NRSTR関数はマクロのコンパイル時に動作しますが、%QUOTE関数と%NRQUOTE関数はマクロの実行時に動作します。
  • %BQUOTE関数および%NRBQUOTE関数では、ペアマッチなしの引用符を先行する%でマークする必要はありません。一方、%QUOTE関数および%NRQUOTE関数では、それらの引用符をマークする必要があります。
  • %QUOTE関数と%NRQUOTE関数は置換された値をマスクします。一方、%SUPERQ関数は、値の中で発生する任意のマクロ呼び出しやマクロ変数参照の置換が行われないようにします。

例: ニーモニック演算子を含む値のクォーティング

マクロDEPT1は、州の略称を引数として受け付けます。ここで、DEPT1の引数にオレゴン州の略称であるORを指定したとします。
%macro dept1(state);
      /* without %quote -- problems might occur */
   %if &state=nc %then
       %put North Carolina Department of Revenue;
   %else %put Department of Revenue;
%mend dept1;
%dept1(or)
前述のマクロDEPT1を実行すると、%IF条件で%EVALステートメントが実行されるため、文字列orはこの式では論理演算子として評価されることになります。このため、マクロプロセッサは式or=ncに無効なオペランドが含まれているというエラーメッセージを出力します。
マクロDEPT2は、%QUOTE関数を使って、&STATEを置換した結果得られる文字をクォーティングしています。
%macro dept2(state);
      /* with %quote function--problems are prevented */
   %if %quote(&state)=nc %then
       %put North Carolina Department of Revenue;
   %else %put Department of Revenue;
%mend dept2;
%dept2(or)
この場合、%IF条件は文字列orncを比較し、次のメッセージをSASログに書き込みます。
Department of Revenue
前のページ|次のページ|ページの先頭へ