来自变量名称的通配符匹配集
Set of wildcard matches from variable names
我有一组变量,例如 varA
、varB
和 varC
。
如何仅 后缀 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)
存在。
我不知道如何直接获取匹配的组件,但这个解决方法是间接获取它:
local prefix="var"
foreach variable of varlist `prefix'* {
local postfix=subinstr("`variable'", "`prefix'", "", .)
// Work with postfix
}
* 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
编辑新泽西州:
foreach v of var var* {
display "`: subinstr local v "var" "", all'"
}
似乎简化了同样好的想法。也就是说,如果你要遍历通配符 varlist,你可以直接用 foreach
和 said varlist 循环。您不需要 ds
将 varlist 推入 r(varlist)
。
我有一组变量,例如 varA
、varB
和 varC
。
如何仅 后缀 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)
存在。
我不知道如何直接获取匹配的组件,但这个解决方法是间接获取它:
local prefix="var"
foreach variable of varlist `prefix'* {
local postfix=subinstr("`variable'", "`prefix'", "", .)
// Work with postfix
}
* 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
编辑新泽西州:
foreach v of var var* {
display "`: subinstr local v "var" "", all'"
}
似乎简化了同样好的想法。也就是说,如果你要遍历通配符 varlist,你可以直接用 foreach
和 said varlist 循环。您不需要 ds
将 varlist 推入 r(varlist)
。