Generates all combinations of the indices of n objects taken k at a time in a minimal change order.
Category:  Combinatorial 
is a numeric constant, variable, or expression that specifies the total number of objects.
is a numeric constant, variable, or expression that specifies the number of objects in each combination.
is a numeric variable that contains indices of the objects in the returned combination. Indices are integers between 1 and N inclusive.
Tip  If index1 is missing
or zero, then ALLCOMBI initializes the indices to index1=1 through indexK=K . Otherwise, ALLCOMBI
creates a new combination by removing one index from the combination
and adding another index.

data _null_; array x[5] $3 ('ant' 'bee' 'cat' 'dog' 'ewe'); array c[3] $3; array i[3]; n=dim(x); k=dim(i); i[1]=0; ncomb=comb(n,k); /* The one extra call goes back */ do j=1 to ncomb+1; /* to the first combination. */ call allcombi(n, k, of i[*], add, remove); do h=1 to k; c[h]=x[i[h]]; end; put @4 j= @10 'i= ' i[*] +3 'c= ' c[*] +3 add= remove=; end; run;
j=1 i= 1 2 3 c= ant bee cat add=0 remove=0 j=2 i= 1 3 4 c= ant cat dog add=4 remove=2 j=3 i= 2 3 4 c= bee cat dog add=2 remove=1 j=4 i= 1 2 4 c= ant bee dog add=1 remove=3 j=5 i= 1 4 5 c= ant dog ewe add=5 remove=2 j=6 i= 2 4 5 c= bee dog ewe add=2 remove=1 j=7 i= 3 4 5 c= cat dog ewe add=3 remove=2 j=8 i= 1 3 5 c= ant cat ewe add=1 remove=4 j=9 i= 2 3 5 c= bee cat ewe add=2 remove=1 j=10 i= 1 2 5 c= ant bee ewe add=1 remove=3 j=11 i= 1 2 3 c= ant bee cat add=3 remove=5