Here is Macro for Combination to generate all cases by choosing R out of any list with length >= R.
Reference: http://support.sas.com/techsup/technote/ts498.html
%MACRO COMBINATION(R) / PARMBUFF; /* the PARMBUFFf option assigns the invocation parameter list to the macro variable &SYSPBUFF */
%LET M = 2;
%LET LIST = ;
%DO %WHILE (%QSCAN(&SYSPBUFF, &M, %STR(,%))) NE );
%LET ELEMENT = "%QSCAN(&SYSPBUFF, &M, %STR(,%)))";
%IF &M = 2 %THEN %LET LIST = &ELEMENT;
%ELSE %LET LIST = &LIST, &ELEMENT;
%LET M = %EVAL(&M + 1);
%END;
%LET K = %EVAL(&M - 2);
%PUT &LIST;
%PUT &R;
%PUT &K;
DATA COMBINATION;
KEEP V1 - V&R;
ARRAY L{&K} $ 1 (&LIST);
DO i1 = 1 TO DIM(L);
%DO S = 2