澄清在 Stata 中创建交互项的循环

Clarification for a loop to create interaction terms in Stata

我发现以下 question/answer 我认为符合我的要求:https://www.stata.com/statalist/archive/2009-09/msg00449.html

然而,我不清楚这一切到底是怎么回事,想更深入地了解一下。解决方案代码如下:

unab vars : var1-var30
local nvar : word count `vars'
forval i = 1/`nvar' {
  forval j = 1/`=`i'-1' {
    local x : word `i' of `vars'
    local y : word `j' of `vars'
    generate `x'X`y' = `x' * `y'
  }
}

我不明白第 4 行中的语句:``=i'-1'.

i指的是集合{1,...,n}中的数字,但我不明白equals或-1在做什么。我的假设是 -1 以某种方式消除了自己的观察,但我不清楚。任何解释将不胜感激。

假设您有一个在一定范围内变化的局部宏 i,并且您希望它的值减 1。您总是可以这样做

  local j = `i' - 1 

然后参考j。您也可以即时执行此操作:

 `= `i' - 1' 

 `=   ' 

Stata 将计算表达式,这里

`i' - 1 

并在命令行中替换该表达式的结果。

你也可以用标量来做到这一点:

scalar foo = 42 

然后参考

`= foo' 

但是,请注意。标量名称和变量名称占用相同的名称空间。

`= scalar(foo)' 

在任何情况下都可以消除歧义并且可以说是很好的风格。