我有一个数据集,看起来像这样:SAS - 从广角转换数据集高大使用数组
OBS S1 S2 S3
before 10 15 13
after 5 7 8
我试图使用数组在SAS将其转换为看起来像这样的表:
SUBJ BEFORE AFTER
1 10 5
2 15 7
3 13 8
我还是SAS的新手。我想,我需要建立一个具有形式的2x3阵列:
10 15 13
5 7 8
然后循环,但并分配值。
这是我迄今为止,但它仅捕获原始表的第一行:
DATA tall;
input obs $ score1-score3;
array rowscores(3) score1-score3;
array allscores(2,3) _TEMPORARY_;
do i=1 to 2;
do j=1 to 3;
allscores(i,j) = rowscores(j);
end;
end;
do k=1 to 3;
subj = k;
before = allscores(1,k);
after = allscores(2,k);
output;
end;
keep subj before after;
DATALINES;
before 10 15 13
after 5 7 8
;
RUN;
我缺少什么?谢谢你的帮助!
SAS一次只处理一行,而数组只是变量的快捷方式。这个解决方案取决于你知道数据的结构,在这一点你也可以输出新的数据集。在这种情况下,使用PROC TRANSPOSE而不是数组方法会更有效。 – Reeza