请选择 进入手机版 | 继续访问电脑版
楼主: 小财喵
4086 14

[数据管理求助] 怎么计算相同字段连续出现的次数? [推广有奖]

  • 2关注
  • 0粉丝

硕士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
524 个
通用积分
3.2621
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
608 点
帖子
78
精华
0
在线时间
175 小时
注册时间
2016-2-28
最后登录
2023-2-20

小财喵 发表于 2019-5-19 16:16:53 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. [CODE]
  2. * Example generated by -dataex-. To install: ssc install dataex
  3. clear
  4. input long id int year str59 sjs
  5. 1 1992 "曹明达"         
  6. 1 1993 "李国志,袁凤仪"
  7. 1 1994 "刘祥青,李国志"
  8. 1 1995 "刘祥青,李国志"
  9. 1 1996 "李国志,赖文建"
  10. 1 1997 "陈勤慧,侯立勋"
  11. 1 1998 "侯立勋,陈勤慧"
  12. 1 1999 "赖文建,侯立勋"
  13. 1 2000 "张克理,梁烽"   
  14. 1 2001 "侯立勋,陈爱容"
  15. 1 2002 "侯立勋,陈爱容"
  16. 1 2003 "侯立勋,陈爱容"
  17. 1 2004 "杨克晶,陈爱容"
  18. 1 2005 "龙英,杨克晶"   
  19. 1 2006 "龙英,侯立勋"   
  20. 1 2007 "张小东,许旭明"
  21. 1 2008 "张小东,许旭明"
  22. 1 2009 "张小东,许旭明"
  23. 1 2010 "张小东,昌华"   
  24. 1 2011 "张小东,昌华"   
  25. 1 2012 "昌华,周道君"   
  26. 1 2013 "姚文平,朱丽平"
  27. 1 2014 "姚文平,朱丽平"
  28. 1 2015 "姚文平,朱丽平"
  29. 1 2016 "姚文平,甘莉莉"
  30. 1 2017 "姚文平,甘莉莉"
  31. 2 1992 "王珍亭,候德彰"
  32. 2 1993 "候德彰,王珍亭"
  33. 2 1994 "付刚峰,侯德彰"
  34. 2 1995 "王珍亭,侯德彰"
  35. 2 1996 "许丽周,李莉"   
  36. 2 1997 "许丽周,李莉"   
  37. 2 1998 "许丽周,李莉"   
  38. 2 1999 "许丽周,李莉"   
  39. 2 2000 "许丽周,李莉"   
  40. 2 2001 "赵奇,金乃雯"   
  41. 2 2002 "赵奇,罗科"      
  42. 2 2003 "罗科,金乃雯"   
  43. 2 2004 "罗科,彭菁"      
  44. 2 2005 "李婉薇,彭菁"   
  45. 2 2006 "李婉薇,彭菁"   
  46. 2 2007 ""                  
  47. 2 2008 "彭菁,杨辰"      
  48. 2 2009 "李嘉琪,李婉薇"
  49. 2 2010 "李婉薇,李灼光"
  50. 2 2011 "李婉薇,温华新"
  51. 2 2012 "李婉薇,温华新"
  52. 2 2013 "李婉薇,温华新"
  53. 2 2014 "王晓梅,罗永辉"
  54. 2 2015 "王晓梅,罗永辉"
  55. end
复制代码


[/code]


想要得到的结果:知道每个公司每年人名连续出现的次数。
举例:id为2 的1992年 "王珍亭“,”候德彰"各出现1次;
1993年"王珍亭“,”候德彰"各连续出现2次;
1994年,"付刚峰“出现1次,”侯德彰"连续出现3次;
1995年"王珍亭“出现1次,而”侯德彰”连续出现4次


请问这个怎么用stata实现?谢谢!!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:generated generate install example Stall

已有 1 人评分经验 收起 理由
nuomin + 80 鼓励积极发帖讨论

总评分: 经验 + 80   查看全部评分

黃河泉 在职认证  发表于 2019-5-19 16:33:24 |显示全部楼层 |坛友微信交流群
感谢用 dataex 提供资料,这个问题很有趣,我可能做不出来 (没太多时间思考),你若能:1. 将名字改成英文 (不同字母即可),2. 说明你最后要的格式 (可能是什么样变量,我现在很难想像),我帮你到美国 Stata forum 问问 (你英文够好的话,可以自己去问)。
已有 1 人评分经验 收起 理由
nuomin + 100 热心帮助其他会员

总评分: 经验 + 100   查看全部评分

使用道具

小财喵 发表于 2019-5-19 16:58:11 |显示全部楼层 |坛友微信交流群
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input byte id int year str3 name byte(number1 number2)
  4. 2 1992 "a,b" 1 1
  5. 2 1993 "b,a" 2 2
  6. 2 1994 "c,b" 1 3
  7. 2 1995 "a,b" 1 4
  8. 2 1996 "d,e" 1 1
  9. 2 1997 "d,e" 2 2
  10. 2 1998 "d,e" 3 3
  11. 2 1999 "d,e" 4 4
  12. 2 2000 "d,e" 5 5
  13. 2 2001 "f,g" 1 1
  14. 2 2002 "f,h" 2 1
  15. 2 2003 "h,g" 2 1
  16. 2 2004 "h,i" 3 1
  17. 2 2005 "j,i" 1 2
  18. 2 2006 "j,i" 2 3
  19. 2 2007 ""    . .
  20. 2 2008 "i,l" 1 1
  21. 2 2009 "m,j" 1 1
  22. 2 2010 "j,n" 2 1
  23. 2 2011 "j,o" 3 1
  24. 2 2012 "j,o" 4 2
  25. 2 2013 "j,o" 5 3
  26. 2 2014 "p,q" 1 1
  27. 2 2015 "p,q" 2 2
  28. end
复制代码
想要得到的结果:id为2的样本,每年不同人名连续出现的次数,即要的结果如number1 和number2所示,number1是name 里第一个字母连续出现的次数,number2是name里第二个字母连续出现的次数。
举例:id为2的样本
1992年,a出现1次,b出现1次,即number1=1,number2 =1
1993年,b连续出现1次,a连续出现1次,即numer1=2,number2=2
1994年,c出现1次,b连续出现1次,即numer1=1,number2=3
1995年,a出现1次,b连续出现1次,即numer1=1,number2=4

如果有年份name是空值,则number1 和number2也为空,name出现的名字重新计算,比如:
2004年,h出现1次,i出现1次,即numer1=1,number2=1
2005年,j出现1次,i连续出现1次,即numer1=1,number2=2
2006年,j连续出现1次,i连续出现1次,即numer1=2,number2=3
2007年,name空值,则numer1和number2为空
2008年,i出现1次,l出现1次,则number1=1,number2=1.

谢谢!

使用道具

小财喵 发表于 2019-5-19 16:58:36 |显示全部楼层 |坛友微信交流群
黃河泉 发表于 2019-5-19 16:33
感谢用 dataex 提供资料,这个问题很有趣,我可能做不出来 (没太多时间思考),你若能:1. 将名字改成英文 ( ...
谢谢老师提供帮助,已更新问题~

使用道具

黃河泉 在职认证  发表于 2019-5-19 17:10:30 |显示全部楼层 |坛友微信交流群
小财喵 发表于 2019-5-19 16:58
谢谢老师提供帮助,已更新问题~
我帮你问了,看看有无人回答!

使用道具

黃河泉 在职认证  发表于 2019-5-19 19:00:29 |显示全部楼层 |坛友微信交流群
小财喵 发表于 2019-5-19 16:58
想要得到的结果:id为2的样本,每年不同人名连续出现的次数,即要的结果如number1 和number2所示,number1是 ...
请试试 (感谢 William Lisowski)
  1. split name, parse(,) generate(nm)
  2. reshape long nm, i(id year) j(j)
  3. generate num = .
  4. bysort id nm (year): replace num = 1 if !missing(nm)
  5. bysort id nm (year): replace num = num[_n-1]+1 if year==year[_n-1]+1
  6. drop nm
  7. reshape wide num, i(id year) j(j)
  8. sort id year
  9. assert num1==number1 & num2==number2
  10. list, clean noobs
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
nuomin + 100 + 20 热心帮助其他会员
小财喵 + 1 + 1 + 1 精彩帖子

总评分: 经验 + 100  论坛币 + 20  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

小财喵 发表于 2019-5-19 20:18:43 |显示全部楼层 |坛友微信交流群
黃河泉 发表于 2019-5-19 19:00
请试试 (感谢 William Lisowski)
特别感谢!虽然没看懂代码的逻辑,但是替代回去,结果是正确的!!谢谢老师!谢谢William Lisowski!

使用道具

小财喵 发表于 2019-5-19 20:46:37 |显示全部楼层 |坛友微信交流群
黃河泉 发表于 2019-5-19 19:00
请试试 (感谢 William Lisowski)
老师,能追问一个新的问题吗?在这个问题底下,怎么把name对应num1和num2中取值最大的那个字段输出?谢谢!

使用道具

黃河泉 在职认证  发表于 2019-5-20 06:40:13 |显示全部楼层 |坛友微信交流群
小财喵 发表于 2019-5-19 20:46
老师,能追问一个新的问题吗?在这个问题底下,怎么把name对应num1和num2中取值最大的那个字段输出?谢谢 ...
最后加上
  1. egen wanted = rowmax(num1 num2)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
小财喵 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

tianwk 发表于 2019-5-20 11:51:15 |显示全部楼层 |坛友微信交流群
thanks for sharing

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

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

GMT+8, 2024-3-29 13:36