楼主: akalius
876 3

[实际应用] 请教求连续时间 [推广有奖]

  • 10关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

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

200论坛币

求一个name连续在一个factory呆过的时间,即breadth 。   注意,如果同一个name,在同一个factory有间隔,那么则另算。

factoryyearqtrnamebreadth
a

1998

1

小明

3

a

1998

2

小明

3

a

1998

3

小明

3

a

1999

3

小明

4

a

1999

4

小明

4

a

2000

1

小明

4

a

2000

2

小明

4

b

2000

3

小红

3

b

2000

4

小红

3

b

2001

1

小红

3

b

2000

2

小李

2

b

2000

3

小李

2

b

2003

3

小刘

3

b

2003

4

小刘

3

b

2004

1

小刘

3


关键词:连续时间 factory factor Facto Bread factory
沙发
Strive、 发表于 2017-5-8 14:57:12 |只看作者 |坛友微信交流群
akalius 发表于 2017-5-9 08:08
这个不行啊,比如拿第一个name   分别是 1 2 3 1 2 3 4  而不是我所要的  3 3 3 4 4 4 4
  1. data temp3;
  2.         set temp2;
  3.         if breadth = 1 then group + 1;
  4. run;
  5. proc sql;
  6.         create table max as
  7.                 select group,max(breadth) as maxbr from temp3
  8.                 group by group;
  9. quit;
  10. data final(drop = group maxbr);
  11.         merge temp3 max;
  12.         by group;
  13.         breadth = maxbr;
  14. run;
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

使用道具

藤椅
Strive、 发表于 2017-5-8 15:56:09 |只看作者 |坛友微信交流群
  1. data temp;
  2.         input factory $ year qtr name $;
  3.         cards;
  4. a 1998 1 小明
  5. a 1998 2 小明
  6. a 1998 3 小明
  7. a 1999 3 小明
  8. a 1999 4 小明
  9. a 2000 1 小明
  10. a 2000 2 小明
  11. b 2000 3 小红
  12. b 2000 4 小红
  13. b 2001 1 小红
  14. b 2000 2 小李
  15. b 2000 3 小李
  16. b 2003 3 小刘
  17. b 2003 4 小刘
  18. b 2004 1 小刘
  19. ;
  20. run;
  21. proc sort data = temp out = temp1;
  22.         by factory name year qtr;
  23. run;
  24. data temp2(drop = a b);
  25.         set temp1;
  26.         retain breadth;
  27.         by factory name year qtr;
  28.         a = lag(year);
  29.         b = lag(qtr);
  30.         if first.name | first.factory then breadth = 1;
  31.         else if year = a & qtr = b+1 then breadth + 1;
  32.         else if year = a+1 & qtr = 1 & b = 4 then breadth + 1;
  33.         else breadth = 1;
  34. run;
复制代码

使用道具

板凳
akalius 学生认证  发表于 2017-5-9 08:08:59 |只看作者 |坛友微信交流群
Strive、 发表于 2017-5-8 15:56
这个不行啊,比如拿第一个name   分别是 1 2 3 1 2 3 4  而不是我所要的  3 3 3 4 4 4 4

使用道具

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

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

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

GMT+8, 2024-5-2 05:53