0

我在使用 SAS 将矩阵转换为三列时遇到了麻烦。
这是使用 Excel 执行此操作的参考,您可以看到Convert matrix to 3-column table ('reverse pivot', 'unpivot', 'flatten', 'normalize')

我一直在谷歌,发现http://support.sas.com/resources/papers/proceedings13/319-2013.pdf做反向(<=)。
但我从未见过有人在做(=>)。

我知道我可以使用一些函数来获取所有行/列名称,方法是使用 SAS/SQL 和 SAS/IML 为每个成对单元格分配值。
但是,我想寻找任何可以帮助我更清晰易懂地完成它的功能。
请注意,SAS 是我被允许使用的唯一语言...抱歉,我不能使用 Excel 来执行此操作...

4

1 回答 1

0

您可以为此 使用数组:

情况 1:当列名按特定顺序排列时:

data have;
input  col1 $ p1 $ p2 $ p3 $ p4 $;
cards;
f1  x   .   .   .
f2  x   x   .   .
f3  .   x   .   x
f4  .   x   x   .
;
run;


data want;
retain col1 col2 values;
 set have;
 array p[4] $1. p1-p4;
 do i=1 to 4;
 values = p(i);
 col2 = compress("p"||i);
 output;
 end;
 keep col1 col2 values ;
run; 

情况 2:当列名不是特定顺序时:

data have1;
input  col1 $ peter $ john $ brian $ mary $;
cards;
f1  x   .   .   .
f2  x   x   .   .
f3  .   x   .   x
f4  .   x   x   .
;
run;



data want1;
retain col1 col2 values;
 set have1;
 array p[4] $5. peter--mary;
 do i=1 to 4;
 values = p(i);
 col2 = VNAME(P(i));
 output;
 end;
 keep col1 col2 values ;
run; 

如有任何疑问,请告诉我。

于 2017-11-27T08:58:24.157 回答