Stata 如何循环变量名的一部分?

Stata 如何循环变量名的一部分?,stata,stata-macros,Stata,Stata Macros,我需要使用一个本地宏来循环Stata中变量名的一部分 以下是我试图做的: local phth mep mibp mbp tab lod_`phth'_BL Stata将无法识别整个变量名 variable lod_mep not found r(111); 如果我删除'phth'后面的下划线,它仍然无法识别宏名称后面的任何内容 我希望避免使用复杂的foreach循环 有没有办法只用简单的宏就可以做到这一点? 谢谢 您的请求有点令人困惑。首先,这正是循环的目的,其次,Stata中的循环(在“

我需要使用一个本地宏来循环Stata中变量名的一部分

以下是我试图做的:

local phth mep mibp mbp
tab lod_`phth'_BL
Stata将无法识别整个变量名

variable lod_mep not found
r(111);
如果我删除'phth'后面的下划线,它仍然无法识别宏名称后面的任何内容

我希望避免使用复杂的
foreach
循环

有没有办法只用简单的宏就可以做到这一点?
谢谢

您的请求有点令人困惑。首先,这正是循环的目的,其次,Stata中的循环(在“入门级”)非常简单。下面的例子有点荒谬(考虑到结构,有更简单的方法来实现),但应该传达基本思想

// set up a similar variable name structure
sysuse auto , clear
rename (price mpg weight length) /// 
       (pref_base1_suff pref_base2_suff pref_base3_suff pref_base4_suff)

// define a local macro to hold the elements to loop over
local varbases = "base1 base2 base3 base4"

// refer to the items of the local macro in a loop
foreach b of local varbases {
    summ pref_`b'_suff
}
有关
foreach
的语法,请参阅
help foreach
。特别要注意的是,由于Stata的varlist结构(请参见
帮助varlist
),上述结构甚至可能不需要。例如,继续上面的代码:

foreach v of varlist pref_base?_suff {
    summ `v'
}
通配符
代替一个字符<代码>*可用于提高灵活性。但是,如果您的变量不容易使用varlist允许的模式匹配来识别,那么第一个示例中的循环就足够简单了——四行非常短的代码


后记 进一步思考后(有时问题的结构会锚定某个方法,而另一种方法更简单),搜索帮助文件以查找有关制表命令(
help tablate
)的信息将引导您使用以下语法:
tab1 varlist[if][in][weight][,tab1\u options]

鉴于以上关于varlist使用的讨论,您可以简单地编写代码

tab1 lod_m*_BL
当然,假设没有其他变量与您不想报告频率表的模式匹配。或者

tab1 lod_mep_BL lod_mibp_BL lod_mbp_BL

虽然没有使用任何类型的通配符或宏替换,但不会太长,并且会起作用。

您的请求有点令人困惑。首先,这正是循环的目的,其次,Stata中的循环(在“入门级”)非常简单。下面的例子有点荒谬(考虑到结构,有更简单的方法来实现),但应该传达基本思想

// set up a similar variable name structure
sysuse auto , clear
rename (price mpg weight length) /// 
       (pref_base1_suff pref_base2_suff pref_base3_suff pref_base4_suff)

// define a local macro to hold the elements to loop over
local varbases = "base1 base2 base3 base4"

// refer to the items of the local macro in a loop
foreach b of local varbases {
    summ pref_`b'_suff
}
有关
foreach
的语法,请参阅
help foreach
。特别要注意的是,由于Stata的varlist结构(请参见
帮助varlist
),上述结构甚至可能不需要。例如,继续上面的代码:

foreach v of varlist pref_base?_suff {
    summ `v'
}
通配符
代替一个字符<代码>*可用于提高灵活性。但是,如果您的变量不容易使用varlist允许的模式匹配来识别,那么第一个示例中的循环就足够简单了——四行非常短的代码


后记 进一步思考后(有时问题的结构会锚定某个方法,而另一种方法更简单),搜索帮助文件以查找有关制表命令(
help tablate
)的信息将引导您使用以下语法:
tab1 varlist[if][in][weight][,tab1\u options]

鉴于以上关于varlist使用的讨论,您可以简单地编写代码

tab1 lod_m*_BL
当然,假设没有其他变量与您不想报告频率表的模式匹配。或者

tab1 lod_mep_BL lod_mibp_BL lod_mbp_BL

虽然没有使用任何类型的通配符或宏替换,但不会太长,并且会起作用。

您的请求有点令人困惑。首先,这正是循环的目的,其次,Stata中的循环(在“入门级”)非常简单。下面的例子有点荒谬(考虑到结构,有更简单的方法来实现),但应该传达基本思想

// set up a similar variable name structure
sysuse auto , clear
rename (price mpg weight length) /// 
       (pref_base1_suff pref_base2_suff pref_base3_suff pref_base4_suff)

// define a local macro to hold the elements to loop over
local varbases = "base1 base2 base3 base4"

// refer to the items of the local macro in a loop
foreach b of local varbases {
    summ pref_`b'_suff
}
有关
foreach
的语法,请参阅
help foreach
。特别要注意的是,由于Stata的varlist结构(请参见
帮助varlist
),上述结构甚至可能不需要。例如,继续上面的代码:

foreach v of varlist pref_base?_suff {
    summ `v'
}
通配符
代替一个字符<代码>*可用于提高灵活性。但是,如果您的变量不容易使用varlist允许的模式匹配来识别,那么第一个示例中的循环就足够简单了——四行非常短的代码


后记 进一步思考后(有时问题的结构会锚定某个方法,而另一种方法更简单),搜索帮助文件以查找有关制表命令(
help tablate
)的信息将引导您使用以下语法:
tab1 varlist[if][in][weight][,tab1\u options]

鉴于以上关于varlist使用的讨论,您可以简单地编写代码

tab1 lod_m*_BL
当然,假设没有其他变量与您不想报告频率表的模式匹配。或者

tab1 lod_mep_BL lod_mibp_BL lod_mbp_BL

虽然没有使用任何类型的通配符或宏替换,但不会太长,并且会起作用。

您的请求有点令人困惑。首先,这正是循环的目的,其次,Stata中的循环(在“入门级”)非常简单。下面的例子有点荒谬(考虑到结构,有更简单的方法来实现),但应该传达基本思想

// set up a similar variable name structure
sysuse auto , clear
rename (price mpg weight length) /// 
       (pref_base1_suff pref_base2_suff pref_base3_suff pref_base4_suff)

// define a local macro to hold the elements to loop over
local varbases = "base1 base2 base3 base4"

// refer to the items of the local macro in a loop
foreach b of local varbases {
    summ pref_`b'_suff
}
有关
foreach
的语法,请参阅
help foreach
。特别要注意的是,由于Stata的varlist结构(请参见
帮助varlist
),上述结构甚至可能不需要。例如,继续上面的代码:

foreach v of varlist pref_base?_suff {
    summ `v'
}
通配符
代替一个字符<代码>*可用于提高灵活性。但是,如果您的变量是