Cotegorization числовой переменной в SAS

Я хочу найти способ построить другую переменную (это нормально даже в том же наборе данных), которая является категоризацией старой переменной. Я бы выбрал количество сегментов (для примеров, использующих процентили в качестве срезов: p10, p20, p30, так далее.). Теперь я делаю эту вещь, извлекая процентили переменной с proc univariate, Но это дает мне только процентили (мои отсечки), а затем я должен построить новую переменную вручную, используя процентили. Как я могу создать эту новую переменную, давая в качестве входных данных срезы и количество сегментов?

заранее спасибо

1 ответ

Предполагая, что вы хотите равные по размеру сегменты, то PROC RANK может просто получить то, что вы ищете.

data test;
do i=1 to 100;
 output;
end;
run;

proc rank data=test out=test2 groups=5;
var i;
ranks grp;
run;

Это даст вам 5 групп (названных 0 .. 4), которые должны быть эквивалентны отсечкам P20, P40, ..., P80.

Если вам нужны неравные сегменты, например, P10, P40, P60 и P90, вам придется выбрать самый низкий уровень и объединить группы. Используя группы выше:

%let groups=10;

proc rank data=test out=test2 groups=&groups;
var var;
ranks grp;
run;

/*
    P = (grp+1)*&groups
    Cutoffs 10, 40, 60, 90
    implicit 5 new groups
*/

%let n_cutoff=4;
%let cutoffs=10, 40, 60, 90;

data test3(drop=_i cutoffs:);
set test2;
array cutoffs[&n_cutoff] (&cutoffs);

P = (grp+1)*&groups;

do _i=1 to &n_cutoff;
    if P <= cutoffs[_i] then do;
        new_grp = _i-1;
        leave;
    end;

    if _i = &n_cutoff then
        new_grp = _i;
end;

run;

10 является наименьшим общим знаменателем значений Р. 100/10 = 10, поэтому нам нужно 10 групп из PROC RANK,

Шаг данных в конце объединяет группы, используя необходимые срезы.

Другие вопросы по тегам