|
Hi all,
here we are to face another question about DO.
I want to detect non-missing values in the first row of a matrix and then
set the corresponding columns to missing for all the rows.
I start from this example:
data prova;
a1=1;a2=.;a3=1;a4=1;a5=.;output;
a1=.;a2=1;a3=.;a4=1;a5=.;output;
a1=1;a2=.;a3=1;a4=1;a5=1;output;
run;
So I have a 3x5 matrix. Non missing values for first row are at columns 1, 3
and 4. Now what I want is to assign missing values to all the first row
variables and to A4, in the second row, and to A1, A3 and A4 in the third.
I have written the following code:
data pos;
set prova;
if _n_=1;
array t (5) a1--a5;
p1=0; p2=0; p3=0; p4=0; p5=0;
array p (5) p1--p5;
j=0;
do i=1 to dim(t);
if t(i)=1 then do;
j+1
p(j)=i;
end;
end;
keep p1--p5 j;
run;
data prova1;
merge prova pos;
array a (*) a1--a5;
array p (*) p1--p5;
do i=1 to j;
k=p(i);
put p(i) k j a(k) i;
a(k)=.;
end;
keep a1--a5;
run;
I think you have dozen of better ideas about how to handle this problem (and
any suggestion would be appreciated), however my question is about the error
I get when SAS performs the last loop:
ERROR: Invalid DO loop control information, either the INITIAL or TO
expression is missing or the BY expression is missing, zero, or invalid.
I have no idea how to fix the problem, and you?
Thanks in advance
Gianluca
|