在proc sql(SAS)中执行teradata查询时,我收到此错误
错误: Teradata行未送达(trget):发生数字溢出 在计算过程中。
我正在使用SAS EG 9.3。
我尝试增加假脱机空间,然后尝试使用mode=teradat
查询很大,有很多sum,max和count函数。 谁能告诉我如何解决这个问题?
答案 0 :(得分:0)
它绝对不是MAX
或MIN
,而且可能不是导致该错误的COUNT
,因为这会在Teradata中返回INTEGER
模式和ANSI模式下的DECIMAL(15)
。
乘法或SUMming INTEGER可能会导致溢出。
如果系统的 MaxDecimal 设置与38不同,则DECIMAL也相同。运行SELECT TYPE(10000000000. * 10000000000.);
并检查它是否返回小于DECIMAL(22,0)
。
要修复此错误,您必须将第一个操作数转换为更高精度的DECIMAL(或TD14中更好的NUMBER(*)
),但是当您将数据返回到SAS时,您可能只使用FLOAT,因为这是本机数字类型在SAS:
CAST(colA AS FLOAT) * colB
或
SUM(CAST(colA AS FLOAT))
答案 1 :(得分:0)
如果您有太多观察结果,COUNT会导致溢出。使用CAST(COUNT(*)作为FLOAT)。