For looping over a list of characters, a data null step works fine:
data _null_;
do r="AB", "DE", "XY";
put r=;
end;
run;
But I'm curious if this be replicated in a macro? When I try with the code below, it expects a %to to be paired with the %do:
%macro char_loop;
%do r="AB", "DE", "XY";
%put &r=;
%end;
%mend char_loop;
For anyone interested, there were a couple threads that touch on this topic:
https://communities.sas.com/message/42866#42866
https://communities.sas.com/message/120110#120110
%DO loop is not as nearly robust as its datastep counterpart. No, I don't think you can use the same style of looping.
Haikuo
I've been coming to the same conclusion. If it a macro countapart is possible (and it likely is), the code would likely be painful.
Scan through a list..as mentioned in your links.
And bump it up on the ideas list or SASware ballot as well
https://communities.sas.com/ideas/1084
%let i=1;
%do %while (%scan(&varlist, &i, " ") ^=%str());
%let var=%scan(&varlist, &i, " ");
%let i=%eval(&i+1);
%end;
Thanks Reeza. Good idea to add this to the ballot.
I did see that macro solution, but it certainly is not pretty.
Haha, I see I already had my vote added to that idea.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.