在proc中计算不同的值意味着声明?

时间:2014-01-15 23:39:42

标签: sas

这是对此的后续问题: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;

随着我们添加越来越多的自变量,这将变得非常笨拙。

2 个答案:

答案 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来执行此操作,但我不确定它会比两步解决方案更容易。