- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi everyone,
I would like to generate all possible combinations of three variables each with values 0 or 1 e.g. following using a data step
000
001
010
100
011
101
110
111
what will be a good way to do it?
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
So maybe something like this.
data want;
array p[2] _temporary_ (0 1);
array x[3];
do _n_=0 to dim(p)**dim(x)-1;
do i=1 to dim(x);
x(i)=p(1+mod(int(_n_/(dim(p)**(i-1))),dim(p))) ;
end;
output;
end;
drop i ;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Check out the ALLCOMB function in SAS. Designed just for such a thing!
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thanks, it's a nice function. But the problem is I have n=2 (0 or 1) but k=3 which doesn't work for ALLCOMB.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
A not terribly bright solution
data _null_; do i='0','1'; do j='0','1'; do k='0','1'; comb=cats(i,j,k); put comb=; end; end; end; run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
These combinations are just a sequence of binary numbers. You don't need any data to do that:
data want;
do i=0 to 7;
result = put(i, binary3.);
output;
end;
drop i;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thanks, this is a nice little trick. I will have to have 3 different columns for all combinations of 0 or 1.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
For three it is simple.
data want;
do a=0,1; do b=0,1; do c=0,1;
output;
end; end; end;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
P = (0 1) and x = (x1 x2 x3) where each of x takes values 0 or 1, how would you do it?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Not sure what you are talking about at this point. If you have four variables named P, X1 , X2, and X3 then you could build all combinations using similar DO loops. If you have two tables and want to join them to produce all possible combinations then PROC SQL does a good job.
proc sql ;
create table want as
select *
from P, X
;
quit;
If you really have two vectors and what to manipulate them then use PROC IML. You can do lots of matrix manipulation using a language designed to work with matrices.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Data a;
Array p[2] (0 1);
Array x[3];
I would like the data step operations to produce 8 rows with the unique combinations.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
So maybe something like this.
data want;
array p[2] _temporary_ (0 1);
array x[3];
do _n_=0 to dim(p)**dim(x)-1;
do i=1 to dim(x);
x(i)=p(1+mod(int(_n_/(dim(p)**(i-1))),dim(p))) ;
end;
output;
end;
drop i ;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
data a;
array p[2] _temporary_;
array x[3];
do i=1 to dim(p)**dim(x);
result = put(i, binary3.);
do j=1 to 3;
x[j]=substr(result,j,1);
end;
output;
end;
drop i j;
run;