Hey all,
I have a macro that I want to loop through a couple of variables (&CP_ID and &REP) and pass them to the program. It works fine for the 1st iteration but never starts the 2nd etc... What is my code missing? Thanks!
proc sql noprint;
select CP_ID, REP into :CP_ID separated by ' ', :REP separated by ' '
from crep2.crep_attributes;
quit;
%macro crep_rs;
%let i = 1;
%let YrMo = &YrMo;
%let CP_ID = %scan(&CP_ID, &i);
%let REP = %scan(&REP, &i);
%do %until (&CP_ID=);
A BUNCH OF VALID SAS CODE
%let i = %eval(&i+1);
%let CP_ID = %scan(&CP_ID,&i);
%let REP = %scan(&REP,&i);
%end;
%mend;
%crep_rs;
You are changing values for &CP_ID and &REP in the macro with statements:
%let CP_ID = %scan(&CP_ID, &i);
%let REP = %scan(&REP, &i);
create new macro variables:
%let _CP_ID = %scan(&CP_ID, &i);
%let _REP = %scan(&REP, &i);
don't forget to change references eleswhere within the code.
You are changing values for &CP_ID and &REP in the macro with statements:
%let CP_ID = %scan(&CP_ID, &i);
%let REP = %scan(&REP, &i);
create new macro variables:
%let _CP_ID = %scan(&CP_ID, &i);
%let _REP = %scan(&REP, &i);
don't forget to change references eleswhere within the code.
Thanks guys! I really apreciate it. have a good weekend...
Steve
You're right, it won't work. Here's the problem.
Consider this statement before the loop begins:
%let CP_ID = %scan(&CPI_ID, &i);
Before this statement, &CP_ID contained two words. After the statement, it only contains one word. So inside the %do %until loop, when you increment &i to 2, there is no longer a second word for %SCAN to locate within &CP_ID.
The solution is simple ... don't replace the two-word version of &CP_ID. Assign each word to a new macro variable.
Good luck.
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.