First of all, there's no need to shout at the SAS interpreter. It works very fine with lowercase, which is easier to read.
Second, you define three array fior the same variables; this is not necessary, you can reuse an array as often as you want.
Third, you can do everything in one DO loop.
Fourth, your code will only output observations with no poisoning at all. Is this what you want, or do you want all observations where any poisoning is detected?
data lib.dad05;
set dad.dad2005;
array dx{25} diag_code_1-diag_code25;
do i =1 to 25;
if dx{i} =: 'X47' or dx(i)=: 'X470' or dx(i)=: 'X471' or dx(i)=: 'X472' or dx(i)=: 'X473' or dx(i)=: 'X474' then unintentional_poisoning = 1;
if dx(i) =: 'T58' then co_poisoning = 1;
if dx(k) =: 'Y17' or dx(k)=: 'Y170' or dx(k)=: 'Y171' or dx(k)=: 'Y172' or dx(k)=: 'Y173' or dx(k)=: 'Y174' then undetermined_intent_poisoning = 1;
end;
if sum(unintentional_poisoning,co_poisoning,undetermined_intent_poisoning) le 0;
run;
... View more