我有一个单独水平的横截面数据集。观察是属于一个家庭的个人,而这个家庭又是一个家庭的一部分。家庭可以有一个或多个家庭。
我的目标是通过将男方和男方的家务活时长相除,得到每周家务活时长的性别比例。
当个人是家庭的主要成员(妇女)时,变量v31为1,当个人是丈夫时,变量为2。
变量v4是家庭ID。
变量v32是家庭中家庭的累进数字,如果是家庭中的第一个家庭,则为1,如果是第二个家庭,则为2,依此类推。
代码的一个示例:
clear
input obs v4 v32 v31 v850
1 1 1 1 27
2 1 1 2 12
3 2 1 2 8
4 2 1 1 41
5 3 1 2 0
6 4 1 1 29
7 4 1 2 11
8 4 2 1 37
9 4 2 2 1
end
list 通过查看上面的数据示例,我的目标是有一个名为domwork_ratio的新变量,例如,对于行1和行2,它将具有男性伴侣和女性伴侣的家务活时间比率,即12/27。它对于两个观察值将具有相同的值,因为它们属于相同的家庭v32和相同的家庭v4。
我不知道如何告诉Stata做这个比率,以便每个丈夫的家务活时间除以他的伴侣的家务活时间。
我尝试过使用以下命令:
bysort v4 v32 v16: gen domwork_ratio = cond(v4 != v4[_n-1],999999,v850_tot[_n-1]/v850_tot) 但是由于某些原因,创建的变量的唯一值是999999。
发布于 2020-08-24 02:54:09
感谢您的数据示例。
clear
input obs v4 v32 v31 v850
1 1 1 1 27
2 1 1 2 12
3 2 1 2 8
4 2 1 1 41
5 3 1 2 0
6 4 1 1 29
7 4 1 2 11
8 4 2 1 37
9 4 2 2 1
end
bysort v32 v4 (v31) : gen ratio = v850[2] / v850[1] if v31[1] == 1 & v31[2] == 2
list, sepby(v32 v4)
+----------------------------------------+
| obs v4 v32 v31 v850 ratio |
|----------------------------------------|
1. | 1 1 1 1 27 .4444444 |
2. | 2 1 1 2 12 .4444444 |
|----------------------------------------|
3. | 4 2 1 1 41 .1951219 |
4. | 3 2 1 2 8 .1951219 |
|----------------------------------------|
5. | 5 3 1 2 0 . |
|----------------------------------------|
6. | 6 4 1 1 29 .3793103 |
7. | 7 4 1 2 11 .3793103 |
|----------------------------------------|
8. | 8 4 2 1 37 .027027 |
9. | 9 4 2 2 1 .027027 |
+----------------------------------------+失败的代码引用了一个您在问题中没有解释的变量v16。但它的失败是可以解释的。该框架包括by v4 v16:,并且在组内定义的v4和v16是恒定的。然后,这样的组由单一的观察组成。对于每组中的第一次也是唯一一次观察,v4不等于v4[_n-1]是正确的,因为v4[0]作为缺失返回。因此,正如报道的那样,总是返回999999。(作为Stata编程风格的问题,返回系统丢失将是一个更好的想法。)
发布于 2020-08-25 01:07:33
作为另一个潜在的解决方案,我被建议使用以下代码:
by v4 v32 (v31), sort: assert _N <= 2
by v4 v32 (v31): gen domworkratio = v850_tot[2]/v850_tot[1]它应该与Nick建议的代码具有相同的结果,我在这里发布它只是为了提供另一种可能性。
https://stackoverflow.com/questions/63548753
复制相似问题