gpt4 book ai didi

sas - Sum 上的奇怪行为(获取数字溢出)

转载 作者:行者123 更新时间:2023-12-04 18:44:11 24 4
gpt4 key购买 nike

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

最佳答案

我怀疑正在发生的事情是查询通过隐式传递被推回 Teradata,结果某些东西在 Teradata 中不起作用。您可能需要查询显式地将总和转换为不同于它被转换为的内容。

要查看到底发生了什么,请使用 OPTIONS SASTRACE ;从文档中建议尝试

options sastrace=',,,d' sastraceloc=saslog nostsuffix;

尽管您可能需要考虑一些选项。这将显示在 Teradata 中执行的确切查询。直接在 Teradata 中尝试相同的查询,看看是否可以防止它出现相同的问题。

一旦你弄清楚了,你就可以使用显式传递来执行正确的查询; IE
proc sql;
connect to teradata [options, same as on the libname usually];
create table mydata as select * from connection to teradata (
... actual teradata syntax ...
);
quit;

关于sas - Sum 上的奇怪行为(获取数字溢出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com