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

问题描述 投票:1回答:3

我有一组变量,例如varAvarBvarC

如何循环显示only后缀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)存在。

wildcard stata
3个回答
2
投票
* 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

0
投票

也可以使用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

0
投票

我不知道如何直接仅获取匹配的组件,但是此解决方法可以间接获取它:

local prefix="var"
foreach variable of varlist `prefix'* {
    local postfix=subinstr("`variable'", "`prefix'", "", .)
    // Work with postfix
}
© www.soinside.com 2019 - 2024. All rights reserved.