2013-06-02 203 views
2

我已經詢問question如何檢查變量的存在。尼克考克斯回答了它。然後我試圖修改的答案,使用foreach循環,但它沒有工作:使用Stata檢查變量的存在

foreach var in var1 var2 var3 { 
capture su `var', meanonly 
if _rc == 0 { 
local varMean = r(mean) 
local varMin = r(min) 
local varMax = r(max) 
} 
else display `var' "DOES NOT EXIST" 
} 

我還試圖用of而不是in ......還是沒有結果。我收到一條消息var2 not found並停止執行。 capture必須以foreach爲前綴嗎?我試過......沒有工作?

回答

7

這是微妙的。

鑑於var2不存在,塔塔仍然被指示(在else分支內)

display `var' "DOES NOT EXIST" 

將被解釋爲

display var2 "DOES NOT EXIST" 

所以,第一次看到

display var2 

它傾向於解釋爲

display var2[1] 

- 在第一次觀測的價值 - 但說var2不存在,和Stata的抱怨。

你想要的是顯示名稱var2,而不是其內容(其中,一次,不存在),而解決方法是簡單地

else display "`var' DOES NOT EXIST" 

雙引號分隔符的位置是至關重要的,強制display不存在的東西的名稱。不存在的東西的名稱只是任意文本,Stata對這些文本沒有問題。

總之,當饋送給display

"`macro'" 

是要顯示的字符串,但

`macro' 

是要被顯示的變量或標量的名稱,或以其它方式與宏定義要顯示的內容。順便說一句,你的循環只是覆蓋了先前的一組存儲結果,但大概你會在適當的時候得到這個結果。