SAS中文论坛

标题: 数据集结转处理 [打印本页]

作者: shiyiming    时间: 2010-10-15 13:26
标题: 数据集结转处理
现有数据集X,形式如下
a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3
1   2   3   1   2   2  3   4  2   6   5   8

现在要把数据集x变成如下的样子
a b c d
1 2 3 1
2 2 3 4
2 6 5 8

请问各位大侠应该如何编程?
作者: shiyiming    时间: 2010-10-15 13:39
标题: Re: 数据集结转处理
data have;
input a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3;
cards;
1 2 3 1 2 2 3 4 2 6 5 8
;

data wanted(keep= a b c d);
    set have ;
    array aa (3) a1-a3;
        array bb (3) b1-b3;
        array cc (3) c1-c3;
        array dd  (3) d1-d3;
        do i=1 to 3;
            a=aa(i); b=bb(i); c=cc(i); d=dd(i);
                output;
        end;
run;
作者: shiyiming    时间: 2010-10-15 13:44
标题: Re: 数据集结转处理
[code:3sx6b3w7]data raw;
    input a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3;
datalines;
1 2 3 1 2 2 3 4 2 6 5 8
11 12 13 11 12 12 13 14 12 16 15 18
;
data out;
    set raw;
    array temp(3,4) _numeric_;
    array out(4) a b c d;
    do i=1 to dim1(temp);
        do j=1 to dim2(temp);
            out(j)=temp(i,j);
        end;
        output;
    end;
    keep a b c d;
run;[/code:3sx6b3w7]
作者: shiyiming    时间: 2010-10-15 13:44
标题: Re: 数据集结转处理
data have;
input a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3;
cards;
1 2 3 1 2 2 3 4 2 6 5 8
;

proc transpose data=have out=aaa;
run;

data aaa;
     set aaa;
         group=substr(_name_,2);
         name=substr(_name_,1,1);
run;

proc transpose data=aaa out=wanted(drop=group _name_);
     by group;
         id name;
run;
作者: shiyiming    时间: 2010-10-15 21:49
标题: Re: 数据集结转处理
[code:1e8jkwam]
data a;
input a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3;
cards;
1 2 3 1 2 2 3 4 2 6 5 8
;
run;
proc iml;
        use a;
        read all var _num_ into A;
        close a;
        B=shape(A,3,4);
        create  result from B[colname={'a' 'b' 'c' 'd'}];
        append from B;
quit;

[/code:1e8jkwam]
作者: shiyiming    时间: 2010-10-21 20:40
标题: Re: 数据集结转处理
[color=#4000FF:3ibqnam5]留个记号,说不定哪天能用得到[/color:3ibqnam5]




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2