在我的数据中,我有如下变量:家庭身份证,户口人身份证,父亲身份证,受教育年限,父亲身份。例如,23号房子里的人3可能会说1号人是他或她的父亲,而6号和7号房子也是23号房子说9号人是他们的父亲。这可能是一个联合家庭。
所以我不能以通常的方式制作新的专栏eduF,因为对于同一家庭中的第3和第6/7/8人,父亲是不同的,因此即使在同一个家庭中,教育水平也会有所不同。然而,我需要这个新专栏eduF说,对于每个家庭成员,他们列为父亲的人的教育水平是什么。
我认为这需要forvalues或foreach和循环,但我不确定代码是什么!
在样本的图像中,“父亲我”和“父亲n”表示父亲已死或信息不可用。
key pid fathID yearsEDU
282 10 fath n 13
282 9 1 10
282 8 4
282 7 4 12
282 6 4 14
282 5 fath n 10
282 4 1 9
282 3 1 8
282 2 fath i
282 1 fath i 4
283 4 1 4
283 3 1 6
283 2 fath i 14
283 1 fath i 17
答案 0 :(得分:2)
在给出的示例中,xpers
的值在每个家庭中增加1。 (如果不是这样,可以安排)。
这里缺少关于哪些变量是数字的信息,这些数字是带有值标签的数字,而且是字符串。
但假设q0111
是字符串,我们可以通过
gen fatherid = real(q0111)
然后是
bysort xhhkey (xpers) : gen father_educ = q0407_a[fatherid]
这里的关键思想是,在by:
的支持下,下标在组内被解释,因此fatherid
的值恰好是我们需要的下标。
@Metrics断言,不需要循环。
list xhhkey xpers q0111 q0407_a fatherid father_educ, sep(0)
+-----------------------------------------------------------+
| xhhkey xpers q0111 q0407_a fatherid father~c |
|-----------------------------------------------------------|
1. | 282 1 father i 13 . . |
2. | 282 2 father i 10 . . |
3. | 282 3 1 . 1 13 |
4. | 282 4 1 12 1 13 |
5. | 282 5 father n 14 . . |
6. | 282 6 4 10 4 12 |
7. | 282 7 4 9 4 12 |
8. | 282 8 4 8 4 12 |
9. | 282 9 1 . 1 13 |
10. | 282 10 father n 4 . . |
11. | 283 1 father i 4 . . |
12. | 283 2 father i 6 . . |
13. | 283 3 1 14 1 4 |
14. | 283 4 1 17 1 4 |
15. | 284 1 father i 5 . . |
16. | 284 2 father n . . . |
17. | 284 3 1 1 1 5 |
18. | 284 4 father i 4 . . |
19. | 284 5 father n 8 . . |
20. | 284 6 father i 7 . . |
21. | 284 7 father n 18 . . |
22. | 284 8 6 2 6 7 |
23. | 284 9 6 . 6 7 |
24. | 284 10 father i 9 . . |
+-----------------------------------------------------------+
顺便说一句,列的术语在矩阵的上下文之外与Stata不同:它们是变量。
在http://www.stata-journal.com/article.html?article=pr0004 by:
上有一个中等详细的教程。即使是经验丰富的Stata用户也经常低估使用by:
可以做些什么。