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?