SAS присоединяется к флагу для обозначения процентиля - PullRequest
0 голосов
/ 27 мая 2019

Я хочу объединить две таблицы

Таблица 1 - Набор данных по бейсболу

DATA baseball;
    SET sashelp.baseball
        (KEEP = crhits);
RUN;

Таблица 2 - Таблица, содержащая процентили CRhits

PROC STDIZE 
    DATA = baseball
    OUT=_NULL_      
    PCTLMTD=ORD_STAT
    PCTLDEF=5
    OUTSTAT=STDLONGPCTLS
        (WHERE = (SUBSTR(_TYPE_,1,1) = "P"))
    pctlpts = 1 TO 99 BY 1;
RUN;

Я хотел бы объединить эти таблицы, чтобы создать таблицу, содержащую значения для crhits, а затем столбец, указывающий, какому процентилю принадлежит это значение, как показано ниже

crhits    percentile    percentile_value
54        p3            54
66        p5            66
825       p63           825
1134      p76           1133

В последнем столбце указано значение процентиля, заданное stdlongpctls

В настоящее время я использую следующий код для вычисления процентилей и цикл для подсчета количества «событий» на процентиль на коэффициент

Я пробовал перекрестное соединение, но у меня возникают проблемы с визуализацией того, как объединить эти две таблицы без явного ключа

PROC SQL;
    CREATE TABLE cross_join_table   AS
    SELECT
          a.crhits
        , b._TYPE_
        , CASE WHEN
            a.crhits < b.type       THEN b._TYPE_   END AS percentile
    FROM
        baseball                    a
    CROSS JOIN
        stdlongpctls                b;
QUIT;

Если есть другой более простой / более эффективный способ узнать количество наблюдений и количество зависимых переменных (например, я моделирую событие флага по умолчанию в моем фактическом наборе данных, поэтому я буду признателен за сумму 1 на группу процентилей). она)

1 Ответ

0 голосов
/ 27 мая 2019

Вместо этого используйте PROC RANK, чтобы сгруппировать его в процентили.

proc rank data=sashelp.baseball out=baseball_ranks group=100;
var crhits;
rank rank_crhits;
run;

Затем вы можете суммировать его, используя PROC MEANS.

...