2011-03-07 11 views
8

Estoy escribiendo un archivo Stata .do y me gustaría proporcionar los valores predeterminados si el usuario no proporciona algunos parámetros. Para hacerlo, me gustaría comprobar si una macro no está definida. Yo he llegado con una forma hacky para hacer esto:Stata: compruebe si una macro local no está definida

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

Pero me gustaría saber si hay una manera idiomática para hacer esto.

Respuesta

8

Si no está definido, el contenido de la macro estaría vacío. Puede hacer esto:

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

Las comillas no son realmente necesarias si la macro contendrá un número. La función missing(x) puede manejar cadenas y números. Es algo así como la prueba (x=="" | x==.)

+0

No creo que haya una manera "oficial" de hacer este tipo de cosas. Puede leer los archivos .ado que vienen con Stata (en 'C: \ Program Files \ ...') Hacen cosas diferentes para este tipo de prueba. También podría interesarle la función 'cond()'. – Keith

+0

No pude especificar esto en mi pregunta original, pero en realidad estoy tratando de verificar si el nombre de una macro es _not_ undefined. Resulta que 'if! Missing (\' macroname ') {'funciona para esto. ¡Muchas gracias! – Wilduck

5

La pregunta de una forma idiomática para hacer esto ya través de los programadores de Stata

if "`macroname'" != "" 

es el momento por la prueba más comúnmente utilizada de si se define una macro. Las macros contienen cadenas cuando están definidas, y este es el uso general; el uso de caracteres numéricos es solo un caso especial.

+1

A pesar del misterioso voto negativo, esto sigue siendo relevante y correcto. Sería interesante ver la visión alternativa del infractor, sea lo que sea. –

Cuestiones relacionadas