1

私のデータセットには と の 2 つの変数がIDありdiagnosisます。と に基づいて、データセットに行番号を割り当てようとしてい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 に答える