Stata中forvalues中的表达式

时间:2013-12-23 21:20:22

标签: for-loop stata

我想使用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表达相同的内容,但我想避免这种情况。

1 个答案:

答案 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”。是什么导致你采用不正确的拼写?