我将组成员身份编码为虚拟变量,如下所示:
+--------------------------+
| group1 group2 group3 |
|--------------------------|
1. | 0 1 0 |
2. | 0 0 1 |
3. | 0 0 1 |
4. | 0 1 0 |
5. | 1 0 0 |
6. | 1 0 0 |
7. | 1 0 0 |
8. | 1 0 0 |
+--------------------------+
我想将三个 groupX
变量转换为单个变量,如下所示:
group
2
3
3
2
1
1
1
1
这是做 xi i.group
的"reverse",从假人创建一个分类变量 .
我想 egen foo = group(group*)
但它似乎奇怪地编码结果变量:
+--------------------------------+
| group1 group2 group3 foo |
|--------------------------------|
1. | 0 1 0 2 |
2. | 0 0 1 1 |
3. | 0 0 1 1 |
4. | 0 1 0 2 |
5. | 1 0 0 3 |
|--------------------------------|
6. | 1 0 0 3 |
7. | 1 0 0 3 |
8. | 1 0 0 3 |
+--------------------------------+
请注意, egen
已将组3编码为1,将组1编码为3 .
2 回答
这是一种非常笨拙的方式,但我确信有一些方法:
结果如下:
你的问题似乎预先假定强有力的假设,即变量已经有后缀1,并且指标变量是不相交的 .
既然如此,这是您的代码的替代方案:
排序
egen, group(
varlist)
的基本原理是它的结果取决于sort
varlist之后的排序,在你的情况下首先放0 0 1
,0 1 0
秒和1 0 0
最后,因为0
在1
之前按照Stata的规则进行排序,并且排序首先在第一个变量,第二个变量的第二个,依此类推 .egen
的此功能用于对任何变量组合进行分组 . 数字(指示符或其他)或字符串 .编辑:这种技术更为通用 . 一个关键的假设仍然是,在一组变量的每次观察中,1只出现一次 . 但是没有关于变量数量的假设,并且变量名称不需要具有一些前缀:您只需要通过给出实际变量名称的东西替换
group*
.