Replace Stata:用缺失值替换负值,如果替换的值在98%以上的时间缺失,则删除var
我有一个数据集,它的负值表示缺少字节类型的变量。我希望所有变量都用缺失值替换所有负值。值,然后删除在98%以上的观察中缺少这些值的所有变量。通过谷歌搜索,我得出了以下结论,但我得到了一个错误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
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'
}