在调查数据中,常常会遇到有极端值的情况,缩尾和结尾是两种最普遍的处理极端值的做法。以1%和99%双侧缩尾/截尾为例:

  缩尾:将大于99%分位数的取值,替换为99%分位数取值;将小于1%分位数的取值,替换为1%分位数取值。

  截尾:将大于99%分位数或小于1%分位数的取值,替换为缺失值。

  使用缩尾还是截尾,应根据数据情况和研究的具体问题选择。

一、基本语法

1
2
3
4
5
6
7
winsor2 varlist [if] [in], [suffix(string) replace trim cuts(# #) by(groupvar) label]
/* Note: suffix(string) 表示缩尾和截尾后生成新变量的后缀,默认是"_w"(缩尾)和"_tr"(截尾);
replace 表示不生成新变量,缩尾或截尾后的数值替换当前变量数值;
trim 表示截尾,不添加该 option,则默认是缩尾;
cut(# #) 表示缩尾或截尾的百分位数;
by(groupvar) 表示分组变量;
label 表示在变量标签中注明:(1)缩尾/截尾; (2)缩尾/截尾的百分位数。 */

二、示例和图示

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
** 1%、99%缩尾:将小于1%百分位数和大于99%百分位数的数值分别替换为1%、99%分位数数值
winsor2 x,cut(1 99) //新变量名默认是x_w

** 1%、99%截尾:将小于1%百分位数和大于99%百分位数的数值分别替换缺失值"."
winsor2 x,cut(1 99) trim //新变量名默认是x_tr

/* winsor2 图示:
+------------------+
No | x x_w x_tr |
|------------------|
1 | .02 .33 . |
2 | .33 .33 .33 |
3 | .64 .64 .64 |
4 | 1.5 1.5 1.5 |
… | … … … |
98 | 136 136 136 |
99 | 321 321 321 |
100 | 450 450 450 |
101 | 687 450 . |
+------------------+ */

  ‍

1
2
3
** 根据 Province 分组,在1%和99%分位数处双侧缩尾/截尾,并替换原来的变量(不生成新变量)
winsor2 x,cut(1 99) by(Province) replace //缩尾
winsor2 x,cut(1 99) by(Province) trim replace //截尾