全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3847 5
2014-04-16
悬赏 150 个论坛币 已解决
前时曾在本论坛看到过一篇帖子,说是proc format得到的数据集,所看到的值和实值有异
https://bbs.pinggu.org/thread-1547655-1-1.html

合并此主题,我想要向老师们询问两个问题,我相信用SAS有一段时间的朋友多有曾遇到。

1. 就是对一个“看似”是整数的值做int,再让他和原值相减,得到的是一个非常趋于零的数。
    数据集请见附件。
    Code就是:int = int(value);    remain = value - int;

    个人的感觉(猜测)是:SAS储存的值和他展现的值有一定的差异,这个差异在output中不会展现,在一般的proc运算中不会影响,但是只要做一个精确的取余,就可以看到他的原型。

Dataset:
valueint
remain
-1.1-1
-0.1
1 1 4.440892E-16

我的同事告诉我一个办法,就是用best.对这个值洗一下:value = input(put(value, best.), best.);
但是这是治疗之法,而不是预防之法。

所以我想请问,可否告知这种现象的实际原理,是否有一种更直接的方法(例如某个option)能避免这种现象?

2. 还有一个疑问与第一个类似,只是很抱歉我没有收集到这个实例数据集。

就是在对一个值用proc means或其他运算步得到值过后,有时put得到的结果有误。

例如一个值:mean = 5.1251;

有时会发生:value1 = put(mean, 4.2) = 5.12

但是加了round就不会出错了: value2 = put(round(mean, 0.01), best.) = 5.13

所以我想问下,put有时没有round精确,是什么原因呢?除了加round校正,有无其他办法呢?

第2问的实例我会稍后收集跟上,谢谢。


one.zip

大小:1.24 KB

 马上下载

本附件包括:

  • one.sas7bdat

最佳答案

zhengbo8 查看完整内容

对于第一个问题,可能的原因,我也曾遇到过。 http://www.cnblogs.com/zhengbo8/archive/2013/05/18/3085850.html
二维码

扫码加我 拉你入群

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

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

全部回复
2014-4-16 10:41:31
对于第一个问题,可能的原因,我也曾遇到过。
http://www.cnblogs.com/zhengbo8/archive/2013/05/18/3085850.html
二维码

扫码加我 拉你入群

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

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

2014-4-17 09:48:20
这个问题我也遇到过,很奇怪,个人感觉SAS在获取excel数据时,有时会了现这种情况
二维码

扫码加我 拉你入群

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

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

2014-4-17 19:28:36
你的value值的位数已经超过了sas数值精度的位数,所以sas只能以不精确的存储该值了。
二维码

扫码加我 拉你入群

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

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

2014-4-21 14:49:27
自己顶一下,确实没有这种类似criterion=0.0000001 option的东西可以让他“现行”么?

二维码

扫码加我 拉你入群

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

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

2014-4-21 20:49:49
Tigflanker 发表于 2014-4-21 14:49
自己顶一下,确实没有这种类似criterion=0.0000001 option的东西可以让他“现行”么?
貌似没有option可以用。
将变量format成32.31就可以看到不同了吧。
SAS TS-230 Dealing with Numeric Representation Error in SAS® Applications有详细的讲解原因和处理方法,有兴趣的话可以读一读
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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