Rick, you may well be better off with a solution that uses looping, but perhaps it could be vectorized in IML like this:
.
start comb(n,k);
fmt = cats('binary' , char(n,2,0) , '.');
y = num ( cshape( putn(0:2##n, fmt), 2##n, n, 1) );
y = y[ loc( y[ , +] = k), ];
y = 1 + shape( mod( loc(y) - 1, n), nrow(y) );
return(y);
finish;

print (comb(5,3));
.
Which works fine for small problems returning the combinations in reverse order. But as the module defines matrices with 2^n rows, unfortunately n = 22 is the maximum possible.

On my machine comb(23,3) gives an out of memory error message, and then declares that a negative number of extra bytes are required!