私は 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 に、合計値に対応できるフィールド長を使用してテーブルを作成させる方法はありますか? それらは数十億の範囲にあるので、それほど珍しいことではないと思います。皆さんがどう思っているか興味がありました。