看板 Statistics 關於我們 聯絡資訊
※ 引述《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