|
|
板凳

楼主 |
发表于 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]
但我总觉得还有更好的办法。 |
|