Ocasionalmente, un paso en su trabajo (una transformación de datos, algún análisis) tiene que ser realizado repetidamente, con alguna ligera variación. Imagine que desea realizar varios análisis de regresión con un conjunto determinado de variables independientes, por ejemplo, para investigar el efecto de estas variables en una serie de resultados. (Tenga en cuenta que para un análisis totalmente simultáneo de varios resultados, tal vez se podría utilizar el procedimiento sureg
; supongamos que esto no es lo que queremos hacer aquí). Por supuesto, podría escribir el primer comando, copiar la línea de comandos, intercambiar el nombre de la variable dependiente, y así sucesivamente. Pero los bucles a veces facilitan las cosas.
Hay dos formas de definir bucles: foreach
se refiere a una lista de elementos a enumerar, mientras queforvalues
se refiere a un rango de números con el efecto de que lo que sigue se ejecuta en cada uno de estos números. Los siguientes ejemplos espero que lo aclaren.
Bucles con foreach
Utilicemos el ejemplo con el que empecé esta entrada. Supongamos que se desea investigar los efectos de los ingresos, la situación familiar y el género en una serie de variables dependientes (por supuesto, este ejemplo está muy simplificado). Utilizando foreach
, esto puede lograrse así:
foreach x in excl depr satisface happy activ {
regress `x’ income i.famstat gender
}
Esto ejecutará análisis de regresión de las variables «excl», «depr» y así en el conjunto de variables independientes. Los nombres de las variables de la lista que sigue a «foreach x» sustituirán sucesivamente a la x en la línea que comienza con regression
. En lugar de x, podría utilizarse cualquier otro carácter o cadena de caracteres.
Asegúrese de observar dos cosas: Primero, las llaves y su colocación. La lista de elementos de la lista va seguida de una llave de apertura (¡en la misma línea!). El(los) comando(s) a ser ejecutado(s) sigue(n) en la(s) siguiente(s) línea(s) – en realidad, pueden seguir varios comandos que se repetirán mientras Stata está trabajando a través de la lista de elementos en la lista. El corchete de cierre sigue en una línea extra al final.
En segundo lugar, dentro de los corchetes, x (o lo que sea que usted pueda usar en su lugar) está rodeado por un acento grave, o gravis, a la izquierda, y un apóstrofe a la derecha. (Acabo de enterarme de que los programadores lo llaman «backquote», «backtick» o «backgrave», que no debe confundirse con «backstop»). Tenga en cuenta que el manual de Stata (y otras fuentes de Stata) se refieren al acento grave con el nombre de «comilla simple izquierda», pero al menos en los teclados QUWERTZ alemanes (y para los usuarios alemanes que usan comas para las comillas simples izquierdas) creo que es más correcto hablar del acento grave (o gravis, en francés: acento grave). Sea como sea, fíjese en el glifo del comando anterior – lo que ve aquí es correcto, mientras que el manual de Stata a menudo parece engañoso (¡para los usuarios alemanes!).
La lista de elementos que sigue a foreach in
no tiene por qué ser una lista de variables; puede ser cualquier lista de elementos. Mire el siguiente ejemplo, que es un caso especial en el que estos elementos son una serie de números. Si este no es el caso, sigue con foreach, pero por lo demás procede de la misma manera.
Bucles con forvalues
A veces te encuentras con una situación en la que algo, por ejemplo, una lista de variables, está relacionada con una lista de números consecutivos. He aquí un ejemplo real de mi trabajo reciente (aquí se han simplificado algunos nombres de variables bastante incómodos). En los datos de las encuestas, a menudo se encuentra información sobre los miembros del hogar en el que vive el encuestado. En este caso, la información sobre la situación actual de los miembros se almacenaba en las variables «hhms_2» a «hhms_10» (¡el primer miembro del hogar es el propio encuestado!). Quería crear, para cada miembro del hogar, una variable ficticia que indicara si estaba empleado o no (con varios tipos de empleo codificados de 1 a 4). Una de las varias formas de hacerlo era:
forvalues i= 2/10 {
gen emp’i’ = inrange(hhms_`i’,1,4)
}
Los números del 2 al 10 se denominan con el índice «i» en este ejemplo, pero en lugar de «i» se puede utilizar cualquier carácter o cadena de caracteres (como, por ejemplo, «número»), o incluso números. Dentro del bucle, el índice está rodeado por el acento grave (o gravis) a la izquierda y el apóstrofe a la derecha. Atención: El primer acento grave, es decir, el que sigue a «emp», parece aquí un apóstrofe debido a algunos problemas técnicos que he encontrado, pero en la vida real debería ser siempre un acento grave.
El resultado es una serie de nuevas variables, llamadas «emp2» a «emp10», con valores de 1 si el respectivo miembro del hogar está empleado y 0 en caso contrario.