Can anybody give me the explanation to why the values nn2 and n3 are retained in this do while statement?
data test; n=0; do while(n<5); put n=; n+1; if n=1 then n2=1; if n=2 then n3=2; output; end; run;
Hello,
The PDV, that is, the vector holding values for the currently processed observation is only cleared
when the interpreter meets the run instruction. Here, you are always processing the same observation that
you modify and output several times. There is no reason for the values of n2 and n3 to be reset.
You have a one pass data step. It never goes back for a second pass becasue there is not input data set. Nothing is retained (in the normal SAS sense). Nothing is reinitialized to missing for the second pass, because there is no second pass.
Are you saying it is because sas keeps n2 and n3 in memory and then keeps priting the same values?
Hello,
The PDV, that is, the vector holding values for the currently processed observation is only cleared
when the interpreter meets the run instruction. Here, you are always processing the same observation that
you modify and output several times. There is no reason for the values of n2 and n3 to be reset.
Maybe this adds a bit to what goes on:
data test; n=0; do while(n<5); put n=; n+1; if n=1 then n2=1; else n2=.; if n=2 then n3=2; else n3=.; output; end; run;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.