楼主: Tigflanker
3514 5

[问答] 关于 value - int(value) = 4.44E-16 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.8528
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

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
关键词:value alue int dataset format 主题 朋友 影响

本帖被以下文库推荐

Bye SAS.
若有缘,能重聚。
沙发
zhengbo8 发表于 2014-4-16 10:41:31 |只看作者 |坛友微信交流群
对于第一个问题,可能的原因,我也曾遇到过。
http://www.cnblogs.com/zhengbo8/archive/2013/05/18/3085850.html
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 链文很在理,谢谢

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
Imasasor 发表于 2014-4-17 09:48:20 |只看作者 |坛友微信交流群
这个问题我也遇到过,很奇怪,个人感觉SAS在获取excel数据时,有时会了现这种情况
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 赞同!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

板凳
learsaas 发表于 2014-4-17 19:28:36 |只看作者 |坛友微信交流群
你的value值的位数已经超过了sas数值精度的位数,所以sas只能以不精确的存储该值了。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

报纸
Tigflanker 发表于 2014-4-21 14:49:27 |只看作者 |坛友微信交流群
自己顶一下,确实没有这种类似criterion=0.0000001 option的东西可以让他“现行”么?

Bye SAS.
若有缘,能重聚。

使用道具

地板
yuerqieqie 发表于 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有详细的讲解原因和处理方法,有兴趣的话可以读一读
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 明白了,谢谢,看来只好这样了。

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

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

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

GMT+8, 2024-5-1 19:33