マクロ機能は、文字列を処理する機能です。ただし、特定の状況において、マクロプロセッサは数値を表すオペランドを数値として評価できます。マクロプロセッサは、算術演算子および数値を表すオペランドを含む式を評価します。そのとき、一時的にそのオペランドを数値に変換してから整数算術演算を実行します。評価結果はテキストになります。
デフォルトでは、ほとんどのマクロステートメントおよびマクロ関数における算術演算は、整数演算を使用して評価されます。ただし、%SYSEVALF関数を除きます。詳細については、
浮動小数点オペランドの評価を参照してください。次のマクロステートメントで、整数演算の評価を説明します。
%let a=%eval(1+2);
%let b=%eval(10*3);
%let c=%eval(4/2);
%let i=%eval(5/3);
%put The value of a is &a;
%put The value of b is &b;
%put The value of c is &c;
%put The value of I is &i;
これらのステートメントをサブミットすると、次のメッセージがログに表示されます。
The value of a is 3
The value of b is 30
The value of c is 2
The value of I is 1
最後のステートメントの結果に注目してください。整数に対して、通常は小数を含む結果が得られるはずの除算を実行すると、整数演算によって小数部が切り捨てられます。
マクロプロセッサは、文字オペランドを含む整数演算式を評価すると、エラーを生成します。整数値または16進値を表す文字を含むオペランドのみが、数値に変換されます。次のステートメントは、誤った使用方法を示しています。
%let d=%eval(10.0+20.0); /*INCORRECT*/
%EVAL関数が整数演算のみをサポートしています。マクロプロセッサはピリオドを含む値を数値に変換しないので、このオペランドは文字オペランドとして評価されます。このステートメントによって次のエラーメッセージが生成されます。
ERROR: A character operand was found in the %EVAL function or %IF
condition where a numeric operand is required. The condition was:
10.0+20.0