我只想在有一定值时制作新的虚拟变量。
这是我的原始数据示例。
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,这是最后一个变量.. 我觉得我在循环语句中犯了一个错误。你介意帮帮我吗? 提前谢谢。
答案 0 :(得分: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
)和仅当前迭代的结果。
如果你知道max#是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;
我认为这就是你要找的东西,如果你至少填写你的例子的前两行,它会有所帮助。