【发布时间】:2015-11-11 10:33:22
【问题描述】:
我有一个包含 575965 行的表格。 “Ergebnisdaten”列的格式为 20.2
如果我提交以下内容:
proc sql noprint;
create table test as
select
Ergebnisdaten,
Ergebnisdaten*100 as euro format 20.4,
Ergebnisdaten*10000 as erg format 32.4,
floor(Ergebnisdaten*10000) as floor format 20.4,
floor(Ergebnisdaten*100)/100 as floor2 format 20.4
from &source_lib..&source_table.;
quit;
proc sql noprint;
select
sum(Ergebnisdaten) format=32.4,
sum(euro) format=32.4,
sum(erg) format=32.4,
sum(floor) format=32.4,
sum(floor2) format=32.4
into :sum_ges, :sum_euro, :sum_erg, :sum_floor, :sum_floor2
from test;
quit;
%put Summe: &sum_ges.;
%put Summe: &sum_euro.;
%put Summe: &sum_erg.;
%put Summe: &sum_floor.;
%put Summe: &sum_floor2.;
我得到 5 个不同的值:
380 %put Summe: &sum_ges.;
Summe: 24507249859.0368
381 %put Summe: &sum_euro.;
Summe: 2450724985904.0000
382 %put Summe: &sum_erg.;
Summe: 245072498590400.0000
383 %put Summe: &sum_floor.;
Summe: 245072498562056.0000
384 %put Summe: &sum_floor2.;
Summe: 24507249656.2654
我怎样才能对表格求和并以 20.4 格式获得正确的值 (24507249859.04)?
如果我在 zOS 上启动相同的程序,我会得到 24507249858.98。如何获得与在 Win/Unix 上计算的相同的值?
【问题讨论】:
-
您是否在所有 3 个环境中使用相同的源数据集?如果不是,求和变量是否全部设置为数字长度 8?
-
请注意,IBM 大型机使用与 Windows/Unix 机器不同的浮点表示。因此,您会看到无法精确表示为二进制数的小数差异。还有你是怎么转号的?显示的内容与实际存储的内容不匹配。因此,如果您使用 20.2 格式打印数字,然后以不同的值读回它们。
-
你试过四舍五入吗?
sum(round(Ergebnisdaten,0.01))