前のページ|次のページ

いつ、どのマクロクォーティング関数を使用するのかについて

マクロ言語の一部として解釈できる特殊文字をマクロ変数に割り当てる場合、常にマクロクォーティング関数を使用します。次の表で、文字列の一部として使用するときにマスクする特殊文字と、各状況においてどのマクロクォーティング関数が役立つかについて説明します。
特殊文字とマクロクォーティングのガイドライン
特殊文字
マスクが必要な状況
すべてのマクロクォーティング関数によってクォーティングされるか
備考
+-*/<>=^|¬ ~ # LE LT EQ NE GE GT AND OR NOT IN
%EVAL関数の引数で、演算子として扱われないようにするため。
Yes
AND、OR、IN、およびNOTは、%EVALおよび%SYSEVALFによってニーモニック演算子として解釈されるため、マスクする必要があります。
空白
値の前後の空白または単独の空白が無視されず、維持されるようにするため。
Yes
;
マクロプログラムステートメントの末尾を誤って示さないないようにするため。
Yes
, (カンマ)
関数の新しい引数、パラメータ、またはパラメータ値を示さないようにするため。
Yes
' " ( )
不一致である可能性がある場合。
No
マクロ機能が一重引用符、二重引用符、およびかっこを、マクロ言語のシンボルまたはSAS言語の一致しない引用符やかっことしてではなく、テキストとして解釈するために、引用符やかっこを含む可能性のある引数をマクロクォーティング関数を使用してマスクする必要があります。% STR、%NRSTR、%QUOTE、および%NRQUOTEでは、%記号を使用して、一致しない引用符とかっこにマークを付ける必要があります。%BQUOTE、%NRBQUOTE、および%SUPERQの引数に含まれる一致しないシンボルには、マークを付ける必要はありません。
%name &name
(式の置換結果によって変わります。)
No
%NRSTR、%NRBQUOTE、および%NRQUOTEは、これらのパターンをマスクします。マクロ変数を渡して%SUPERQを使用するには、名前からアンパサンドを省略します。
マクロ機能は、マクロの設計において、最大限の柔軟性を提供します。マクロプロセッサが特殊文字を、テキストとしてではなく、マクロ言語の一部として別の解釈をする場合にのみ、マクロクォーティング関数を使用して特殊文字をマスクする必要があります。たとえば次のステートメントでは、最初の2つのセミコロンをテキストの一部にするために、マクロクォーティング関数を使用してそれらをマスクする必要があります。
%let p=%str(proc print; run;);
しかし、次に示すマクロPRでは、PRINTとRUNの後ろのセミコロンを、マクロクォーティング関数を使用してマスクする必要がありません。
%macro pr(start);
   %if &start=yes %then
      %do;
         %put proc print requested;
         proc print;
         run;
      %end;
%mend pr;
マクロプロセッサは、%DOグループ内でセミコロンが使用されることを期待していません。そのため、PRINTとRUNの後ろのセミコロンはあいまいではなく、テキストとして解釈されます。
すべての状況に当てはまる一連のルールを提供することはできませんが、以降のセクションでは、各マクロクォーティング関数の使用方法について説明します。特殊文字と項目別のマクロクォーティング関数の概要では、マスクが必要な場合のあるさまざまな文字の概要について示されています。そこに含まれるマクロクォーティング関数は、各状況で役立ちます。
注: マクロクォーティング関数の逆を実行することもできます。つまり、マクロクォーティング関数が提供したトークン化を削除できます。%UNQUOTE関数が役立つ場合の例については、テキストのクォーティング解除を参照してください。
前のページ|次のページ|ページの先頭へ