SAS 9.3 Проблемы ранга Proc (дорожный блок ранга / сортировки)

Я работаю с набором данных в этом формате:

Column 1 (What I Have),     Column 2 (What I need to see)
8   1
8   1
8   1
9   2
9   2
9   2
10  3
10  3
10  3
11  4
11  4
12  5
13  6
14  7
14  7
14  7

Попытка использовать Proc Rank для генерации кода второго столбца:

Proc Rank data=Have
out=Want
ties=low;
Var Column1; 
ranks Column2;
run;

Вывод, который я получаю, выглядит следующим образом:

Column1 (What I Have)   Column2 (What I get)
8   1
8   1
8   1
9   199
9   199
9   199
10  415
10  415
10  415
11  613
11  613
12  823
13  1015
14  1222
14  1222
14  1222

Исходя из того, что я прочитал и услышал, первый набор данных - это то, что я ожидаю от моего результата.

Есть ли ошибка в коде или ожиданиях, которые привели к выводу, подобному тому, который я вижу? Кроме того, есть ли лучший способ создать последовательный ранг для столбца последовательных числовых данных?

3 ответа

Решение

Хотел сообщить, что я разобрался, как это использовать.

Ключ находится в Связи =(низкий или высокий или средний или плотный).

Вот новый код, который работает.

Proc Rank data=Have
out=Want
ties=dense;
Var Column1; 
ranks Column2;
run;

Теперь все мои группы данных похожи на значения и дают им одинаковое количество. Столбец 2 генерируется с правильными значениями. Документация здесь:

http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm

Прокрутите вниз, чтобы увидеть особенности связей

Вы можете сделать это на шаге данных, предполагая, что все в порядке для сортировки по Column1.

proc sort data=have;
 by column1;
run;

data want;
   set have;
    by column1;
    retain column2 ;
    if _n_ = 0 then
       column2 = 0;
    if first.column1 then
       column2 = column2 + 1;
run;

В качестве альтернативы с подразумеваемым сохранением.

DATA WANT;
   SET HAVE;
    BY COLUMN1;
    IF _N_ = 0 THEN
       COLUMN2 = 0;
    IF FIRST.COLUMN1 THEN
        COLUMN2 + 1;
RUN;
Другие вопросы по тегам