Sas 将整数相加得到小数

Sas 将整数相加得到小数,sas,proc-sql,Sas,Proc Sql,我正在尝试使用PROC SQL对不同年龄组和县的人口计数(即整数)求和: PROC SQL; CREATE TABLE WORK.MALE_POP_SQL00 AS SELECT countyname AS CountyName, age_grp AS AgeGroup, SUM(pop00) AS Pop_00 FROM WORK.INTERCENSAL_M GROUP BY countyname, age_grp ORDER BY countyname

我正在尝试使用PROC SQL对不同年龄组和县的人口计数(即整数)求和:

PROC SQL;
    CREATE TABLE WORK.MALE_POP_SQL00 AS
    SELECT countyname AS CountyName, age_grp AS AgeGroup, SUM(pop00) AS Pop_00
    FROM WORK.INTERCENSAL_M
    GROUP BY countyname, age_grp
    ORDER BY countyname, age_grp;
QUIT;
我遇到的问题是,给出的结果不是整数:

更糟糕的是,舍入通常会产生与其原始值不匹配的计数。例如,最后一个条目——该年龄组/县的原始人口值实际上是4,但在对PROC SQL生成的值进行四舍五入后,它是3


谢谢您的时间。

您的数据中很可能没有整数,尽管您认为有整数。格式可以隐藏小数,但不会更改实际值,并且SQL不会保留格式,除非在没有分组/etc的直接select语句中

例如,见:

data my_data;
input age_grp pop_count;
format pop_count 4.0;
datalines;
1 1234.54
2 1624.43
1 14.35
2 1234.11
1 888.88
2 768.48
;;;;
run;

proc sql;
  select age_grp, sum(pop_count) as pop_sum
    from my_data
    group by age_grp;
quit;

年龄2的四舍五入加起来与未四舍五入加起来不一样(四舍五入的值加起来似乎是3626)。

尽管你认为数据中实际上没有整数,但你很可能没有整数。格式可以隐藏小数,但不会更改实际值,并且SQL不会保留格式,除非在没有分组/etc的直接select语句中

例如,见:

data my_data;
input age_grp pop_count;
format pop_count 4.0;
datalines;
1 1234.54
2 1624.43
1 14.35
2 1234.11
1 888.88
2 768.48
;;;;
run;

proc sql;
  select age_grp, sum(pop_count) as pop_sum
    from my_data
    group by age_grp;
quit;

年龄2的四舍五入加起来与未四舍五入加起来不一样(四舍五入的值加起来似乎是3626)。

您确定输入数据没有小数吗?最终可能会出现舍入误差,但通常舍入误差很小,而这并不是数据的情况。你能创建一个样本数据集,这样我们就可以复制这个问题吗?听起来你没有整数。查看INTERCENSAL_M上的格式,看看这些格式是否实际上是整数,或者它们是否只是格式化为整数。@Reeza您批准的标记编辑不正确;只有当问题是询问一个不熟悉SAS但熟悉SQL的人员可以回答的SQL查询(“我如何通过”等)时才合适,该查询在SQL Server或Oracle中有相同的答案。这个问题显然不是问这个问题,而是问一个特定于SAS的问题。对于像这样的问题是可以接受的,这些问题都是针对SAS的SQL实现的,尽管在这里是否相关(但我现在将包括它)还值得怀疑。@Joe感谢您的澄清,我不知道还有proc SQL:)没问题。我对使用非常流行的标记(,等等)非常谨慎,因为他们有一种倾向,即人们没有意识到SAS是什么,并将其视为一个一般的SQL问题,从而得出错误的答案,因为它们在数量级上比标记更受欢迎。您确定您的输入数据没有小数吗?最终可能会出现舍入误差,但通常舍入误差很小,而这并不是数据的情况。你能创建一个样本数据集,这样我们就可以复制这个问题吗?听起来你没有整数。查看INTERCENSAL_M上的格式,看看这些格式是否实际上是整数,或者它们是否只是格式化为整数。@Reeza您批准的标记编辑不正确;只有当问题是询问一个不熟悉SAS但熟悉SQL的人员可以回答的SQL查询(“我如何通过”等)时才合适,该查询在SQL Server或Oracle中有相同的答案。这个问题显然不是问这个问题,而是问一个特定于SAS的问题。对于像这样的问题是可以接受的,这些问题都是针对SAS的SQL实现的,尽管在这里是否相关(但我现在将包括它)还值得怀疑。@Joe感谢您的澄清,我不知道还有proc SQL:)没问题。我对使用非常流行的标记(,等等)非常谨慎,因为它们有一种倾向,即人们没有意识到SAS是什么,并将其视为一个一般的SQL问题,从而导致错误的答案,因为它们比标记流行很多数量级。