首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成一个变量,该变量是另一个变量的两个值的比率

生成一个变量,该变量是另一个变量的两个值的比率
EN

Stack Overflow用户
提问于 2020-08-23 23:26:13
回答 2查看 262关注 0票数 1

我有一个单独水平的横截面数据集。观察是属于一个家庭的个人,而这个家庭又是一个家庭的一部分。家庭可以有一个或多个家庭。

我的目标是通过将男方和男方的家务活时长相除,得到每周家务活时长的性别比例。

当个人是家庭的主要成员(妇女)时,变量v31为1,当个人是丈夫时,变量为2。

变量v4是家庭ID。

变量v32是家庭中家庭的累进数字,如果是家庭中的第一个家庭,则为1,如果是第二个家庭,则为2,依此类推。

代码的一个示例:

代码语言:javascript
复制
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做这个比率,以便每个丈夫的家务活时间除以他的伴侣的家务活时间。

我尝试过使用以下命令:

代码语言:javascript
复制
bysort v4 v32 v16: gen domwork_ratio = cond(v4 != v4[_n-1],999999,v850_tot[_n-1]/v850_tot) 

但是由于某些原因,创建的变量的唯一值是999999。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-24 02:54:09

感谢您的数据示例。

代码语言:javascript
复制
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:,并且在组内定义的v4v16是恒定的。然后,这样的组由单一的观察组成。对于每组中的第一次也是唯一一次观察,v4不等于v4[_n-1]是正确的,因为v4[0]作为缺失返回。因此,正如报道的那样,总是返回999999。(作为Stata编程风格的问题,返回系统丢失将是一个更好的想法。)

票数 1
EN

Stack Overflow用户

发布于 2020-08-25 01:07:33

作为另一个潜在的解决方案,我被建议使用以下代码:

代码语言:javascript
复制
by v4 v32 (v31), sort: assert _N <= 2
by v4 v32 (v31): gen domworkratio = v850_tot[2]/v850_tot[1]

它应该与Nick建议的代码具有相同的结果,我在这里发布它只是为了提供另一种可能性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63548753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档