我的数据集有两个变量ID和诊断。我正在尝试根据ID和诊断在我的数据集中分配行号。
我使用的代码是;
proc sort data = temp;
by ID diagnosis;
run;
proc rank data = temp out = temp1;
by id;
var diagnosis;
ranks = diag_rank;
run;
给出mr错误:列表中的变量诊断与类型
不匹配我知道我的诊断有文字和数字值。有没有办法来解决这个问题。非常感谢。
答案 0 :(得分: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;
答案 1 :(得分: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包含字符值,那么您需要重新分类诊断或将值转换为数值(如果有意义的话)。
答案 2 :(得分:0)
如果您只想使用行号,可以使用默认变量" _ N _"没有引号和空格。
如果是有条件的,你可以按照Rwill的回答......