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