问题描述
我有一个单独的横截面数据集。观察结果是属于一个家庭的个人,而这个家庭又是一个家庭的一部分。一个家庭可以有一个或多个家庭。
我的目标是通过将男人的家务时间除以伴侣的时间来获得每周家务时间的性别比例。
如果个人是家庭的主要成员(女人),变量v31
为1,而个人为丈夫的变量v4
为2。
变量v32
是家庭ID。
变量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
是家庭中家庭的累进数,如果是家庭的第一个家庭,则为1,如果是第二个家庭,则为2,依此类推。
代码示例:
domwork_ratio
通过查看上面的数据示例,我的目标是拥有一个名为v32
的新变量,例如,对于第1行和第2行,其男性伴侣和女性伴侣的家务时间比例,即为12/27。由于它们属于相同的家庭v4
和相同的家庭bysort v4 v32 v16: gen domwork_ratio = cond(v4 != v4[_n-1],999999,v850_tot[_n-1]/v850_tot)
,因此对于这两个观测值将具有相同的值。
我不知道如何告诉Stata这样做,以使每个丈夫的家务时间除以伴侣的时间。
我尝试使用以下命令:
const path = require('path');
module.exports = {
"stories": [
"../stories/**/*.stories.mdx","../stories/**/*.stories.@(js|jsx|ts|tsx)"
],"addons": [
"@storybook/addon-links","@storybook/addon-essentials",'@storybook/addon-jest','@storybook/addon-knobs','@storybook/addon-storysource',],webpackFinal: async (config,{ configType }) => {
// `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION'
// You can change the configuration based on that.
// 'PRODUCTION' is used when building the static version of storybook.
// Make whatever fine-grained changes you need
config.module.rules.push({
test: /\.(scss|less|css)$/,use: ['style-loader','css-loader','sass-loader'],});
config.resolve.modules = ["node_modules",path.resolve(__dirname,"../app")];
// Return the altered config
return config;
}
}
但是由于某种原因,创建的变量具有唯一的值999999。
解决方法
感谢数据示例。
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编程风格而言,缺少返回系统将是一个更好的主意。)
作为另一种可能的解决方案,建议我使用以下代码:
by v4 v32 (v31),sort: assert _N <= 2
by v4 v32 (v31): gen domworkratio = v850_tot[2]/v850_tot[1]
它的结果应该与尼克建议的代码相同,我在这里发布它只是为了提供另一种可能性。