假设我有一个表格中的数据集:
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
谢谢。
答案 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;