作者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