当前位置: 首页 > 面试题库 >

proc sql sum总计不正确

易成天
2023-03-14
问题内容

我有看起来像这样的数据:

ID  Date1           Date2       Paid Amount
A               1/25/2012   -168.48
A               1/25/2012   -59.44
A               1/25/2012   -13.18
A               1/25/2012   -8.02
A               1/25/2012   8.02
A               1/25/2012   13.18
A               1/25/2012   59.44
A               1/25/2012   168.48
A   12/28/2011  1/25/2012   50.00
A   12/28/2011  1/25/2012   61.00


Proc sql;
Create table SUM as
Select id, date1, date2, sum(paid_amount) as paid_amount
From SUM_0
Group by id, date1, date2;

我得到这样的东西:

ID Date1     Date2     paid_amount
A            1/25/2012 4.547474E-13
A 12/28/2011 1/25/2012 111.00

只是通过目测,很明显空白date1的paid_amount的总和,但2012年1月25日的date2应该为0。由于某些原因以及其他类似的设置,我得到了具有E-13值的各种总和。


问题答案:

正如其他人指出的那样,这是一个浮点问题。就像:

2/3 - 1/3 - 1/3 = 0

.6667 - .3333 - .3333 > 0

浮点数本质上是不精确的。

在中SAS,您可以通过几种不同的方式来处理。最简单的两个:

  • 圆形的。 round(sum(...),0.01)将其舍入到最接近的0.01,如果愿意,则可以舍入到最接近的0.000001;通常E-12是您开始看到浮点精度问题蔓延的地方,因此任何小于10的零都可以。
  • 绒毛。 Fuzz(...)自动将接近整数的数字四舍五入到该整数。 否则 它不会四舍五入,只有接近实整数的事物成为一。

例如:

data test;
  input ID  $ Date1 :mmddyy10. Date2 :mmddyy10. Amount;
  datalines;
A      .         1/25/2012   -168.48
A      .         1/25/2012   -59.44
A      .         1/25/2012   -13.18
A      .         1/25/2012   -8.02
A      .         1/25/2012   8.02
A      .         1/25/2012   13.18
A      .         1/25/2012   59.44
A      .         1/25/2012   168.48
A   12/28/2011  1/25/2012   50.00
A   12/28/2011  1/25/2012   61.00
;;;;
run;

proc sql;
  select id, date1, date2, round(sum(amount),.01)
    from test
    group by 1,2,3;
quit;


 类似资料:
  • 我正在尝试匹配从服务器下载的文件的md5sum。只有当总和匹配时,处理才会继续。 上面的代码并没有每次为某些文件正确提供md5sum。 当我去控制台检查md5sum时 下载文件的vimdiff未提供任何差异。。下载后的文件是正确的。 我无法在上述代码中看到问题。 我正在尝试更改缓冲区大小。但没有运气,所以我猜这不是因为缓冲区大小等。 问候Dheeraj Joshi

  • 我需要编写一个程序,要求输入整数和循环,直到输入为负整数,然后程序结束。此外,循环需要计算正整数项的总数,并将所有项相加。代码的计数部分似乎工作正常,但我获取所有条目总和的方法不起作用。 我在代码中尝试的是将total=total输入放在循环的末尾,但这在测试时并没有给出正确的总和。 此外,我的类型安全块只适用于第一次进入;如果我在整数后输入一个字母,程序就会崩溃。这不应该在每个条目的开头回到类型

  • 问题内容: 假设我有一个用户活动日志,我想生成一个总持续时间和每天唯一身份用户数量的报告。 汇总持续时间非常简单: 我想做的是同时计算持续时间并计算不重复次数,但我似乎找不到count_distinct的等效项: 这可行,但是肯定有更好的方法,不是吗? 我在想,我只需要提供一个将Series对象的不同项目的计数返回给聚合函数的函数,但是我对各种库的接触并不多。另外,似乎groupby对象已经知道此

  • 总计=14种不匹配袜子的可能组合。这似乎太天真了。有没有人对如何优化有什么想法?如果需要,我可以发布我的代码。

  • 我正试图写一个C程序来计算元音、键击和字母字符的数量。击键计数器正在工作,但是元音计数器总是关闭一个元音。阿尔法计数器坏了。

  • 问题内容: 请在这里参考上一个问题:jQuery中列的总和 我使用了Aymen的解决方案,但是我根据自己的需要对其进行了编辑。它停止工作,我的代码如下所示,如jsfiddle所示: http //jsfiddle.net/unKDk/15/ jQuery部分是 如何解决导致jquery计算错误的问题。 如何按行计算总计 我需要完全相同的类名。 问题答案: 我不太确定自己想要什么,但是如果您只想按列