这不起作用有几个原因。首先,考虑这个建议的解决方案:
foreach var of varlist _all {
su `var', meanonly
if r(mean) == 0 drop `var'
}
这也适用于字符串变量,因为对summarize 字符串变量的请求不是非法的,并且平均值将作为缺失返回。
您的代码有什么问题?
问题1.顺序
mean `var' == 0
只是幻想语法。在这种情况下没有可以应用的平均函数,如果有,语法会有所不同。
问题 2. 您可以使用 if 限定符进行 drop 观察,也可以使用 drop 变量,但不能混合语法。甚至很难知道混合意味着什么,但无论如何它都是非法的。这里更深层次的问题是混淆了if 命令和if 限定符。对于drop,另请参阅help。
问题 3. 在此处输入的内容中,您使用了匹配的引号来表示本地宏引用。可以猜测您确实使用了左右引号,否则您会收到不同的错误消息。尽管如此,您输入的代码也因此无法正常工作。
更广泛的评论提醒我们,均值为零并不意味着所有值都为零。如果您只想使用所有值为零的 drop 变量,那么 findname (Stata Journal) 允许这样做
findname, all(@ == 0)
drop `r(varlist)'
还有允许缺失值的扩展。