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;