【问题标题】:Drop variables if mean is 0 for loop如果平均值为 0 则删除变量 for 循环
【发布时间】:2018-03-20 19:08:47
【问题描述】:

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

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

我收到了错误消息mean not found

我该如何解决这个问题?

【问题讨论】:

标签: stata


【解决方案1】:

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

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)' 

还有允许缺失值的扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2019-01-13
    相关资源
    最近更新 更多