作者x1234567 (莫急莫荒莫害怕)
站内Statistics
标题Re: [程式] SAS 取上一笔资料
时间Wed Aug 18 22:10:13 2010
*****************************************;
** 既然是处理日期的问题 **;
** 建议将栏位改成日期格式(例每月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;
※ 引述《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)
1F:推 wlsherica:谢谢您的建议(笔记) 08/18 22:12