在 Stata 中,可以使用 tsfill 命令或者 xtbalance 命令生成平衡面板数据。两个命令的原理并不相同。 tsfill 通过【补样本】获得平衡面板, 更多用于宏观数据中;xtbalance 通过【删样本】获得平衡面板,更多用于微观数据中。

1. 命令展示

1
2
3
4
5
6
** 设置面板数据
xtset PID year
** tsfill 补样本
tsfill, full
** xtbalance 删样本
xtbalance, range(2012 2022) miss(x1 x2 x3)

注:在使用 tsfillxtbalance 之前,需要使用 xtset 命令设置好面板数据。

2. 结果展示

(1)tsfill 补样本

以涵盖江苏和上海两个省份的三年面板数据为例,其中江苏缺少2020年的样本。可以看到,tsfill 对缺失的样本进行了填补,但是不会填补provincex 等变量的取值。使用 fillmissing 命令,可以在tsfill 的基础上,进一步填补缺失的宏观地理信息,其原理是根据变量ID分组,组内的每一个省份名称province 都是相同的,使用组内其中一个province 的取值替代缺失值。

(⚠️注意:不同设备的显示字体不同,可能会出现字符错位的现象。将错位的文本复制到其他文本编辑器 / 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
** tsfill 补样本
xtset ID year // 设置面板数据
tsfill, full
/* 结果图示:
+------------------------+ +------------------------+
| ID provine year x | | ID provine year x |
|------------------------| |------------------------|
| 31 shanghai 2019 1 | result | 31 shanghai 2019 1 |
| 31 shanghai 2020 3 | ---------> | 31 shanghai 2020 3 |
| 31 shanghai 2021 2 | | 31 shanghai 2021 2 |
| 32 jiangsu 2019 2 | | 32 jiangsu 2019 2 |
| 32 jiangsu 2021 . | | 32 2020 . |
+------------------------+ | 32 jiangsu 2021 . |
+-----------------------+ */

** 填补省份名称
bysort ID: fillmissing province
/* 结果图示:
+------------------------+ +-------------------------+
| ID provine year x | | ID provine year x |
|------------------------| |-------------------------|
| 31 shanghai 2019 1 | result | 31 shanghai 2019 1 |
| 31 shanghai 2020 3 | ---------> | 31 shanghai 2020 3 |
| 31 shanghai 2021 2 | | 31 shanghai 2021 2 |
| 32 jiangsu 2019 2 | | 32 jiangsu 2019 2 |
| 32 2020 . | | 32 jiangsu 2020 . |
| 32 jiangsu 2021 . | | 32 jiangsu 2021 . |
+------------------------+ +-------------------------+ */

(2)xtbalance 删样本

以涵盖上海、江苏和安徽三个省份的三年面板数据为例,其中:

  • 安徽缺少2021年的样本;
  • 针对变量 x1x2 ,江苏2020年的取值为缺失值。

因此,这个数据为非平衡面板数据。

情况1:

若要让其变成2019-2021年的平衡面板数据,只有上海符合变量 x1x2 不是缺失值,而且年份不缺失的要求。因此,最后生成的平衡面板数据应该只有 2019-2021 年上海的数据。使用 xtbalance 命令,可以在指定年份范围和变量的条件下,删除非平衡的样本来构造平衡面板。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

** xtbalance 删样本
xtset ID year // 设置面板数据
xtbalance, range(2019 2021) miss(x1 x2)
/* 结果图示:
+---------------------------------+ +--------------------------------+
| ID provine year x1 x2 x3 | | ID provine year x1 x2 x3 |
|---------------------------------| |--------------------------------|
| 31 shanghai 2019 1 1 1 | result | 31 shanghai 2019 1 1 1 |
| 31 shanghai 2020 3 3 3 | ---------> | 31 shanghai 2020 3 3 3 |
| 31 shanghai 2021 2 2 2 | | 31 shanghai 2021 2 2 2 |
| 32 jiangsu 2019 2 2 2 | +--------------------------------+
| 32 jiangsu 2020 . 2 2 |
| 32 jiangsu 2021 3 3 3 |
| 34 anhui 2019 3 3 3 |
| 34 anhui 2020 3 3 3 |
+---------------------------------+ */

情况2:

如果要构造 2019-2020 年的平衡面板数据,要求变量 x1x2 不是缺失值,那么可以修改年份范围,这样最后保留的就是 2019-2020 年上海和安徽的样本。需要注意的是,xtbalance 需要生成的平衡面板数据的变量要求和时间范围均要在命令的 option 中指定,以确定生成什么样的平衡面板,因此2021年的上海样本也被删除了。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
** xtbalance 删样本
xtset ID year
xtbalance, range(2019 2020) miss(x1 x2)
/* 结果图示:
+---------------------------------+ +---------------------------------+
| ID provine year x1 x2 x3 | | ID provine year x1 x2 x3 |
|---------------------------------| |---------------------------------|
| 31 shanghai 2019 1 1 1 | result | 31 shanghai 2019 1 1 1 |
| 31 shanghai 2020 3 3 3 | ---------> | 31 shanghai 2020 3 3 3 |
| 31 shanghai 2021 2 2 2 | | 34 anhui 2019 3 3 3 |
| 32 jiangsu 2019 2 2 2 | | 34 anhui 2020 3 3 3 |
| 32 jiangsu 2020 . 2 2 | +---------------------------------+
| 32 jiangsu 2021 3 3 3 |
| 34 anhui 2019 3 3 3 |
| 34 anhui 2020 3 3 3 |
+---------------------------------+ */