BookmarkSubscribeRSS Feed
ATudhope
Calcite | Level 5

Hi, I hope someone can help me.

I need to enumerate all combinations of 36 from 42 in SAS IML. I have the loops as such:

do i  = 1 to ns-1;

       do j = i+1 to ns;

               do m = j+1 to ns;

                      do n = m+1 to ns;

                           Options[k,1] = i;

                           Options[k,2] = j;

                           Options[k,3] = m;

                           Options[k,4] = n;

                           Options[k,5] = o;

                           k=k+1;

                           end;

                 end;

           end;

end;

Which gives all combinations of 4 from the 42. Is there an easier way for SAS to do this for me rather than adding in so many do loops?

I need this for an allocation problem in which I am looking for the optimal assignment of swimmers to relay teams. 

Thank you

2 REPLIES 2
Rick_SAS
SAS Super FREQ

Use the ALLCOMB function:

 

proc iml;

n=comb(42,36);      /* how many rows will you get? */

print n;

v = allcomb(42,36); /* create n x 36 matrix */

print (v[1:5,]);    /* print first 5 rows */

For details and other examples in IML, see

Generate combinations in SAS - The DO Loop

For DATA step, see

Lexicographic combinations in SAS - The DO Loop

Ksharp
Super User

use function ALLCOMB.

n = 4;
k = 2;
c = allcomb(n, k);
print c;

sas-innovate-white.png

Missed SAS Innovate in Orlando?

Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.

 

Register now

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 2 replies
  • 1391 views
  • 0 likes
  • 3 in conversation