我想生成依赖于给定变量games
的变量名。
例如,如果games
为3,则结果为
game1
=均匀分布值列表
game2
=同等等。
虽然在类似问题上有多个示例和答案,但我无法理解为什么我的代码无法产生我想要的结果
Stata显示以下循环的语法错误:
set obs 1000
forvalues i = 1(1)games {
generate game`i' = runiform()
}
答案 0 :(得分:2)
Stata的意义上games
真的是一个变量吗?一次又一次地保持相同的常数是不必要且低效的。
问题是forvalues
希望看到数字;它不会即时执行评估。但Stata的其他部分也会这样做。
如果您知道只需要3个变量,那么您可以这样做:
clear
set obs 1000
forvalues i = 1/3 {
generate game`i' = runiform()
}
或者你可以这样做:
clear
set obs 1000
local games = 3
forvalues i = 1/`games' {
generate game`i' = runiform()
}
这与我的开头段落并不矛盾。在执行任何命令之前执行所有宏评估;因此forvalues
看到3,而不是本地宏名称。
如果你真的在变量中持有一个常量,那么这将起作用:
clear
gen games = 3
set obs 1000
forvalues i = 1/`=games[1]' {
generate game`i' = runiform()
}