data list1;
set raw;
year=input(scan(date,1,'-'), best.); /*提取日期中的年,转化为数值型*/
run;
proc sort data=list1;
by id name year; /*按照代码,人名,年 排序*/
run;
data list2;
set list2;
by id name year;
diff_year=dif(year); /*计算上下两个年份的差,判断两个年份是否是连续的*/
if diff_year^=1 or first.name then flg+1; /*如果差不等于1,表示这一年与上一年不是连续,需要重新标记。每个人开始的时候也重新标记。*/
retain flg;
run;
proc sql;
create table final as
select distinct id,date,name
,count(flg) as count /*根据标记的个数,判断连续了几年*/
,min(date) as min /*连续的开始日期*/
,max(date) as max /*连续的结束日期*/
from list2
group by id,name,flg
;
quit;
|