楼主: zj7777
3144 8

[面板数据求助] 求助!survey data如何删除不满足条件的样本 [推广有奖]

  • 0关注
  • 0粉丝

VIP1

初中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
1686 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
967 点
帖子
0
精华
0
在线时间
38 小时
注册时间
2017-2-2
最后登录
2017-8-24

楼主
zj7777 发表于 2017-7-20 01:10:58 |AI写论文
40论坛币
各位大神,我有一个面板数据,2012-2014年,但是发现有一些被采访个体(pid)每一年的性别录入是不一样的,就是一个id对应了不同的性别,如何删除在stata中删除这些observation呢?

最佳答案

左耳cz 查看完整内容

回复居然要审核~~,把调整后的代码截图给你了,你自己敲一下吧!应该可以了 说下,之前为什么你用D.产生的变量值会为空是因为D.是差分的意思,它会根据年度从上一年减前一年,比如2000年-1999年,你的数据之间有断层,是间隔一年的数据,所以产生的结果就为空。
关键词:Survey Data SUR observation observat

沙发
左耳cz 发表于 2017-7-20 01:10:59
zj7777 发表于 2017-7-21 00:42
十分感谢!我刚才试了一下gen Dgender=D.gender 这个命令,最右边右边就是Dgender,但是我得到的全是miss ...
屏幕快照 2017-07-21 上午10.05.20.png
回复居然要审核~~,把调整后的代码截图给你了,你自己敲一下吧!应该可以了
说下,之前为什么你用D.产生的变量值会为空是因为D.是差分的意思,它会根据年度从上一年减前一年,比如2000年-1999年,你的数据之间有断层,是间隔一年的数据,所以产生的结果就为空。

藤椅
黃河泉 在职认证  发表于 2017-7-20 08:10:34
请举个简单例子(包括数字)!

板凳
蓝色 发表于 2017-7-20 08:22:09
既然是录入错误,应该是修正错误
而不是删除样本。
这样删除样本,是有问题的。

报纸
左耳cz 发表于 2017-7-20 17:44:11
根据你的问题我自己生成一组数据测试了下,应该可以。代码如下:
*--生成20个面板数据,时间跨度2001-2005,4个ID
  1. clear
  2. set obs  20
  3. gen sex = 1
  4. egen year =seq(), from(2001) to (2005)
  5. bysort year : gen id = _n
  6. sort id year
  7. order id year sex

  8. replace sex = 0 if (id==1) & (year==2003) //手动替换性别使同id不同year性别不同
  9. replace sex = 0 if (id==2) & (year==2002) //同理
  10. bysort id (year): replace sex = 0 if (id==3) //性别替换

  11. tsset id year
  12. gen Dsex = D.sex
  13. bysort id (year): replace Dsex=0 if _n==1
  14. by id (year): egen s = sum(abs(Dsex))
  15. by id (year): keep  if s ==0
  16. drop Dsex s
复制代码

处理前、后分别如下图所示。 处理前 处理后

地板
zj7777 发表于 2017-7-21 00:42:59
左耳cz 发表于 2017-7-20 17:44
根据你的问题我自己生成一组数据测试了下,应该可以。代码如下:
*--生成20个面板数据,时间跨度2001-2005 ...
十分感谢!我刚才试了一下gen Dgender=D.gender 这个命令,最右边右边就是Dgender,但是我得到的全是missing value,我之前也已经定义了panel data,请问这是什么问题呢?
Screen Shot 2017-07-20 at 17.38.49.png

7
zj7777 发表于 2017-7-21 00:45:23
蓝色 发表于 2017-7-20 08:22
既然是录入错误,应该是修正错误
而不是删除样本。
这样删除样本,是有问题的。
嗯嗯,谢谢!因为我大概有10万条数据,请问有什么方法能查找到这样性别不一致的ID吗?

8
左耳cz 发表于 2017-7-21 10:00:57
zj7777 发表于 2017-7-21 00:42
十分感谢!我刚才试了一下gen Dgender=D.gender 这个命令,最右边右边就是Dgender,但是我得到的全是miss ...
  1. clear
  2. set obs  21
  3. gen sex = 1
  4. *egen year =seq(), from(2001) to (2005)
  5. egen year = fill(2010 2012 2014 2010 2012 2014)
  6. bysort year : gen id = _n
  7. sort id year
  8. order id year sex

  9. replace sex = 0 if (id==1) & (year==2010) //手动替换性别使同id不同year性别不同
  10. replace sex = 0 if (id==2) & (year==2012) //同理
  11. bysort id (year): replace sex = 0 if (id==4) //性别替换

  12. tsset id year
  13. bysort id: gen id_n = sex[_n]
  14. bysort id: gen id_n1 = sex[_n-1]
  15. gen id_d = id_n - id_n1

  16. bysort id (year): replace id_d=0 if _n==1
  17. by id (year): egen s = sum(abs(id_d))
  18. by id (year): keep  if s ==0
  19. drop id_* s
复制代码
你用D. 产生的为空值是因为你的年份代码不连续,D.吃根据每年产生差分代码,我调整了一下代码,应该可以了。

9
zj7777 发表于 2017-7-21 22:32:08
左耳cz 发表于 2017-7-21 10:00
你用D. 产生的为空值是因为你的年份代码不连续,D.吃根据每年产生差分代码,我调整了一下代码,应该可以了 ...
非常感谢!成功解决问题!

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

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