所有,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