楼主: 孤灯渡漠
3841 13

[问答] 为何相等的变量在if判断里却不等!!数据程序已贴上 [推广有奖]

  • 0关注
  • 0粉丝

本科生

52%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
993 点
帖子
82
精华
0
在线时间
61 小时
注册时间
2009-11-24
最后登录
2021-8-5

楼主
孤灯渡漠 发表于 2013-6-20 10:24:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
为何相等的变量在if判断里却不等!!数据程序已贴上

数据文件test3.txt
test3.txt (3.5 KB)
程序如下:
DATA test;
   INFILE 'test3.txt' DLM = ','  ;  
   INPUT id   D7-D14;
run;

data testr;
set test;
D814=sum(of d8-d14);
if d7 ne D814 then r7="ng";
run;


结果如图
QQ截图20130620101244.png

结果文件:testr.txt testr.txt (4.18 KB)


二维码

扫码加我 拉你入群

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

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

关键词:infile Input test Data file 程序

沙发
孤灯渡漠 发表于 2013-6-20 10:25:57
从图上可以清楚的看到,D7和D814都一样,但某些标记变量却是'ng‘,为什么啊,很诡异

藤椅
Imasasor 发表于 2013-6-20 10:42:07
they just look equal, actually not exactly equal
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

板凳
邓贵大 发表于 2013-6-20 10:47:53
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

报纸
playmore 发表于 2013-6-20 10:49:42
孤灯渡漠 发表于 2013-6-20 10:25
从图上可以清楚的看到,D7和D814都一样,但某些标记变量却是'ng‘,为什么啊,很诡异
这是SAS中浮点数计算的问题
你用Diff=d7-D814导出两个变量之间的差可以发现出现ng的地方,两者的差不是0,而是负0
如果之前format diff 10.2,还可以发现是一个很小很小的负数,得用科学计数法表示

关于浮点数计算的误差问题,我刚才也搜了下,你可以看看下面的链接
http://blog.sina.com.cn/s/blog_8db50cf70101f1k7.html

关于你这个问题的解决办法
我觉得可以两个数转成字符再比较
或者设置个容错的区间
落到里面就算相等了
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

地板
孤灯渡漠 发表于 2013-6-20 11:03:26
playmore 发表于 2013-6-20 10:49
这是SAS中浮点数计算的问题
你用Diff=d7-D814导出两个变量之间的差可以发现出现ng的地方,两者的差不是0 ...
设置容错空间的话,之前C和java浮点型比较都是这么比的
sas没有细化数据类型,我以为应该不用那种麻烦的比较方法呢

7
孤灯渡漠 发表于 2013-6-20 11:08:45
playmore 发表于 2013-6-20 10:49
这是SAS中浮点数计算的问题
你用Diff=d7-D814导出两个变量之间的差可以发现出现ng的地方,两者的差不是0 ...
那如果这样的话,
就要用:
abs(d814-d7)<0.005

8
孤灯渡漠 发表于 2013-6-20 11:10:44
有没有统一设置精度的方法??

9
yongyitian 发表于 2013-6-20 11:18:17
this can solve your problem

data testr;
set test;
D814=sum(of d8-d14);
D16 = d7-d814;
if d7 ne round(D814,0.001) then r7="ng";
run;

10
孤灯渡漠 发表于 2013-6-20 11:19:31
yongyitian 发表于 2013-6-20 11:18
this can solve your problem

data testr;
和abs(d814-d7)<0.005
是一样的效果

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 03:54