【发布时间】:2018-02-25 20:16:41
【问题描述】:
我发现以下问题/答案符合我的意愿: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 以某种方式消除了自己的观察,但我不清楚。任何解释将不胜感激。
【问题讨论】:
-
与观察无关,这里甚至没有提到。外循环在所有变量的集合上,内循环在少一个上。在伪代码
j中,从1运行到i - 1。语法见help macro。 -
好吧,你想做什么?
=i'-1' 语句是 Stata 宏语法。宏引号内的 = 符号告诉 Stata 计算表达式,因此每个循环的计算结果为 'i' - 1。然而,正如尼克所说,这与观察无关,所以也许你还没有找到你的解决方案?这会创建一组变量的所有成对交互(除了自己的交互,即平方)。 -
感谢 cmets。我以前没有在宏中遇到过 = 符号,这很有帮助。为了确保我理解正在发生的事情,我可以将宏或变量(在本例中为 i)嵌套在带有等号的宏引号内以对其进行评估,这可以在我想要评估包含宏的表达式的任何时候完成.所以以下是等价的: 1/
i' or 1/=`i'' 并且两者都会产生包括二次项在内的交互作用。一个相关的问题:是否有类似的方法来引用表达式中的标量?还是我需要将其存储为宏来评估表达式?
标签: loops stata interaction