0

特定の値があるときに新しいダミー変数を作成したいだけです。

これが私の元のデータの例です。

ID A1 A2... A10
1  10   1    5
2  20   8   4
...
...

そして、それらの属性に特定の値がある場合、ダミー変数を追加したいと思います。たとえば、ID 1 のサブジェクトには「10」があり、新しい変数、Add10 は 1 になります。

ID A1 A2.. A10 Add1..Add4 Add5...Add20

1  10   1.. 5  1  ...0   1  ...    0

2   20  8.. 4  0  ...1   0  ...     1

...

これが私のコードです..

%MACRO DO_LIST;
%DO I=1 %TO 20;

data aaaa;
set aa33; 
if A1 =i or
A2 =i or
A3 =i or
...
A10 =i then Add&I=I ;
RUN;
%END;  
%MEND DO_LIST;
%DO_LIST;   

しかし、私の結果は最後の変数である Add20 しかありません。ループ文を間違えた気がします。手伝ってくれませんか?前もって感謝します。

4

1 に答える 1

1

現在、入力として常に同じデータセットを使用しており、aaaaループごとにこのデータセットを変更していません。したがって、これはループの最後の反復で実行されるため、常に Add20 のみを取得します。

これに対する簡単な修正は次のとおりです。

data append;
 set aa33;
run;

%MACRO DO_LIST;
%DO I=1 %TO 20;
data append; 
 set append;
 if A1 =i or
 A2 =i or
 A3 =i or
 .....
 A10 =i then Add&I=I ; 
RUN;
%END;
%MEND DO_LIST;
%DO_LIST;

aa33元のデータセット ( ) と現在の反復のみの結果で完全に置き換えるのではなく、ループが実行されるたびにデータセットに列を追加する必要があります。

最大数が 20 であることがわかっている場合、次はマクロなしで機能するはずです。

data test;
 set aa33;
 array add[20] 1. add1 - add20;
 array a[*] a:;

do i = 1 to dim(a);
  value = a[i];
  add[value] = 1;
end;
run;

それがあなたが探しているものだと思います。例の少なくとも最初の 2 行を完全に記入していただければ助かります。

于 2012-05-30T12:21:02.977 に答える