在我的数据中,我有以下变量:家庭ID,家庭中人员的ID,父亲ID,受教育年限,谁是父亲。例如,23号房中的人3可能会说1号人是他或她的父亲,而23号房中的6号、7号和8号人可能会说9号人是他们的父亲。这可能是一个共同的家庭。
所以我不能用通常的方式创建一个新的列eduF,因为对于同一个家庭中的3个人和6/7/8个人,父亲是不同的,所以即使在同一个家庭中,eduF水平也是不同的。然而,我需要这个新的专栏eduF说,对于每个家庭成员,他们列出的父亲的教育水平是多少。
我认为这需要forvalue或foreach和循环,但不确定代码是什么!
在样本图像中,“父亲i”和“父亲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发布于 2013-07-05 05:50:34
在给定的示例中,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:做什么。
https://stackoverflow.com/questions/17476465
复制相似问题