Replace Stata:用缺失值替换负值,如果替换的值在98%以上的时间缺失,则删除var

Replace Stata:用缺失值替换负值,如果替换的值在98%以上的时间缺失,则删除var,replace,foreach,stata,Replace,Foreach,Stata,我有一个数据集,它的负值表示缺少字节类型的变量。我希望所有变量都用缺失值替换所有负值。值,然后删除在98%以上的观察中缺少这些值的所有变量。通过谷歌搜索,我得出了以下结论,但我得到了一个错误 type mismatch r(109); glo p= 0.98 foreach var of varlist* { qui replace (`var') = . if (`var') < 0 qui count if missing(`var') if (r

我有一个数据集,它的负值表示缺少字节类型的变量。我希望所有变量都用缺失值替换所有负值。值,然后删除在98%以上的观察中缺少这些值的所有变量。通过谷歌搜索,我得出了以下结论,但我得到了一个错误

type mismatch
r(109);

glo p= 0.98
foreach var of varlist* {
    qui replace (`var') = . if (`var') < 0
    qui count if missing(`var')      
    if (r(N)/_N) >= $p drop `var'    
}
有什么建议吗


我已经很乐意使用一种解决方案,首先替换所有负值,然后删除大部分缺失的变量。

负值对字符串变量没有意义,这可能是错误产生的原因,因此您可以使用

ds, has(type numeric) 
local N = 0.98 * _N 
quietly foreach var in `r(varlist)' {
    replace `var' = . if  `var' < 0
    count if missing(`var')      
    if r(N) >= `N' drop `var'    
}
注:

您可以使用“确认”来检查变量是数字变量还是字符串变量,但建议在一个步骤中过滤掉数字变量

您引用了一个全局p,但从未定义它

不能使用newname=value形式的语句在Stata中设置任何常量或变量。玛塔,是的

没有动作的if语句毫无意义。除非使用大括号,否则Stata不会保留以后的语句。
通常,最好给出可重复的示例

在Stata中,在其他软件中可能被称为案例、记录或行的观察。这不是价值的另一个词。谢谢你的评论!关于你的第二个音符;我在原来的帖子中纠正了一个拼写错误。注4非常有用,谢谢你。我相信我了解您的大部分解决方案,但您能告诉我“rvarlist”到底是什么吗?一个包含ds命令中变量名的本地宏。@PearlySpiner当然是对的,这在帮助ds滚动到结尾中有详细说明。
unknown function type()
r(133);
ds, has(type numeric) 
local N = 0.98 * _N 
quietly foreach var in `r(varlist)' {
    replace `var' = . if  `var' < 0
    count if missing(`var')      
    if r(N) >= `N' drop `var'    
}