我有一个全球宏:
global global_macro sheep frog dragon
我遍历这个宏,我希望能够根据global_macro
的当前索引值生成三个新变量:
foreach i in $global_macro {
***define local index***
...
gen new_var_`index' = 5
}
所以我希望它生成变量new_var_1
,new_var_2
和new_var_3
,因为sheep
是global_macro
中的第一个值,{{1}是第二个,frog
是第三个。 dragon
首先包含index
,然后是1
,最后是2
。
我知道扩展宏函数中基本上存在相反的功能3
。这允许人们基于索引访问宏中的值 - 而不是基于值访问索引。
有功能可以做我想做的事吗?
答案 0 :(得分:2)
我认为这可以满足您的需求:
clear
set more off
// original list/indices
local wordlist sheep frog dragon
// attach indices to words
quietly forvalues i = 1/3 {
local creature : word `i' of `wordlist'
local `creature'_idx `i'
}
// access indices based on words
foreach i in frog dragon sheep {
display "Creature `i' has index ``i'_idx'"
}
它可能是重构的,但重点是为每个单词创建一个保存其相应索引的local
;然后你可以访问任何单词的索引(基于单词)。
(我可能会遗漏一些明显的功能/命令来做你想做的事。)
答案 1 :(得分:1)
这应该这样做
local n: word count $global_macro
forval index = 1/`n' {
gen new_var_`index' = 5
}
最佳