使用 SAS 中某些列值的所有排列创建 table
Create a table with all permutations of some column values in SAS
我在 SAS Enterprise guide 中工作,想创建一个 table 包含某些列的所有可能排列。这是一个例子:
假设我有三列
apple pear plum
0 good blue
1 middle violet
bad
我希望我的输出 table 如下所示:
apple pear plum
0 good blue
0 good violet
0 middle blue
0 middle violet
0 bad blue
0 bad violet
1 good blue
1 good violet
1 middle blue
1 middle violet
1 bad blue
1 bad violet
我的实际代码有更多的列和更多不同的值,所以硬编码绝对不是一种选择。如何在 SAS 中创建这样的 table?
在此先感谢您的帮助!
您可以使用 PROC SQL 创建完整的叉积。
proc sql ;
create table want as
select *
from (select distinct apple from have where not missing(apple))
, (select distinct pear from have where not missing(pear))
, (select distinct plum from have where not missing(plum))
;
quit;
过程总结
data testx;
input apple pear $ plum $;
cards;
0 good blue
1 middle violet
1 bad blue
;;;;
run;
proc summary nway completetypes chartype;
class _all_;
output out=testb(drop=_:);
run;
proc print;
run;
Obs apple pear plum
1 0 bad blue
2 0 bad violet
3 0 good blue
4 0 good violet
5 0 middle blue
6 0 middle violet
7 1 bad blue
8 1 bad violet
9 1 good blue
10 1 good violet
11 1 middle blue
12 1 middle violet
我在 SAS Enterprise guide 中工作,想创建一个 table 包含某些列的所有可能排列。这是一个例子:
假设我有三列
apple pear plum
0 good blue
1 middle violet
bad
我希望我的输出 table 如下所示:
apple pear plum
0 good blue
0 good violet
0 middle blue
0 middle violet
0 bad blue
0 bad violet
1 good blue
1 good violet
1 middle blue
1 middle violet
1 bad blue
1 bad violet
我的实际代码有更多的列和更多不同的值,所以硬编码绝对不是一种选择。如何在 SAS 中创建这样的 table?
在此先感谢您的帮助!
您可以使用 PROC SQL 创建完整的叉积。
proc sql ;
create table want as
select *
from (select distinct apple from have where not missing(apple))
, (select distinct pear from have where not missing(pear))
, (select distinct plum from have where not missing(plum))
;
quit;
过程总结
data testx;
input apple pear $ plum $;
cards;
0 good blue
1 middle violet
1 bad blue
;;;;
run;
proc summary nway completetypes chartype;
class _all_;
output out=testb(drop=_:);
run;
proc print;
run;
Obs apple pear plum
1 0 bad blue
2 0 bad violet
3 0 good blue
4 0 good violet
5 0 middle blue
6 0 middle violet
7 1 bad blue
8 1 bad violet
9 1 good blue
10 1 good violet
11 1 middle blue
12 1 middle violet