マクロクォーティング関数は、特殊文字やニーモニックを、マクロ言語の一部としてではなくテキストとして解釈するようにマクロプロセッサに指示します。マクロクォーティング関数を使用して特殊文字をマスクしないと、マクロプロセッサや、SASのその他の処理で、特殊文字に意図していない意味が与えられる場合があります。文字列に特殊文字やニーモニックが含まれる場合に発生する可能性のあるあいまいさの種類について、次にいくつか例を示します。
-
%sign
は、マクロSIGNの呼び出しなのか、それとも"パーセント記号"という語句なのか
-
ORは、ニーモニックのブール演算子なのか、それともOregonの略称なのか
-
O'Malleyに含まれる引用符は、一致しない一重引用符なのか、それとも単に名前の一部なのか
-
Boys&Girlsは、マクロ変数&GIRLSへの参照なのか、それとも子供のグループなのか
-
GEは、"以上"を意味するニーモニックなのか、それともGeneral Electricの略称なのか
-
-
カンマは、パラメータを区切っているのか、それともいずれかのパラメータの値の一部なのか
マクロクォーティング関数を使用すると、特殊文字やニーモニックをどう解釈すべきかについて、マクロプロセッサに対して明確に指定できます。
ここでは、最も単純なマクロクォーティング関数、%STRの使用例を示します。PROC PRINTステートメントとRUNステートメントを、マクロ変数PRINTに割り当てるとします。次のステートメントは、間違っています。
%let print=proc print; run;; /* undesirable results */
このコードはあいまいです。PRINTとRUNの後ろのセミコロンは、マクロ変数PRINTの値に含まれているとも解釈できますし、どちらかが%LETステートメントの末尾を示しているとも解釈できます。どう解釈するべきかをマクロプロセッサに指示しないと、PRINTの後ろのセミコロンが、%LETステートメントの末尾として解釈されます。このため、マクロ変数PRINTの値は次のようになります。
残りの文字(RUN;;)は、単にプログラムの次の部分になります。
あいまいさを避け、PRINTの値を正しく割り当てるには、マクロクォーティング関数%STRを次のように使用してセミコロンをマスクする必要があります。
%let print=%str(proc print; run;);