SAS中文论坛

标题: 跟crackman读SAS程序(91)--宏程序中表达式里面的数值比较 [打印本页]

作者: shiyiming    时间: 2010-11-4 17:49
标题: 跟crackman读SAS程序(91)--宏程序中表达式里面的数值比较
From crackman's blog on Baidu


               
                <p>%macro aa;<br>
%let condition=( 1.2&gt;=1 and 1.2&lt;1.5 ) and ( 1123&gt;=800 and 1123&lt;1200 );</p>
<p>%if &amp;condition %then %do;<br>
&nbsp;&nbsp;&nbsp;  %put x;<br>
&nbsp;&nbsp;  %end;<br>
&nbsp;&nbsp;  %else %do;<br>
%put M;<br>
&nbsp;&nbsp;  %end;<br>
&nbsp;&nbsp;  %mend aa;<br>
%aa;</p>
<p>这个结果是X</p>
<p>%macro aa;<br>
%let condition=( 1.2&gt;=1 and 1.2&lt;1.5 ) and ( 1123.1&gt;=800 and 1123.1&lt;1200 );</p>
<p>%if &amp;condition %then %do;<br>
&nbsp;&nbsp;&nbsp;  %put x;<br>
&nbsp;&nbsp;  %end;<br>
&nbsp;&nbsp;  %else %do;<br>
%put M;<br>
&nbsp;&nbsp;  %end;<br>
&nbsp;&nbsp;  %mend aa;<br>
%aa;</p>
<p>结果是M</p>
<p>解释是这样的:</p>
<p> %macro aa;<br>
&nbsp;&nbsp;  %put ERROR-%nrstr(%eval(1999999999.9 &gt; 9) --&gt;) <strong><font color="#ff0000">%eval</font></strong>(199999999.1&gt;9);<br>
&nbsp;&nbsp;  %put ERROR-%nrstr(%sysevalf(1999999999.9 &gt; 9) --&gt;) <strong><font color="#ff0000">%sysevalf</font></strong>(199999999.1&gt;9);<br>
%mend aa;<br>
%aa<br>
宏编译器在解析这个语句的时候,是要区别数据类型,也是类型不同的数据比较,返回为FALSE,也就是0。</p>
<p>谢谢hopewell。</p> <a href="http://hi.baidu.com/crack%5Fman/blog/item/40222e7bccccf80729388a88.html">阅读全文</a>
               
                <br/><b>类别:</b><a href="http://hi.baidu.com/crack%5Fman/blog/category/%B8%FAcrackman%B6%C1sas%B3%CC%D0%F2">跟crackman读sas程序</a>&nbsp;<a href="http://hi.baidu.com/crack%5Fman/blog/item/40222e7bccccf80729388a88.html#comment">查看评论</a>




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2