Если вы просто ищете уникальный номер строки, то должно работать следующее:
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;