Obs Subj Dx1 Dx2 Dx3
1 001 450 430 410 2 002 250 240 . 3 003 410 250 500 4 004 240 . .
data learn.manyper;
set learn.oneper;
array Dx{3};
do Visit = 1 to 3;
if missing(Dx{Visit}) then leave;
Diagnosis = Dx{Visit};
output;
end;
keep Subj Diagnosis Visit;
run;
Let’s take the time to describe in detail how this program works (feel free to skip this section if this program seems intuitively clear to you). The DO loop starts with Visit set equal to 1. The MISSING function tests if this value is missing. For Subject 001, none of the diagnosis codes are missing, so the IF statement is never true for this subject. A new variable, Diagnosis, is set equal to the value of the array element Dx{1}, which is the same as the variable Dx1, which is equal to 450. At this point, the program data vector (PDV) contains the following: Subj Dx1 <drop> Dx2 <drop> Dx3 <drop> Visit Diagnosis 001 450 430 410 1 450 Because of the KEEP statement, only the variables Subj, Visit, and Diagnosis are written out to data set Manyper at the bottom of the DO loop.
(The above is from my textbook , I just don't know when the variables DX2 and DX3 was read from the raw data ? Thank you . )
... View more