我的数据集在 Stata 中看起来像这样
年份 | 性别 | 总统 |
---|---|---|
2023 | 男 | 5 |
2023 | 女 | 6 |
2023 | 总计 | 11 |
2022 | 男 | 3 |
2022 | 女 | 2 |
2022 | 总计 | 5 |
我希望能够创建一个新的变量/列,通过获取该特定年份的男性/总数和女性/总数的分数来给出该年的百分比。换句话说,我希望我的数据集有一个如下所示的附加列:
年份 | 性别 | 总统 | Perc_pres |
---|---|---|---|
2023 | 男 | 5 | 0.45 |
2023 | 女 | 6 | 0.55 |
2023 | 总计 | 11 | 1 |
2022 | 男 | 3 | 0.6 |
2022 | 女 | 2 | 0.4 |
2022 | 总计 | 5 | 1 |
我尝试了 egen perc_pres_`gender'=total(cond(gender==Female), 1, .) 命令为女性总数和男性总数创建新的 2 个新列,然后获取百分比,但这似乎太长了我想要的是。我只想要一栏提供男性和女性的百分比,而不需要其他栏。
通常,像您这样的数据布局是电子表格思维的一个示例,与统计软件中的标准良好实践不符。基于某些观测值(行)的总计不应保存在同一数据集中的其他观测值中,而应保存在其他变量中。
具体来说,如果
Gender == Female
是数据集中的另一个变量,那么您的表达式 Female
充其量是有意义的。对于其他两种(也是更明显的)可能性中的任何一种都是非法的,即 Gender
是字符串变量,在这种情况下需要 "Female"
,或者 Gender
是带有值标签的数字变量,其中如果需要不同的比较。
您明显使用本地宏
gender
对我来说也没有意义。
您混淆了百分比(加到 100)与比例或分数(加到 1)。
这里需要的代码很尴尬,很大程度上是因为你的数据布局很尴尬。
这是一种解决方案,它取决于
Female
Male
Total
按该顺序排序。
* Example generated by -dataex-. For more info, type help dataex
clear
input int year str6 gender byte presidents
2023 "Male" 5
2023 "Female" 6
2023 "Total" 11
2022 "Male" 3
2022 "Female" 2
2022 "Total" 5
end
bysort year (gender) : gen percent = 100 * presidents / presidents[_N]
list , sepby(year)
+-------------------------------------+
| year gender presid~s percent |
|-------------------------------------|
1. | 2022 Female 2 40 |
2. | 2022 Male 3 60 |
3. | 2022 Total 5 100 |
|-------------------------------------|
4. | 2023 Female 6 54.54546 |
5. | 2023 Male 5 45.45454 |
6. | 2023 Total 11 100 |
+-------------------------------------+
如果这没有帮助(足够),请使用
dataex
给出示例(并参阅 stata
标签维基)。