我想使用Stata代码表达以下内容:
for(i=0;i<n;++i) {
for(j=i+1;j<n-1;++j) {
print i*j;
}
}
外部for
可以是:
forvalues i = 0/`n' {
//rest of the code
}
但是内部for
有表达式,我不知道如何表达。
PS:我想我知道如何使用局部变量或while
表达相同的内容,但我想避免这种情况。
答案 0 :(得分:2)
此代码片段演示了一些技巧。它预先假定先前定义了本地宏n
。
长版:
local I = `n' - 1
forval i = 0/`I' {
local J = `I' - 1
local ip1 = `i' + 1
forval j = `ip1'/`J' {
display `i' * `j'
}
}
更短的版本:
forval i = 0/`= `n' - 1' {
forval j = `=`i' + 1'/`= `n' - 2' {
display `i' * `j'
}
}
注意:术语“局部变量”只是Stata术语的大杂烩,您可以从变量所在的其他位置导入。在Stata术语中:这里的野兽是本地宏,并且此代码中没有变量。
注意:Mata更接近您提供的类C语法。
注意:使用本地宏时无法避免使用本地宏。 forvalues
就是使用本地宏来控制循环。
注意:正确的拼写是“Stata”。这种语言在1985年才被简称为“STATA”。是什么导致你采用不正确的拼写?