创造"是多数"来自组成员资格列表的指标

时间:2016-03-15 17:45:55

标签: stata

我有一组与特定国家/地区内的群组成员资格相关的虚拟变量:

     +------------------------------------+
     | 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的大多数,因此个人23占多数。在BAR中,多数群组为group1,因此个人5678占多数。

有没有人有一个巧妙的方法来计算每个国家的多数群体?

2 个答案:

答案 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)

  1. 使用egengroup函数将虚拟变量转换为单个分类变量。
  2. 通过计算模式(最常见的值)
  3. 创建majority变量
  4. 测试group_membership是否与模式相等,以确定个人是否属于大多数
  5. 以下是执行这三个步骤的代码:

    . 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 |
         +--------------------------------+