ProC ранга в SAS - PullRequest
       22

ProC ранга в SAS

1 голос
/ 16 августа 2011

мой набор данных имеет две переменные ID и диагноз.Я пытаюсь назначить номера строк в моем наборе данных на основе идентификатора и диагноза.

код, который я использовал, был;

proc sort data = temp;
by ID diagnosis;
run;

proc rank data = temp out  = temp1;
by id;
var diagnosis;
ranks = diag_rank;
run;

Это дает ошибку mr: переменная диагностика в списке несоответствует типу

Я знаю, что мой диагноз имеет как текстовые, так и числовые значения.Есть ли способ это исправить.Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Если вы просто ищете уникальный номер строки, то должно работать следующее:

data temp;
   set temp;
   retain row_number 0;
   row_number + 1;
run;

Если вам нужен условный номер строки на основе идентификатора и диагностики, попробуйте:

data temp;
   set temp;
   by ID diagnosis;
   retain row_number;
   if first.ID then do;
      row_number = 0;
   end;
   row_number + 1;
run;

Если, с другой стороны, существует какой-то явный порядок ранжирования, который вы хотите наложить на переменную DIAGNOSIS, отличную от отсортированных значений символов, тогда вы можете использовать определяемый пользователем формат для сопоставления каждого из значений символовзатем введите этот формат для создания переменной row_number на шаге данных, как показано ниже.

proc format;
   value $diag_row
   "67"   = 2
   "A234" = 4
   "B45"  = 3
   "V456" = 1
   other  = 999
   ;
run;

data temp;
   set temp;
   format row_number 8.0;
   row_number = put(diagnosis,$diag_row.);
run;
0 голосов
/ 14 ноября 2014

Если вы просто хотите использовать номер строки, вы можете использовать переменную по умолчанию "_ N_" без кавычек и пробелов.

Если это условно, вы можете следовать ответу Rwill ..

0 голосов
/ 16 августа 2011

Нупур, оператор VAR ожидает только числовые переменные. Если DIAGNOSIS определен как символ, но содержит только числовые значения, используйте оператор INFORMAT для создания новой числовой переменной. Добавьте следующее в начало вашего примера, и оно должно работать:

data temp;
   set temp(rename=(diagnosis=diag_char));
   format diagnosis 8.0;
   diagnosis = input(diag_char , 8.0);
   drop diag_char;
run;

Однако, если ваш ДИАГНОЗ включает в себя символьные значения, вам нужно будет либо переклассифицировать диагноз, либо, возможно, перевести значения в числовые значения (если это имеет смысл).

...