Statistical programming, matrix languages, and more

Help with enumerating/listing all combinations

Reply
N/A
Posts: 1

Help with enumerating/listing all combinations

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

SAS Super FREQ
Posts: 3,225

Re: Help with enumerating/listing all combinations

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

Grand Advisor
Posts: 9,320

Re: Help with enumerating/listing all combinations

use function ALLCOMB.

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

Post a Question
Discussion Stats
  • 2 replies
  • 264 views
  • 0 likes
  • 3 in conversation