2013-09-01 20 views
1

我是Stata中編程的新手。我的問題是在一個循環中運行幾雙迴歸,如下所示:通過在Stata循環中串聯一個字符串來定義一個變量

reg outcome1 outcome2 covariates 
reg outcome2 outcome1 covariates 

我嘗試以下方法,但前兩個附帶的錯誤「含糊的縮寫」,第二個錯誤「太少指定的變量「。任何人都可以幫我解決它嗎?

foreach dv in x y z { 
     local outcome1 = `dv' + "1" 
     local outcome2 = `dv' + "2" 
     reg `outcome1' `outcome2' covariates 
     reg `outcome2' `outcome1' covariates 
} 

foreach dv in nduration nsleep nwaso nlatency nfragmentation npctsleep { 
     gen outcome1 = `dv' + "1" 
     gen outcome2 = `dv' + "2" 
     reg `outcome1' `outcome2' covariates 
     reg `outcome2' `outcome1' covariates 
} 

foreach dv in x y z { 
     reg `dv'1 `dv'2 covariates 
     reg `dv'2 `dv'1 covariates 
} 
+0

你的其他問題表明你已經安裝了R.你試圖做的事情需要在R中進行一些爭論,但是在Stata中它非常簡單(Nick在下面有完整的答案)。歡迎來到Stata :) –

+0

謝謝!我很高興能夠學習Stata編程。 – Randel

回答

3

你問什麼是不清楚,因爲你的第三個解決方案應該工作,只要你拼出協名字。

這裏的連接只是並置,但您需要將名稱連接爲字符串。你不需要在你的例子中創建宏。

foreach dv in x y z { 
    reg `dv'1 `dv'2 covariates 
    reg `dv'2 `dv'1 covariates 
} 

第二種解決方案是錯誤的,因爲從塔塔的角度來看,你嘗試添加一個數字變量,並在每個generate命令文本字符串。

第一個解決方案將與線條更好像

local outcome1 "`dv'1" 

這使得字符串操作明確,但正如上面你不需要這些額外的宏。

這也應該工作

local outcome1 = "`dv'" + "1" 

的點要記住(直到它們變得毫不費力地知道)是

  1. 宏操作提供了變量名的一種工作方式,不變量內容。

  2. Stata在嘗試執行命令之前執行所有宏替換。

我寫http://www.stata-journal.com/sjpdf.html?articlenum=pr0005作爲循環在Stata教程審查,包括利用當地的宏。

+0

非常感謝您的回答和教程!他們非常有幫助和全面! – Randel

+1

@Randel W謝謝。 Stata期刊有許多說明材料;所有3歲以上的人都可以公開訪問。 –

相關問題