【问题标题】:Difference between CLASS and By processing in SAS STAT Procs?SAS STAT Procs 中的 CLASS 和 By 处理之间的区别?
【发布时间】:2013-09-03 16:29:50
【问题描述】:

我想知道在 SAS STAT procs 中使用 class 或 by 语句之间是否有任何重大区别。以 proc 方式为例。假设我们有 2 个组/分类变量,x1 和 x2。我想为 x1 和 x2 的每个级别组合计算变量 (x3) 的汇总统计信息。
例如,使用class x1 x2 给我在 x1=1 时 x2=1 时 x3 的汇总统计数据,然后在 x1=1 时 x2=2 时 x3 汇总统计数据,依此类推。 下面是示例输出。

x1=1 x2=1 x3 mean std
     x2=2 x3 mean std
x1=2 x2=1 x3 mean std
...

如果我使用by x1 x2 我会得到

x1=1 x2=1
x3 mean std
(new page)
x1=1 x2=2
x3 mean std
(new page)
....

如果我使用 class x1by x2 我会得到

x1=1
x2=1 x3 mean std
x2=2 x3 mean std
x1=2
x2=1 x3 mean std
x2=2 x3 mean std
......

这是一些示例数据

x1 x2 x3
1  1  3
1  1  4
1  2  6
1  2  2
2  1  5
2  1  1
2  2  2
2  2  6
3  1  10
3  1  2
3  2  1
3  2  8

据我所知,除了显示方式外,输出没有区别。我的示例可能过于简单,无法显示任何差异。

【问题讨论】:

    标签: sas


    【解决方案1】:

    除了 Bob 指出的(排序要求)(这当然很重要)之外,百分比的计算方式也存在差异。例如,在 PROC TABULATE 中,CLASS 变量必须位于页面、行或列维度上,而 BY 取代了它; PCTNPCTSUM 适用于所有类变量(而不是 ROWPCTNwetc.),这很重要,因为 PCTNPCTSUM 可以与分母定义一起使用,而 ROWPCTN 等则不能。

    一些 STAT proc 还评估类组之间的差异,而 BY 变量再次取代了这一点 - 例如,PROC TTEST 比较 CLASS 变量的不同值之间的值,而 BY 组只会创建不同的层,在其中执行比较。

    最后,我鼓励您正确使用它们来展示您打算让它们展示的内容。 BY 变量应表示单独的层,其中对每个层独立进行分析。 CLASS 变量应表示同一层中数据的不同分组。这对于创建自文档化代码非常有帮助,如果您注意保持一致,则更容易阅读代码并理解数据。

    【讨论】:

      【解决方案2】:

      主要区别在于BY 语句要求 SAS 数据集按列出的变量排序。在 BY 组中收集和报告统计数据。如果使用CLASS语句,则SAS数据集不需要排序;所有统计信息都收集在内存中,并在程序结束时报告。

      如您所见,生成的报告输出也存在细微差别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 2016-05-13
        • 2021-02-19
        • 2016-04-13
        • 1970-01-01
        • 2014-01-31
        相关资源
        最近更新 更多