Stata数据处理:缺失值填充-autofill-carryforward

发布时间:2022-12-22 阅读 3759

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:范唯 (中山大学)
邮箱fanw9@mail2.sysu.edu.cn


目录


1. 命令介绍

autofill 命令直译为自动填充,可利用 Stata 数据中已有的数值来填充缺失值。它应用范围广泛,适用于 Stata 中所有类型的缺失值。此外,该命令还可以按组别对缺失值进行补全,这对分组处理数据缺失值有极大助益。

作者信息:

Version 1.0: October 1st, 2021
Author
    Xia P.S.
    University of Chinese Academy of Sciences
    Email: xia_ps@yeah.net

命令安装:

ssc install autofill, replace

命令语法:

autofill varlist, forward|backward [groupby(varname)]

其中,varlist 对应数值中含有缺失值的变量。对于 forward|backward

  • 如果选择 forward,程序将使用现有的数值来替换它们之前的缺失值。
  • 如果选择 backward,程序会使用现有的值来替换它们之后的缺失值。

groupby(varname) 选择一个变量,按照其连续相同的观察值进行分组。在每一个分组中独立执行 autofill 命令。

2. 实例演示

为更好地让读者理解 autofill 的用法,本部分将结合以下实例,从创建数据集——输入命令——输出结果——结果说明四个方面,对如何使用 autofill 命令进行详细讲述。

创建数据集:

clear all 
input str2 L N X Y
    a  1  .  .
    a  2  7  .
    b  3  .  4
    c  1  6  .
    c  2  .  5
    a  1  .  .
    a  2  5  .
    a  3  .  9
    b  1  3  .
    b  2  .  1
end 
encode L, gen(I)
drop L
order I

forward:向前填充缺失值演示

. autofill X Y, forward
. list, noobs clean

    I   N   X   Y  
    a   1   7   4  
    a   2   7   4  
    b   3   6   4  
    c   1   6   5  
    c   2   5   5  
    a   1   5   9  
    a   2   5   9  
    a   3   3   9  
    b   1   3   1  
    b   2   .   1  

backward:向后填充缺失值演示

. autofill X Y, backward
. list, noobs clean

    I   N   X   Y  
    a   1   .   .  
    a   2   7   .  
    b   3   7   4  
    c   1   6   4  
    c   2   6   5  
    a   1   6   5  
    a   2   5   5  
    a   3   5   9  
    b   1   3   9  
    b   2   3   1  

forward + groupby:分组向前填充

. autofill X Y, forward groupby(I)
. list, noobs clean

    I   N   X   Y  
    a   1   7   4  
    a   2   7   .  
    b   3   .   4  
    c   1   6   5  
    c   2   .   5  
    a   1   5   9  
    a   2   5   9  
    a   3   .   9  
    b   1   3   1  
    b   2   .   1  

backward + groupby:分组向后填充

. autofill X Y, backward groupby(I)
. list, noobs clean

    I   N   X   Y  
    a   1   .   .  
    a   2   7   .  
    b   3   .   4  
    c   1   6   .  
    c   2   6   5  
    a   1   .   .  
    a   2   5   5  
    a   3   5   9  
    b   1   3   .  
    b   2   3   1  

3. 命令对比

autofillcarryforward 命令均可以对数据集中的缺失值进行补全,但两个命令在处理数据缺失值的细节上具有很大差异。该部分将对这两个命令进行仔细区分,以帮助使用者根据数据处理需要选择合适的命令进行操作。

3.1 carryforward 命令

carryforward varlist [if exp] [in range], {gen(newvarlist1) | replace} 
[cfindic(newvarlist2) back carryalong(varlist2) strict nonotes dynamic_condition(dyncond) extmiss]

carryforward 命令把非缺失值从一个观察值向后推进,用前一个值来填补缺失值。因此,如果把一连串的缺失值看作是整个序列中的一个缺口,这个操作将用缺口之前出现的值来填补缺口。

clear all
input x  
    12
    4
    .
    .
    .
    3
    .
    7
    .
    .
end
. carryforward x, gen(y)
. list, noobs clean

     x    y  
    12   12  
     4    4  
     .    4  
     .    4  
     .    4  
     3    3  
     .    3  
     7    7  
     .    7  
     .    7  

3.2 autofill 和 carryforward 命令

是否可以生成新变量:

autofill carryforward

说明:autofill 是在原数据上填充缺失值,即根据命令要求覆盖原缺失值,不会生成新的变量,可能导致部分信息遗失。若想保留原有信息,需要先执行 gen y=x,对原有变量进行备份,再执行 autofill 指令操作。carryforward 命令更加灵活:

  • 通过 carryforward x, replace 指令,输出结果为在原数据上填充缺失值,覆盖原有缺失值;
  • 通过 carryforward x, gen(y) 指令,输出结果为生成新变量 y,y 为对变量 x 中的缺失值进行填充,x 变量中数值不变。

是否可以向后填充缺失值:

autofill carryforward

说明:autofillcarryforward 命令均可以实现向后填充缺失值。

  • autofill 命令的实现:autofill x, backward
  • carryforward 命令的实现:carryforward x, replace|gen(y)

是否可以向前填充缺失值:

autofill carryforward

说明:autofillcarryforward 更加灵活,可以通过输入 autofill x, forward 指令,使得缺失值被其后的第一个非缺失值填充。carryforward 命令不可以选择缺失值以后的非缺失值填充。

是否可以分组填充缺失值:

autofill carryforward

说明:autofill 命令可以通过 groupby(x) 选项,对变量 x 中连续相同的变量进行分组,并在组内较为独立的执行 autofill 命令。但需注意的是,groupby 选项并不会改变原数据的排序,这一点和某些编程语言中的 groupby 指令有所不同。carryforward 命令不可以分组独立执行补充缺失值操作。

是否可以部分填充缺失值:

autofill carryforward

说明:autofill 命令不可以部分填充缺失值,若有部分填充缺失值的需求,需要将数据手动拆分为“需填充缺失值部分”和“不填充缺失值部分”,再对“需填充缺失值部分”单独进行 autofill 操作。carryforward 命令在“部分填充缺失值”要求上更为灵活,只需要在 carryforward 命令后添加 [if exp] [in range] 选项,即可部分填充缺失值。

4. 结语

autofill 命令可利用已有的数值来填充缺失值。它应用范围广泛,适用于 Stata 中所有类型的缺失值。此外,该命令还可以按组别对缺失值进行补全,对分组处理数据缺失值有极大助益。

虽然 autofill 命令提供了一种快速填充缺失值的方法,但该命令并未提供缺失值的科学算法,以缺失值前/后的非缺失值对其进行填充很多时候在数据处理时并不是一个合适的选择。另外,通过对比 autofill 命令和 carryforward 命令,我们发现 autofill 命令在填充缺失值,尤其是“部分填充缺失值”方面仍有很大的升级改进空间。

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 缺失值, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh