For loop 在循环中包含变量局部宏

For loop 在循环中包含变量局部宏,for-loop,stata,local,stata-macros,For Loop,Stata,Local,Stata Macros,使用forvalues循环,我正在合并400个单独数据集的列表 这些数据集可以是10个不同值中的一个(由数据集中的一个变量定义):根据数据集的不同,我将与不同的数据集合并。例如,如果Player 90是type 9,我想与type_9.dta合并,而不是type_8或type_7 我想要的是这样的东西: forvalues x = 1/400 { use "player_`x'.dta" * some way to turn the value of player type i

使用
forvalues
循环,我正在合并400个单独数据集的列表

这些数据集可以是10个不同值中的一个(由数据集中的一个变量定义):根据数据集的不同,我将
与不同的数据集合并。例如,如果Player 90是type 9,我想与
type_9.dta
合并,而不是
type_8
type_7

我想要的是这样的东西:

forvalues x = 1/400 {
    use "player_`x'.dta"

    * some way to turn the value of player type into a local macro l *

    merge 1:1 using "type_`l'.dta"
}

如何将变量类型放入宏中,并通过循环对每种类型进行更改?

我不太清楚数据的结构和最终目标,因此可能有更有效的方法

如果每个玩家数据集中的玩家类型没有变化,您可以使用
levelsof
。它的特点是,如果播放器类型因某些原因(如数据输入错误)发生变化,则循环将出错

forvalues x = 1/400 { 
   use "player_`x'.dta"
   levelsof player_type, local(l)
   merge 1:1 **some_id_var** using "type_`l'.dta" 
}

这一点我也不清楚:例如,如果您已经
merge
d了一个数据集,那么如何停止再次执行该操作?但是如果
player\u type
是常量,那么使用
player\u type[1]
的值就足够了,所以不需要启动
levelsof
。我使用了
levelsof
,因为如果
player\u type
实际上不是常量,循环就会中断。好;我现在明白了。最好在修改你的答案时把它解释清楚。下面的答案有用吗?