全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
913 2
2021-03-05
以下是运行时的日志:
4658  %MACRO a;
4659      %if &p_nor>0.1 and &ProbF>0.1 %then %do;
4660          %put &p_nor>0.1 and &ProbF>0.1;
4661      %end;
4662      %else %do;
4663          %put else;
4664      %end;
4665  %MEND;
4666  %a
2.78E-16>0.1 and 0.5349>0.1

4686  %MACRO a;
4687      %if &p_nor>2.79 and &ProbF>0.1 %then %do;
4688          %put &p_nor>0.1 and &ProbF>0.1;
4689      %end;
4690      %else %do;
4691          %put else;
4692      %end;
4693  %MEND;
4694  %a
else
可以看到SAS的判断是2.78E-16>0.1,2.78E-16<2.79,
有什么方法可以使得SAS正确进行判断吗?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2021-3-6 11:50:45
使用%sysevalf()函数
复制代码

因为宏变量都是文本,比较运算默认是基于文本的,它将认为“2.78E-16>0.1”和“2.78E-16<2.79”,这实际上是从左至右逐个字符比较的结果。
要按其数值大小进行比较运算,应使用%sysevalf()对表达式进行数值评估。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2021-3-7 20:56:55
whymath 发表于 2021-3-6 11:50
使用%sysevalf()函数

因为宏变量都是文本,比较运算默认是基于文本的,它将认为“2.78E-16>0.1”和“2. ...
感谢指导~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群