Как рассчитать медиану с весами, используя SAS proc sql? - PullRequest
0 голосов
/ 02 мая 2018

Чтобы вычислить среднее значение переменной «value» с весом, мы можем просто сделать следующее:

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 proc, мы можем легко получить среднее (2.25) и медиану (2.5):

proc means data=table mean median; 
var value;
weight weight;
run;

Используя вышеупомянутый proc sql, я могу получить средневзвешенное значение: 2,25.

Как получить медиану (то есть 2,5)?

1 Ответ

0 голосов
/ 03 мая 2018

В proc sql также есть функция median() (доступна в 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;
...