INTRODUCCIÓN AL MANEJO DE INFORMACIÓN EN STATA 9.0 CON APLICACIÓN A LA ENCUESTA DE HOGARES
Wilson Mayorga y Rafael Escalante
Esta página muestra parte del texto pero sin formato.
Puede bajarse el libro completo en PDF comprimido ZIP (62 páginas, 797 kb) pulsando aquí
Un programa es un archivo que se aplica en Stata diseñado por el usuario para realizar operaciones definidas por el mismo usuario.
Cuando se escribe un comando no reconocido por Stata el programa “pensará” que es un programa y buscará su nombre. Si lo encuentra lo aplica. La sintaxis básica de un programa es:
Program define nombre del programa
Comandos y operaciones de Stata
End
Es recomendable iniciar el archivo con la versión de Stata sobre la cual desea operar(version 9.0 para este caso). Además del comando capture program drop, para que cada vez que se inicie el programa escrito se borre la memoria temporal de Stata.
Capture program drop nombre del programa
Si se desea que alguna línea no sea leída se antepone un asterisco(*); y si se desea crear comentarios, se inician con (/*) y se finaliza con(*/). Estos comentarios pueden colocarse en cualquier parte, incluso entre líneas o entre comandos. Es importante anotar que estos comentarios sólo pueden hacerse en este tipo de archivos.
Un programa y un archivo *.do no son muy diferentes para Stata(los lee igual), pero existen algunas diferencias. Estas son:
• Un archivo *.do se aplica con do nombre del archivo, un programa se aplica con sólo su nombre.
• Los programas deben ser cargados antes de ser aplicados. Para cargar un programa, la forma “simple” es primero usar run seguido del nombre del archivo donde quedó guardado el programa y luego sí aplicar el programa(simplemente dando su nombre).
Run nombre archivo
Nombre del programa
• Un archivo *.do imprime en la ventana de resultados las operaciones y los comandos usados. Un programa sólo imprime resultados.
Al igual que los archivos *.do un programa puede llamar otros programas (incluso un programa puede usar archivos *.do y viceversa).
Los programas pueden crearse en el editor de archivos *.do o en cualquier editor de texto y pueden guardarse como archivos *.do o como archivos *.ado.
Una forma más eficiente de ahorrarse este problema entre archivos es guardar directamente el programa como si fuera un archivo *.ado, y esto se hace directamente desde el editor de *.do
EJEMPLO DE UN PROGRAMA TIPICO
Capture log close
log using nombre archivo log, replace
set more off
Capture program drop nombre del programa
program define nombre del programa
…operaciones…
end
log close
exit
RECOMENDACIÓN IMPORTANTE: Se recomienda no complicar al programa con rutas de archivos muy largas. Lo ideal es tener todos los archivos referentes a un ejercicio en una única carpeta( Y SÓLO UNA CARPETA). Y también debe guardarse cada archivo *.ado en algún sitio que Stata lo pueda encontrar(por ejemplo el listado de rutas donde stata por default).
• ALGUNOS COMANDOS UTILES EN PROGRAMACION
• COMANDO SET:
Set puede utilizarse de la siguiente manera:
Set memory
Set textsize
Pero tiene otros muchos usos. Dentro de un archivo *.do puede usarse para:
Set more esta línea hace que el programa se detenga en cada pantallazo y así con un enter el usuario va leyendo.
Set rmsg off Esta línea evita que aparezca la sintaxis de cada comando en la pantalla de resultados.
Set output error Suprime todos los outputs que pudieran aparecer producto de comandos, excepto los mensajes de error.
• COMANDO DISPLAY
Sirve para imprimir títulos.
Display “título”
• COMANDO ASSERT
Este comando asegura o verifica que algún condicional sea verdad. Si lo es, no producirá output. Si no lo es, imprimirá “assertion is false” y detendrá el archivo *.do donde se encuentre. La sintaxis básica es:
By categórica: assert expresión if condición in rango
Ejemplos:
Assert costos>=0.2 | costos <=0.8 if year==1997
Assert costos ~=.
• COMANDO PRESERVE
Este comando permite que se modifique una tabla de datos dentro de un programa, pero que una vez finalizado el programa se mantenga la tabla original sin modificaciones.
Program define nombre
Operaciones
Preserve
Comandos que “destruyen” los datos originales y realizan cálculos
End
El comando preserve mantiene la tabla una vez el programa finalice. Si se desea que cargue nuevamente la tabla original desde el mismo programa, en alguna línea específica se usa además de preserve el comando restore.
Program define nombre
Operaciones
Preserve
Comandos que “destruyen” los datos originales y realizan cálculos
Restore, preserve
Otros cálculos sobre la tabla original
End
• COMANDO QUIETLY
Este comando impide que sea impreso el output de un comando. Su sintaxis es:
Program define nombre
Quietly regress `1’ `2’
End
Program define nombre
Quietly {
Regress `1’ `2’
Predict resid, resid
Sort resid
Summarize resid, detail
}
list `1’ `2’
drop resid
end
• MACROS
NOTA: En esta sección se hará uso de la siguiente sintaxis, la cual es muy importante cumplir. Cuando se hable de comillas individuales realmente corresponde a `1’. Es decir, el primer símbolo es la tilde y el segundo es la comilla individual.
Una macro dentro de Stata corresponde a las variables utilizadas en un programa de Stata. Pueden ser locales o globales. Las macros locales deberán tener máximo una letra menos que los comandos ( en la versión 6.0 eran 7 letras, en la versión 7.0 son 31).
Ejemplo
Local lista1 “variable1 variable2”
Hemos creado una macro que hace que cada vez que se diga
List lista1 imprimirá variable1 variable2
Otra forma de llamar macros es con:
`lista1’
local lista variable1 variable2 variable3
regress dependiente `lista’
Las macros locales o globales pueden tener el mismo nombre y Stata las reconocerá como diferentes.
Cuando se desea que la macro deje de ser alfanúmerica(aplicable a títulos) y funcione como operaciones, lo único que debe hacerse es definir la operación:
Ejemplo:
Local dos = 2 + 2
En este caso se define una macro llamada dos la cual evalúa la operación y tendrá valor de 4.
Ejemplo:
Suponga que ya existe una macro llamada i y se le desea sumar un número 3. La sintaxis será:
Local i = `i’ + 1
Nótese que para definir variables alfanuméricas se usan dobles comillas(“ “) y para operar con macros ya creadas se usa comillas sencillas (` ‘).
Ejemplo:
If “`respuesta’” ==”si” {
}
else {
}
Nótese el uso de dobles comillas: “” y también de ‘ ‘ dentro del llamado a la macro de nombre respuesta. La razón es que, primero las comillas sencillas se refieren al uso de la macro y las comillas dobles se refieren a que el contenido de esta macro es alfanumérico.
• ARGUMENTOS EN PROGRAMAS
Suponga que llama un programa de la siguiente forma:
Programa variable1 variable2
En este caso tanto variable1 como variable2 son argumentos del programa y se incluyen como macros para ser operados dentro del programa.
Stata por default define macros usando números cuando se colocan variables seguidos de un programa o un archivo *.do.
Por ejemplo:
Do ejemplo1 var1 var2 var3 var4
Se definen automáticamente las siguientes macros:
`0’ que será igual a todo lo que el usuario escribió desde var1 hasta var4 con espacios comillas, todo.
`1’ la primera palabra que corresponde a var1
`2’ la segunda palabra que corresponde a var2
etc..
capture program drop tester
program define tester
display "argument 1 is |`1'|"
display "argument 2 is |`2'|"
display "argument 3 is |`3'|"
display "argument 4 is |`4'|"
end
exit
Una mejor forma de llamar los argumentos dentro de un archivo do o un programa es usando el comando args. Con este comando se asignan los nombres a las posiciones llenadas por el usuario al llamar el programa.
Ejemplo:
Program define programa1
Args var1 var2 var3 var4
…operaciones…
end
Entonces var1 var2 var3 var4 se convierten en cuatro variables locales que corresponden a `1’ `2’ `3’ `4’ respectivamente.
Otro ejemplo puede ser el siguiente:
Program define ejemplo1
Args n a b
Drop _all /*se usó una variable del sistema que borra todas
las variables en memoria*/
set obs = `1’
generate x = (_n-1)/(_N-1)*(`b’-`a’)+`a’
end
• USO DE CONDICIONALES
Los principales comandos que podemos usar en programación son:
If – else
While
Foreach
Forvalues
• COMANDO IF
Su sintaxis es:
If expression {
Comandos Stata
}
else if expression {
comandos stata
}
else {
comandos stata
}
Ejemplo:
Este programa toma 2 argumentos. El primero es una variable existente(x). El segundo argumento es un número(n). El programa creará una variable llamada z. Si n>0, z = x^n; si n=0, entonces z=log(x) y si n<0 entonces z= -x^n. Esta es la transformación de box-cox.
capture program drop potencia
program define potencia
if `2'>0 {
generate z =`1'^`2'
label variable z "`1^`2'"
}
else if `2'==0 {
generate z = log(`1')
label variable z = "log(`1')"
}
else {
generate z = -(`1'^(`2'))
label variable z "`1'^(`2')"
}
end
Aquí introducimos la sintaxis para los corchetes. Estos indican operaciones repetitivas(loop) todo lo que vaya dentro de corchetes se hará de manera que cumpla la condición impuesta, bien sea por un condicional if, como en este caso, o por otros condicionales como los que siguen a continuación.
• COMANDO FOR
Este comando permite realizar operaciones repetitivas. Su sintaxis básica es:
For variable in rango tipo de lista : comando condición en función de X.
Siendo x un letra que siempre debe ir; en este caso particular(únicamente con este comando) la X es fija como sintaxis; y también nótese que la X va en mayúscula.
En general estas variables comodin(en mayúscula para escribir la operación correspondiente) son:
X, Y, Z, A, B, C, D, E mejor dicho, cualquier cosa que vaya en MAYUSCULA
Se pueden tener varios tipos de lista separados por \; de igual manera se pueden tener varias condiciones separadas por \
Los tipos de lista pueden ser:
Var Un listado de variables: var1 var2 var3
New una nueva variable
Num Una secuencia de números(por ejemlo 4/10)
Any para cualquier variable
Ejemplos:
• Creación de 100 variables con números uniformes:
(debe haberse definido el tamaño de la tabla previamente. Esto se hace con la instrucción set obs número)
set obs 100
For new u1-u10: gen x=uniform()
• Reemplaza en cualquier variable un missing value:
For any . : replace z=. If y= X
• Genera nuevas 5 variables que corresponden a los poderes de x2, x3, x4, x5.
For new x2-x5 \ num 2/5: gen X =variable^Y
• COMANDO FORVALUES
La sintaxis para este comando es:
forvalues nueva_macro = rango {
comandos referidos a nueva_macro
}
Donde nueva macro es el nombre de una nueva macro local y rango especifica el rango de valores para los cuales se desea operar.
• Ejemplo: Construcción de un contador hasta 10
program define diez
forvalues i = 1(1)10 {
display "`i'"
}
end
Nótese la sintaxis del rango la macro se llama i y empieza en 1(va de 1 en 1)hasta 10.
program define ejemplo
local N = _N
forvalues i = 1(1)`N' {
display name[`i']
display _column(10) "genero " genero[`i']
}
end
• COMANDO WHILE
La sintaxis para este comando es:
while condicion {
comandos Stata
}
• Ejemplo: Construcción de un contador hasta 10
program define diez_w
local i = 1
while `i' <= 10 {
display `i'
local i = `i' + 1
}
end