SAS中文论坛
标题:
求助:转换数据形式
[打印本页]
作者:
shiyiming
时间:
2003-12-25 13:43
标题:
求助:转换数据形式
case a b id
1 34 0 33004
1 35 0 33004
1 36 0 33004
1 37 0 33004
2 34 0 33006
2 35 0 33006
2 36 0 33006
2 37 0 33006
3 34 0 33100
3 35 0 33100
3 36 0 33100
3 37 0 33100
如何在sas中转为
case id a34 b34 a35 b35 a36 b36 a37 b37
1 33004 34 0 35 0 36 0 37 0
2 33006 34 0 35 0 36 0 37 0
3 33100 34 0 35 0 36 0 37 0
作者:
shiyiming
时间:
2003-12-25 17:25
不太清楚你的需求,不知道这样能满足吗?
data aaa;
input case a b id;
cards;
1 34 0 33004
1 35 0 33004
1 36 0 33004
1 37 0 33004
2 34 0 33006
2 35 0 33006
2 36 0 33006
2 37 0 33006
3 34 0 33100
3 35 0 33100
3 36 0 33100
3 37 0 33100
;
run;
data bbb;
set aaa;
a1 = 34;
b1 = 0;
a2 = 35;
b2 = 0;
a3 = 36;
b3 = 0;
a4 =37;
b4 = 0;
run;
作者:
shiyiming
时间:
2003-12-25 20:14
此问题虽然简单,但有一定的代表性。就现有问题,有很多简单的实现方法,但扩展到同类问题的更为复杂的情况就有很多的局限性。
以下给出解决此类问题的一般方法,不足之处希望各位多多指点。
data temp;
input case a b id;
datalines;
1 34 0 33004
1 35 0 33004
1 36 0 33004
1 37 0 33004
2 34 0 33006
2 35 0 33006
2 36 0 33006
2 37 0 33006
3 34 0 33100
3 35 0 33100
3 36 0 33100
3 37 0 33100
;
proc sort data=temp;
by case;
run;
data temp1;
set temp;
retain a1 b1 a2 b2 a3 b3 a4 b4;
by case;
array x(0:3) a1-a4;
array y(0:3) b1-b4;
x(mod((_n_-1),4))=a;
y(mod((_n_-1),4))=b;
if not(last.case) then delete;
drop a b;
run;
作者:
shiyiming
时间:
2003-12-29 22:26
标题:
proc transpose
proc transpose data=_temp
out=_temp2;
id a;
run;
作者:
shiyiming
时间:
2004-1-11 00:47
标题:
答: 转换数据形式
那个问题本身问得不好,给出的数据也许不能说明你的问题,但仍有答案.希望你能看懂下面的程序.
data temp;
input case a b id;
cards;
1 34 0 33004
1 35 0 33004
1 36 0 33004
1 37 0 33004
2 34 0 33006
2 35 0 33006
2 36 0 33006
2 37 0 33006
3 34 0 33100
3 35 0 33100
3 36 0 33100
3 37 0 33100
;
run;
%macro fmt;
proc sql noprint;
select left(put(count(*),4.)) into :n
from (select distinct a
from temp);
select distinct a into :a1 - :a&n
from temp;
quit;
data temp1(drop=a b);
retain
%do i=1 %to &n;
a&&a&i b&&a&i
%end; ;
set temp;
by case id;
if first.case then do;
%do i=1 %to &n;
a&&a&i=.; b&&a&i=.;
%end;
end;
%do i=1 %to &n;
if a=&&a&i. then do;
a&&a&i = a;
b&&a&i = b;
end;
%end;
if last.id then output;
run;
%mend;
%fmt;
欢迎光临 SAS中文论坛 (http://mysas.net/forum/)
Powered by Discuz! X3.2