2013-12-23 44 views
1

我想表達以下使用的Stata代碼:表達式forvalues在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來表達相同的內容,但我想避免這種情況。

回答

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術語來說:這裏的野獸是本地宏,並且在這個代碼中沒有變量。

注意:Mata更接近您給出的類C語法。

注意:使用本地宏時無法避免本地宏。 forvalues是關於使用本地宏來控制循環的。

注意:正確的拼寫是「Stata」。這種語言在1985年僅被簡稱爲「STATA」。是什麼導致你採用錯誤的拼寫?

+0

我編輯了我的問題,我的手指不是很好。 –

+0

對不起,我無法理解你的筆記。 注1)爲什麼在這個問題中Mata語法很重要?在STATA中,我們可以使用Mata嗎? 注2)我認爲你的句子對於任何肯定都是正確的(p => p)。是我錯過了什麼? 注3)「什麼導致你採用錯誤的拼寫?」? STATA的名字? –

+0

您的代碼是Mata代碼,您可以使用'mata:'在Stata中執行代碼。 – Metrics