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
,
Шаг данных в конце объединяет группы, используя необходимые срезы.