SAS中的Put和round函数

SAS中的Put和round函数,sas,Sas,在SAS中同时使用round功能和put功能时,如何避免双舍入?以以下代码为例: data _null_; sd = 11.863499608; sdc = strip(put(round(sd,0.0001),10.3)); put sdc=; run; 实际结果应为11.863,但put函数从已舍入的11.8635值向上舍入,以给出11.864的最终结果。 有人能告诉我如何通过put功能避免第二轮升级吗?请注意,第一个舍入功能非常重要,无法避免。有些情况下,Fw.d格式无法按

在SAS中同时使用
round
功能和
put
功能时,如何避免双舍入?以以下代码为例:

data _null_;
  sd = 11.863499608;
  sdc = strip(put(round(sd,0.0001),10.3));
  put sdc=; 
run;
实际结果应为
11.863
,但
put
函数从已舍入的
11.8635
值向上舍入,以给出
11.864
的最终结果。
有人能告诉我如何通过
put
功能避免第二轮升级吗?请注意,第一个
舍入
功能非常重要,无法避免。

有些情况下,Fw.d格式无法按预期舍入。在使用该格式之前,最好四舍五入到所需的数字和小数

20   data _null_;
21      x=0-1e-5;
22      put x=best.;
23      y = put(x,5.2);
24      put y= 'Negative 0 need to round';
25      z = put(round(x,.01),5.2);
26      put z=;
27      run;

x=-0.00001
y=-0.00 Negative 0 need to round
z=0.00
尝试使用:

sdc = strip(put(round(sd,0.001),10.3));

你试过将格式从10.3改为10.4吗?是的,我试过了,但我想要3位小数。如果你只想要3位,为什么第一轮很重要?这里还有其他你没有提到的目标吗?只需四舍五入一次,然后四舍五入到0.001,而不是0.0001。当逐位取整0.4449时,它可能变成1,这似乎不正确。@KH_u但你做得不对。两者的精度相同。我以前见过-0。还有其他惊喜吗?我运行了一个快速模拟,我看到的唯一区别是-0<代码>需要的数据;调用streaminit(123);do i=1至1e6;x=兰特(“正常”);y=put(x,5.2);z=放置(圆形(x,.01),5.2);如果y-ne-z,则输出;终止运行我已经看到了OP抱怨的结果,但只有摘要统计数据。我“总是”四舍五入,然后把它放进去。但是在这种情况下-0比0更正确,1e-5应该是+0,只有真正的零才应该是±0。但在另一方面,当你无论如何都要四舍五入时,用定点数学代替。所以不要用美元来计算,而是用美分。使用g时不要使用kg。问题是,将千次结束乘以0.001,将得不到1。现在,从总和中减去1将得到一个很小的分数,因为0.001不能用浮点格式表示。