Sas 匹配两个滞后一个月的数据集

Sas 匹配两个滞后一个月的数据集,sas,matching,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 ;

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

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; 
我想要的结果是:;(我想将每日最大数据与滞后一个月的每月数据相匹配。)

以下是我到目前为止所做的尝试。 我希望在一个月内具有最大ret值,因此我创建了yrmon,以便为同一个月的每日数据分配相同的yyyymm数据

data a1; set daily;
yrmon=year(date)*100 + month(date);
run;
为了在同一个yrmon组中为同一个permno选择最大值(这里是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数据集yrmon=198601和monthly2数据集yrmon=198602) 这对我来说很难处理,因为如果我只是在yrmon中添加+1,198612+1将不会是198701,我对处理这些问题感到困惑

有人能帮忙吗?

1)信息日期1/日期2 yymmn6。用于读取yyyymm格式的日期
2) 格式化date1/date2 yymmn6。用于查看yyyymm格式的日期
3) intnx(“月”,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

如果有任何疑问,请告诉我。

您的日期是数字格式、数字还是字符?您应该将数据作为示例发布,并将您尝试过的内容作为示例发布。您可以在连接条件中执行此操作,如果这是SAS日期,则使用INTNX()增加月份。我的数据为日期格式(yyyymmdd),但使用数据data3;设置数据2;yrmon=年(日)*100+月(日);跑我得到了我想要的数据,但它变成了数字数据。非常感谢。
date1   |value1 |date2  |value2
200101  |200    |200102 |4000000
200211  |400    |200212 |2000000
200212  |300    |200301 |2000000