Re: [程式] SAS 取上一「季」資料
如果按照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
→
08/19 02:06, , 1F
08/19 02:06, 1F
→
08/19 02:07, , 2F
08/19 02:07, 2F
→
08/19 02:10, , 3F
08/19 02:10, 3F
→
08/19 02:10, , 4F
08/19 02:10, 4F
→
08/19 09:31, , 5F
08/19 09:31, 5F
→
08/19 09:32, , 6F
08/19 09:32, 6F
→
08/20 00:15, , 7F
08/20 00:15, 7F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 5 篇):