マクロ変数参照を接頭語として使用したときに、それを単純に連結した場合、参照が期待通りに置換されないことがあります。そうする代わりに、参照の末尾にピリオドを加えて区切ることが必要な場合があります。
マクロ変数参照の直後のピリオドは、区切り文字の役割を果たします。つまり、参照の末尾のピリオドは、マクロプロセッサに参照の末尾を強制的に認識させます。このピリオドは、生成されるテキストには現れません。
引き続き前述の例において、Sales1、Sales2、およびINSALES.TEMPという名前を使用する別のDATAステップが必要になったとします。次のステップをプログラムに追加できます。
/* first attempt to add suffixes--incorrect */
data &name1 &name2;
set in&name.temp;
run;
マクロ変数が置換されると、SASは各ステートメントを次のように解釈します。
DATA &NAME1 &NAME2;
SET INSALESTEMP;
RUN;
マクロ変数参照は、意図したとおりに置換されていません。マクロプロセッサは警告メッセージを発行し、SASは構文エラーメッセージを発行します。理由は次のとおりです。
NAME1とNAME2が有効なSAS名であるため、マクロプロセッサは、NAMEではなくそれらの名前を持つマクロ変数を検索します。その結果、参照が置換されずにDATAステートメントに渡されます。
マクロ変数参照では、ワードスキャナは、SAS名として使用されない文字を検出したときにマクロ変数名の終端を認識します。ただし、ピリオド( .)を、マクロ変数参照の区切り文字として使用できます。たとえばこの例では、NAMEというワードの終端をマクロプロセッサに認識させるには、次のように、ピリオドを区切り文字として&NAMEと接尾語の間で使用します。
/* correct version */
data &name.1 &name.2;
これで、SASはこのステートメントを次のように解釈します。
DATA SALES1 SALES2;