Stata 6: ¿Qué hago si el comando que necesito no se puede usar con by?
Título | Stata 6: utilización de bucles while cuando el comando no es una opción | |
Autor | Jeremy B. Wernow, StataCorp |
Hay varios comandos en Stata que no permitirán el comando by como opción. Dos ejemplos son el comando tab1 y los comandos graph con la opción saving (). Una forma de evitar esta característica es poner el comando que desea ejecutar en un bucle while:
Que no funciona. Sin embargo, sabemos que rep78 tiene valores entre 1 y 5, así que intentemos un bucle while en un archivo do:
local i = 1 while `i' <=5 { tab1 mpg price if rep78 == `i' local i = `i' + 1 }
Aquí está la salida de la ejecución de este archivo:
¿Qué pasa si rep78 tiene valores faltantes? En este caso, puede usar el comando egen para crear una nueva variable que categorice cada valor en rep78.
Aquí está el archivo do modificado:
local i = 1 egen y = group(rep78), missing while `i' <=6 { tab1 mpg price if y == `i' local i = `i' + 1 }
Al usar la opción faltante con el comando egen, los valores faltantes de rep78 se codificarán con un valor de 6 (recordando que rep78 tiene valores de 1 a 5). Tenga en cuenta que la salida de este archivo do ahora contendrá tabulaciones para mpg y precio para los valores faltantes de rep78 también.
Ahora pasemos a un ejemplo más difícil. Un usuario recientemente quiso usar el comando by con el comando graph y la opción saving ().
by no se puede usar con la opción graph, saving() debido a problemas de nomenclatura (¿cómo nombraría cada gráfico individual?). Esto se puede resolver con otro archivo do:
local i = 1 egen y = group(rep78), missing while `i' <=6 { graph mpg price if y == `i', saving(graph`i',replace) local i = `i' + 1 }
La salida de este archivo do es
Que funcionó como queríamos.
Hay mucho que puedes hacer con este concepto. Como ejemplo final y aún más complejo, el mismo usuario también dijo que quería usar la opción by () con la opción saving (), graficándolas con otra variable, y necesitaba esto para una lista de variables. Esto probablemente suene confuso al principio (y lo fue). Esencialmente, necesitábamos
por var1: gráfico var2 var3, guardando(gráfico) por (var4)
Se usarían varias variables diferentes en lugar de var3.
La solución es usar un comando for dentro de un bucle while. Este es un ejemplo de uso del conjunto de datos automático:
Esto resulta en