0

60 個の変数と 100 個の観測値で構成されるデータ セットがあります。各質問の観察は、次の文字 (a、b、c、d、e) のいずれかを取ることができます。数値に変換したいのでDoループを使ってみたのですが、なぜか実行できませんでした。これが私のSASコードです:

DATA nXYZ;
set data XYZ;

array nQ {60} Q1-Q60;
do i = 1 to 60;

if Q[i] = 'a' then nQ[i] = 5;
else if Q[i] = 'b' then nQ[i] = 4;
else if Q[i] = 'c' then nQ[i] = 3;
else if Q[i] = 'd' then nQ[i] = 2;
else if Q[i] = 'e' then nQ[i] = 1;
end;

RUN;

私は何を間違えたのだろうと思っていました。あなたの助けに感謝します。

4

1 に答える 1

0

別の変数名を使用しない限り、文字変数自体を数値変数に変更することはできません。Q[i]='5' と言うことができます (配列を適切に定義したと仮定します) が、Q[i] に 5 を格納してから計算できる数値として格納することはできませんでした。追加の配列参照を追加してそのコードを機能させた場合、それは機能しますが、5 ではなく '5' が割り当てられます。

回避策は、変数の名前を変更し、名前を変更した変数を適切な変数名に変換することです。60個あると少しベタベタしますが、可能です。

基本コンセプト:

data nXYZ;
set xyz(rename=(Q1=cQ1 Q2=cQ2));
array cQs cq1-cq2;
array nQs q1-q2;
do _t = 1 to dim(nQs);
  nQs[_t] = 6-(rank(cQs)-96); *'a' = 97 .. 'z' = 122;
end;
run;

その名前変更リストをプログラムで作成できます。

于 2013-11-05T20:53:02.383 に答える