要计算带有权重的变量“值”的平均值,我们可以简单地执行以下操作:
proc sql;
select sum(Value*Weight)/sum(Weight) as WeightedAverage
from table ;
quit;
我们如何计算变量“值”的中值与权重?我知道我们可以使用proc方法,但我更喜欢proc sql中的解决方案。
示例:
data table;
input value weight;
datalines;
1 1
2 1
3 2
;
run;
使用proc意味着,我们可以轻松得到均值(2.25)和中位数(2.5):
proc means data=table mean median;
var value;
weight weight;
run;
使用上面的proc sql,我可以得到加权平均值:2.25。
如何获得中位数(2.5)?
答案 0 :(得分:3)
median()
中还有一个proc sql
功能(SAS 9.4中提供)。
正常的中位数是这样的:
proc sql; select median(Value) as Median from table ; quit;
根据你想要如何使用权重,加权中位数会是这样的:
proc sql; select median(Value*Weight) as WeightedMedian from table ; quit;
示例:中位数为2.5
data have;
input value;
datalines;
1
2
3
3
;
run;
proc sql;
create table want as
select Median(value) as med
from have;
quit;
示例:隔离数据,因此我们有4行1,2,3,3而不是3
data have;
input value weight;
datalines;
1 1
2 1
3 2
;
run;
data have_seg;
set have;
retain freq;
freq= weight;
if(freq=1) then do; output; end;
else if freq > 1 then do;
do i=1 to freq; weight=1; output; end;
end;
keep value weight;
run;