data exp;
input y a b c;
cards;
1 2 3 6
4 5 . 8
1 . . 8
2 4 6 9
. 4 6 3
;
run;
我的要求是将这个数据集合成单个数据集,例如3个没有空白值的新列。
输出应如下所示:
x y z
1 5 6
4 4 8
1 4 8
2 3 9
2 6 3
答案 0 :(得分:0)
以下是我提出的建议:
data _null_;
set exp (obs=0) nobs=nobs;
call symputx("nobs", nobs);
run;
proc transpose data=exp out=exp2;
run;
data exp3(keep=row final);
set exp2;
array col{&nobs};
do i = 1 to &nobs;
if col[i] ne . then do;
row+1;
if row = &nobs+1 then row = 1;
final = col[i];
output;
end;
end;
run;
proc sort data=exp3;
by row;
run;
proc transpose data = exp3 out=exp4 (drop=_name_ row
rename=(col1=x col2=y col3=z col4=zz));
by row;
run;
首先,我计算了起始数据集中的观察结果并将其存储到宏变量中(如果您知道它始终为5,则可以跳过此步骤并用5替换& nobs)。然后我调换数据集,使其旋转90度。这允许我按顺序遍历每个数字并将其输出到一个长行,同时为我们希望它在最终输出中的行添加一个数字。最后,我按行号转置以获得最终输出。