作者orange6433 (肥羊)
看板Statistics
標題[程式] SAS 同ID中設定最小值為reference
時間Sun Oct 27 23:43:00 2013
------------------------------------------------------------------------
[軟體程式類別]:SAS
[程式問題]:資料整理
[軟體熟悉度]:
中(3個月到1年)
[問題敘述]:
1. 如何在同ID中將他的最小值設為reference
資料形式:
NO ID checkyear value
1 A001 2008 3 <---A001中2008年最早
2 A001 2009 5
3 A001 2011 8
4 A002 2012 5 <---A002中2012年最早
5 A003 2005 1 <---A003中2005年最早
6 A003 2009 7
7 A003 2010 8
8 A003 2012 10
因此想將NO1.4.5令其t=0,請問該如何用SAS code把這些值選出來?
2. 如何轉置多個VAR至同一列上?
原資料形式:
NO ID checkyear aa bb
1 A001 2008 3 200
2 A001 2009 5 230
3 A001 2010 8 240
4 A002 2010 5 250
5 A003 2008 1 270
6 A003 2010 8 179
希望得到的格式:
ID 2008_aa 2008_bb 2009_aa 2009_bb 2010_aa 2010_bb
A001 3 200 5 230 8 240
A002 5 250
A003 1 270 8 179
如果用
PROC TRANSPOSE DATA=data OUT=data_1(DROP=_name_);
VAR aa bb;
BY id;
ID checkyear;RUN;
會變成
ID aa bb
A001 3
A001 200
...
請問要如何得到想要的格式呢?
謝謝大家!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.102.6
1F:→ orange6433:第一題我用了IF FIRST.work_no THEN... 10/28 00:49
2F:→ orange6433:第一題已解決,謝謝大家 10/28 00:49
3F:→ BugEater:問題2大概如下: 10/28 11:26
4F:→ BugEater:Data xxx;set xxx; 10/28 11:26
5F:→ BugEater:retain 2008_aa 2008_bb 2009_aa 2009_bb 2010_aa 10/28 11:27
6F:→ BugEater:2010_bb; 10/28 11:28
7F:→ BugEater:by ID; 10/28 11:28
8F:→ BugEater:if checkyear=2008 then do;2008_aa=aa;2008_bb=bb;end; 10/28 11:30
9F:→ BugEater:else if checkyear=2009 then do;2009_aa=aa;2009_bb=bb; 10/28 11:31
10F:→ BugEater:end; 10/28 11:31
11F:→ BugEater:else if checkyear=2010 then do;2010_aa=aa;2010_bb=bb; 10/28 11:32
12F:→ BugEater:end; 10/28 11:32
13F:→ BugEater:if last.ID then output; 10/28 11:33
14F:→ BugEater:run; 10/28 11:33
15F:→ BugEater:請在by ID;後面加上這幾句: 10/28 11:35
16F:→ BugEater:if first.ID then do; 2008_aa=.; 2008_bb=.; ...;end; 10/28 11:36