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
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.