Sas 使用Proc-SQL进行聚合

Sas 使用Proc-SQL进行聚合,sas,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上。例如,在1的var中,我想取加权平均值为(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 谢谢。您可以在下面找到解决方案。我对你的结果很好奇。对于A

假设我有一个如下形式的数据集:

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上。例如,在1的var中,我想取加权平均值为(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

谢谢。

您可以在下面找到解决方案。我对你的结果很好奇。对于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;

您可以在下面找到解决方案。我对你的结果很好奇。对于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;

为了提供另一种方法,您可以在PROC SUMMARY中使用WEIGHT语句来获得相同的结果。从您的示例final表中,我唯一不清楚的是B和C列的值来自何处(我在下面的解决方案中忽略了这些)


为了提供另一种方法,您可以在PROC SUMMARY中使用WEIGHT语句来获得相同的结果。从您的示例final表中,我唯一不清楚的是B和C列的值来自何处(我在下面的解决方案中忽略了这些)


非常感谢Robbie!奇怪的是,我使用了相同的语句(没有proc sort),但它没有给出结果。但再次感谢你。至于平均值,我只是随便把它。不是计算出来的。非常感谢Robbie!奇怪的是,我使用了相同的语句(没有proc sort),但它没有给出结果。但再次感谢你。至于平均值,我只是随便把它。不是计算值。谢谢Keith的回答。B&C的值在原始数据中给出。我们想使用B&C创建一个新的var,条件是/weight=语法为a.+1-我不知道您可以在同一个摘要中为不同的变量设置不同的权重。谢谢谢谢基思的回答。B&C的值在原始数据中给出。我们想使用B&C创建一个新的var,条件是/weight=语法为a.+1-我不知道您可以在同一个摘要中为不同的变量设置不同的权重。谢谢