2011-03-07 70 views
8

我正在編寫一個Stata .do文件,並且如果用戶不提供某些參數,它想提供默認值。爲此,我想檢查宏是否未定義。我想出了一個hacky的方式來做到這一點:Stata:檢查本地宏是否未定義

*** For a local macro with the name value: 
if `value'1 != 1 { 
    ...do stuff 
} 

但我想知道是否有一種慣用的方式來做到這一點。

回答

8

如果未定義,宏的內容將爲空。你可以這樣做:

if missing("`mymacroname'") { 
    display "Macro is undefined" 
} 

如果宏將包含一個數字,則不需要引號。 missing(x)函數可以處理字符串和數字。這是一種像測試(x=="" | x==.)

+0

我不認爲有這樣的「官方」方式來做這種事情。您可以閱讀Stata附帶的.ado文件(在'C:\ Program Files \ ...'中)。它們針對這種測試做了不同的事情。你也可能對'cond()'函數感興趣。 – Keith 2011-03-07 18:53:45

+0

我沒有在我原來的問題中指定這個,但我實際上試圖檢查一個宏名是否是_not_ undefined。事實證明,「if!missing(\'macroname'){'適用於此。非常感謝! – Wilduck 2011-03-08 04:36:50

5

要求的慣用方式來做到這一點,整個塔塔程序員的問題

if "`macroname'" != "" 

遠遠由宏是否被定義最常用的測試。宏定義時包含字符串,這是一般用法;數字字符的使用只是一個特例。

+1

儘管神祕downvote,這仍然是相關和正確的。看到downvoter的另一種觀點,不管它是什麼,都會很有趣。 – 2013-08-27 16:30:19