楼主: Rorschach啊
729 2

[问答] 给一个宏变量赋一个科学计数的值,判断值大小时只截取了E前面的部分怎么办? [推广有奖]

  • 0关注
  • 0粉丝

硕士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
1420 个
通用积分
9.8241
学术水平
5 点
热心指数
5 点
信用等级
5 点
经验
1482 点
帖子
52
精华
0
在线时间
219 小时
注册时间
2019-2-20
最后登录
2024-4-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
以下是运行时的日志:
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正确进行判断吗?


二维码

扫码加我 拉你入群

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

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

关键词:怎么办 Macro else Then sas的

沙发
whymath 发表于 2021-3-6 11:50:45 |只看作者 |坛友微信交流群
使用%sysevalf()函数
  1. %let test = %sysevalf(2.78E-16>0.1);
  2. %put &=test;

  3. TEST=0
复制代码

因为宏变量都是文本,比较运算默认是基于文本的,它将认为“2.78E-16>0.1”和“2.78E-16<2.79”,这实际上是从左至右逐个字符比较的结果。
要按其数值大小进行比较运算,应使用%sysevalf()对表达式进行数值评估。
已有 1 人评分经验 收起 理由
eijuhz + 40 精彩帖子

总评分: 经验 + 40   查看全部评分

使用道具

藤椅
Rorschach啊 发表于 2021-3-7 20:56:55 |只看作者 |坛友微信交流群
whymath 发表于 2021-3-6 11:50
使用%sysevalf()函数

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

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 19:03