楼主: akalius
856 3

根据规则删除对应观测b [推广有奖]

  • 10关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
4168 个
通用积分
9.1543
学术水平
4 点
热心指数
6 点
信用等级
6 点
经验
7832 点
帖子
261
精华
0
在线时间
605 小时
注册时间
2009-7-22
最后登录
2024-4-9

楼主
akalius 学生认证  发表于 2017-3-20 19:25:20 |只看作者 |坛友微信交流群|倒序 |AI写论文
200论坛币


删除规则为  如果同样一个name,如果在不同institution出现的时间有交叉,时间初始与结束点重合不算,那么则将该name对应的观测删除掉。如张三,脸书对应的最后日期为2015 4 ,而华为最开始对应时间是2015 3 存在交叉  , 所以删掉张三。


nameyearqtrinstitutionsex
张三

2013

1

微软
张三

2013

3

微软
张三

2013

3

脸书
张三

2014

3

脸书
张三

2015

4

脸书
张三

2015

3

华为
张三

2015

4

华为
李四

2015

1

联合利华
李四

2015

3

联合利华
李四

2015

3

保洁
王五

2014

4

华为

关键词:Institutions Institution tions name 联合利华 联合利华 华为 微软 2014 保洁
沙发
liujunhzau524 发表于 2017-3-20 19:25:21 |只看作者 |坛友微信交流群
  1. data tmp;
  2. input name$  year qtr institution$ sex$;
  3. cards;
  4. 张三 2013 1        微软         男
  5. 张三 2013 3        微软         男
  6. 张三 2013 3        脸书         男
  7. 张三 2014 3        脸书         男
  8. 张三 2015 4        脸书         男
  9. 张三 2015 3        华为         男
  10. 张三 2015 4        华为         男
  11. 李四 2015 1        联合利华        女
  12. 李四 2015 3        联合利华        女
  13. 李四 2015 3        保洁         女
  14. 王五 2014 4        华为         男
  15. ;
  16. run;

  17. proc sort data=tmp;
  18. by name institution year qtr;
  19. run;
  20. data tmp2;
  21. set tmp;
  22. retain min_year;
  23. retain min_qtr;
  24. retain max_year;
  25. retain max_qtr;
  26. by name institution;
  27. if first.institution then
  28. do ;
  29. min_year=year;
  30. min_qtr=qtr;
  31. end;
  32. if last.institution then
  33. do;
  34.   max_year=year;
  35.   max_qtr=qtr;
  36. end;
  37. if last.institution then output;
  38. run;
  39. proc sort data=tmp2;
  40. by name min_year min_qtr;
  41. run;
  42. data tmp3;
  43. set tmp2;
  44. lag_year=lag1(max_year);
  45. lag_qtr=lag1(max_qtr);
  46. run;
  47. data tmp4(keep=name) ;
  48. set tmp3;
  49. retain flg;
  50. retain tot;
  51. by name;
  52. if first.name then
  53. do;
  54.   flg=1;
  55.   tot=1;
  56. end;
  57. else
  58. do;
  59.   tot=tot+1;
  60.   if (lag_year<=min_year and lag_qtr<=min_qtr) or lag_year<min_year  then flg=flg+1;
  61. end;
  62. if last.name then
  63. do;
  64.   if tot=flg then output;
  65. end;
  66. run;
  67. proc sql noprint;
  68. create table result as select * from tmp,tmp4 where tmp.name=tmp4.name;
  69. quit;
  70. proc print data=result;
  71. run;
复制代码

使用道具

藤椅
wang1839 在职认证  发表于 2017-3-20 21:47:52 |只看作者 |坛友微信交流群
要生成每个INSTITUTION 的START DATE & ENDDATE,做成 张三  2013-1-1   2013-9-30 微软这种数据格式,如果按照START DATE SORT,用START DATE和上一个 INSTIUTION 的 ENDDATE比较,如果STDATE>=LAG(ENDDATE),则保留,否则可以设置FLAG=1,把FLAG=1的NAME(nodupkey)跳出来merge回去,最后跳出非FLAG=1的记录就可以
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
akalius + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

板凳
akalius 学生认证  发表于 2017-3-22 10:11:34 |只看作者 |坛友微信交流群
wang1839 发表于 2017-3-20 21:47
要生成每个INSTITUTION 的START DATE & ENDDATE,做成 张三  2013-1-1   2013-9-30 微软这种数据格式,如果按 ...
谢谢    很巧妙

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 07:31