%IFマクロプログラミングステートメントにて小数点を含む式を評価する
[OS]ALL
[リリース] 6.09e, 6.12, 8.1, 8.2
[キーワード] macro, %eval, %sysevalf
[質問]%IFマクロプログラミングステートメントにて、下記のように「2 > 12.0」を比較しています。 … 中略 … %IF 2 > 12.0 %THEN %DO; … 中略 … 結果には、当然FALSEを期待しているのですが、TRUEになってしまいます。理由と回避方法を教えてください。
[回答]
%IFマクロプログラミングステートメントでは、マクロ式の自動評価が行われるため(暗黙の%EVALマクロ関数を適用)、小数点を含む値が指定されていると、%IFマクロプログラミングステートメントが、マクロ式を文字列と判断します。 小数点を含むマクロ式の評価を行う場合には、以下のサンプルプログラム(マクロcheck)のように、%SYSEVALFマクロ関数を明示的に指定する必要があります。 サンプルプログラム OPTIONS MLOGIC; %MACRO check(fnum,ope,snum); /* %sysevalfマクロ関数を使用 */ %IF %SYSEVALF(&fnum &ope &snum) %THEN %DO; PROC PRINT DATA=sashelp.class; RUN; %END; %ELSE %DO; PROC CONTENTS DATA=sashelp.class; RUN; %END; %MEND check; %check(2,>,12.0)
|