#sas
#sas
Вопрос:
У меня есть такой набор данных:
data providers;
input prv_id mbr_cnt value;
datalines;
1100 25860 3.9025
4700 71855 8.8566
5500 72147 6.9918
6400 25144 4.5200
7000 58114 9.3391
7900 67222 7.5189
8300 54039 8.9301
8800 2204 3.2221
9400 71600 9.9682
10000 68807 7.6581
10200 16322 8.6505
10700 115118 12.4198
11100 148235 18.2053
11700 56441 8.6987
12100 58556 7.6724
12500 81865 10.1048
12900 18106 3.7881
13400 98701 12.9679
13900 10347 3.7001
14400 45516 6.3924
;
run;
Мне нужно рассчитать процентиль каждого наблюдения, взвешенного по mbr_cnt
. Есть ли способ сделать это в SAS? Я пытался использовать proc rank data=providers groups=100 out=providers_percentile;
, но это просто дает мне невзвешенный процентиль.
Комментарии:
1. blogs.sas.com/content/iml/2016/08/29/weighted-percentiles.html
2. Риза, отправленная вами ссылка объясняет, как вычислить процентили совокупности. Что я хочу выяснить, например, в каком процентиле находится поставщик 1100, в каком процентиле находится поставщик 5500 и так далее. Я хочу создать новую переменную, которая показала бы мне процентиль каждого отдельного наблюдения, взвешенный по mbr_cnt . Ссылка выше этого не делает.
3. Тогда я бы порекомендовал вместо этого ручной расчет методом перебора с помощью шага данных. Или ОДНОМЕРНЫЙ процесс с использованием графика CDF.
Ответ №1:
PROC FREQ имеет параметр ВЕСА и может вычислять взвешенный совокупный процент.
proc freq data=providers;
ods output list=freqout;
weight mbr_cnt;
tables value * prv_id / list missing;
run;
Не уверен, что это именно то, что вам нужно.