10-23-2015 12:01 PM
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;
10-23-2015 12:07 PM
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.
10-23-2015 12:07 PM
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.
10-23-2015 02:13 PM
Thanks guys! I really apreciate it. have a good weekend...
Steve
10-23-2015 12:10 PM
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.
Need further help from the community? Please ask a new question.