我有一个数据看起来像这样的数据
/ ********************************************** ************** /
YYMM部门
1701农业
1611零售业
1501 CRE
/ ***** /
还有另一个数据集看起来像这样/ *************
Customer_ID YYMM
XXXX 1702
XXXX 1701
XXXX 1612
XXXX 1611
XXXX 1610
XXXX 1510
XXXX 1509
/ ******************* ******* /
所以基本上我想在YYMM的基础上仅仅将这两个数据集合并,然后在扇区中合并。但由于之前的数据只有很少的YYMM我想要做的就是复制扇区,直到从第一个数据集中遇到新的yymm。 因此从1701年到1612年的行业应该是农业,1611年到1502年的行业是零售业,1501之前的任何一个月都必须是CRE。
你能告诉我怎么做吗?
答案 0 :(得分:1)
这是一个基于SQL的解决方案(类似于pinegulf提出的解决方案)。
让我们创建测试数据集:
data T01;
length Sector $20;
infile cards;
input YYMM_to Sector;
cards;
1701 Agriculture
1611 Retail
1501 CRE
;
run;
data T02;
length Customer_id $10;
infile cards;
input Customer_ID YYMM;
cards;
AXXX 1702
BXXX 1701
CXXX 1612
DXXX 1611
EXXX 1610
FXXX 1510
GXXX 1509
;
run;
我们可以将“YYMM_from”列添加到T01:
proc sort data=T01;
by YYMM_to;
run;
data T01;
set T01;
by YYMM_to;
YYMM_from=lag(YYMM_to);
if _N_=1 then YYMM_from=0;
run;
proc print data=T01;
run;
我们得到:
Obs Sector YYMM_to YYMM_from
------------------------------------------
1 CRE 1501 0
2 Retail 1611 1501
3 Agriculture 1701 1611
然后加入:
proc sql;
create table T03 as
select a.*, b.Sector
from T02 a LEFT JOIN T01 b
on YYMM_from<a.YYMM<=YYMM_to;
quit;
proc print data=T03;
quit;
我们得到:
Obs Customer_id YYMM Sector
-----------------------------------------
1 DXXX 1611 Retail
2 EXXX 1610 Retail
3 FXXX 1510 Retail
4 GXXX 1509 Retail
5 BXXX 1701 Agriculture
6 CXXX 1612 Agriculture
7 AXXX 1702
答案 1 :(得分:0)
这是一个proc格式的解决方案。由于您的数据采用yymm格式,因此您可以在不进行数据转换的情况下将限制设置为逻辑,但我对实际日期感觉更舒服。
data Begin;
input Customer_ID $ YYMM $;
cards;
XXXX 1702
YYYY 1701
ZZZZ 1612
OOOO 1611
AAAA 1610
FFFF 1510
DDDD 1509
; run;
data with_date;
set begin;
date = mdy(substr(yymm,3,2), 1, substr(yymm,1,2) );
run;
proc format; /*Didn't check the bins too much. Adjust as needed.*/
value sector
low - '1jan2015'd ='lows'
'1jan2015'd < - '1nov2016'd = 'CRE'
'1nov2016'd < - '1jan2017'd = 'Retail'
'1jan2017'd < - high = 'Agriculture'
;
run;
data wanted;
set with_date;
format date sector.;
run;
有关proc格式的更多信息,请参阅http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002473474.htm