【问题标题】:PROC Summary SUM returning 1 higher than it shouldPROC 总结 SUM 返回 1 高于应有的值
【发布时间】:2019-04-29 16:54:28
【问题描述】:

所以我使用 SUM 运行 PROC Summary 以了解某事的频率,我只有 160 个观察值,但是我遇到了频率总和为 161 的问题。我仔细检查了原始数据集,有 160 个观察和一切,但有些东西正在使频率达到 161,我不确定是什么。

我已经尝试了一些代码

PROC SQL;
    CREATE TABLE DiseaseFreq AS
    SELECT Concomitant_Disease,
            count(*) AS Freq
    FROM CAS.PreOp
    GROUP BY Concomitant_Disease;
QUIT;

DATA Disease (KEEP=var freq RENAME=var=Concomitant_Disease);
    SET DiseaseFreq;
    LENGTH var $25. freq 3.;
    DO i=1 BY 1 WHILE(SCAN(Concomitant_Disease,i,"~^,")^='');
        var=STRIP(PROPCASE(SCAN(Concomitant_Disease,i,"~^,")));
        Freq=Freq;
        OUTPUT;
    END;
RUN;

PROC SUMMARY DATA=Disease;
    CLASS Concomitant_Disease;
    VAR Freq;
    OUTPUT OUT=Count SUM=Freq;
RUN;

【问题讨论】:

  • 请显示日志并从 PROC Summary 中输出。我的猜测是您的数据步骤以某种方式添加了另一个观察结果。
  • 你为什么在 proc sql 中使用 "count() AS Freq" 而不是 sum() ? freq 和 sum 会导致不同的结果
  • 你指的是什么@Rhythm,而且整个方式非常不正确,因为我在另一个数据集上运行了代码,它甚至没有产生 160 或 161。
  • “频率”是指结果数据集中的观察次数吗?如果是这样,那么@data_null_ 已经给出了您正在寻找的答案。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 3.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: sas summary proc


【解决方案1】:

为什么要截断 FREQ 变量的精度?您告诉 SAS 只保留存储浮点数所需的八个字节中的三个字节。在 Windows/Linux 上,这仅足以准确地表示 8,192 大的数字。丢弃精度的低位很可能是您的计数不正确的原因。

将 FREQ 的 LENGTH 设置为 8。或者不理会它,SAS 将默认存储所有 8 个字节。

【讨论】:

    【解决方案2】:

    您需要在 PROC Summary 语句中使用 NWAY 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      相关资源
      最近更新 更多