前时曾在本论坛看到过一篇帖子,说是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:
| value | int 
 | 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问的实例我会稍后收集跟上,谢谢。