I have a macro which i need run for each combination of 2 lists. For example list1 = old young , list2 = small medium large. I want the macro to run for each combination of the 2 lists (i.e. a Cartesian product).
Is there a macro that someone has created which i can wrap around my inner macro, and loop it for each combination of the two lists.
I have seen macros like %ITERLISTI which loop nicely for each value of a single list, but i need to extend it to two lists.
Thanks
The basic structure here assumes that default delimiters of the %SCAN function can be used:
%macro two_lists (list1=, list2=);
%local i j next_i next_j;
%do i=1 %to %sysfunc(countw(&list1));
%let next_i = %scan(&list1, &i);
%do j=1 %to %sysfunc(countw(&list2));
%let next_j = %scan(&list2, &j);
%*** DO something here like call a macro;
%end;
%end;
%mend two_lists;
Good luck.
You would need to put more details about what you are trying to do. You could for instance do:
data _null_;
do i="old young","small medium large";
call execute('%your_macro (the_list='||strip(i)||');');
end;
run;
The basic structure here assumes that default delimiters of the %SCAN function can be used:
%macro two_lists (list1=, list2=);
%local i j next_i next_j;
%do i=1 %to %sysfunc(countw(&list1));
%let next_i = %scan(&list1, &i);
%do j=1 %to %sysfunc(countw(&list2));
%let next_j = %scan(&list2, &j);
%*** DO something here like call a macro;
%end;
%end;
%mend two_lists;
Good luck.
Works perfectly, thanks
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.