【问题标题】:Keep only observations with data for all variables仅保留包含所有变量数据的观察结果
【发布时间】:2016-05-26 11:23:06
【问题描述】:

我有一个包含多个变量的数据集。我想创建一个子样本,其中仅包含具有所有变量数据的观察值,因此任何变量中都没有丢失数据。

我知道 Stata 中的 dropmiss 命令,但这不适用于此处,因为我不想删除变量,但我想删除观察结果。

我在 Stack Overflow 中发现了一个和我类似的问题,但是那里使用的统计程序是 SAS,我使用的是 Stata。 (SAS - Keeping only observations with all variables)。

一个例子(“.”是一个缺失的数据):

ID year pension age gender
1  2006 300    54   F
2  2007 250    40   M
3  2006  .     45   M
4  2005  .      .   F

所以在这种情况下,我只想保留样本中的 ID 1 和 2,以及 drop 3 和 4,因为它包含一些变量的缺失数据。

【问题讨论】:

    标签: subset stata sample missing-data


    【解决方案1】:

    关于dropmiss(search dropmiss之后从Stata Journal网站下载)的说法不正确。

    dropmiss 有一个 obs 选项可满足此需求。

    . sysuse auto, clear
    (1978 Automobile Data)
    
    . dropmiss, obs
    (0 observations deleted)
    
    . dropmiss, obs any
    (5 observations deleted)
    

    然而,dropmiss 被其作者(即我)认为被missings 取代(类似地从Stata Journal 网站下载)。 missings 不直接支持这一点,因为考虑是否可以通过多重插补处理缺失值被广泛认为是更好的统计实践。

    但如果您坚持,missings 也可以提供帮助:

    . sysuse auto, clear
    (1978 Automobile Data)
    
    . missings tag, gen(anymiss)
    
    Checking missings in all variables:
    5 observations with missing values
    
    . drop if anymiss
    (5 observations deleted)
    

    有一个 egen 函数 rowmiss() 行为类似。

    这里的关键是您不需要拼出相关的变量名。但是,请注意:这些命令可能具有高度破坏性。

    【讨论】:

    • 尼克感谢您的澄清,但我希望我能得到答案!
    • 如果您的意思是接受哪个答案,那显然是我无法控制的。如果用户有一千个变量,他们不会想输入所有的名字。
    【解决方案2】:

    假设您的变量数量有限,答案非常简单。 只需输入:

    keep if !missing(var1) & !missing(var2) & !missing(var3)
    

    该命令将仅保留具有上述所有三个变量的非缺失值的 行。随意添加更多内容。

    【讨论】:

    • keep if !missing(var1, var2, var3) 效果一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多