SAS STAT Procs中的类和按处理之间的差异?

SAS STAT Procs中的类和按处理之间的差异?,sas,Sas,我想知道在SAS STAT procs中使用class或by语句是否有什么主要区别。以proc方法为例。假设我们有两个组/分类变量,x1和x2。我想为x1和x2的每个级别组合计算变量(x3)的汇总统计信息。 例如,使用classx1x2可以在x1=1时给出x3在x2=1时的汇总统计信息,然后在x1=1时给出x3在x2=2时的汇总统计信息,依此类推。 下面是示例输出 x1=1 x2=1 x3 mean std x2=2 x3 mean std x1=2 x2=1 x3 mean std

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

x1=1 x2=1 x3 mean std
     x2=2 x3 mean std
x1=2 x2=1 x3 mean std
...
如果我通过x1x2使用

x1=1 x2=1
x3 mean std
(new page)
x1=1 x2=2
x3 mean std
(new page)
....
x1=1
x2=1 x3 mean std
x2=2 x3 mean std
x1=2
x2=1 x3 mean std
x2=2 x3 mean std
......
如果我使用
classx1
byx2
我得到

x1=1 x2=1
x3 mean std
(new page)
x1=1 x2=2
x3 mean std
(new page)
....
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

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

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

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

除了Bob指出的(排序要求)之外(这当然很重要),百分比的计算方式也存在差异。例如,在PROC TABLATE中,类变量必须位于页、行或列维度上,而BY将取代该维度
PCTN
PCTSUM
可以跨所有类变量工作(与
ROWPCTN
wetc相反),这一点很重要,因为
PCTN
PCTSUM
可以与分母定义一起使用,而
ROWPCTN
等不能

一些统计过程还评估类组之间的差异,而BY变量再次取代-PROC TTEST,例如,比较类变量不同值之间的值,而BY组只会创建不同的层,在其中执行比较

最后,我鼓励你正确地使用它们来展示你想要他们展示的东西。BY变量应表示独立的地层,其中对每个地层进行独立的分析。类变量应该表示同一层中数据的不同分组。这对于创建自文档化代码非常有帮助,因为如果您小心保持一致性,那么阅读代码和理解数据就更容易了