1

我想知道在 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 x1并且by 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

我能说的最好的是,除了显示方式之外,输出没有区别。我的示例可能过于简单,无法显示任何差异。

4

2 回答 2

2

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

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

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

于 2013-09-03T17:06:00.463 回答
1

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

正如您所注意到的,生成的报告输出也存在细微差别。

于 2013-09-03T16:47:51.547 回答