楼主: 晶晶哈哈
1699 4

[数据管理求助] 求助怎么利用egen返回多个变量在区间内的特殊值 [推广有奖]

已卖:3954份资源

讲师

87%

还不是VIP/贵宾

-

威望
0
论坛币
42806 个
通用积分
435.1923
学术水平
18 点
热心指数
20 点
信用等级
13 点
经验
8182 点
帖子
334
精华
0
在线时间
781 小时
注册时间
2012-3-5
最后登录
2025-12-16

楼主
晶晶哈哈 学生认证  发表于 2020-3-11 09:07:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. [CODE]
  2. * Example generated by -dataex-. To install: ssc install dataex
  3. clear
  4. input double(pid fid18 qg9_s_1 qg9_s_2 qg9_s_3 qg9_s_4 qg9_s_5 qg9_s_6)
  5. 100051502 100051  1  2  3  4  5 -8
  6. 110043107 100051  1  2  3  4  5 -8
  7. 100051501 100051  1  2  3  4  5 -8
  8. 120009102 100160  1  2  4  3  5 -8
  9. 100160601 100160  1  2  3  4  5 -8
  10. 130005103 100286  1  2  3  4  5 -8
  11. 130155103 100435 78 -8 -8 -8 -8 -8
  12. 430111102 100453 -8 -8 -8 -8 -8 -8
  13. 430111101 100453 -8 -8 -8 -8 -8 -8
  14. 430111103 100453 -1 -8 -8 -8 -8 -8
  15. 130167104 100531  1  2  3 -8 -8 -8
  16. 130281103 100551  1  2  3  4  5 -8
  17. 100551551 100551  5  4  3  2  1 -8
  18. 130299105 100569 -8 -8 -8 -8 -8 -8
  19. 130299106 100569 -8 -8 -8 -8 -8 -8
  20. 100724601 100724 -8 -8 -8 -8 -8 -8
  21. 130492103 100724 -8 -8 -8 -8 -8 -8
  22. 130463104 100733 78 -8 -8 -8 -8 -8
  23. 130475104 100744  1  2  3  4  5 -8
  24. 100744601 100744  2  1  3  4  5 -8
  25. 130533103 100765 78 -8 -8 -8 -8 -8
  26. 130517102 100782 78 -8 -8 -8 -8 -8
  27. 100810551 100810 -8 -8 -8 -8 -8 -8
  28. 130630103 100879  4 -8 -8 -8 -8 -8
  29. 130815104 101023 -8 -8 -8 -8 -8 -8
  30. 130815105 101023 78 -8 -8 -8 -8 -8
  31. 130815102 101023 78 -8 -8 -8 -8 -8
  32. 130896107 101129 78 -8 -8 -8 -8 -8
  33. 130896106 101129 78 -8 -8 -8 -8 -8
  34. 130896105 101129 -8 -8 -8 -8 -8 -8
  35. 101129501 101129 78 -8 -8 -8 -8 -8
  36. 130897103 101130 78 -8 -8 -8 -8 -8
  37. 140093103 101274 -8 -8 -8 -8 -8 -8
  38. 101274551 101274 78 -8 -8 -8 -8 -8
  39. 140122105 101303 78 -8 -8 -8 -8 -8
  40. 140676103 101711 -8 -8 -8 -8 -8 -8
  41. 140676108 101711 -8 -8 -8 -8 -8 -8
  42. 140676203 101711 78 -8 -8 -8 -8 -8
  43. 140668105 101797  2 -8 -8 -8 -8 -8
  44. 411771105 102025 -8 -8 -8 -8 -8 -8
  45. 210223103 102448 78 -8 -8 -8 -8 -8
  46. 210263102 102473  1  2  3  4  5 -8
  47. 102571551 102571 -8 -8 -8 -8 -8 -8
  48. 102571552 102571 -8 -8 -8 -8 -8 -8
  49. 210547103 102666 -8 -8 -8 -8 -8 -8
  50. 102666601 102666  1  2  3  4 -8 -8
  51. 210638104 102730  1  2  3  4  5 -8
  52. 210727103 102783 78 -8 -8 -8 -8 -8
  53. 210761104 102814 78 -8 -8 -8 -8 -8
  54. 210966102 102888 78 -8 -8 -8 -8 -8
  55. end
  56. label values pid pid
  57. label values fid18 fid18
  58. label values qg9_s_1 qg9_s_1
  59. label def qg9_s_1 -8 "不适用", modify
  60. label def qg9_s_1 -1 "不知道", modify
  61. label def qg9_s_1 1 "养老保险", modify
  62. label def qg9_s_1 2 "医疗保险", modify
  63. label def qg9_s_1 4 "工伤保险", modify
  64. label def qg9_s_1 5 "生育保险", modify
  65. label def qg9_s_1 78 "以上都没有", modify
  66. label values qg9_s_2 qg9_s_2
  67. label def qg9_s_2 -8 "不适用", modify
  68. label def qg9_s_2 1 "养老保险", modify
  69. label def qg9_s_2 2 "医疗保险", modify
  70. label def qg9_s_2 4 "工伤保险", modify
  71. label values qg9_s_3 qg9_s_3
  72. label def qg9_s_3 -8 "不适用", modify
  73. label def qg9_s_3 3 "失业保险", modify
  74. label def qg9_s_3 4 "工伤保险", modify
  75. label values qg9_s_4 qg9_s_4
  76. label def qg9_s_4 -8 "不适用", modify
  77. label def qg9_s_4 2 "医疗保险", modify
  78. label def qg9_s_4 3 "失业保险", modify
  79. label def qg9_s_4 4 "工伤保险", modify
  80. label values qg9_s_5 qg9_s_5
  81. label def qg9_s_5 -8 "不适用", modify
  82. label def qg9_s_5 1 "养老保险", modify
  83. label def qg9_s_5 5 "生育保险", modify
  84. label values qg9_s_6 qg9_s_6
  85. label def qg9_s_6 -8 "不适用", modify
复制代码

[/code]如上面这个代码,是cfps的数据的截取部分。fid是家庭代码,pid是家庭成员的代码。
每一行代表一个家庭成员。现在我想看:这个成员是否买养老保险(创建一个变量),这个成员是否买医疗保险(创建一个变量),依次类推,统计所有成员的所有保险种类
目前我查到egen的help函数,可以用egen函数+anyvalue  来返回某一个变量的特殊值,help给的语句如下
  1. sysuse auto, clear
  2. egen highrep78 = anyvalue(rep78), v(3/5)
  3. list rep78 highrep78
复制代码

但是针对我这种情况,第一列 qg9_s_1实际包含了所有保险种类,qg9_s_2也是。我想到的逻辑是
1.创建医疗保险变量 egen med = anyvalue(qg9_s_1 qg9_s_2 qg9_s_3 qg9_s_4   qg9_s_5 ),v(1/5)

2.再针对每个保险创建变量


但是anyvlue是不针对多个变量的
所以就不知道怎么算了,请教大神!~~


二维码

扫码加我 拉你入群

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

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

关键词:egen 多个变量 generated generate install

沙发
黃河泉 在职认证  发表于 2020-3-11 10:24:14
是不是类似
  1. foreach v of varlist qg9_s_1-qg9_s_6 {
  2.     decode `v', gen(`v'a)
  3. }

  4. foreach v in 养老保险 医疗保险 失业保险 工伤保险 生育保险 {
  5.     gen d_`v' = (qg9_s_1a=="`v'")+(qg9_s_2a=="`v'")+(qg9_s_3a=="`v'")+(qg9_s_4a=="`v'")+(qg9_s_5a=="`v'")+(qg9_s_6a=="`v'")
  6. }
复制代码

藤椅
晶晶哈哈 学生认证  发表于 2020-3-12 23:09:43
黃河泉 发表于 2020-3-11 10:24
是不是类似
好的,谢谢黄老师,我试试看

板凳
晶晶哈哈 学生认证  发表于 2020-3-16 18:04:51
黃河泉 发表于 2020-3-11 10:24
是不是类似
我试了,可以的!!
论坛最强黄老师!!
我还不知道gen 可以对文字型类型的变量这么计数,学到了学到了

报纸
晶晶哈哈 学生认证  发表于 2020-4-10 10:15:15
  1. forval j=1/15{
  2.         gen f`j'=0
  3.         label var f`j' "有第`j'项设施的村子"
  4.         forval i=1/15{
  5.         replace f`j'=1 if ca3_s_`i'==`j' & ca3_s_`i' !=.
  6.         }
  7.         }
复制代码

关于把多选题转换成虚拟变量类型的单个变量,看到一个方法(如上代码)。

参考的资料是:
CFPS和CHARLS数据库分析技巧大指南_计量经济圈的专栏文章_微信文章_今天看啥

http://www.jintiankansha.me/t/KrKlVtuum4

  1.   forval j=1/5{
  2.      gen ins`j'=0
  3.      label var ins`j' "有第`j'项保险的家庭"
  4.      forval i=1/5{
  5.      replace ins`j'=1 if qg9_s_`i'==`j' & qg9_s_`i' !=.
  6.         }
  7.                 }
  8.    list qg9_s_1 qg9_s_2 ins1 ins2 in 1/50
复制代码



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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-23 08:06