如何在宏中获取值索引
How to get index of value in macro
我有一个全局宏:
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
、frog
是第二个,dragon
是第三个。 index
将首先包含 1
,然后是 2
,最后是 3
。
我知道在名为word
的扩展宏函数中基本上有相反的功能。这允许人们根据索引访问宏中的值——而不是根据值访问索引。
是否有功能可以满足我的需求?
应该这样做
local n: word count $global_macro
forval index = 1/`n' {
gen new_var_`index' = 5
}
最佳
我认为这符合您的要求:
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
,保存其对应的索引;然后你可以访问任何单词的索引(基于单词)。
(我可能遗漏了一些明显的 function/command 来做你想做的事。)
我有一个全局宏:
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
、frog
是第二个,dragon
是第三个。 index
将首先包含 1
,然后是 2
,最后是 3
。
我知道在名为word
的扩展宏函数中基本上有相反的功能。这允许人们根据索引访问宏中的值——而不是根据值访问索引。
是否有功能可以满足我的需求?
应该这样做
local n: word count $global_macro
forval index = 1/`n' {
gen new_var_`index' = 5
}
最佳
我认为这符合您的要求:
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
,保存其对应的索引;然后你可以访问任何单词的索引(基于单词)。
(我可能遗漏了一些明显的 function/command 来做你想做的事。)