楼主: On_Air
1548 3

[数据管理求助] 请教前辈,如何在一列中按照特定的规律填补缺漏值? [推广有奖]

  • 6关注
  • 6粉丝

已卖:1223份资源

副教授

50%

还不是VIP/贵宾

-

威望
0
论坛币
7861 个
通用积分
72.3722
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3549 点
帖子
250
精华
0
在线时间
1423 小时
注册时间
2013-9-27
最后登录
2025-12-23

楼主
On_Air 学生认证  发表于 2017-9-1 20:12:48 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input byte NAME int YEAR byte ZHI
  4. 1 2008 1
  5. 1 2009 2
  6. 1 2010 .
  7. 1 2011 1
  8. 1 2012 .
  9. 2 2008 2
  10. 2 2009 .
  11. 2 2010 .
  12. 2 2011 1
  13. 2 2012 .
  14. 3 2008 .
  15. 3 2009 .
  16. 3 2010 2
  17. 3 2011 .
  18. 3 2012 .
  19. 4 2008 .
  20. 4 2009 1
  21. 4 2010 1
  22. 4 2011 .
  23. 4 2012 .
  24. end
复制代码

数据如上,需要按照NAME分组填补 ZHI的缺漏。
规律是:1.若该组中出现数字2,则2后面的的缺漏值都用2替代
             2.若该组中只有数字2,则该组的缺漏值都是2(如第三组)
            3.若该组没有数字2,不用填补缺漏值(第四组)
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input byte NAME int YEAR float ZHI
  4. 1 2008  1
  5. 1 2009  2
  6. 1 2010 .2
  7. 1 2011  1
  8. 1 2012  .
  9. 2 2008  2
  10. 2 2009  2
  11. 2 2010  2
  12. 2 2011  1
  13. 2 2012  .
  14. 3 2008  2
  15. 3 2009  2
  16. 3 2010  2
  17. 3 2011  2
  18. 3 2012  2
  19. 4 2008  .
  20. 4 2009  1
  21. 4 2010  1
  22. 4 2011  .
  23. 4 2012  .
  24. end
复制代码


结果如上,请问如何才能实现呢?

二维码

扫码加我 拉你入群

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

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


回帖推荐

黃河泉 发表于3楼  查看完整内容

Clyde Schechter 建议:

沙发
黃河泉 在职认证  发表于 2017-9-2 10:52:40
Clyde Schechter 建议:
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(id year x y)
  4. 1 2008 1 1
  5. 1 2009 2 2
  6. 1 2010 . 2
  7. 1 2011 1 1
  8. 1 2012 . .
  9. 2 2008 2 2
  10. 2 2009 . 2
  11. 2 2010 . 2
  12. 2 2011 1 1
  13. 2 2012 . .
  14. 3 2008 . 2
  15. 3 2009 2 2
  16. 3 2010 2 2
  17. 3 2011 . 2
  18. 3 2012 . 2
  19. 4 2008 . .
  20. 4 2009 1 1
  21. 4 2010 1 1
  22. 4 2011 . .
  23. 4 2012 . .
  24. end

  25. by id (year), sort: egen min_x = min(x)
  26. by id (year): egen max_x = max(x)
  27. by id: replace x = 2 if min_x == 2 & max_x == 2
  28. by id (year): replace x = 2 if x[_n-1] == 2 & missing(x)

  29. assert x == y
复制代码
已有 1 人评分经验 收起 理由
夏目贵志 + 10 热心帮助其他会员

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

藤椅
黃河泉 在职认证  发表于 2017-9-2 10:57:40
Clyde Schechter 建议:
  1. by NAME (YEAR), sort: egen min_ZHI = min(ZHI)
  2. by NAME (YEAR): egen max_ZHI = max(ZHI)
  3. by NAME: replace ZHI = 2 if min_ZHI == 2 & max_ZHI == 2
  4. by NAME (YEAR): replace ZHI = 2 if ZHI[_n-1] == 2 & missing(ZHI)
复制代码

板凳
On_Air 学生认证  发表于 2017-9-2 14:29:58
黃河泉 发表于 2017-9-2 10:57
Clyde Schechter 建议:
谢谢黄老师!

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-24 03:24