Stata:检查本地宏是否未定义

时间:2011-03-07 06:03:04

标签: undefined stata stata-macros

我正在写一个Stata do文件,如果用户不提供某些参数,我想提供默认值。为此,我想检查宏是否未定义。

我想出了一个hacky方法来做到这一点:

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

但我想知道是否有惯用的方法来做到这一点。

3 个答案:

答案 0 :(得分:8)

如果未定义,宏的内容将为空。你可以这样做:

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

如果宏包含数字,则不需要引号。 missing(x)函数可以处理字符串和数字。这有点像测试(x=="" | x==.)

答案 1 :(得分:5)

这个问题要求采用惯用的方式来实现这一目标并跨越Stata程序员

 if "`macroname'" != "" 

是最常用的测试是否定义宏的测试。宏在定义时包含字符串,这是一般用法;使用数字字符只是一种特殊情况。

答案 2 :(得分:2)

OP询问是否有一种方法可以测试本地是否未定义。 Stata中实际上不存在已定义/未定义的概念(这会使刚接触Stata的用户感到困惑,但对编程并不陌生。)

更像Stata的思考方式是本地人是否失踪。如果尚未定义本地,则将其视为丢失。但是,如果已将局部变量定义为缺少的值(例如空字符串exe:),则它也被认为是缺少的。

因此,在Stata中无法区分未定义或正在定义但包含缺失值的字符串本地,即空字符串""。在下面的示例中,已经给出的两个答案都无法捕获""(定义为空字符串)和localA(未定义)之间的区别:

localB