我有一组与特定国家/地区内的群组成员资格相关的虚拟变量:
+------------------------------------+
| group1 group2 group3 country |
|------------------------------------|
1. | 0 1 0 FOO |
2. | 0 0 1 FOO |
3. | 0 0 1 FOO |
4. | 0 1 0 BAR |
5. | 1 0 0 BAR |
6. | 1 0 0 BAR |
7. | 1 0 0 BAR |
8. | 1 0 0 BAR |
+------------------------------------+
我想创建一个新变量,描述某个人是否属于某个国家/地区的多数群体。
我想从我的样本中构建这个指标。例如,在显示的数据集中,group3
占国家FOO
的大多数,因此个人2
和3
占多数。在BAR
中,多数群组为group1
,因此个人5
,6
,7
和8
占多数。
有没有人有一个巧妙的方法来计算每个国家的多数群体?
答案 0 :(得分:1)
这里的多数显然意味着最大的一方,而不一定是50%或更多的选票。
以下是未使用egen
mode()
的直接解决方案。 (我对这个功能没有偏见;我是它的第一作者。)
注意关系的可能性。如果存在关联,则此代码任意选择一个组,但是它们存在的标志。但是,mode()
有关系句柄。
clear
input group1 group2 group3 str4 country
0 1 0 FOO
0 0 1 FOO
0 0 1 FOO
0 1 0 BAR
1 0 0 BAR
1 0 0 BAR
1 0 0 BAR
1 0 0 BAR
1 0 0 FROG
0 1 0 FROG
0 0 1 FROG
end
gen group = group1
forval j = 2/3 {
replace group = `j' if group`j'
}
bysort country group: gen freq = _N
bysort country (freq group): gen maj = group[_N]
by country: gen maxfreq = freq[_N]
bysort country freq (group): gen ties = group[1] != group[_N] & freq == maxfreq
list, sepby(country)
+--------------------------------------------------------------------------+
| group1 group2 group3 country group freq maj maxfreq ties |
|--------------------------------------------------------------------------|
1. | 0 1 0 BAR 2 1 1 4 0 |
2. | 1 0 0 BAR 1 4 1 4 0 |
3. | 1 0 0 BAR 1 4 1 4 0 |
4. | 1 0 0 BAR 1 4 1 4 0 |
5. | 1 0 0 BAR 1 4 1 4 0 |
|--------------------------------------------------------------------------|
6. | 0 1 0 FOO 2 1 3 2 0 |
7. | 0 0 1 FOO 3 2 3 2 0 |
8. | 0 0 1 FOO 3 2 3 2 0 |
|--------------------------------------------------------------------------|
9. | 1 0 0 FROG 1 1 3 1 1 |
10. | 0 1 0 FROG 2 1 3 1 1 |
11. | 0 0 1 FROG 3 1 3 1 1 |
+--------------------------------------------------------------------------+
答案 1 :(得分:0)
egen
和group
函数将虚拟变量转换为单个分类变量。majority
变量
group_membership
是否与模式相等,以确定个人是否属于大多数以下是执行这三个步骤的代码:
. egen group_membership = group(group*)
. egen maj = mode(group_membership), by(country)
. gen is_maj = (group_membership == maj)
导致:
+--------------------------------+
| group country maj is_maj |
|--------------------------------|
1. | 2 FOO 3 0 |
2. | 3 FOO 3 1 |
3. | 3 FOO 3 1 |
4. | 2 BAR 1 0 |
5. | 1 BAR 1 1 |
|--------------------------------|
6. | 1 BAR 1 1 |
7. | 1 BAR 1 1 |
8. | 1 BAR 1 1 |
+--------------------------------+