Suppose I have a SAS dataset name_list
which contains a unique list of names
name
A
B
C
D
E
F
Some code which could generate the above example dataset:
data name_list;
name = "A";
output;
name = "B";
output;
name = "C";
output;
name = "D";
output;
name = "E";
output;
name = "F";
output;
run;
I am looking to create a dataset which contains a list of all unique possible combinations of some number of names.
%macro create_name_combination(names = , choose_num = );
data temp;
set &names.;
INDEX = _N_;
run;
proc sql noprint;
select
quit;
proc sql noprint;
select max(INDEX)
into: Name_Count
from temp;
quit;
%if &choose_num <= &Name_Count. %then %do;
/* This is where I am stuck - I need some help writing code which will generate a dataset which outputs a list of all combinations of choose_num names, without repetition, from names. */
%end;
%mend;
%create_name_combination(names = name_list, choose_num = 3);
I am looking for a dataset output looking something like the below
want
:
Combination
A , B , C
A , B , D
A , B , E
A , B , F
B , C , D
B , C , E
B , C , F
C , D , E
C , D , F
...
Can somebody please assist?
How about
proc transpose data = name_list out = name_list1 prefix = name;
var name;
run;
%let k = 3;
data want;
set name_list1;
array name{*} $ name:;
n = dim(name);
k = &k.;
ncomb = comb(n, k);
do j = 1 to ncomb+1;
rc = allcomb(j, k, of name[*]);
output;
end;
keep name1 - name&k.;
run;