SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 684|回复: 3
打印 上一主题 下一主题

求助

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-1-5 10:22:24 | 只看该作者

求助

如何将若干个体多个时间点的多条记录转换为一个个体一条记录。数据格式见下:
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        .        .        .
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
沙发
发表于 2009-1-5 11:25:58 | 只看该作者

Re: 求助

按照时间拆分数据集,改变量名,再merge.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-1-5 14:19:30 | 只看该作者

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]
但我总觉得还有更好的办法。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-1-6 08:27:22 | 只看该作者

Re: 求助

感谢楼上朋友的帮助!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 08:47 , Processed in 0.122292 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表