我有一组变量,例如varA
,varB
和varC
。
如何循环显示only后缀A
,B
和C
?
我知道我可以按如下方式获取所有匹配变量:
des var*
storage display value
variable name type format label variable label
-------------------------------------------------------------------------------------------------------------------------------------
varA float %9.0g
varB float %9.0g
varC float %9.0g
但是,有没有一种方法可以只提取匹配的组件并对其进行循环?
理想的代码应类似于以下代码:
des var*
foreach postfix in `r(wildcardmatches)' {
display "`postfix'"
}
如果集合r(wildcardmatches)
存在。
* sandbox
clear
set obs 1
foreach v in varA varB varC {
gen `v' = 42
}
* core idea and verification
unab wanted : var*
local wanted : subinstr local wanted "var" "", all
display "`wanted'"
A B C
也可以使用ds
命令:
clear
set obs 1
foreach v in varA varB varC {
generate `v' = 42
}
ds var*
foreach x in `"`= subinstr("`r(varlist)'", "var", " ", .)'"' {
display "`x'"
}
A B C
我不知道如何直接仅获取匹配的组件,但是此解决方法可以间接获取它:
local prefix="var"
foreach variable of varlist `prefix'* {
local postfix=subinstr("`variable'", "`prefix'", "", .)
// Work with postfix
}