sas:如何在sas中将一列添加到另一列上? 我的要求是把这个数据集变成单个数据集,用3个新列,而不是空白值。< /P>
输出应如下所示:sas:如何在sas中将一列添加到另一列上? 我的要求是把这个数据集变成单个数据集,用3个新列,而不是空白值。< /P>,sas,Sas,输出应如下所示: 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; 以下是我的想法: x y z 1 5 6 4 4 8 1 4 8 2 3 9 2 6 3 首先,我计算了起始数据集中的观察值,并将其存储到宏变量中(如果知道它始终为5,则可以跳过此步骤,并将&nobs替换为5)。然后我转换了数据集,使其旋转90度。这样,我就可以按顺序遍历每个数字,并将其输出到一个长行中,同时在最终输
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;
以下是我的想法:
x y z
1 5 6
4 4 8
1 4 8
2 3 9
2 6 3
首先,我计算了起始数据集中的观察值,并将其存储到宏变量中(如果知道它始终为5,则可以跳过此步骤,并将&nobs替换为5)。然后我转换了数据集,使其旋转90度。这样,我就可以按顺序遍历每个数字,并将其输出到一个长行中,同时在最终输出中为希望它出现的行添加一个数字。最后,我按行号进行了转置,以获得最终输出。如果数据实际上不在乎有多少列,或者每个条目最终位于哪一列,那么为什么需要将数据拆分为列呢?您还想对数据做些什么吗?最终数据集与初始数据集有什么关系?是的,我想进一步处理这样形成的数据集。@joe它与以前的数据集没有关系这是在一列中给出数据,但是如何将数据拆分为所需的列数最后一步将数据转换为所需的列数。上面代码给出的最终数据集是“exp4”,带有变量x、y、z和zz。如果这不是你想要的,请告诉我。
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;