首页 > 解决方案 > 生成一个变量,它是另一个变量的两个值的比率

问题描述

我有一个个人级别的横截面数据集。观察结果是属于一个家庭的个人,而该家庭又是一个家庭的一部分。一个家庭可以有一个或多个家庭。

我的目标是通过将男人的家务时间除以伴侣的家务时间来获得每周家务时间的性别比例。

当个人是家庭的主要成员(女性)时变量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 作为唯一值。

标签: sortingstata

解决方案


感谢您提供数据示例。

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 编程风格而言,返回系统缺失会是一个更好的主意。)


推荐阅读