Forvalues-loop显示错误的语法

时间:2017-02-12 16:15:11

标签: loops stata

我想生成依赖于给定变量games的变量名。 例如,如果games为3,则结果为

game1 =均匀分布值列表

game2 =同等等。

虽然在类似问题上有多个示例和答案,但我无法理解为什么我的代码无法产生我想要的结果

Stata显示以下循环的语法错误:

set obs 1000

forvalues i = 1(1)games {
generate game`i' = runiform()
}

1 个答案:

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