Как получить взвешенный процентиль каждого наблюдения в SAS

#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;
  

Не уверен, что это именно то, что вам нужно.