在forvalues循环中使用local报告语法错误

Yan Song

我正在使用两级循环来创建一组变量。但是Stata报告语法错误。

    forvalues i = 1/5 {
        local to `i'+1
        dis `to'

        forvalues j = `to'/6{
            dis `j'
            gen e_`i'_`j' = .
        }

    }

我不知道我在哪里犯了语法错误。

还有一个后续问题。我想更改上面示例中循环数的编码方式。现在,它被硬编码为5和6。但是我想根据数据来制作。例如,我编码如下:

        sum x
        scalar x_max_1 = `r(max)'-1
        scalar x_max_2 = `r(max)'

        forvalues i = 1/x_max_1 {
        local to = `i'+1
        dis `to'

        forvalues j = `to'/x_max_2{
            dis `j'
            gen e_`i'_`j' = .
        }

    }

但是,在这种情况下,Stata报告语法错误。我不知道为什么。标量是数字变量。为什么上面的代码不起作用?

尼克·考克斯

您的代码会更好

forvalues i = 1/5 {
    local to = `i' + 1
    forvalues j = `to'/6 {
        gen e_`i'_`j' = .
    }
}

用你的代码去了

local to `i' + 1 

因此,第一次绕循环to成为字符串或文本1 + 1,然后将其作为的参数是非法的forvalues也就是说,local没有=符号定义将导致文本的复制,而不是表达式的评估。

您使用的方式display无法向您显示此错误,因为display使用该方式将尽可能评估表达式。如果您坚持认为宏是一个带有

di "`to'" 

那么您会看到其内容的。

另一种方法是

forvalues i = 1/5 {
    forvalues j = `= `i' + 1'/6 {
        gen e_`i'_`j' = .
    }
}

编辑

您进一步询问了

sum x
scalar x_max_1 = `r(max)'-1
scalar x_max_2 = `r(max)'

forvalues i = 1/x_max_1 {

对此可以说很多。让我们从各种更好的解决方案之一开始进行研究:

sum x, meanonly 
forvalues i = 1/`= r(max) - 1' {

或者另一个,也许更透明:

sum x, meanonly 
local max = r(max) - 1 

forvalues i = 1/`max' { 

这里的消息是什么:

  1. 如果只需要最大值,请指定meanonly同意:仅选项名称并不暗含此意思。有关更多信息,请参见https://www.stata-journal.com/sjpdf.html?articlenum=st0135

  2. 将r类结果推r(max)入a的意义scalar何在?您已经有了所需的东西r(max)通过以下类比来教育自己。

我有我想要的。现在,我将其放入盒子中。现在,我将其开箱即用。现在我有了我想要的。想到这一点,可以减少票务业务。

在这种情况下scalar该框是,两个scalar

  1. forvalues不会评估标量来提供所需的数字。这将以多种语言发生,但不是在这里。

  2. 更巧妙地,forvalues甚至不评估local引用或类似的构造。发生的事情是,Stata的通用语法解析器会在您键入的内容传递给之前为您完成此操作forvalues

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Crystal报告语法错误

Bash报告语法错误,但找不到。验证语法

在循环中的内联if语句中使用break会导致语法错误

如何避免VS Code警告:“ [myfile] .java是非项目文件,仅报告语法错误”

非常简单的gitlab-ci.yml报告语法错误

for循环中的Python语法错误

循环中的AWK语法错误

循环中的IF语句引发语法错误

while as 循环中的语法错误

变量附近的语法错误,期望在循环中使用步骤表达式(XQuery、SQL Server)

OCaml 编译器在“in”上报告语法错误但交互式解释器运行没有缺陷

for循环中循环语法错误:意外的文件结束

Python for-if 列表理解循环中的语法错误

如何避免Postgresql的FOR循环中出现语法错误?

在循环中调用异步等待时出现语法错误

while循环中的HTML输出语法错误PHP

为什么在for循环中收到无效的语法错误?

如何解决 Ocaml 循环中的语法错误?

在while循环中的语法错误在意外的标记`in'附近

提到的语法错误在这个 while 循环中

“类路径不完整。只会报告语法错误”在带有 Java Play Eclipse 项目的 VSCode 中

尝试在dict.update中使用for循环时出现语法错误

循环中php中的数组混乱(获取意外的'[')的语法错误+关于使用php显示CSV文件的混乱

使用日期的For循环编译错误:语法错误

在shell脚本中尝试在循环中运行awk时出现“语法错误:循环变量无效”

循环的无效语法错误

For循环if语句语法错误

While循环语法错误

While循环语法错误