如何在宏中获取值索引

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_1new_var_2new_var_3 因为 sheepglobal_macrofrog是第二个,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 来做你想做的事。)