我正在使用SAS proc sql查詢並發現了一些奇怪的事情。首先,我想這個簡單的查詢:奇數行爲總結(獲取數字溢出)
proc sql;
CREATE TABLE test AS
(SELECT
YEAR(dt) AS yr,
MONTH(dt) AS mo,
SUM(val) AS total
FROM
mydb1234.myTable
WHERE
myDate BETWEEN x AND y
GROUP BY
yr, mo);
run;
當我運行此查詢,我收到此錯誤:
ERROR: Teradata row not delivered (trget): Numeric overflow occurred during computation.
從我可以告訴,這種情況發生的時候我總和值變得太大,以適應在proc sql
正試圖使用的數據類型中。
我決定,我只想分我總結數量:
SUM(val/1000) AS total
然而,這有意想不到的後果。總和不到我在Excel中做的手工總和。隨着我向除數添加更多的數量級,總數變得更低。我猜這是消除了它試圖求和的較小值(例如10/1000和108/10000等),它們永遠不會達到總和,而是讀爲零。
有沒有辦法強制這個PROC SQL創建一個表使用一個字段長度,可以容納我的總價值?他們在億億美元的範圍內,所以沒有什麼不同尋常的想法。我很想知道你們的想法。
這不是SAS特定的問題,我不這麼認爲。 SAS不會給你一個溢出;除非你處在這樣瘋狂的數字中,無法用64位不精確地存儲它,反正當然不是這樣。如果您生成了大於等於15位的有效數字,它可能開始削弱重要性,但它不會告訴您它正在這樣做。 – Joe
與Teradata的接口如何在這裏工作?是否有一個'libname'到teradata服務器,或者它是否通過,或者其他? – Joe
有一個圖書館,我像這樣引用它: 'FROM mydb1234.myTable' 凡mydb1234是'libref' –