martes, 16 de abril de 2019

Programando un comando de estimación en Stata: Macros globales versus Macros locales.

Artículo original escrito por David M. Drukker, Director Ejecutivo de Econometría.


En este post analizo un par de ejemplos que ilustran las diferencias entre las macros globales y las macros locales. Pueden ver esta publicación como un apéndice técnico de la publicación anterior en la serie #StataProgramming, que introdujo macros globales y macros locales.

En cada comando que escribo, uso macros locales para almacenar cosas en un área de trabajo que no alterará los datos de un usuario y también facilitará la lectura de mi código. Una buena comprensión de las diferencias entre las macros globales y las macros locales me ayuda a escribir mejor código. Las diferencias esenciales entre las macros globales y las macros locales se pueden resumir en dos puntos:


  1. Solo hay una macro global con un nombre específico en Stata, y se puede acceder o cambiar su contenido por un comando de Stata ejecutado en cualquier nivel de Stata.
  2. En contraste, cada nivel de Stata puede tener una macro local de un nombre específico, y los comandos ejecutados en otros niveles de Stata no pueden acceder o cambiar el contenido de cada uno.

Sí se siente listo y cómodo con 1 y 2, omita el resto de esta publicación.

Las macros globales son globales

Los do-files globala.do y global.do, en los bloques de código globala y global, ilustran lo que significa ser global.


La forma más fácil de ver lo que este código hace es ejecutarlo; el resultado está en el ejemplo 1.


Ejemplo 1: Resultado de do globala


La linea 5 de globalb.do puede acceder al contenido de vlist creado en la linea 5 del globala.do porque vlist es una macro global.

La figura 1 presenta este mismo punto gráficamente: la macro global vlist está en la memoria global, y un comando ejecutado en cualquier lugar puede acceder o cambiar el contenido de vlist.


Macros locales son locales

Los do-files locala.do y local.do en los bloques de código 3 y 4 ilustran lo que significa ser local.


La forma más fácil de ver lo que este código hace es ejecutarlo; el resultado está en el ejemplo 2.

Ejemplo 2: Resultado de do locala


El código en los bloques 3 y 4 y la salida en el ejemplo 2 ilustran que un comando ejecutado a nivel de localb.do no puede cambiar la macro local mylist que es local a locala.do. La línea 8 de locala.do muestra los contenidos de mylist para locala.do. El contenido sigue siendo a b c después de que localb.do termine porque la macro local mylist creada en la línea 3 de locala.do es local para locala.do y no se ve afectada por la mylist creada en la línea 3 de localb.do.

La figura 2 muestra este punto gráficamente. Se puede acceder y cambiar el contenido de la macro local mylist que es local para locala.do mediante comandos ejecutados en locala.do, pero no mediante comandos ejecutados en localb.do. De manera análoga, los comandos ejecutados en localb.do pueden acceder y cambiar el contenido de la macro local mylist que es local a localb.do, pero no los comandos ejecutados en locala.do.



Hecho y sin hacer

Básicamente en esta publicación proporcioné un apéndice técnico de la publicación anterior. Ilustré que las macros globales son globales y que las macros locales son locales. Utilizaré los conceptos desarrollados hasta ahora para presentar un comando ado en la siguiente publicación.




Este blog es administrado por MultiON Consulting S.A. de C.V.

No hay comentarios.:

Publicar un comentario