使用Proc SQL进行聚合

时间:2012-03-08 05:31:04

标签: sas

假设我有一个表格中的数据集:

A B C
1 3 5
1 4 8
1 3 3
2 2 2
2 7 6
2 3 3
3 4 4 
3 4 7
3 2 8

现在,我想对A的每个段进行加权平均,然后将它们加到A上。例如在A var中为1,我想将加权平均值设为(3 * 5 + 4 * 8 + 3) * 3)/(3 + 4 + 3)。然后加起来得到5.6。与A的其他2段相同。所以,最后该表如下所示:

A B C   D
1 3 7 5.6
2 6 6 7
3 5 9 8.2

谢谢。

2 个答案:

答案 0 :(得分:7)

为了提供替代方法,您可以使用PROC SUMMARY中的WEIGHT语句来实现相同的结果。我在示例决赛桌表中唯一不清楚的是B列和B列的值。 C来自(我在下面的解决方案中留下了这些)。

    proc summary data=test nway;
    class a;
    var c / weight=b;
    output out=agg2 (drop=_:) mean=d;
    run;

答案 1 :(得分:2)

您可以在下面找到解决方案。我很好奇你的结果。对于A = 2,加权平均值应为(2 * 2 + 7 * 6 + 3 * 3)/(2 + 7 + 3),约为4.5。为什么这里有7个?

data test;
input a  b  c ;
datalines;
1 3 5
1 4 8
1 3 3
2 2 2
2 7 6
2 3 3
3 4 4 
3 4 7
3 2 8
;
run;

proc sql;
create table agg as 
select a, b, c, sum(b*c)/sum(b) as d from test
group by a;
quit;

proc sort data=agg nodupkey;
by a d;
run;