I have a global macro:
global global_macro sheep frog dragon
I loop over this macro and I want to be able to generate three new variables based on the current index value of global_macro
:
foreach i in $global_macro {
***define local index***
...
gen new_var_`index' = 5
}
So I want it to produce the variables new_var_1
, new_var_2
, and new_var_3
because sheep
is the first value in global_macro
, frog
is the second, and dragon
is the third. index
would first contain 1
, then 2
, and finally 3
.
I know that there is basically the opposite functionality in the extended macro function called word
. This allows one to access a value in a macro based on the index - as opposed to accessing the index based on the value.
Is there a function to do what I would like?
I think this does what you want:
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'"
}
It can probably be refactored, but the main point is to create for each word a local
that holds its corresponding index; then you can access any word's index (based on the word).
(I may be missing some obvious function/command to do what you want.)