Hi, I want to create some new binary variables based on whether part of the original variables of each observation has pattern matched values. (If anybody is familiar, I use the MedPAR data.) Each new variable has its own corresponding value. So I try to code this out with loop and arrary. It works out when there is only one loop (create only one new variable). data array1;
set original; exp1='/^I50/o';
exp2='/^I49/o';
exp3='/^I21/o';
exp4='/^I63/o';
exp5='/^R06|^J95|^J1[345678]/o';
array exp [*] exp1-exp5; /*the expression to find and match to create each new variable*/
array var [*] var1-var5;
array dgns_array [*] AD_DGNS DGNS_CD01-DGNS_CD25; /*the original variables to scan and check*/
var[2]=0; /*set the default value of the new variable*/
do i=1 to 26;
if prxmatch(exp[16], dgns_array[i])>0 then
do;
var[2]=1;
leave;
end;
end;
run; However, when I write the nested loop,all the new variables have the same value as the first one. data array2;
set original;
exp1='/^I50/o';
exp2='/^I49/o';
exp3='/^I21/o';
exp4='/^I63/o';
exp5='/^R06|^J95|^J1[345678]/o';
array exp [*] exp1-exp5; /*the expression to find and match to create each new variable*/
array var [*] var1-var5;
array dgns_array [*] AD_DGNS DGNS_CD01-DGNS_CD25; /*the original variables to scan and check*/
do n=1 to dim(var); var[n]=0; end; /*set the default value of the new variable*/ do j=1 to dim(var); do i=1 to 26; if prxmatch(exp[j], dgns_array[i])>0 then do; var[j]=1; leave; end; end; end;
run; I have no idea why this didn't work. Any hint or advice of other functions to do the same thing will be appreciated. Thanks!
... View more