我正在使用 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 使用可以容纳我的总值的字段长度创建一个表?它们在十亿的范围内,所以我认为这没什么不寻常的。我很想知道你们是怎么想的。