Solved
Contributor
Posts: 26

# Creating combinations of items in the list

Hello,

I have a list of variables:

data tab;

input var \$;

datalines;

A

B

C

;

I need to create unique combinations of these variables:

 A A B A B C A C B B C C

Accepted Solutions
Solution
‎08-28-2015 08:37 AM
Super User
Posts: 10,787

## Re: Creating combinations of items in the list

The simplest way is using proc means . Otherwise if you consider about efficient, then using GRAYCODE().

### Code: Program

`data tab;input var \$;datalines;ABC;run;proc transpose data=tab out=temp(drop=_name_); var var;run;proc summary data=temp;class col:;output out=want(where=(_type_ ne 0));run;`

Xia Keshan

All Replies
Super User
Posts: 9,599

## Re: Creating combinations of items in the list

Hi,

Something like:

data tab;

input var \$;

datalines;

A

B

C

;

run;

proc transpose data=tab out=ttab;

var var;

run;

data want (keep=var1-var3);

set ttab;

length var1 var2 var3 \$1;

array col{3};

array var{3};

do i=1 to 3;

var1=col{i};

output;

do j=i+1 to 3;

var{j}=col{j};

output;

end;

var1=""; var2=""; var3="";

end;

run;

Contributor
Posts: 26

## Re: Creating combinations of items in the list

Hi,

thank you for quick response.

I used your code but one combination is missing (A C)

Super User
Posts: 9,599

## Re: Creating combinations of items in the list

Got a meeting now, will try to look later.  I had got to this, needs sorting of the characters and then nodupkey sort:

data tab;

infile datalines missover;

input var \$;

datalines;

A

B

C

;

run;

proc sql;

create table WANT as

select  A.VAR as VAR1,

B.VAR as VAR2,

C.VAR as VAR3

from    TAB A

full join TAB B

on      A.VAR ne B.VAR

full join TAB C

on      A.VAR ne C.VAR

and     B.VAR ne C.VAR

union all

select  VAR as VAR1,

"" as VAR2,

"" as VAR3

from    TAB ;

quit;

Solution
‎08-28-2015 08:37 AM
Super User
Posts: 10,787

## Re: Creating combinations of items in the list

The simplest way is using proc means . Otherwise if you consider about efficient, then using GRAYCODE().

### Code: Program

`data tab;input var \$;datalines;ABC;run;proc transpose data=tab out=temp(drop=_name_); var var;run;proc summary data=temp;class col:;output out=want(where=(_type_ ne 0));run;`

Xia Keshan

🔒 This topic is solved and locked.