全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3756 13
2013-06-20
为何相等的变量在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)

 马上下载




二维码

扫码加我 拉你入群

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

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

全部回复
2013-6-20 10:25:57
从图上可以清楚的看到,D7和D814都一样,但某些标记变量却是'ng‘,为什么啊,很诡异
二维码

扫码加我 拉你入群

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

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

2013-6-20 10:42:07
they just look equal, actually not exactly equal
二维码

扫码加我 拉你入群

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

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

2013-6-20 10:47:53
二维码

扫码加我 拉你入群

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

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

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

关于你这个问题的解决办法
我觉得可以两个数转成字符再比较
或者设置个容错的区间
落到里面就算相等了
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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