近日读crackman大大的帖子。看到这个
%macro aa;
%let condition=( 1.2>=1 and 1.2<1.5 ) and ( 1123>=800 and 1123<1200 );
%if &condition %then %do;
%put x;
%end;
%else %do;
%put M;
%end;
%mend aa;
%aa;
这个结果是X
%macro aa;
%let condition=( 1.2>=1 and 1.2<1.5 ) and ( 1123.1>=800 and 1123.1<1200 );
%if &condition %then %do;
%put x;
%end;
%else %do;
%put M;
%end;
%mend aa;
%aa;
结果是M
解释是这样的:
%macro aa;
%put ERROR-%nrstr(%eval(1999999999.9 > 9) –>) %eval(199999999.1>9);
%put ERROR-%nrstr(%sysevalf(1999999999.9 > 9) –>) %sysevalf(199999999.1>9);
%mend aa;
%aa
宏编译器在解析这个语句的时候,是要区别数据类型,也是类型不同的数据比较,返回为FALSE,也就是0。
这个我大致理解。但是如果我%let condition=( 1.2>=1 and 1.2<1.5 ) and ( 1123.1>=800.1 and 1123.1<1200.1 ),为何结果仍是M呢。为什么1.2>=1是同一个数据类型呢而1123.1>=800.1不是呢?
求解释