Get the combinations with do loop

Accepted Solution Solved
Reply
Contributor
Posts: 26
Accepted Solution

Get the combinations with do loop

Say we have 4 letters--"A", "B","C","D". Now I want to get the combinations, the result should be 16 ELEMENTS.

AA
AB
AC
AD
BA
BB
BC
BD
CA
CB
CC
CD
DA
DB
DC
DD

Thank you.

 

 

 


Accepted Solutions
Solution
‎03-14-2017 08:22 PM
Esteemed Advisor
Posts: 7,294

Re: Get the combinations with do loop

Not sure what you're asking for. Is it something like:

 

data want (keep=first: second:);
  array first(16) $;
  array second(16) $;
  do i = 'A', 'B', 'C', 'D';
    do j = 'A', 'B', 'C', 'D';
      cell+1;
      first(cell)=i;
      second(cell)=j ;
    end;
  end;
run;  

Art, CEO, AnalystFinder.com

 

View solution in original post


All Replies
Super Contributor
Posts: 284

Re: Get the combinations with do loop

data want;
do i = 'A', 'B', 'C', 'D';
do j = 'A', 'B', 'C', 'D';
var = cats(i, j);
output;
end;
end;
run;
Contributor
Posts: 26

Re: Get the combinations with do loop

Hi,

I want the result can be an arrary format, so I can retrieve the first element and second item etc.

So for example, for AA, it is an array. The first item of the array is A, the second item of array is A also.

Super Contributor
Posts: 284

Re: Get the combinations with do loop

I'm really sorry, but I don't understand. The code I provided gives you the results you specified. The i and j give you the two separate portions, if that's what you mean. 

Solution
‎03-14-2017 08:22 PM
Esteemed Advisor
Posts: 7,294

Re: Get the combinations with do loop

Not sure what you're asking for. Is it something like:

 

data want (keep=first: second:);
  array first(16) $;
  array second(16) $;
  do i = 'A', 'B', 'C', 'D';
    do j = 'A', 'B', 'C', 'D';
      cell+1;
      first(cell)=i;
      second(cell)=j ;
    end;
  end;
run;  

Art, CEO, AnalystFinder.com

 

Grand Advisor
Posts: 10,211

Re: Get the combinations with do loop


sas_newbie3 wrote:

Hi,

I want the result can be an arrary format, so I can retrieve the first element and second item etc.

So for example, for AA, it is an array. The first item of the array is A, the second item of array is A also.


Then go back to your orginal post and change the "example" data to what you actually want. Your example implied one record per two character concatenated string.

 

And your description would result in 32 values not 16:

A,A,A,B,A,C,A,D,B,A,B,B,B,C,B,D,C,A,C,B,C,C,C,D,D,A,D,B,D,C,D,D

 

data junk;
   array x {32} $1.;
   counter=0;
   do i= 'A','B','C','D';
      do j= 'A','B','C','D';
         counter+1;
         x[counter]=i ;
         counter+1;
         x[counter]=j ;
      end;
   end;
   output;
   drop counter i j;
run;
☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 130 views
  • 5 likes
  • 4 in conversation