作者socery (keep going!)
看板Statistics
标题Re: [程式] SAS 直转横 proc transpose
时间Fri Sep 3 23:18:47 2010
※ 引述《wlsherica (CrevetteStudio)》之铭言:
: [软体程式类别]:SAS
: [程式问题]:资料处理
: [软体熟悉度]:高(1年以上)
: [问题叙述]:
: 原始资料↓其中ID有重复出现
: ID NO IN_date OUT_date START
: 10011576 0032 2009/9/26 2009/10/8 .
: 10019076 0053 2009/7/7 2009/7/18 .
: 10034358 0004 2009/9/22 2009/9/22 2009/10/20
: 10034358 0005 2009/9/22 2009/11/10 2009/10/21
: 现在想将资料转成横向
: ID NO1 NO2 IN_date1 IN_date2 OUT_date1 OUT_date2 START1 START2
: 10011576 0032 . 2009/9/26 . 2009/10/8 . . .
: 10019076 0053 . 2009/7/7 . 2009/7/18 . . .
: 10034358 0004 0005 2009/9/22 2009/9/22 2009/9/22 2009/11/10 2009/10/20 2009/10/21
: 每个ID只有一行,因此资料就算是往右边展开,没有对应到的就是missing
: 我想array应该可以作,因此想试试看proc transpose
: 因为变数很多(包含no, in_date, out_date start),目前还没有成功orz
: (我只有成功处理单一变数orz)
: 因此想请教板上的前辈们,谢谢
参考一下
资料
data first;format in_date $20. out_date $20. start $20.;
input id no $ in_date $ out_date $ start $;
cards;
10011576 0032 2009/9/26 2009/10/8 .
10019076 0053 2009/7/7 2009/7/18 .
10034358 0004 2009/9/22 2009/9/22 2009/10/20
10034358 0005 2009/9/22 2009/11/10 2009/10/21
;
run;
做法:
proc sort data=first out=second nodupkey;by id;run;
proc sql;
create table third as
select b.id as id,b.no as no1,a.no as no2,
b.in_date as in_date1,a.in_date as in_date2,
b.out_date as out_date1,a.out_date as out_date2,
b.start as start1,a.start as start2
from first a right join second b
on (a.id=b.id)and ((a.no^=b.no)|(a.in_date^=b.in_date)|
(a.out_date^=b.out_date)|(a.start^=b.start))
order by id;
quit;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.117.0.131
※ 编辑: socery 来自: 59.117.0.131 (09/03 23:25)
1F:推 wlsherica:太好了正好在学SQL, 感谢您 09/03 23:34
2F:→ wlsherica:类似把原始变成两个,挑选後再join一起 09/03 23:38
3F:推 maumausam:看来我真的需要好好学SQL,太多东西要学,太感谢了 09/04 00:34