匹配两个数据集,一个月滞后

时间:2017-04-21 18:14:05

标签: sas matching

我正在尝试将一个月内的最大每日数据与每月数据进行匹配。

data daily;
input permno $ date ret;
datalines;
1000 19860101 88
1000 19860102 90
1000 19860201 70
1000 19860202 55
1001 19860201 97 
1001 19860202 74
1001 19860203 79
1002 19860301 55 
1002 19860302 100
1002 19860301 10
;
run; 

data monthly;
input permno $ date ret;
datalines;
1000 19860131 1
1000 19860228 2
1000 19860331 5
1001 19860331 3 
1002 19860430 4
;
run; 

我想要的结果如下; (我希望将每日最大数据与一个月滞后的月度数据相匹配。)

1000 19860102 90 1000 19860228 2
1000 19860201 70 1000 19860331 5
1001 19860201 97 1001 19860331 3
1002 19860302 100 1002 19860430 4

以下是我到目前为止所尝试的内容。 我希望在一个月内获得最大的ret值,所以我创建了yrmon来为同一个月的每日数据分配相同的yyyymm数据

data a1; set daily;
yrmon=year(date)*100 + month(date);
run;

为了选择同一个permno的同一个yrmon组中的最大值(此处为ret),我使用了下面的代码

proc means data=a1 noprint;
class permno yrmon ;
var ret;
output out= a2 max=maxret;
run;

然而,它只让我permno yrmon ret数据,留下原始日期数据。

data a3;
set a2;
new=intnx('month',yrmon,1);
format date new yymmn6.;
run;

但由于yrmon不再是日期格式,因此无效。

提前谢谢你。

您好

我试图通过permno(同一家公司)匹配两个不同的集合,但是有一个月滞后(例如,daily9 dataset yrmon = 198601和monthly2 dataset yrmon = 198602) 对我来说很难处理,因为如果我只是在yrmon中添加+1,那么198612 +1将不会是198701而且我对处理这些问题感到困惑。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

1) informat date1 / date2 yymmn6。用于以yyyymm格式读取日期
2)格式date1 / date2 yymmn6。用于以yyyymm格式查看日期
3) intnx(" months",b.date2,-1)用于加入滞后1个月的日期

data data1;
input date1 value1;
informat date1 yymmn6.;
format date1 yymmn6.;
cards;
200101 200
200212 300
200211 400
;
run;

data data2;
input date2 value2;
informat date2 yymmn6.;
format date2 yymmn6.;
cards;
200101 3000000
200102 4000000
200301 2000000
200212 2000000
;
run;


proc sql;
create table result as 
select a.*,b.date2,b.value2 from
data1 a
left join
data2 b
on a.date1 = intnx("months",b.date2,-1);
quit;  

我的输出:

date1   |value1 |date2  |value2
200101  |200    |200102 |4000000
200211  |400    |200212 |2000000
200212  |300    |200301 |2000000

如有任何疑问,请与我联系。