所有,SAS减去两个值
当我跑步到与SAS是如何处理两个两位小数变量的减法一些问题得到错误的结果。这些结果写入DB2数据库。这里所有使用的字段都导入到SAS和写入DB2领域有小数(19,2)的数据类型下面是问题:
AL_AMT - PL_AMT = DIF_AMT
From SAS: 9,918,322.38 - 9,942,322.30 = (23,999.91)
Expected: 9,918,322.38 - 9,942,322.30 = (23,999.92)
下面是一些代码非常修剪片段。毫无疑问,SAS很古怪。我希望有人能帮助我发现它的许多怪癖中的哪一个可能造成这种情况。
/* CAmt and PPmt are retrieved from a lengthy PROC SQL statement, */
/* their formats are unaltered. */
data WORK.TABLE1;
set WORK.TABLE0;
Difference = CAmt - PPmt;
run;
data WORK.TABLE2(keep=Rep:);
set WORK.TABLE1 end=last;
If _N_=1 then do;
Rep1CAmt=0;
Rep1PPmt=0;
Rep1Diff=0;
end;
Rep1CAmt+CAmt;
Rep1PPmt+PPmt;
Rep1Diff+Difference;
if last;
Rep1Diff=Rep1CAmt-Rep1PPmt;
Rep1Diff=round(Rep1Diff,.01);
/* I realize these two lines are redundant/unnecessary, but I was trying
different things to get the numbers to add up correctly, no such luck */
run;
data WORK.TABLE3;
set work.TABLE2;
AL_AMT=round(Rep1CAmt,.01);
PL_AMT=round(Rep1PPmt,.01);
DIF_AMT=AL_AMT-PL_AMT;
run;
proc append data=WORK.TABLE3 base=LIBNAME1.DB2TABLE(drop=ID) force;
run;
谢谢乔,这解决了这个问题。 完全理解SAS可以在没有问题的情况下进行简单的减法,但在表格中,每次变换变量时我都要确保四舍五入到小数点后两位。显然这些步骤并没有解决模糊问题。 –
SAS支持固定精度类型吗? 'DECIMAL'是一个固定的精度类型,并且使用浮点类型将数字存储在_any_点处请求麻烦... –
SAS不支持除NUMERIC和CHARACTER之外的任何类型。 NUMERIC是浮点数(类似于C中的DOUBLE)。 – Joe