sas:如何在sas中的另一列上添加一列?

时间:2014-05-04 23:20:38

标签: 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;

我的要求是将这个数据集合成单个数据集,例如3个没有空白值的新列。

输出应如下所示:

x y z
1 5 6
4 4 8
1 4 8 
2 3 9
2 6 3

1 个答案:

答案 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度。这允许我按顺序遍历每个数字并将其输出到一个长行,同时为我们希望它在最终输出中的行添加一个数字。最后,我按行号转置以获得最终输出。