如何获取宏的价值指数

时间:2015-04-20 18:55:57

标签: indexing global stata stata-macros

我有一个全球宏:

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_macro中的第一个值,{{1}是第二个,frog是第三个。 dragon首先包含index,然后是1,最后是2

我知道扩展宏函数中基本上存在相反的功能3。这允许人们基于索引访问宏中的值 - 而不是基于值访问索引。

有功能可以做我想做的事吗?

2 个答案:

答案 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
}

最佳