- data tmp;
- input name$ year qtr institution$ sex$;
- cards;
- 张三 2013 1 微软 男
- 张三 2013 3 微软 男
- 张三 2013 3 脸书 男
- 张三 2014 3 脸书 男
- 张三 2015 4 脸书 男
- 张三 2015 3 华为 男
- 张三 2015 4 华为 男
- 李四 2015 1 联合利华 女
- 李四 2015 3 联合利华 女
- 李四 2015 3 保洁 女
- 王五 2014 4 华为 男
- ;
- run;
- proc sort data=tmp;
- by name institution year qtr;
- run;
- data tmp2;
- set tmp;
- retain min_year;
- retain min_qtr;
- retain max_year;
- retain max_qtr;
- by name institution;
- if first.institution then
- do ;
- min_year=year;
- min_qtr=qtr;
- end;
- if last.institution then
- do;
- max_year=year;
- max_qtr=qtr;
- end;
- if last.institution then output;
- run;
- proc sort data=tmp2;
- by name min_year min_qtr;
- run;
- data tmp3;
- set tmp2;
- lag_year=lag1(max_year);
- lag_qtr=lag1(max_qtr);
- run;
- data tmp4(keep=name) ;
- set tmp3;
- retain flg;
- retain tot;
- by name;
- if first.name then
- do;
- flg=1;
- tot=1;
- end;
- else
- do;
- tot=tot+1;
- if (lag_year<=min_year and lag_qtr<=min_qtr) or lag_year<min_year then flg=flg+1;
- end;
- if last.name then
- do;
- if tot=flg then output;
- end;
- run;
- proc sql noprint;
- create table result as select * from tmp,tmp4 where tmp.name=tmp4.name;
- quit;
- proc print data=result;
- run;