Re: [程式] SAS 取上一「季」資料
看板Statistics作者wlsherica (CrevetteStudio)時間15年前 (2010/08/18 10:40)推噓1(1推 0噓 7→)留言8則, 3人參與討論串1/5 (看更多)
※ 引述《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
→
08/17 23:35,
08/17 23:35
推
08/18 01:09,
08/18 01:09
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.110.97
※ 編輯: wlsherica 來自: 163.25.110.97 (08/18 10:43)
推
08/18 11:34, , 1F
08/18 11:34, 1F
→
08/18 11:35, , 2F
08/18 11:35, 2F
→
08/18 11:52, , 3F
08/18 11:52, 3F
→
08/18 18:35, , 4F
08/18 18:35, 4F
→
08/18 18:37, , 5F
08/18 18:37, 5F
→
08/18 18:38, , 6F
08/18 18:38, 6F
→
08/18 18:39, , 7F
08/18 18:39, 7F
→
08/18 18:40, , 8F
08/18 18:40, 8F
---------------------
我整理+做點微調提供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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 5 篇):