在 Stata 中,使用 egen 等命令分组计算后,可以得到一个组内取值相同、组间取值不同的变量。如果在使用 egen 命令分组计算时,使用了 if 条件对特定样本进行计算,那么组内取值有且仅有两种情况:

  • 情况一:两种取值,一是组内样本符合条件的取值相同,不符合条件的都是缺失值 .
  • 情况二:一种取值,组内因不符合条件,都是缺失值。

在此种情况下,可以使用 ereplace 命令配合 mean 函数补充。

1. 命令展示

1
2
3
4
5
** 外部命令,首次使用需要安装 ereplace
ssc install ereplace, replace
** 计算条件分组取值
egen X_total = total(X) if X==1, by(ID)
ereplace X_total = mean(X_total), by(ID)

2. 结果展示

(⚠️注意:不同设备的显示字体不同,可能会出现字符错位的现象。将错位的文本复制到其他文本编辑器 / Stata do 文件编辑器中,可以解决此问题。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
** 计算条件分组取值
egen X_total = total(X) if X==1, by(ID)
/* 计算结果图示:
+-----------------+ +---------------------------+
| ID provine X | | ID provine X X_total |
|-----------------| |---------------------------|
| 31 上海 0 | 实现效果 | 31 上海 0 . |
| 31 上海 . | ---------> | 31 上海 . . |
| 31 上海 0 | | 31 上海 0 . |
| 32 江苏 1 | | 32 江苏 1 2 |
| 32 江苏 1 | | 32 江苏 1 2 |
| 32 江苏 . | | 32 江苏 . . |
+-----------------+ +--------------------------+ */

** 情况一:均值填充
ereplace X_total = mean(X_total), by(ID)
/* 计算结果图示:
+---------------------------+ +---------------------------+
| ID provine X X_total | | ID provine X X_total |
|---------------------------| |---------------------------|
| 31 上海 0 . | 实现效果 | 31 上海 0 . |
| 31 上海 . . | ---------> | 31 上海 . . |
| 31 上海 0 . | | 31 上海 0 . |
| 32 江苏 1 2 | | 32 江苏 1 2 |
| 32 江苏 1 2 | | 32 江苏 1 2 |
| 32 江苏 . . | | 32 江苏 . 2 |
+---------------------------+ +--------------------------+ */

** 情况二:均值填充
replace X_total = 0 if X_total==.
/* 计算结果图示:
+---------------------------+ +---------------------------+
| ID provine X X_total | | ID provine X X_total |
|---------------------------| |---------------------------|
| 31 上海 0 . | 实现效果 | 31 上海 0 0 |
| 31 上海 . . | ---------> | 31 上海 . 0 |
| 31 上海 0 . | | 31 上海 0 0 |
| 32 江苏 1 2 | | 32 江苏 1 2 |
| 32 江苏 1 2 | | 32 江苏 1 2 |
| 32 江苏 . 2 | | 32 江苏 . 2 |
+--------------------------+ +--------------------------+ */

上面的三行命令中:

  • egenereplace 命令可以使用的函数、用法都相同,具体使用方法参见文章《数据清洗|变量生成与替换》
  • ereplace 发挥的作用是,在情况一(取值只有两种情况,缺失值和非缺失值,且非缺失值取值相等)下,非缺失值的均值就是其取值本身,如果我们希望将组内的缺失值填充为这个相同的非缺失值,就可以使用第二行命令;
  • 在情况二下,即部分组内没有满足条件的值,或者都是缺失值,此时可以根据研究需要进行数据填补(此处补为0)。

3. 使用案例