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 %TO &R;
DO i&S = i%EVAL(&S - 1) + 1 TO DIM(L);
%END;
%DO S = 1 %TO &R;
V&S = L{i&S};
%END;
OUTPUT;
%DO S = 1 %TO &R;
END;
%END;
RUN;
%MEND COMBINATION;
%COMBINATION(4,A,B,C,D,E,F,H,K,L,M,N,P,R,S,T,U,V,W,X,Y,Z);