For loop 以非缺失值为标准删除变量

For loop 以非缺失值为标准删除变量,for-loop,foreach,stata,For Loop,Foreach,Stata,我正在处理长数据;我有大约100个变量,有很多缺少的值。我想循环遍历变量,并删除非缺失值少于“某个数”(例如32)的变量 我尝试了以下方法: foreach var of varlist cid-lpop { 2. bysort `var': drop if _N < 32 3. } varlist cid lpop的foreach变量{ 2.bysort'var':如果小于32,则删除 3. } 但它放弃了我所有的观察 (这个问题在Statalist的同一标题下交叉列出)。S

我正在处理长数据;我有大约100个变量,有很多缺少的值。我想循环遍历变量,并删除非缺失值少于“某个数”(例如32)的变量

我尝试了以下方法:

foreach var of varlist cid-lpop {
  2. bysort `var': drop if _N < 32
  3. }
varlist cid lpop的foreach变量{
2.bysort'var':如果小于32,则删除
3. }
但它放弃了我所有的观察


(这个问题在Statalist的同一标题下交叉列出)。

Statalist的Joseph Coveney提供了以下解决方案:

foreach var of varlist cid-lpop {
    count if !missing(`var')
    if r(N) < 32 drop `var'
}
varlist cid lpop的foreach变量{
如果!缺少(`var'),则计数
如果r(N)<32,则删除'var'
}

在Statalist上也有回答,请严格地看,缺失或未缺失的是值,而不是观察值。如果一个观测值的所有值都丢失了,许多人会很高兴地将其称为缺失,但一般来说,一个观测值很容易有一些缺失值和一些非缺失值。