proc stdize выдает неправильное значение для процентилей

У меня есть такой набор данных

data test;
    do i = 1 to 100;
    x1 = ceil(ranuni(0) * 100);
    x2 = floor(ranuni(0) * 1600);
    x3 = ceil(ranuni(0) * 1500);
    x4 = ceil(ranuni(0) * 1100);
    x5 = floor(ranuni(0) * 10);
    output;
    end;
run;

data test_2;
    set test;

    if mod(x1,3) = 0 then x1 = .;
    if mod(x2,13) = 0 then x2 = .;
    if mod(x3,7) = 0 then x3 = .;
    if mod(x4,6) = 0 then x4 = .;
    if mod(x5,2) = 0 then x5 = .;
    drop i;
run;

Я планирую рассчитать ряд процентилей, включая два нестандартных процентиля (2,5-й и 97,5-й). Я делаю это, используя proc stdize, как показано ниже.

PROC STDIZE 
    DATA=test_2
    OUT=_NULL_
    NOMISS 
    PCTLMTD=ORD_STAT
    pctldef=3
    OUTSTAT=STDLONGPCTLS
    pctlpts=(2.5 5 25 50 75 95 97.5);
    VAR _NUMERIC_;
RUN;

По сравнению со средствами proc

DATA TEST_MEANS;
    SET TEST_2;
    IF NOT MISSING(X1);
    IF NOT MISSING(X2);
    IF NOT MISSING(X3);
    IF NOT MISSING(X4);
    IF NOT MISSING(X5);
RUN;

PROC MEANS 
    DATA=TEST_MEANS NOPRINT; 
    VAR _NUMERIC_;
    OUTPUT OUT=MEANSWIDEPCTLS P5= P25= P50= P75= P95= / AUTONAME;
RUN;

Однако что-то связанное с тем, как SAS помечает отсутствующие значения как -inf, когда я сравниваю приведенные выше результаты с результатами, полученными в excel и proc, означает, что они не выровнены, может ли кто-нибудь подтвердить, что было бы правильно?


person 78282219    schedule 18.11.2018    source источник
comment
Такого рода вещи происходят, когда у вас много связей. Сколько связей в ваших данных и как они влияют на результаты?   -  person Reeza    schedule 18.11.2018
comment
И у процентилей нет «общего» определения, поэтому нет права, есть данные, которые подходят для вас и которые вы хотите использовать. Выберите одно и объясните, какое определение вы использовали.   -  person Reeza    schedule 18.11.2018


Ответы (1)


Вы используете pctldef=3 в PROC STDIZE, но определение по умолчанию для PROC MEANS равно 5. Я протестировал ваш код с PCTLDEF=3, используя PROC MEANS, и получил соответствующие результаты.

person data _null_    schedule 18.11.2018
comment
Спасибо за разъяснение, меня беспокоит разница между вариантами (в некоторых случаях более 20 единиц). Как я могу доверять этому выводу и как я могу определить, какой из них является наиболее точным? - person 78282219; 18.11.2018
comment
@ 78282219 Просто посмотрите на определение алгоритмов, используемых различными параметрами параметра PCTLDEF=, и выберите тот, который вы хотите использовать. - person Tom; 19.11.2018
comment
Я обнаружил, что pctldef =5 копирует одномерный процесс, и я доволен - person 78282219; 19.11.2018