Stata编程:如何将regexr处理后的宏内容解析为变量名?
解决Stata中regexr()结果作为变量名解析的问题
你遇到的问题核心是没有正确执行Stata函数并将结果存入本地宏,导致宏中存储的是函数表达式文本,而非预期的变量名字符串。
问题根源
原代码中两处函数调用都没有被执行:
local bin_check regexm("var'", "bin(bot|mid|top)$"):宏bin_check存储的是完整的regexm()`函数文本,而非0/1的判断结果local varfreq regexr("var'", "bin(bot|mid|top)$", "freq"):宏varfreq存储的是regexr()`函数文本,而非替换后的变量名
修正后的代码
program define testprog syntax varlist foreach var of varlist `varlist' { // 执行regexm获取判断结果,存入bin_check local bin_check = regexm("`var'", "bin(bot|mid|top)$") if `bin_check' { // 执行regexr获取替换后的变量名,存入varfreq local varfreq = regexr("`var'", "bin(bot|mid|top)$", "freq") } else { local varfreq `var'freq } gen `var'_wk = . replace `var'_wk = 1 if `varfreq' == 1 } end gen joboffers_earn = 0 gen joboffers_earnbinbot = 0 gen joboffers_earnfreq = 1 testprog joboffers_earn joboffers_earnbinbot
关键修正点
- 给宏赋值函数结果时,需要添加
=号,Stata会自动执行右侧的表达式并将结果存入宏;也可以用反引号包裹函数(local bin_checkregexm(...)''`),效果一致。 - 修正后,
varfreq会正确存储目标变量名:处理joboffers_earnbinbot时,regexr会将末尾的binbot替换为freq,得到joboffers_earnfreq,replace语句就能正确识别这个变量。
运行修正后的代码,joboffers_earn_wk和joboffers_earnbinbot_wk都会被设为1,符合预期逻辑。
内容的提问来源于stack exchange,提问作者vinceroni
相关产品推荐
相关产品推荐

