楼主: CatherineOange
2438 4

[数据管理求助] CHFS数据库如何将父母的年龄学历匹配到子女身上? [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

高中生

10%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
63 点
帖子
2
精华
0
在线时间
44 小时
注册时间
2019-9-17
最后登录
2023-4-11

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

CHFS数据库中的个人层面数据库有hhid pline rela(本人与受访者关系,1本人2配偶6子女7儿媳/女婿 8孙子女),hhid+pline可以识别出唯一个体。数据库中一共有两类家庭,三代人一家(如图1,rela有12678)和两代一家(如图2,rela只有126).如何在实现将父母的受教育程度匹配到子女那一行呢?
我已经试过的方法:
  1. *两代
  2. by hhid, sort: gen fam2=1 if inlist(rela,1,2,6) & size>=2 & kid16==1
  3. *三代
  4. by hhid, sort: gen fam3=1 if inlist(rela,6,7,8) & size>=3 & kid16==1
  5. gen dad_edu=.
  6. *两代人家庭中有16岁以下子女的父亲学历
  7. replace dadedu= dad_edu if gender==1 & fam2==1 & inlist(rela,1,2) & size>=2 & age>=22 & marr !=0 & kid16==1
  8. *三代人家庭中有16岁以下子女的父亲学历
  9. replace dadedu= dad_edu if gender==1 & fam3==1 & inlist(rela,6,7) & size>=3 & age>=22 & marr !=0 & kid16==1
  10. collapse dadedu, by(hhid)
复制代码
但是依然在新的文件中出现了学历为3.5,2.333的情况,也就是说一个家庭有两个或以上的父亲学历变量,然后被取了均值,请问是哪里出了问题呢?
三代家庭 二代家庭



艾特了一下黄老师,打扰您了!
二维码

扫码加我 拉你入群

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

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

关键词:数据库 Collapse replace Gender place

沙发
abelus 发表于 2022-4-12 11:15:31 |只看作者 |坛友微信交流群
用SQL的方式表达下吧(在R中作为示例)
# 户主及配偶&男
t1 <- sqldf(“SELECT hhid, edu AS edu1 FROM tbl WHERE pline IN (1 , 2) AND gender  = 0”)
# 户主及配偶&女
t2 <- sqldf(“SELECT hhid, edu AS edu2 FROM tbl WHERE pline IN (1 , 2) AND gender  = 1”)
# 户主之子
t6M <- sqldf(“SELECT hhid, edu AS edu6m FROM tbl WHERE pline =6 AND gender  = 0”)
# 户主之女
t6F <- sqldf(“SELECT hhid, edu AS edu6f FROM tbl WHERE pline =6 AND gender  = 1”)
# 户主之媳
t7F <- sqldf(“SELECT hhid, edu AS edu7f FROM tbl WHERE pline =7 AND gender  = 1”)
# 户主之婿
t7M <- sqldf(“SELECT hhid, edu AS edu7m FROM tbl WHERE pline =7 AND gender  = 0”)
# 户主之孙子女
t8 <- sqldf(“SELECT hhid, edu AS edu8 FROM tbl WHERE pline =8”)


# 数据合并
dat <- merge(t1, t2, by  = 'hhid', all.x = T)
dat <- merge(dat, t6M, by = 'hhid', all.x = T)
dat <- merge(dat, t6F, by = 'hhid', all.x = T)
dat <- merge(dat, t7M, by = 'hhid', all.x = T)
dat <- merge(dat, t7F, by = 'hhid', all.x = T)
dat <- merge(dat, t8, by = 'hhid', all.x = T)

这种方式按照家庭,把人口结构给体现出来了(同一个家庭中,子女的关系是不唯一的,6/7标签的,对应标签为8,无法完全准确判断是否子女关系啊,和人口普查统计的数据格式还是有一些差别的吧)
如上的这种数据格式,可能便于分析。
不用SQL表达,直接用R的方式修改如下:
t1 <- subset(tbl, (pline %in% c(1, 2)) & (gender = 0),  select = c(hhid, edu))
names(t1) <- c('hhid', 'edu1')
或者用tidyverse包来搞
t1 <- (tbl %>% filter(pline %in% c(1, 2), gender = 0) %>% select(hhid, edu))
names(t1) <- c('hhid', 'edu1')
其他类似

############################################################
如果要把两代家庭,和三代家庭的分开,也可以用拆分数据的方式得到
比如两代和三代的分类
tftyp2 <- sqldf("SELECT hhid, MAX(pline) AS ftype FROM tbl GROUP BY hhid HAVING MAX(pline) IN (6, 7)")
tftyp3 <- sqldf("SELECT hhid, MAX(pline) AS ftype FROM tbl GROUP BY hhid HAVING MAX(pline) = 8")


基本思路是不管咋折腾,围绕hhid来弄,用pline识别结构(如果设计数据的时候,性别包含在pline中可能会更加方便点,是不是为了体现男女平等,所以没明确规定吧)

使用道具

藤椅
CatherineOange 发表于 2022-5-15 14:59:22 |只看作者 |坛友微信交流群
abelus 发表于 2022-4-12 11:15
用SQL的方式表达下吧(在R中作为示例)
# 户主及配偶&男
t1
太感谢了!受教了!

使用道具

板凳
woshidazhi 发表于 2023-11-7 14:40:17 |只看作者 |坛友微信交流群
请问楼主有遇到过一个家庭里有多个父亲信息的情况吗(关系为父母,且性别为男)此时应该怎么处理呢

使用道具

CatherineOange 发表于 2022-5-15 14:59
太感谢了!受教了!
你好 请问这个方法用stata语句怎么表达呀 没看懂sql语句

使用道具

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

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

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

GMT+8, 2024-6-14 05:13