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;
По сравнению с процедурными средствами
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, означает, что они не выровнены, может кто-то подтвердить, что будет правильным?
1 ответ
Решение
Вы используете pctldef=3 в PROC STDIZE, но определение по умолчанию для PROC MEANS, а это 5. Я протестировал ваш код с PCTLDEF=3, используя PROC MEANS, и получил соответствующие результаты.