SAS 四舍五入小数点后 2 位

SAS rounding half down 2 decimals

提问人:Giacomo Gaglione 提问时间:9/30/2022 更新时间:10/1/2022 访问量:410

问:

干杯!

长话短说,我正在尝试处理 SAS 舍入函数和浮点精度。

基本上,我需要将一半四舍五入到小数点后两位,因此,即 1.235 应该四舍五入到 1.23 而不是 1.24

下面举个例子:

desired_output
1.230 1.23
1.235 1.23
1.2355 1.24
1.2305 1.23
1.231 1.23
1.236 1.24

我尝试了很多方法都没有成功(即 round()、ceil()、floor() 和 rounde() 函数的几种组合),但是,为了复制练习,下面是一些测试:

data test;
input number desired_output;
datalines;
1.230 1.23
1.235 1.23
1.2355 1.24
1.2305 1.23
1.231 1.23
1.236 1.24
; 
run;

data test;
set test;
round_01=round(number,.01);
round_ceil_01=ceil(round_01*100)/100;
round_floor_01=floor(round_01*100)/100;
round_even=rounde(number,.01);
less_half_rounding_factor=round(number-0.0005,.01);
run; 

先谢谢你!

SAS 舍入 精度

评论


答:

1赞 Tom 9/30/2022 #1

怎么样:

round(number,0.01) - 0.01*(mod(number,0.01)=0.005)

当前一位正好为 0.01 时删除 5。

测试:让我们将数字生成到小数点后 5 位,并只保留 ROUND() 函数与上述“round_down”逻辑不同的数字。

data test;
  do integer=1 to 100000 ;
     number=integer/100000 ;
     round=round(number,0.01);
     round_down = round(number,0.01) - 0.01*(mod(number,0.01)=0.005);
     if round ne round_down then output;
  end;
run;

现在让我们检查一下它们中是否有任何一个是不同的,而不是那些 3 个最低有效小数位是 500 的,即 X.XX500 。

data test2;
  set test;
  where 500 ne mod(integer,1000) ;
run;

因此,有 100 种情况 ROUND 和 ROUND_DOWN 不同,它们都是值在千位中有 5 位,之后是零的情况。

0赞 Manojs 10/1/2022 #2

希望这是你要找的

data test;
   set test;
   value = input(put(number,4.2)best.);
run;

评论

0赞 Tom 10/1/2022
您想将 INFORMAT 与该 INPUT() 函数一起使用吗?BEST 是 FORMAT 的名称。请尝试。input(put(number,32.2),32.)
0赞 Tom 10/1/2022
这不会产生与发帖人已经尝试过的 round(number,0.01) 不同的任何结果。