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