マクロプロセッサが論理式をどのように評価するかを説明するために、マクロCOMPCHARについて考えます。呼び出されたマクロCOMPCHARは、パラメータとして渡された値を比較し、その結果をログに出力します。
%macro compchar(first,second);
%if &first>&second %then %put &first comes after &second;
%else %put &first comes before &second;
%mend compchar;
次の値を使用して、マクロCOMPCHARを呼び出します。
%compchar(a,b)
%compchar(.,1)
%compchar(Z,E)
次の結果がログに出力されます。
a comes before b
. comes before 1
Z comes after E
マクロプロセッサは、文字オペランドを含む式を評価するときに、ホストオペレーティングシステムの並べ替え順を比較で使用します。これらの例の比較は、EBCDICとASCIIの両方の並べ替え順を使用して動作します。
文字オペランドの特殊ケースとして、数値に見えるがピリオドを含むオペランドがあります。ピリオドを含むオペランドを式で使用した場合、両方のオペランドは文字値として比較されます。これによって、予期しない結果が生じる場合があります。結果について理解し、より良い結果が期待できるようにするために、次の例を参照してください。
次の値を使用して、マクロCOMPNUMを呼び出します。
次の値がログに書き込まれます。
マクロCOMPNUM内の%IF-THENステートメントは、整数の評価を使用しているため、小数点を含むオペランドを数値に変換しません。オペランドは、ホストの並べ替え順を使用して文字列として比較されます。つまり、最小値から最大値までの値を持つ文字の比較になります。たとえば、小文字は大文字よりも小さい値を持つ場合があり、大文字は数字よりも小さい値を持つ場合があります。
注意:
ホストの並べ替え順によって比較結果が決まります。
複数のオペレーティングシステム上で同じマクロ定義を使用した場合、ホストオペレーティングシステム間で並べ替え順が異なる可能性があるため、比較結果が変わる場合があります。ホスト上での並べ替え順の詳細については、
SORT Procedure (Base SASプロシジャガイド)を参照してください。