如何在Stata中删除没有数据的观察?

时间:2014-08-06 16:41:10

标签: stata data-cleansing

我的数据包含可能存在或不存在所有值的ID。我想删除只有没有数据的观察结果;如果有甚至一个值的观察,我想保留它们。例如,如果我的数据集是:

ID val1 val2 val3 val4
1 23 . 24 75
2 . . . .
3 45 45 70 9

我想只丢弃ID 2,因为它是唯一没有数据的ID - 只是一个ID。

我曾尝试使用Statalist和Google,但无法找到相关内容。

3 个答案:

答案 0 :(得分:7)

只要它们为空, 也会使用字符串:

ds id*, not
egen num_nonmiss = rownonmiss(`r(varlist)'), strok
drop if num_nonmiss == 0

这将获得一个不是id的变量列表,并删除任何只有id的观察结果。

答案 1 :(得分:4)

Brian Albert Monroe非常正确,任何使用dropmiss(SJ)的人都需要先安装它。由于有兴趣以不同的方式解决这个问题,我将添加另一个。

 foreach v of var val* { 
     qui count if missing(`v') 
     if r(N) == _N local todrop `todrop' `v' 
 }
 if "`todrop'" != "" drop `todrop' 

虽然它应该是Brian的答案下的评论,但我会在这里添加评论,因为(a)这种格式更适合显示代码(b)评论来自我上面的代码。我同意unab是一个有用的命令,并经常在公开场合给予赞扬。然而,这里没有必要,因为Brian的循环很容易就像

那样
 foreach v of var * { 

2015年9月更新:有关missings的信息,请参阅http://www.statalist.org/forums/forum/general-stata-discussion/general/1308777-missings-now-available-from-ssc-new-program-for-managing-missings,两位作者认为dropmiss是对drop的改进。当且仅当缺少所有值时,missings dropobs观察的语法为{{1}}。

答案 2 :(得分:0)

只是另一种方法,它可以帮助您发现灵活的本地宏,而无需为Stata安装任何额外的东西。我很少看到使用本地存储命令或逻辑条件的代码,尽管它通常非常有用。

    // Loop through all variables to build a useful local
    foreach vname of varlist _all {    

            // We don't want to include ID in our drop condition, so don't execute the remaining code if our loop is currently on ID
            if "`vname'" == "ID" continue  

            // This local stores all the variable names except 'ID' and a logical condition that checks if it is missing
            local dropper "`dropper' `vname' ==. &"     
    }

    // Let's see all the observations which have missing data for all variables except for ID
    // The '1==1' bit is a condition to deal with the last '&' in the `dropper' local, it is of course true.

    list if `dropper' 1==1

    // Now let's drop those variables
    drop if `dropper' 1==1

    // Now check they're all gone
    list if `dropper' 1==1

    // They are.

现在dropmiss在您下载并安装后可能会很方便,但如果您正在编写要由其他人使用的文件,除非他们也安装了dropmiss,代码不能在他们的机器上工作。

使用这种方法,如果删除注释行和两个不必要的列表命令,这是一个相当稀疏的5行代码,它将与Stata开箱即用。