设置问题的直接答案是使用宏扩展函数subinstr
将空格更改为逗号:
sysuse auto
local myvars foreign price
local myvars : subinstr local myvars " " ",", all
mark missing if mi(`myvars')
如果目标是创建一个标记变量,用指定变量上缺少的任何值来标记观察结果,那么还有其他替代方法,其中大多数不需要摆弄列表中的分隔符。这并不意味着是一个完整的集合。
A1。
regress foreign price
gen missing = !e(sample)
A2。
egen missing = rowmiss(foreign price)
replace missing = missing > 0
A3。
local myvars foreign price
local myvars : subinstr local myvars " " ",", all
gen missing = missing(`myvars')
A4。
gen missing = 0
quietly foreach v in foreign price {
replace missing = 1 if missing(`v')
}
A5。
mark missing
markout missing foreign price
replace missing = !missing
编辑在已编辑的问题中,程序中有对此的引用:
generate u = cond(mi(`vars'),., runiform(0,1))
我不会那样做,即使宏也被编辑为包含逗号,尽管任何问题更多的是个人品味。
marksample touse
markout `vars'
generate u = runiform(0,1) if `touse'
这样产生的指示变量很可能在同一程序的其他地方是需要的,或者至少是有用的。