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

时间:2018-03-20 19:08:48

标签: stata

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

foreach var of varlist _all {
    drop 'var' if mean 'var'==0
}

我收到错误消息mean not found

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

有几个原因可以解决这个问题。首先,考虑这个建议的解决方案:

foreach var of varlist _all {
    su `var', meanonly 
    if r(mean) == 0 drop `var' 
}

这也适用于字符串变量,因为对summarize字符串变量的请求不是非法的,并且平均值将作为缺失返回。

您的代码有什么问题?

问题1.序列

mean `var' == 0 

只是幻想语法。没有可以在此上下文中应用的均值函数,如果有,则语法会有所不同。

问题2.您可以使用drop限定符进行if观察,也可以使用drop变量,但不能混合使用语法。甚至很难知道混合意味着什么,但它无论如何都是非法的。这里更深层次的问题是混淆if命令和if限定符。另请参阅help的{​​{1}}。

问题3.如此处所示,您已使用匹配的引号来表示本地宏引用。可以猜测你真的使用左右引号,否则你会得到不同的错误信息。然而,您键入的代码也不会出于这个原因。

更广泛的评论提醒人们,均值为零并不意味着所有零值。如果您只想drop个变量值为零,那么drop Stata Journal )允许

findname

并且还有允许缺失值的扩展名。