有没有办法计算比较观察值的百分比?

问题描述 投票:0回答:1

我的数据集在 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 个新列,然后获取百分比,但这似乎太长了我想要的是。我只想要一栏提供男性和女性的百分比,而不需要其他栏。

stata percentage
1个回答
0
投票

通常,像您这样的数据布局是电子表格思维的一个示例,与统计软件中的标准良好实践不符。基于某些观测值(行)的总计不应保存在同一数据集中的其他观测值中,而应保存在其他变量中。

具体来说,如果

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
标签维基)。

© www.soinside.com 2019 - 2024. All rights reserved.