SASプログラムをサブミットすると、プログラムの内容は入力スタックと呼ばれるメモリ領域に格納されます。次の図のプログラム例には、マクロ定義、マクロ呼び出し、およびPROC
PRINTステップが含まれています。このセクションでは、プログラム例のマクロ定義がどのようにコンパイルされて格納されるかについて説明します。
ワードスキャナは、
SASプログラムとマクロ処理で説明したのと同じプロセスに従って、プログラムのトークン化を開始します。ワードスキャナは、最初のトークンで%の後に空白以外の文字が続くのを検出すると、マクロプロセッサを起動します。マクロプロセッサは、そのトークンを調べてマクロ定義の開始を認識します。マクロプロセッサは、%MENDステートメントによってマクロ定義
(入力スタック内のAPPマクロ)が終了するまで、入力スタックからトークンを取り出してコンパイルします。
マクロプロセッサは、マクロのコンパイル中に次を実行します。
-
-
そのマクロのすべてのマクロプログラムステートメントを、マクロ命令としてコンパイルし、格納します。
-
マクロ内のすべてのコンパイル対象外項目をテキストとして格納します。
注: このセクションの図では、テキスト項目にはアンダーラインを引いています。
マクロプロセッサは、マクロのコンパイル中に構文エラーを検出した場合、マクロの残りの部分の構文をチェックし、検出したすべてのエラーについてメッセージを発行します。ただし、マクロプロセッサは、実行用のマクロを格納しません。マクロプロセッサによってコンパイルされるが格納されないマクロを、ダミーマクロと呼びます。
この例では、マクロ定義がコンパイルされて、正常に格納されます。(次の図を参照。)説明のために、コンパイル済みAPPマクロを、入力スタックに格納された元のマクロ定義と同じように示しています。実際は、エントリには、コンパイル済みマクロ命令と定数テキストが格納されます。この例では、定数テキストにアンダーラインを引いています。