作者west1996 (焦了六年變脆了)
看板Statistics
標題Re: [程式] 不好意思,又有sas資料比對的問題想麻뜠…
時間Thu Jun 9 00:17:17 2011
※ 引述《joyce618 (joy)》之銘言:
: ------------------------------------------------------------------------
: [軟體程式類別]:
: SAS
: [程式問題]:
: 資料處理
: [軟體熟悉度]:
: 低(1~3個月)
: [問題敘述]:
: 真的很不好意思,因為做sas作業常常好不容易解決這個問題
: 另外一個問題要出現了
: 還是要麻煩各位大人的幫忙了
: 我想要比對兩個檔案
: 一個檔案我把格式整理成
: code name year quarterend yr month date
: XXXX 甲公司 2010 3 2010 4 15
: XXXX 甲公司 2010 6 2010 7 17
: XXXX 甲公司 2010 9 2010 10 16
: XXXX 乙公司 2010 3 2010 4 13
: XXXX 乙公司 2010 6 2010 7 18
: XXXX 乙公司 2010 9 2010 10 19
: ......
: 這個檔案中,yr month date表示財務報表公告日,而year quarterend則代表公告
: 的財報數字是屬於哪一個季度的。
: 另外一個檔案格式則為
: code name yr month date returnrate
: XXXX 甲公司 2010 1 1 aaa
: XXXX 甲公司 2010 1 2 bbb
: XXXX 甲公司 2010 1 3 ccc
: XXXX 甲公司 2010 1 4 ddd
: .....
: XXXX 乙公司 2010 1 1 aaa
: XXXX 乙公司 2010 1 2 bbb
: XXXX 乙公司 2010 1 3 ccc
: XXXX 乙公司 2010 1 3 ccc
: .....
: 第二份檔案內容是每天的報酬
: 現在我想要先合併這兩份資料,然後以財務報表公告日為準,抓出前後20筆的資料,共41
: 筆資料進行加總。
: 我原來是打算比對財報公告日後,設一個變數seq,利用seq+1;,找出財務報表公告日往
: 後21筆資料,但是財務報表公告日往前20筆資料,我就不知道該如何抓出來了…
: 不好意思,一直有問題麻煩大家,非常謝謝各位大人的幫忙^^
: -----------------------------------------------------------------------------
這個問題之前好像有問過?
以不用sql或macro語法的前提之下
可以這樣做
假設第一份檔案叫a 第二份檔案叫b
第一步
先把a和b都sort by公司代號 相關的年月日
第二步
給排序好的b檔案中每一筆資料一個流水序號叫serial
第三步
使用下面的程式碼
data final;
retain totalreturn;
set a(rename=(code=a_code name=a_name year=a_year quarterend=a_quarterend
yr=a_yr month=a_month date=a_date));
totalreturn=0;
do until(flag=1);
set b(rename=(code=b_code name=b_name yr=b_yr month=b_month
date=b_date serial=b_serial));
if b_yr=a_yr and b_month=a_month and b_date=a_date then
do until(flag=1);
set b;
if b_serial-20 <=serial<=b_serial+20 then do;
totalreturn=totalreturn+returnrate;
(1)
end;
if serial=b_serial+20 then do;
flag=1;
(2)
end;
else flag=0;
end;
end;
keep a_year a_quarterend code name yr month date returnrate totalreturn;
run;
注意!!
1.如果把
output; 這幾個字放在
(1) 的地方,則final會把相關的每季前後共41筆資料
都保留下來同時計算加總(不過加總只有每一季相關資料的的最後一筆才是對的)
2.如果把
output; 這幾個字放在
(2) 的地方,則final裡面只會有a檔案中每家公司每一
季的加總數據
我不確定你是要抽出那41筆資料呢,還是只要有一個加總數字就好,所以只好這樣表示
另外,因為不能用sql和macro,所以這個寫法落落長有點繞讓人有點不滿意,不知道有
沒有人有更好的想法@@
大概是這樣,你再研究看看吧^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.243.15.195
※ 編輯: west1996 來自: 111.243.15.195 (06/09 00:18)
推 joyce618:謝謝大人的回答,之前有問過以季末為準計算前後20筆資料 06/09 22:29
→ joyce618:的問題,但是因為沒有學到大人提供的這種方式,我是用很 06/09 22:30
→ joyce618:很笨的方式進行累加,這次終於學到一種好方法了,謝謝^^ 06/09 22:30