来自变量名称的通配符匹配集

Set of wildcard matches from variable names

我有一组变量,例如 varAvarBvarC

如何 后缀 ABC 循环?

我知道我可以获得所有匹配的变量如下:

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)