首页 > 解决方案 > 来自变量名的通配符匹配集

问题描述

我有一组变量,比如varAvarBvarC

我怎样才能只遍历后缀A,BC?

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

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)存在。

标签: wildcardstata

解决方案


* 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

推荐阅读