推 wlsherica:謝謝您的建議(筆記) 08/18 22:12
※ 引述《wlsherica (CrevetteStudio)》之銘言:
: [軟體程式類別]:SAS
: [程式問題]:資料處理
: [軟體熟悉度]:高(1年以上)
: [問題敘述]:
: 有個合併的問題想請教各位,原始資料是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去作合併成為下面的檔案
: 其中要取B檔案中同Indo的觀測值的「上一個月份資料」的vol變項,
: 如下(也就是檔案B中我標記黃色的觀測值)
: C檔
: Indo yrmon price vol
: 1101 200104 8.2 23
: 3108 200202 5.8 15
: --------------------------
: 我想了很久,在想怎麼抓到上一筆資料
: 目前還沒有頭緒,懇請板上的前輩們指教,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.227.112
※ 編輯: x1234567 來自: 61.229.227.112 (08/18 22:13)
*****************************************;
** 既然是處理日期的問題 **;
** 建議將欄位改成日期格式(例每月1號) **;
** 搭配使用日期函數 intnx 做運算 **;
*****************************************;
data a;
input Indo yrmon price;
numdate=yrmon*100+1;
chardate=put(numdate,z8.);
format sasdate lastmon lastqtr_yymm yymmdd10.;
sasdate=input(chardate,yymmdd8.);
lastmon=intnx('month',sasdate,-1); /*上個月同天*/
lastqtr_yymm=intnx('qtr',sasdate,-1);/*上一季同天*/
qtr=put(sasdate,yyq6.);/*當季*/
last_qtr=put(lastqtr_yymm,yyq6.);/*上一季*/
datalines;
1101 200104 8.2
3108 200201 5.8
;
run;
data b;
input Indo yrmon vol;
format sasdate yymmdd10.;
sasdate=input((put(yrmon*100+1,z8.)),yymmdd8.);
qtr=put(sasdate,yyq6.);
datalines;
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;
proc sort data=a ;by Indo lastmon;run;
proc sort data=b ;by Indo sasdate;run;
data c;
merge
a(in=a1 keep=Indo lastmon sasdate price)
b(keep=Indo sasdate vol rename=(sasdate=lastmon))
;
by Indo lastmon;
if a1;
run;