作者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
→ liton:這樣應該不可以吧... 08/19 02:06
→ lsshno1:可以跟我說明一下嗎? 謝謝! 08/19 02:07
→ liton:最後一筆資料 3108 200203請問前一季的vol應該是多少? 08/19 02:10
→ liton:此外這樣的方法很危險 不認idno 不認yrmon 08/19 02:10
→ kingbee:感覺這樣會有危險原問題是要認idno符合才抓他上一"季" 08/19 09:31
→ kingbee:不算是他正上方的那筆 也可能在他上方好幾筆 08/19 09:32
→ lsshno1:阿, 我想的太簡單了. 我再回去想想 08/20 00:15