我想在变量索引中使用循环标量。样例代码:

forvalues j = 1(1)9 {

gen cname_year`j' = CNAME if acyear == `j'

if `j' > 1 {
scalar endv = `j' - 1
forvalues k = 1(1)`endv' {

replace cname_year`j' = cname_year`j'[_n+`k'] if acyear[_n+`k'] == `j' & ID[_n] == ID[_n+`k']

}
}
}

下面的行给我一个“语法错误”:
replace cname_year`j' = cname_year`j'[_n+`k'] if acyear[_n+`k'] == `j' & ID[_n] == ID[_n+`k']

不确定如何解决此问题。任何帮助,不胜感激!

最佳答案

此处无需使用scalar,但如果您这样做,则肯定需要其他语法。试试吧

local endv = `j' - 1

较大的代码示例似乎在以某种尴尬的方式处理面板数据。如果您对此遇到进一步的问题,则可能需要返回论坛,但是我们需要更多的上下文来明确尝试的内容。

如果要使用标量,则语法为
forvalues k = 1(1)`= endv'

或(可以说是更明确的样式),因为endv可以是变量名
forvalues k = 1(1)`= scalar(endv)'

您使用的语法是为本地宏设计的,因此需要定义一种。

关于loops - Stata : How to use scalars in variable indexes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24015632/

10-11 21:58