看板 Statistics 關於我們 聯絡資訊
※ 引述《wlsherica (CrevetteStudio)》之銘言: 有個合併的問題想請教各位,原始資料是A檔與B檔 共同變項為Indo與yrmon(及西元年與該月份) 現在多跑出一個問題是抓季資料 A檔 Indo yrmon price 1101 200104 8.2 3108 200201 5.8 B檔(季資料) Indo yrmon vol 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 希望以Indo變項當作index去作合併成以A檔為base的檔案 由於B檔是季資料,不是每一個月都有vol的值可以出來 如果是3,6,9,12的月份, 就當月合併自然OK 若是其它月份, 就必須去抓前一季的值 1101 200104 是四月, 所以得去抓200103的vol 23 3108 200202 是二月, 所以得去抓200112的 vol 15 C檔 Indo yrmon price vol 1101 200104 8.2 23 3108 200202 5.8 15 -------------------------- 原本想法是用時間函數中的QTR函數,不過QTR內要擺date。 後來想那就設每個yrmon給一個該季的值(若為1,2,3則為第一季,以此類推) 但是遇到12月份的值就會抓錯季 所以也要同時考慮年份吧..~"~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.86.133.37
ASD332:PROC SQL 會不會比較快一點? 08/17 23:35
MmmRrrrX:把B檔的yrmon刪掉在merge by Indo (?) 08/18 01:09
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.110.97 ※ 編輯: wlsherica 來自: 163.25.110.97 (08/18 10:43)
imaltar:意思是說B檔的月份一定是3 6 9 12囉 一樣抓當月 08/18 11:34
imaltar:不同抓前一季 是這樣嗎 08/18 11:35
wlsherica:回i大,沒錯,我還在測試中+_+ 08/18 11:52
MmmRrrrX:若照這樣說明,上面應該是可以做到你所要的 08/18 18:35
MmmRrrrX:如果AB年月相同 temp=0,抓到的就是相同的那個月 08/18 18:37
MmmRrrrX:如果年月不同,抓到的會是B中離A最近的那個月份 08/18 18:38
MmmRrrrX:如果indo數不會太多,把倒數第二行drop a temp 刪掉 08/18 18:39
MmmRrrrX:比對看看有沒有出錯 08/18 18:40
--------------------- 我整理+做點微調提供data step的做法之一 /*原始資料a與b進行sort排序*/ proc sort data=b; by indo; run; proc sort data=a; by indo; run; /*a與b檔案利用indo變項合併*/ data e; merge a b(rename=(yrmon=a));/*其中檔案b的變項yrmon名稱改成a*/ by indo; temp=yrmon-a;/*兩個變項相減成為變項temp*/ if temp>0;/*如果temp>0時output出來*/ run; /*對新檔案e作sort排序*/ proc sort data=e; by indo temp; run; /*取每個indo變項的第一筆資料*/ data c; set e; by indo; if first.indo then output; run; 完成 ASD大的SQL做法也很棒,謝謝提供意見與參與討論的版友 m(__ __)m ※ 編輯: wlsherica 來自: 163.25.110.97 (08/19 09:07)