如果“3320”或“3321”在后续列中出现多次,则带有do循环的跟随代码会创建重复输出。我的问题是如何在不重复输出的情况下使用do循环?注释掉的OR语句解决了这个问题,但是如果给出更大的变量列表,它就没有效率。
options obs = 1000;
data NIS_2013.PARKINSONS;
set NIS_2013.NIS_2013_CORE;
array DX (25) $ dx1--dx25;
do i = 1 to 25;
if DX(i) IN ('3320', '3321') then output;
end;
run;
/* if DX1 IN ('3320', '3321')
OR DX2 IN ('3320', '3321')
OR DX3 IN ('3320', '3321')
OR DX4 IN ('3320', '3321')
... */
答案 0 :(得分:1)
从循环中删除OUTPUT。而是创建一个标志,然后用它来输出记录。
如果您只搜索这两个代码,我建议您使用WHICHC来搜索数组。我已将其包含在下面的代码中,但将其注释掉了。
options obs = 1000;
data NIS_2013.PARKINSONS;
set NIS_2013.NIS_2013_CORE;
array DX (25) $ dx1--dx25;
flag_parkinson=0;
do i = 1 to 25;
if DX(i) IN ('3320', '3321') then flag_parkinson=1;
end;
if flag_parkinson=1 then output;
*x = whichc('3320', of dx(*)) + whichc('3321', of dx(*));
*if x>0 then output;
run;