我想在宏中存储变量列表,然后在mi()
语句中调用该宏。原始申请是针对一个程序使用我出于保密原因无法联机的数据,其中包括以下声明:
generate u = cond(mi(`vars'),., runiform(0,1))
问题是mi()
需要以逗号分隔的变量名称,但vars
由空格分隔。
我使用auto
数据集和mark
来说明我的问题:
sysuse auto
local myvars foreign price
mark missing if mi(`myvars')
在此示例中,mi()
要求用逗号分隔的参数,Stata停止并抱怨它无法找到foreignprice
变量。是否有一个实用程序函数会在宏元素之间插入逗号?
答案 0 :(得分:2)
对问题的直接回答是使用宏扩展函数$string = "Joe Hansen, Carl Clarkson Clinton, Miranda Cobweb Fisher-Caine";
$new_string=explode(",",$string);
$slipt_arr=explode(" ",$new_string);
$final_arr=array();
foreach ($new_string as $value)
{
$elements=array_filter(explode(" ",$value));
array_push($final_arr,current($elements));
}
echo implode(", ",$final_arr);
将空格更改为逗号:
subinstr
如果目标是创建一个标记变量来标记具有指定变量缺失的任何值的观察,那么还有其他替代方法,其中大多数不需要在列表中摆弄任何分隔符。这并不意味着是一套完整的。
A1。
sysuse auto
local myvars foreign price
local myvars : subinstr local myvars " " ",", all
mark missing if mi(`myvars')
A2。
regress foreign price
gen missing = !e(sample)
A3。
egen missing = rowmiss(foreign price)
replace missing = missing > 0
A4。
local myvars foreign price
local myvars : subinstr local myvars " " ",", all
gen missing = missing(`myvars')
A5。
gen missing = 0
quietly foreach v in foreign price {
replace missing = 1 if missing(`v')
}
编辑在编辑的问题中,在程序中提到了这一点:
mark missing
markout missing foreign price
replace missing = !missing
我不会这样做,即使编辑宏也包括逗号,尽管任何问题都更符合个人品味。
generate u = cond(mi(`vars'),., runiform(0,1))
这样产生的指标变量很可能是同一程序中其他地方所需要的,或者至少是有用的。