SAS中文论坛

标题: 求助 [打印本页]

作者: shiyiming    时间: 2009-1-5 10:22
标题: 求助
如何将若干个体多个时间点的多条记录转换为一个个体一条记录。数据格式见下:
id        time        a        b        c
1        1        4        5        6
1        2        4        5        6
1        3        6        5        7
2        1        3        4        5
2        2        4        5        6
2        3        2        3        5
3        1        4        5        5
3        2        .        6        6
id为个体编号,time是三个时间点,a,b,c是记录的三个变量,转换成下面的格式:
id         a1        b1        c1        a2        b2        c2        a3        b3        c3
1        4        5        6        4        5        6        6        5        7
2        3        4        5        4        5        6        2        3        5
3        4        5        5        .        6        6        .        .        .
作者: Qiong    时间: 2009-1-5 11:25
标题: Re: 求助
按照时间拆分数据集,改变量名,再merge.
作者: shiyiming    时间: 2009-1-5 14:19
标题: Re: 求助
我还真没有好办法,
(1)要是知道time的取值是1-3
[code:1pizemjr]
data horizontal(drop = a b c time);
        array aa[3] a1-a3;
        array bb[3] b1-b3;
        array cc[3] c1-c3;
        do until(last.id);
                set vertical;
                by id;
                aa[time]=a;
                bb[time]=b;
                cc[time]=c;
        end;
run;
[/code:1pizemjr]
(2)要是不知道time的取值范围,
[code:1pizemjr]
%macro transpose(dsn=vertical, out=horizontal, varlist=a b c, byvar=id, idvar=time);
%let i = 1;
%let var = %scan(&varlist, &i);
%do %while(&var ne);
        proc transpose data=&dsn out=&var(drop=_name_) prefix=&var;
                id &idvar;
                by &byvar;
                var &var;
        %let i = %eval(&i+1);
        %let var = %scan(&varlist, &i);
%end;
data &out;
        merge &varlist;
        by &byvar;
run;
%mend transpose;

%transpose;
[/code:1pizemjr]
但我总觉得还有更好的办法。
作者: shiyiming    时间: 2009-1-6 08:27
标题: Re: 求助
感谢楼上朋友的帮助!




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