如何使用SAS proc sql计算中位数和权重?

时间:2018-05-02 20:30:00

标签: sql sas statistics median proc-sql

要计算带有权重的变量“值”的平均值,我们可以简单地执行以下操作:

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)?

1 个答案:

答案 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;