作者lsshno1 (朝右边锋迈进)
看板Statistics
标题Re: [程式] SAS 取上一「季」资料
时间Thu Aug 19 01:42:49 2010
如果按照Kinbee前辈叙述的话, 下面方法请您参考
/*data a*/
data a;
input idno yrmon price;
cards;
1101 200104 8.2
3018 200201 5.8
;
run;
/*data b*/
data b;
input idno yrmon vol;
cards;
1101 200103 23
3108 200103 16
1101 200106 20
3108 200106 18
1101 200109 22
3108 200109 19
1101 200112 25
3108 200112 15
1101 200203 28
3108 200203 14
;
run;
/*排序及合并 (我没有用date format 不过是一样的)*/
proc sort data=a;
by yrmon;
run;
proc sort data=b;
by yrmon;
run;
data c;
set a b;
by yrmon;
run;
proc print data=c;
run;
/*新的资料 c*/
data c;
set c;
/*制造出lag一期的资料*/
vol_lag=lag(vol);
/*如果vol为missing的话, 则用lag一期的资料取代*/
if vol=. then vol=vol_lag;
drop vol_lag;
run;
结果(没有drop vol_lag时)
idno yrmon price vol vol_lag
1 1101 200103 . 23 .
2 3108 200103 . 16 23
3 1101 200104 8.2 16 16
4 1101 200106 . 20 16
5 3108 200106 . 18 20
6 1101 200109 . 22 18
7 3108 200109 . 19 22
8 1101 200112 . 25 19
9 3108 200112 . 15 25
10 3018 200201 5.8 15 15
11 1101 200203 . 28 15
12 3108 200203 . 14 28
这应该可以, 不过资料的开头要注意一下.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.86.244
1F:→ liton:这样应该不可以吧... 08/19 02:06
2F:→ lsshno1:可以跟我说明一下吗? 谢谢! 08/19 02:07
3F:→ liton:最後一笔资料 3108 200203请问前一季的vol应该是多少? 08/19 02:10
4F:→ liton:此外这样的方法很危险 不认idno 不认yrmon 08/19 02:10
5F:→ kingbee:感觉这样会有危险原问题是要认idno符合才抓他上一"季" 08/19 09:31
6F:→ kingbee:不算是他正上方的那笔 也可能在他上方好几笔 08/19 09:32
7F:→ lsshno1:阿, 我想的太简单了. 我再回去想想 08/20 00:15