3177 11

[数据管理求助] 面板数据 如果某人在某年对应的变量是1,如何使后续其在任该公司对应的该变量也为1 [推广有奖]

  • 3关注
  • 1粉丝

等待验证会员

已卖:1份资源

博士生

63%

还不是VIP/贵宾

-

威望
0
论坛币
6033 个
通用积分
0.0786
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
3969 点
帖子
158
精华
0
在线时间
475 小时
注册时间
2018-6-1
最后登录
2026-1-6

楼主
小小小小的我鸟 发表于 2021-5-30 20:03:54 |AI写论文
30论坛币
如图所示,代码是5的公司在2004年丁对应的值是1,如何使2005-2006年(还是丁芃)的变量由0变成1 ?(在数据量非常大的情况下) 数据处理.png

最佳答案

zdlspace 查看完整内容

再提供一个一步到位的方案:
关键词:面板数据 如图所示

沙发
zdlspace 学生认证  发表于 2021-5-30 20:03:55
再提供一个一步到位的方案:
  1. [CODE]
  2. * Example generated by -dataex-. For more info, type help dataex
  3. clear
  4. input double(var1 var2 var3)
  5. 1 1 0
  6. 1 2 0
  7. 1 3 0
  8. 1 4 0
  9. 1 5 1
  10. 1 6 0
  11. 1 7 1
  12. 1 8 0
  13. 1 9 0
  14. 2 1 0
  15. 2 2 0
  16. 2 3 1
  17. 2 4 0
  18. 2 5 1
  19. 2 6 0
  20. 2 7 1
  21. 3 1 0
  22. 3 2 0
  23. 3 3 0
  24. 3 4 0
  25. 3 5 1
  26. 3 6 0
  27. 3 7 0
  28. 3 8 0
  29. end

  30. bys var1:replace var3=var3[_n-1] if var3==0 & _n!=1

  31. . list,sepby(var1)

  32.      +--------------------+
  33.      | var1   var2   var3 |
  34.      |--------------------|
  35.   1. |    1      1      0 |
  36.   2. |    1      2      0 |
  37.   3. |    1      3      0 |
  38.   4. |    1      4      0 |
  39.   5. |    1      5      1 |
  40.   6. |    1      6      1 |
  41.   7. |    1      7      1 |
  42.   8. |    1      8      1 |
  43.   9. |    1      9      1 |
  44.      |--------------------|
  45. 10. |    2      1      0 |
  46. 11. |    2      2      0 |
  47. 12. |    2      3      1 |
  48. 13. |    2      4      1 |
  49. 14. |    2      5      1 |
  50. 15. |    2      6      1 |
  51. 16. |    2      7      1 |
  52.      |--------------------|
  53. 17. |    3      1      0 |
  54. 18. |    3      2      0 |
  55. 19. |    3      3      0 |
  56. 20. |    3      4      0 |
  57. 21. |    3      5      1 |
  58. 22. |    3      6      1 |
  59. 23. |    3      7      1 |
  60. 24. |    3      8      1 |
  61.      +--------------------+
复制代码

藤椅
wdlbcj 学生认证  发表于 2021-5-30 21:05:24
想到的是向上填充
bys 公司 人名: replace 对应的值=对应的值[_n-1]
但这样会产生缺失值,
下一步将缺失值替换为0

感觉太粗糙了,等着看其他人的解答

板凳
小小小小的我鸟 发表于 2021-6-23 19:46:39
wdlbcj 发表于 2021-5-30 21:05
想到的是向上填充
bys 公司 人名: replace 对应的值=对应的值[_n-1]
但这样会产生缺失值,
好的 谢谢您

报纸
蓝色 发表于 2021-6-23 20:52:46
如何实现将首次取值为1的年份及后续的年份赋值为1?
https://bbs.pinggu.org/forum.php ... 140&from^^uid=902
看这里的方法试试

地板
zdlspace 学生认证  发表于 2021-6-29 18:17:49
我也给一个方案吧:
  1. * Example generated by -dataex-. For more info, type help dataex
  2. clear
  3. input double(var1 var2 var3)
  4. 1 1 0
  5. 1 2 0
  6. 1 3 0
  7. 1 4 0
  8. 1 5 1
  9. 1 6 0
  10. 1 7 1
  11. 1 8 0
  12. 1 9 0
  13. 2 1 0
  14. 2 2 0
  15. 2 3 1
  16. 2 4 0
  17. 2 5 0
  18. 2 6 0
  19. 2 7 1
  20. 3 1 0
  21. 3 2 0
  22. 3 3 0
  23. 3 4 0
  24. 3 5 1
  25. 3 6 0
  26. 3 7 0
  27. 3 8 0
  28. end

  29. xtset var1 var2
  30. bys var1:replace var3=L.var3 if var3==0 & _n!=0

  31.     +--------------------+
  32.      | var1   var2   var3 |
  33.      |--------------------|
  34.   1. |    1      1      0 |
  35.   2. |    1      2      0 |
  36.   3. |    1      3      0 |
  37.   4. |    1      4      0 |
  38.   5. |    1      5      1 |
  39.   6. |    1      6      1 |
  40.   7. |    1      7      1 |
  41.   8. |    1      8      1 |
  42.   9. |    1      9      1 |
  43.      |--------------------|
  44. 10. |    2      1      0 |
  45. 11. |    2      2      0 |
  46. 12. |    2      3      1 |
  47. 13. |    2      4      1 |
  48. 14. |    2      5      1 |
  49. 15. |    2      6      1 |
  50. 16. |    2      7      1 |
  51.      |--------------------|
  52. 17. |    3      1      0 |
  53. 18. |    3      2      0 |
  54. 19. |    3      3      0 |
  55. 20. |    3      4      0 |
  56. 21. |    3      5      1 |
  57. 22. |    3      6      1 |
  58. 23. |    3      7      1 |
  59. 24. |    3      8      1 |
  60.      +--------------------+
复制代码

7
zdlspace 学生认证  发表于 2021-6-29 18:40:40
wdlbcj 发表于 2021-5-30 21:05
想到的是向上填充
bys 公司 人名: replace 对应的值=对应的值[_n-1]
但这样会产生缺失值,
你这代码应该是错的,按你这个代码的话,生成的变量取值全部为缺失值。你可能想说的是
  1. bys 公司 人名: replace 对应的值=对应的值[_n-1] if 对应的值==0
复制代码

8
wdlbcj 学生认证  发表于 2021-6-29 22:34:32
zdlspace 发表于 2021-6-29 18:40
你这代码应该是错的,按你这个代码的话,生成的变量取值全部为缺失值。你可能想说的是
确实 我没有想到那种一开始就是缺失值存在的情况 感谢提醒

9
小小小小的我鸟 发表于 2021-6-30 14:08:54
蓝色 发表于 2021-6-23 20:52
如何实现将首次取值为1的年份及后续的年份赋值为1?
https://bbs.pinggu.org/forum.php?mod=viewthread&ti ...
谢谢老师

10
小小小小的我鸟 发表于 2021-6-30 14:09:55
zdlspace 发表于 2021-6-29 18:17
我也给一个方案吧:
感谢

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

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