2017-01-12 4 views
0

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

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

ответ

0

Предполагая, что вы хотят ведер размера Равнопроцентных, то 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.

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

+0

Спасибо. Вероятно, ранг proc с группами = 10 в порядке. Но я не знаю, почему много наблюдений идет в другом ведре по сравнению с категоризацией с однопроцессорным выходом proc. – TheZone

+0

@ GiacomoRosaspina У вас есть много связей в вашем наборе данных? – Reeza

+0

@Reeza Я не знаю, какие связи: – TheZone