澄清在 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)'
在任何情况下都可以消除歧义并且可以说是很好的风格。
我发现以下 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)'
在任何情况下都可以消除歧义并且可以说是很好的风格。