2012-05-30 2 views
0

Я просто хочу создать новую фиктивную переменную, когда есть определенное значение.SAS macro loop and dummy variable

Вот мой пример данных orignal.

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, которая является последней переменной. Я чувствую, что ошибся в инструкции цикла. Не могли бы вы мне помочь? Спасибо заранее.

ответ

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; 

Я думаю, что это то, что вы ищете, это было бы полезно, если вы хотите заполнить по крайней мере, первые две полные строки вашего примера.

+0

спасибо soooooo много !! – user976856

 Смежные вопросы

  • Нет связанных вопросов^_^