这是对此的后续问题:Cleaner way of handling addition of summarizing rows to table?
然而,这次我们有些不同,我害怕。我们有:一个包含四个独立变量和两个因变量的数据集。我们想要:
a)由三个独立变量区分的集合,具有不同变量#4的计数和变量#5&的变量之和。 #6。这很容易。
b)为三个独立变量的每个组合创建的总条目,具有不同变量#4的计数以及变量#5和#6的总和。这对我来说并不容易。
所以想法就是修改它:
proc means data=have;
class ind1 ind2 ind3;
var dependent5 dependent6;
output out=want sum=;
run;
对于变量#1,2和3的每个组合,包括ALL,它还可以计算变量#4的不同值的数量。
我的想法:
1)放弃希望所有进入这里的人;回到尝试使用一堆宏代码在proc sql中执行此操作,这允许您使用count(distinct))有用的。2)nlevels的东西?
3)使用复杂的,可怕的宏代码来生成许多哈希值,以处理独特的内容。
4)??
在这里创建样本数据有点棘手;让我知道如果这没有意义,我会尽我所能来提出一些。
-
编辑:要清楚,SQL查询需要宏代码(并且速度很慢)的原因是因为它需要类似于以下内容(但扩展到更多级别)
select
"ALL" as ind1,
ind2
...
group by ind1, ind2;
select
ind1,
"ALL" as ind2
...
group by ind1, ind2;
select
"ALL" as ind1,
"ALL" as ind2
...
group by ind1, ind2;
随着我们添加越来越多的自变量,这将变得非常笨拙。
答案 0 :(得分:0)
你试试这个:
Proc Sql;
Count(distinct #4) as var_4, sum(#5) as var_5, sum(#6) as var_6
from have
group by #1,#2,#3
order by #1,#2,#3;
quit;
答案 1 :(得分:0)
我认为使用PROC MEANS直接执行此操作并不是一种干净的方法。我可能做的是两个步骤。首先PROC意味着生成总行数和两个总和,然后将它连接到PROC SQL中的原始表以获得不同的 - 当您进行连接时,它将巧妙地为您提供正确的行,包括总行。 / p>
您也可以使用PROC REPORT来执行此操作,但我不确定它会比两步解决方案更容易。