Re: [程式] SAS 取上一「季」資料
這個問題其實不難
重要的是對時間做一個轉換
不管你是用時間格式或是數字格式 都用一樣的技巧
data a;
set a;
m=mod(yrmon)-1;
/*月份變為 0~11月*/
q=int(m/4)+1;
/*季=m除4 再取整數 所以 0~3變成第一季*/
q=int(yrmon/100)*100+q;
run;
proc sort data=a out=time(keep=q) nodupkey;by q;
run;
proc sort data=a;by q;
run;
data time;
set time;
t=_n_;
run;
data a;
merge a time;by q;
run;
接下來 在簡單合併就可以處理跨季問題
因為 妳的季度 已經重新油1編到m
2一定是1的下一季
就不用擔心所謂的跨年度問題
當兵放假後 看到有趣的問題也是挺好玩的
※ 引述《lsshno1 (朝右邊鋒邁進)》之銘言:
: 如果按照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: 61.231.228.153
→
08/21 02:07, , 1F
08/21 02:07, 1F
200101~200103--->200101--->1
200104~200106--->200102--->2
200107~200109--->200103--->3
200110~200112--->200104--->4
200201~200203--->200201--->5
200204~200206--->200202--->6
基本上財務資料這樣處理就可以了
我的程式處理就是這樣做
liton大不用擔心
這幾年 我整理財務資料 都用這招
保證不會出錯
如果擔心個別公司的財務年度怕有缺
可以這樣寫
data time;
do y=1963 to 2010;
do qtr=1 to 4;
q=y*100+qtr;
output;
end;
end;
run;
data time;
set time;
t=_n_;
run;
或者直接利用大盤的時間資料做編碼
之後再將這個依照季度編好的 t變項和其他資料合併
以上技巧 我都寫在目前正在做最後修正的書中
以後如果出版(說不定變成自己的教學講義) 請大家不吝指教
因為目前使用的不是自己的電腦
沒辦法把程式寫得很完整
所以僅作時間年度的變項轉換做提示
可能沒有把這個程式的主要功能寫清楚
不過 這樣處理以後 dif(t)=1 表示 這個季資料跟前一季差一季
先求出落後期資料後
再去跟月資料做合併
是我個人處理資料的順序
大家可以參考一下 這樣的步驟
※ 編輯: tew 來自: 61.216.249.77 (08/21 08:35)
→
08/21 17:09, , 2F
08/21 17:09, 2F
→
08/23 20:51, , 3F
08/23 20:51, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 5 篇):