创建一个包含SAS中某些列值的所有排列的表

时间:2017-03-20 16:36:58

标签: sas proc-sql

我正在使用SAS Enterprise指南,并希望创建一个包含某些列的所有可能排列的表。这是一个例子:

假设我有三列

apple                   pear                      plum  

0                       good                      blue
1                       middle                    violet
                        bad

我希望我的输出表看起来如下:

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中创建这样的表?

预先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用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;

答案 1 :(得分:1)

PROC SUMMARY

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