楼主: 小鳄鱼a
310 6

求助个问题 [推广有奖]

  • 6关注
  • 10粉丝

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

200论坛币
请见附件 ,  再附加一个条件 , 取出每个连续数后的最后一个观测

example1.xlsx

10.55 KB

最佳答案

teqel 查看完整内容

把问题贴出来: 规则是:对于每个id,算出连续出现的时期个数,赋值给con id year qtr con 2 1995 2 3 2 1995 3 3 2 1995 4 3 2 1996 2 2 2 1996 3 2 2 1997 1 1 3 1996 1 6 3 1996 2 6 3 1996 3 6 3 1996 4 6 3 1997 1 6 3 1997 2 6
关键词:最后一个
已有 1 人评分论坛币 收起 理由
teqel + 5 精彩帖子

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

沙发
teqel 发表于 2015-11-18 22:52:08 |只看作者 |坛友微信交流群
把问题贴出来:

规则是:对于每个id,算出连续出现的时期个数,赋值给con

id        year        qtr        con
2        1995        2        3
2        1995        3        3
2        1995        4        3
2        1996        2        2
2        1996        3        2
2        1997        1        1
3        1996        1        6
3        1996        2        6
3        1996        3        6
3        1996        4        6
3        1997        1        6
3        1997        2        6

使用道具

藤椅
mongk2000 发表于 2015-11-18 23:00:41 |只看作者 |坛友微信交流群
你的问题还要赚论坛币,没有人回答

使用道具

板凳
小鳄鱼a 发表于 2015-11-20 15:18:58 |只看作者 |坛友微信交流群
进一步要求了一个条件

使用道具

报纸
Tigflanker 发表于 2015-11-20 17:33:50 |只看作者 |坛友微信交流群
Mark一下~~

使用道具

地板
Tigflanker 发表于 2015-11-20 17:54:31 |只看作者 |坛友微信交流群
  1. data have;
  2.   input id year qtr con;
  3.   cards;
  4. 2 1995 2 3
  5. 2 1995 3 3
  6. 2 1995 4 3
  7. 2 1996 2 2
  8. 2 1996 3 2
  9. 2 1997 1 1
  10. 3 1996 1 6
  11. 3 1996 2 6
  12. 3 1996 3 6
  13. 3 1996 4 6
  14. 3 1997 1 6
  15. 3 1997 2 6
  16. ;run;

  17. data one;
  18.   set have;

  19.   retain temp 0;
  20.   year_x = year * 4 + qtr;

  21.   if lag(year_x) ne year_x - 1 then temp = temp + 1;
  22. run;

  23. data two;
  24.   set one;
  25.   by id temp;

  26.   if last.temp then last = 1;
  27. run;

  28. proc sql;
  29.   create table want(drop = temp year_x) as
  30.   select *, count(*) as con_x from two
  31.   group by id, temp
  32.   ;
  33. quit;
复制代码
方法可用,当然不是最简洁的;如被采纳,请把钱给贴数据出来的那位仁兄。
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
teqel + 5 + 4 + 4 + 4 精彩帖子
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

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

使用道具

7
teqel 发表于 2015-11-20 22:40:01 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-11-20 17:54
方法可用,当然不是最简洁的;如被采纳,请把钱给贴数据出来的那位仁兄。
太客气了,收之有愧。
你的程序很好:
1. year_x = year * 4 + qtr;的效率比我设想的用ymd()转换再用intck方法的效率要高。
2. 最后的remerging很好。
可能有两个问题:
1. data one 没有考虑id的分组,会有一定风险
2. data two好像后面没有用到,是不是没有必要

使用道具

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

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

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

GMT+8, 2024-4-27 03:49