Stata 如果循环的平均值为0,则删除变量

Stata 如果循环的平均值为0,则删除变量,stata,Stata,我想删除所有平均值为0的变量。我使用的代码是 foreach var of varlist _all { drop 'var' if mean 'var'==0 } 我得到了错误信息,意思是找不到 我怎样才能避开这件事 这不起作用的原因有几个。首先,考虑这个建议的解决方案: foreach var of varlist _all { su `var', meanonly if r(mean) == 0 drop `var' } 这也适用于字符串变量,因为汇总字符串

我想删除所有平均值为0的变量。我使用的代码是

foreach var of varlist _all {
    drop 'var' if mean 'var'==0
}
我得到了错误信息,意思是找不到


我怎样才能避开这件事

这不起作用的原因有几个。首先,考虑这个建议的解决方案:

foreach var of varlist _all {
    su `var', meanonly 
    if r(mean) == 0 drop `var' 
}
这也适用于字符串变量,因为汇总字符串变量的请求并不非法,并且平均值将作为缺失返回

你的代码怎么了

问题1。序列

mean `var' == 0 
这只是幻想的语法。在这个上下文中没有一个mean函数可以应用,如果有,语法就会不同

问题2。您可以使用if限定符删除观察值,也可以删除变量,但不能混合语法。甚至很难知道这种混合意味着什么,但无论如何它都是非法的。这里更深层次的问题是混淆if命令和if限定符。另请参见drop的帮助

问题3。正如这里键入的一样,您已经为本地宏引用使用了匹配的引号。有可能猜测您确实使用了左引号和右引号,否则您将得到不同的错误消息。然而,由于这个原因,您键入的代码也无法工作

更广泛的评论提醒我们,平均值为零并不意味着所有值都为零。如果您只想删除所有值为零的变量,那么findname Stata Journal允许这样做

findname, all(@ == 0)
drop `r(varlist)' 
还有一些扩展允许丢失值

斯塔塔是这么拼写的。