作者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)
推 wlsherica:太好了正好在學SQL, 感謝您 09/03 23:34
→ wlsherica:類似把原始變成兩個,挑選後再join一起 09/03 23:38
推 maumausam:看來我真的需要好好學SQL,太多東西要學,太感謝了 09/04 00:34