1

我的数据集有两个变量IDdiagnosis. 我正在尝试基于ID和分配我的数据集中的行号diagnosis

我使用的代码是;

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

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

它给了先生错误:the variable diagnosis in list does not match the type

我知道我的诊断既有文本值又有数字值。有没有办法解决这个问题。非常感谢。

4

3 回答 3

3

如果您只是在寻找一个唯一的行号,那么以下应该可以工作。

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

如果您需要基于 ID 和诊断的条件行号,请尝试:

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;
于 2011-08-16T22:53:56.727 回答
0

Nupur,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;

但是,如果您的 DIAGNOSIS 包含字符值,那么您将需要重新分类诊断或可能将值转换为数值(如果有意义的话)。

于 2011-08-16T17:58:19.633 回答
0

如果只想使用行号,可以使用不带引号和空格的默认变量“_ N_”。

如果是有条件的,你可以按照 Rwil​​l 的回答..

于 2014-11-13T22:48:09.837 回答