The "n" below is not changing at the start of each new ID. Can macro variables like this be overwritten with each new instance of a by variable?
data new ;
set have ;
by id ;
retain n ;
if first.id = 1 then do;
call symputx('lastlot',trunclot) ;
n=&lastlot. ;
end;
DO i = 1 TO n ;
etc.
Why would it change? When SAS compiles the data step it will use the current value of the macro variable. So if it was defined as 5 before SAS started to compile the data step then the code would look like:
%let lastlot=5 ;
data new ;
set have ;
by id ;
retain n ;
if first.id = 1 then do;
call symputx('lastlot',trunclot) ;
n=5 ;
end;
DO i = 1 TO n ;
...
end;
run;
It looks like you want to do:
data new ;
set have ;
by id ;
retain n ;
if first.id then n = trunclot ;
DO i = 1 TO n ;
...
end;
run;
Yes the second is what I want. I have a complicated piece of code to work out so I was over complicating this simple task. Thanks for your help.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.