Está en la página 1de 25

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/310605749

Creación de variables con Stata

Chapter · November 2016

CITATIONS READS

0 36,944

3 authors, including:

J.M. Losilla Jaume Vives


Autonomous University of Barcelona Autonomous University of Barcelona
96 PUBLICATIONS 1,876 CITATIONS 61 PUBLICATIONS 965 CITATIONS

SEE PROFILE SEE PROFILE

All content following this page was uploaded by Jaume Vives on 23 November 2016.

The user has requested enhancement of the downloaded file.


Proceso y análisis de datos
con Stata

Procedimiento 2:
Creación de variables

© 2016, Josep Maria Losilla Vidal, Jaume Vives Brosa, y Eva Penelo
Universitat Autònoma de Barcelona
Procedimiento 2 (P2S): Creación de variables

Introducción ............................................................................................................................................. 2
P2S.1 Recodificación de variables ........................................................................................................... 3
P2S.2 Cálculos con expresiones aritméticas y estadísticas ...................................................................... 5
P2S.3 Cálculos con fechas y horas ........................................................................................................... 8
P2S.4 Uso de expresiones lógicas .......................................................................................................... 10
P2S.5 Recuento de eventos .................................................................................................................... 16
P2S.6 Grabación del fichero de datos y de sintaxis ................................................................................ 18
Ejercicio ................................................................................................................................................. 19
Solución del ejercicio ............................................................................................................................. 21
Matriz de datos HABITOX_P2S_final.dta: Aspecto del contenido del editor de datos ................... 21
Matriz de datos HABITOX_P2S_final.dta: Variables Manager ...................................................... 22
Archivo de sintaxis HABITOX_P2S.do ........................................................................................... 23

Introducción
Habitualmente, antes de iniciar el proceso de análisis estadístico es necesario crear nuevas variables a
partir de las existentes en la matriz de datos. La creación de estas nuevas variables puede implicar desde
cálculos sencillos de diferencia entre dos fechas para obtener un tiempo transcurrido (como, por ejemplo,
la edad en años cumplidos a partir de la fecha de nacimiento y la fecha de respuesta a un cuestionario),
hasta complejas operaciones aritméticas o lógicas a partir de un gran número de variables originales (por
ejemplo, para definir un diagnóstico DSM o CIE a partir de un conjunto de síntomas e indicadores).
Stata incluye potentes herramientas para la creación de nuevas variables en su menú Data. Como
veremos, en la mayor parte de casos estas operaciones se podrán realizar mediante cuadros de diálogo que
evitan tener que aprender la sintaxis de las instrucciones Stata. En otros casos aprender dicha sintaxis será
inevitable para asegurar que la creación de la nueva variable se realiza correctamente, teniendo en cuenta
contingencias como la presencia de valores faltantes (missing).

Pàgina 2 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
P2S.1 Recodificación de variables
Una de las operaciones habituales de transformación de datos consiste en cambiar la escala de una
variable cuantitativa continua o discreta para crear una nueva variable categórica ordinal, o bien asignar
códigos numéricos a los valores de una variable alfanumérica (de tipo cadena o str).

Para realizar recodificaciones Stata dispone de la orden recode en el menú Data.


 Recodificar en las mismas variables: es el comportamiento por defecto en Stata; reasigna los
valores o colapsa los rangos de una variable en nuevos códigos que se almacenan en la misma
variable original que se está recodificando. Es útil, por ejemplo, para transformar la edad en rangos
de edad, pero tiene el inconveniente que se sustituye y, por tanto, se pierde, la información original
de la variable recodificada.
 Recodificar en distintas variables: realiza la misma operación que la opción anterior, pero
escribiendo los nuevos códigos en una nueva variable. Esta opción es la aconsejable para no perder
la información original, pero debe indicarse expresamente en Stata.

Modo de indicar los rangos de valores al recodificar variables continuas


La forma correcta de indicar los rangos de valores cuando se recodifica una variable continua es la
siguiente:
min a valor1, valor1 a valor2, …, valorN a max
El valor superior de un intervalo se indica como valor inferior del siguiente para que la recodificación
sea exhaustiva. Por otro lado, en Stata los términos min y max representan, respectivamente, los valores
mínimo y máximo posibles de la variable. Para indicar un rango de valores consecutivos, se utiliza la
barra inclinada Ejemplo:
min/10, 10/20, 20/30, 30/max
En este ejemplo, Stata asigna el valor 10 al primer intervalo y no al segundo, ya que ejecuta la
instrucción de izquierda a derecha. El valor 20 se asigna al segundo intervalo y el valor 30 al tercero.
Lógicamente, cuando la variable cuantitativa a recodificar es discreta no es necesario solapar los
límites superior e inferior de los intervalos consecutivos. Dada la naturaleza de su escala de medida, a
diferencia de las variables cuantitativas continuas, en las discretas existe la garantía de que entre dos
valores consecutivos no puede existir un tercer valor.

La orden recode del menú Data | Create or change data | Other variable-transformation commands |
Recode categorical variable permite cambiar los códigos asignados a una variable. Esta operación puede
resultar útil para agrupar en un único valor distintos valores de la variable original.
Vamos a crear la nueva variable nivel de consumo de tabaco (variable Fumador) a partir del número de
cigarrillos que los sujetos fuman en promedio cada día (Numcig). Para ello establecemos previamente los
siguientes criterios:

NUMCIG FUMADOR
Valor Valor Etiqueta
0 0 No fumador
1a4 1 Menos de 5 cigarrillos/día
5a9 2 Menos de 10 cigarrillos/día
Mayor o igual a 10 3 10 o más cigarrillos/día

1. Abre Stata e importa el fichero de datos HABITOX_P2S_inicial.dta ejecutando el menú File | Open,
o bien, haz doble clic sobre este fichero en el explorador de Windows (esta acción abre Stata y el
fichero de datos de forma automática).
2. Ejecuta a continuación el menú Data | Create or change data | Other variable-transformation
commands | Recode categorical variable.

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 3 de 24
3. En el cuadro de diálogo de Recode, para asegurarte que creas una nueva variable, ves en primer
lugar a la pestaña Options y en la opción Generate new variable escribe el nombre de la nueva
variable: Fumador. Y en la opción Specify a name for the value label definded by the
transformation rules, escribe el nombre del diccionario que se aplicará automáticamente:
dFumador. Al indicar el nombre del diccionario dFumador, Stata lo creará automáticamente a partir
de los valores y etiquetas que definiremos a continuación en la pestaña Main.

4. Vuelve a la pestaña Main y elige la variable Numcig en la lista de variables:

5. En el recuadro Required, escribe la primera regla de recodificación: 0=0. A continuación, escribe la


etiqueta que corresponde a la nueva categoría 0 de la nueva variable Fumador entre comillas: "No
fumador". Ambas informaciones deben ir dentro de un único paréntesis: (0=0 "No fumador").
6. En el primer recuadro Optional abre paréntesis, escribe la siguiente regla de recodificación, que
indica cambiar los valores de 1 a 4 por el valor 1; añade la etiqueta de la nueva categoría entre
comillas y cierra el paréntesis: (1/4=1 "Menos de 5 cigarrillos/día").
7. En el siguiente recuadro, escribe la regla de recodificación para cambiar los valores de 5 a 9 por el
valor 2 y su etiqueta.
8. Finalmente, hay que asignar el valor 3 al rango de valores superior o igual a 10. En este caso hay que
indicar que el rango 10/max tendrá el nuevo valor 3. De este modo se indica que deseamos asignar a

Pàgina 4 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
la nueva variable Fumador el valor 3 a los casos que contengan un valor desde 10 hasta el valor
máximo que pueda tomar la variable Numcig en la matriz de datos.

¡Atención! Para asegurarse que las reglas de recodificación son exhaustivas, puede usarse como
última regla de recodificación la siguiente expresión:
else=.
Esta expresión asigna el valor faltante vacío a todos los valores no contenidos en las reglas
precedentes. De lo contrario, y dado que la orden recode se inicia con los valores originales, si las
reglas de recodificación no incluyen todos los valores existentes en la matriz de datos, se
conservaría el valor antiguo como nuevo valor.

9. Ya hemos finalizado el proceso de asignación de valores a la nueva variable. Ahora ya sólo resta
pulsar OK, que automáticamente añade la orden recode a la ventana Review de la ventana principal
y la ejecuta mostrando los resultados en la ventana Results de la ventana principal. Al finalizar la
sesión podremos guardar el contenido de la ventana Review con la ventaja que en cualquier
momento podremos abrir el fichero de sintaxis guardado y volver a ejecutar las instrucciones que se
desee sin tener que volver a completar los cuadros de diálogo correspondientes.

10. A continuación, cambia la etiqueta [RECODE of Numcig (Nº de cigarrillos/día)] que Stata asigna
por defecto a la nueva variable Fumador, mediante la ventana Variables Manager. Para ello,
ejecuta el menú Data | Variables Manager, selecciona la nueva variable Fumador y modifica el
Label escribiendo Grado de adicción al tabaco. Finalmente, pulsa Apply para guardar los cambios.
11. Finalmente, cambia el tipo a byte.
12. Comprueba que la nueva variable Fumador aparece como última columna en la ventana Data Editor
(Browse). Verifica también en algunos casos que la nueva variable contiene efectivamente los
códigos correctos en función de los valores de la variable Numcig.

P2S.2 Cálculos con expresiones aritméticas y estadísticas


Otra operación habitual de preparación de los datos consiste en crear nuevas variables como resultado de
cálculos aritméticos y estadísticos a partir de los valores de variables existentes en la matriz de datos

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 5 de 24
original. El menú Data | Create or change data de Stata permite realizar esta operación mediante tres
órdenes: generate, replace y egen.

Elementos de una expresión Stata


Para facilitar la escritura de las expresiones, Stata incluye en los cuadros de diálogo un conjunto de
botones y una lista de funciones que al pulsarlos insertan en la expresión el elemento correspondiente:
 Valores constantes:
 Números: se escriben directamente (ejemplo, 34).
 Valores faltantes: se escribe como un punto (.).
 Nombres de variables: Stata distingue entre mayúsculas y minúsculas (ejemplo, PESO, Peso).
 Operadores aritméticos (de mayor a menor orden de precedencia, es decir, de ejecución):
 ^ (potencia)
 / (división)
 * (multiplicación)
  (resta)
 + (suma)
 Operadores de comparación (relacionales) (de mayor a menor orden de precedencia):
 != (distinto de; también ~=)
 > (mayor que)
 < (menor que)
 <= (menor o igual que)
 >= (mayor o igual que)
 = = (igual que)
 Operadores (nexos) lógicos (de mayor a menor orden de precedencia):
 ! (NOT) (negación; también ~)
 & (AND) (y; producto lógico)
 | (OR) (o; suma lógica)
 Funciones. La orden egen (extended generate) de Stata incluye un gran número de funciones que
permiten realizar diversos tipos de operaciones por filas o por columnas (aritméticas, estadísticas,
de conversión de tipos de datos, de fechas/horas, de cadena, de tratamiento de valores faltantes,
etc.). Ejecutando help egen se puede acceder a la ayuda, donde se muestra un texto explicativo de
la operación que realiza, así como de su sintaxis y ejemplos de uso.
Orden de ejecución de los elementos de una expresión: uso de paréntesis
Cuando se incluyen paréntesis en una expresión, Stata evalúa en primer lugar la parte de la expresión
que se encuentra entre los paréntesis. De esta manera se puede romper el orden de ejecución (de
precedencia) de los operadores, orden que por defecto es el siguiente:
(1) Funciones.
(2) Operadores aritméticos.
(3) Operadores de comparación (relacionales).
(4) Operadores (nexos) lógicos.
(5) Variables y valores constantes.
Comportamiento de los valores faltantes en las operaciones aritméticas y estadísticas
Con la orden generate, cuando una expresión de cálculo utiliza operadores o funciones aritméticas, si
algún elemento contiene un valor faltante (missing) el resultado será también un valor faltante.
Por el contrario, con la orden egen las funciones extendidas devuelven el valor resultante de operar
sobre la información disponible; sólo retornaran un valor faltante si a) ninguna de las variables sobre
las que operan tiene valor, b) se indicado un número mínimo de valores no faltantes y no se alcanza
dicho mínimo, o c) se ha aplicado una condición en la pestaña if y no hay ningún valor que cumpla la

Pàgina 6 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
condición indicada. Para indicar la ausencia de valores faltantes se escribe la condición que la/s
variables/s sean distintas al valor faltante (.); por ejemplo:
Numcig != .

Para ejemplificar el uso de la orden generate de Stata, vamos a crear la variable IMC (índice de masa
corporal) como resultado de dividir el Peso en kilogramos de los participantes por su Talla en metros al
cuadrado:
1. Ejecuta el menú Data | Create or change data | Create new variable.
2. En el cuadro de diálogo hay que escribir IMC en el recuadro Variable name y, a continuación,
seleccionar la opción Specify a value or an expression y pulsar Create... para abrir el generador de
expresiones (Expression Builder).
3. Para introducir la expresión de cálculo en el recuadro de texto, despliega la lista de variables. Hay que
tener en cuenta que la Talla está registrada en centímetros, por lo que hay que pasarla a metros
dividiendo su valor por 100. Para ir introduciendo los nombres de las variables que intervienen en la
expresión, hay que ir haciendo doble clic en la lista de Variables que se encuentra dentro de
Categories. También es posible escribir directamente con el teclado en el recuadro de texto.
La siguiente figura muestra el resultado final de la expresión, en el cual se puede observar también la
importancia del uso de paréntesis para que Stata realice correctamente la operación de cálculo; en este
caso el paréntesis ( Talla / 100 ) es necesario y el paréntesis exterior ( ( Talla / 100 ) ^ 2 ) no lo es
pero permitiría indicar más claramente la expresión:

Nótese que en Variable type dejamos el valor float por tratarse de una variable con decimales.
4. Pulsa el botón OK del cuadro de diálogo Expression Builder y, a continuación, pulsa de nuevo OK
en el cuadro de diálogo generate. En la ventana principal aparece la orden generate, tanto en la
ventana Review como en la de Results. Etiqueta la nueva variable IMC desde el menú Variables
Manager o bien desde la ventana Properties.

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 7 de 24
5. Finalmente, comprueba que la nueva variable IMC aparece como última columna en la ventana Data
Editor (Browse). Verifica también en algunos casos que la nueva variable contiene efectivamente el
índice de masa corporal, con valores que oscilaran alrededor de los 20 puntos en los casos con una
adecuada relación entre el peso y la talla, y con valores superiores a 25 en los casos con un peso
superior al que correspondería a su talla. Observa que, si las variables Peso y/o Talla presentaban
datos faltantes, la nueva variable IMC aparece como valor faltante (.), dado que la orden generate
sólo se ejecuta para los casos con información completa.

P2S.3 Cálculos con fechas y horas


Los cálculos con fechas y horas pueden requerir el uso de funciones específicas de Stata. Para ello, Stata
dispone del conjunto de funciones Date and time, dentro de la categoría de funciones del generador de
expresiones de la orden generate:

Consideraciones sobre la precisión de los tiempos transcurridos


Aunque habitualmente cuando se utilizan tiempos transcurridos como diferencia entre dos momentos
temporales (dos fechas o dos horas) se acostumbra a truncar el resultado, es decir, a eliminar la parte
decimal, para expresarlo en una unidad temporal completa (por ejemplo, en años, meses o semanas
cumplidas.), este truncamiento no representa el valor exacto y se debe evitar para que los cálculos
estadísticos con este tipo de variables sean correctos. Por este motivo, siempre que sea posible es
preferible obtener los datos de los momentos temporales que de los tiempos transcurridos para poder
obtener este nivel de precisión en los cálculos.
En el caso que no se disponga de los valores de los momentos temporales necesarios para realizar el
cálculo exacto del tiempo transcurrido entre ellos, sino que se dispone directamente de una medida
completa de dicho tiempo transcurrido (por ejemplo, una edad en años cumplidos), antes de proceder a
los análisis estadísticos hay que realizar una corrección sumando el valor 0,5. Esto es así, porque los
tiempos transcurridos completos en realidad expresan el límite inferior del intervalo temporal entre
dicho valor y el instante anterior al valor consecutivo superior (por ejemplo, una edad de 43 años
cumplidos en realidad indica que la persona tiene una edad comprendida entre 43 y el instante anterior
a cumplir los 44 años).

Pàgina 8 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
Para practicar, vamos a crear la variable Edad calculando el tiempo transcurrido en años entre la fecha de
respuesta al cuestionario Fresp y la fecha de nacimiento Fnac. Deberás restar ambas fechas y dividir entre
365.25 para pasar los días a años transcurridos:
1. Ejecuta el menú Data | Create or change data | Create new variable.
2. En el cuadro de diálogo hay que escribir Edad en el recuadro Variable name y, a continuación,
seleccionar la opción Specify a value or an expression y pulsar Create... para abrir el generador de
expresiones y desplegar la lista de variables.
3. Para escribir la expresión en el cuadro Expression Builder pulsa el doble paréntesis, inserta la
diferencia entre las variables Fresp (fecha de respuesta al cuestionario) y Fnac (fecha de nacimiento)
y después divide dicho paréntesis entre 365.25. Pulsa el botón OK.

4. Pulsa el botón OK del cuadro de diálogo Expression Builder y, a continuación, pulsa de nuevo OK
en el cuadro de diálogo generate. En la ventana principal aparece la orden generate, tanto en la
ventana Review como en la de Results.
5. A continuación, abre la ventana Variables Manager para indicar la etiqueta Edad de respuesta al
cuestionario de la nueva variable Edad. Puedes realizar la misma acción desde la ventana
Properties.

6. Finalmente, comprueba que la nueva variable Edad aparece como última columna en la ventana Data
Editor (Browse). Verifica también en algunos casos que la nueva variable contiene efectivamente la
edad en años como tiempo transcurrido entre su fecha de respuesta y su fecha de nacimiento.

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 9 de 24
P2S.4 Uso de expresiones lógicas
Otro tipo de variable calculada que habitualmente es necesario definir es aquella cuyo resultado no se
obtiene a partir de un cálculo aritmético o estadístico, sino de una expresión lógica. Este tipo de variables
también se pueden crear en Stata con la orden generate.
Un ejemplo típico de este tipo de variable calculada lo constituyen los diagnósticos (como, por ejemplo,
la hipertensión o la obesidad según los criterios de la OMS, el trastorno bipolar según el DSM-IV, etc.) o,
desde un punto de vista más general, los sistemas de clasificación.

Estructura de una expresión lógica simple


Una expresión lógica simple está compuesta por tres elementos:
A operador de comparación B
Siendo A y B valores, variables o expresiones numéricas.
Ejemplo:
TALLA > 150

Resultado de una expresión lógica simple


Una expresión lógica devuelve como resultado:
 El valor 1 (verdadero) si la expresión es cierta.
 El valor 0 (falso) si la expresión es falsa.
 El valor faltante (missing) si la expresión no se puede evaluar por falta de información. ¡Atención!
Más adelante veremos que con Stata hay que realizar operaciones específicas para que esto sea así.

Estructura de una expresión lógica compleja


Una expresión lógica compleja está compuesta por dos o más expresiones lógicas simples concatenadas
mediante operadores (nexos) lógicos:
(A operador de comparación B) operador lógico (C operador de comparación D)
Siendo A, B, C y D valores, nombres de variables o expresiones numéricas. El uso de los paréntesis
sólo es necesario cuando se desea variar el orden de ejecución de los operadores lógicos que incluye la
expresión. Recuerde que primero se ejecuta el ! (NO), después el & (Y) y finalmente el | (O).
Ejemplos:
Vino > 0 & Cerve > 0 & Copas > 0
Genero = 0 & IMC >= 25 | Genero = 1 & IMC >= 24

Resultado de una expresión lógica compleja


El nexo lógico & (AND) devuelve verdadero cuando se cumplen las dos condiciones lógicas simples
que concatena y falso si al menos una de ellas es falsa. En el caso de valores faltantes (missing):
 missing & missing devuelve missing.
 missing & cierto, o bien, cierto & missing devuelve missing.
 missing & falso, o bien, falso & missing devuelve falso.
El nexo lógico | (OR) devuelve verdadero cuando se cumple al menos una de las dos condiciones
lógicas simples que concatena. En el caso de valores faltantes (missing):
 missing | missing devuelve missing.

Pàgina 10 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
 missing | cierto, o bien, cierto | missing devuelve cierto.
 missing | falso, o bien, falso | missing devuelve missing.

Construcción de un sistema de clasificación


Cuando se desea crear una variable que es el resultado de un sistema de clasificación (por ejemplo, un
diagnóstico), es útil construir una tabla de que contenga en columnas los antecedentes y una columna
final con el valor consecuente, como la que se muestra a continuación:

Antecedentes Consecuente
V1 V2 V3
valor3  1 Categoría 1
valor1  valor4  2 Categoría 2
missing  missing
valor5  1 Categoría 1
valor2  valor6  2 Categoría 2
missing  missing
valor7  1 Categoría 1
missing  valor8  2 Categoría 2
missing  missing

Siendo valorN un valor, una lista o rango de valores, o bien, una expresión numérica.
Como se puede observar, se trata de un diagrama en árbol en forma de tabla que permite indicar los
valores (o expresiones) de cada variable (antecedente) que definen cada posible valor de la nueva
variable (consecuente).
Es importante incluir siempre en esta tabla de análisis la posibilidad de que tanto los antecedentes como
el consecuente puedan contener valores faltantes (missing).
Para transformar esta tabla de análisis en la expresión lógica que crea el sistema de clasificación sólo
hay que aplicar la siguiente regla:
 Los valores que se encuentran en una misma fila (o rama) se concatenan con el nexo lógico & (Y).
 Las filas (o ramas) que definen un mismo valor en el consecuente (variable que contendrá la
clasificación) se concatenan con el nexo lógico | (O).
Así, para la tabla de análisis de antecedentes y consecuente genérica presentada antes, las expresiones
lógicas necesarias para crear la nueva variable de clasificación serían:

V1 = valor1 & V2 = valor3 | V1 = valor2 & V2 = valor5 | V2 = valor7  V3 = 1


V1 = valor 1 & V2 = valor4 | V1 = valor2 & V2 = valor6 | V2 = valor8  V3 = 2
Por tanto, para crear un sistema de clasificación hay que indicar tantas expresiones lógicas como
categorías tenga dicho sistema (dos para la tabla genérica de antecedentes y consecuente anterior).

Tratamiento de los valores faltantes en condiciones lógicas en Stata


Al evaluar los operadores de comparación en expresiones lógicas, Stata representa internamente los
valores faltantes (.) como valores positivos muy altos, no como una ausencia de valor. Este
comportamiento hace que Stata siempre asigne falso o verdadero como resultado de una expresión
lógica simple que utilice los operadores de comparación:
valor != missing  verdadero
valor < missing  verdadero

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 11 de 24
valor <= missing  verdadero
valor > missing  falso
valor >= missing  falso
valor == missing  falso

missing != missing  falso


missing < missing  falso
missing <= missing  verdadero
missing > missing  falso
missing >= missing  verdadero
missing == missing  verdadero

Por ello, en Stata es imprescindible contemplar en la sintaxis de las expresiones lógicas la posible
existencia de valores faltantes para asegurar su correcto tratamiento. Para ello se pueden utilizar
diferentes estrategias, tal y como se verá en los siguientes ejemplos y ejercicios.

Vamos a crear una nueva variable Fuma que indique únicamente si la persona fuma o no fuma
(consecuente: nueva variable Fuma) a partir del consumo de cigarrillos (antecedente: variable existente
Numcig).
1. Ejecuta el menú Data | Create or change data | Create new variable.
2. En el cuadro de diálogo cambia en primer lugar el Variable type por Byte. A continuación, escribe
Fuma en el recuadro Variable name, selecciona la opción Specify a value or an expression y pulsa
Create... para abrir el generador de expresiones y desplegar la lista de variables.
3. En el cuadro Expression Builder, escribe la expresión lógica que devuelva el valor verdadero (1)
cuando el consumo de cigarrillos sea mayor a 0 y el valor falso (0) cuando dicho consumo sea 0:
Numcig > 0
Sería equivalente usar la expresión Numcig >= 1. A continuación, pulsa el botón OK.

4. Dado que la variable Numcig contiene valores faltantes en algunos casos, en la pestaña if/in
especifica que la expresión lógica sólo se evalúe cuando dicha variable no esté vacía, es decir,
cuando Numcig != . y pulsa OK.

Pàgina 12 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
5. A continuación, abre la ventana Variables Manager para indicar la etiqueta Hábito de fumar de la
nueva variable Fuma. Comprueba también que el tipo es byte y crea el diccionario dSiNo y aplícalo a
la variable Fuma. También puedes cambiar la etiqueta, el tipo y el diccionario desde la ventana
Properties.

6. Finalmente, comprueba que la nueva variable Fuma aparece como última columna en la ventana
Data Editor (Browse). Verifica también en algunos casos que la nueva variable contiene
efectivamente la condición de fumador o no a partir del consumo de cigarrillos diarios informados.

Vamos a crear ahora una nueva variable que contenga el diagnóstico de obesidad a partir de la siguiente
tabla de antecedentes (Genero e IMC) y consecuente (Obesidad), según la Sociedad Española para los
Estudios de la Obesidad (SEEDO):

Antecedentes Consecuente
GENERO IMC OBESIDAD
Valor Valor Valor Etiqueta
< 25 1 Normopeso
>= 25 i < 30 2 Sobrepeso
0 (masculino)
>= 30 3 Obesidad
Missing missing
< 24 1 Normopeso
>= 24 i < 29 2 Sobrepeso
1 (femenino)
>= 29 3 Obesidad
Missing missing
< 24 1 Normopeso
Missing >= 25 i <29 2 Sobrepeso
>= 30 3 Obesidad

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 13 de 24
( >= 24 Y < 25 ) O
( >= 29 Y < 30 ) O missing
missing

1. Ejecuta el menú Data | Create or change data | Create new variable.


2. En el cuadro de diálogo que se abre, hay que escribir Obesidad en el recuadro Variable name, y a
continuación seleccionar la opción Fill with missing data. De esta manera, creamos la nueva
variable Obesidad con valores faltantes para todos los casos, lo cual facilita la generación de valores
missing en variables creadas a partir de expresiones lógicas complejas.

3. A continuación, realizaremos una orden replace para cada uno de los valores de Obesidad que
deseamos categorizar, cada uno de ellos con su correspondiente expresión lógica compleja. Para ello,
ejecuta el menú Data | Create or change data | Change contents of variable.
4. Selecciona la variable Obesidad en la lista de variables y especifica que se asigne el valor 1 (peso
normal o normopeso).

5. En la pestaña if/in, especifica la expresión lógica para que dicha orden sólo se aplique a los casos que
cumplan los criterios de normopeso. Para evitar errores, es recomendable utilizar los paréntesis para
encerrar cada una de las sub-expresiones lógicas correspondientes a cada una de las filas de la tabla
de análisis de antecedentes y consecuentes. De acuerdo con lo indicado en la tabla de antecedentes y
consecuentes la expresión lógica seria:
(Genero == 0 & IMC < 25) | (Genero == 1 & IMC < 24) | (Genero == . & IMC < 24)
Sin embargo, se puede obviar la expresión Genero==. del último paréntesis:
(Genero==0 & IMC <25) | (Genero==1 & IMC<24) | (IMC<24)

Pàgina 14 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
6. Pulsa el botón OK para ejecutar esta primera orden replace, que cambiará el valor faltante por 1
(normopeso) en los casos que cumplan dicha condición.
7. A continuación, hay que repetir los pasos anteriores para definir las categorías 2 y 3 de la nueva
variable Obesidad. Hay que tener en cuenta que cuando se define una condición de IMC mayor a un
valor determinado, hay que acotarla para que no incluya los valores faltantes, añadiendo otra
condición que sea IMC !=.:
 (Genero == 0 & IMC >= 25 & IMC < 30) | (Genero == 1 & IMC >= 24 & IMC < 29) |
(IMC >= 25 & IMC < 29)  OBESIDAD=2
 (Genero == 0 & IMC >= 30 & IMC <.) | (Genero == 1 & IMC >= 29 & IMC <.) | (IMC >=
30 & IMC !=.)  OBESIDAD=3

8. A continuación, abre la ventana Variables Manager para indicar la etiqueta Obesidad (diagnóstico)
de la nueva variable Obesidad. Crea también el diccionario dObesidad y aplícalo a la variable
Obesidad:

En síntesis, cuando se ejecuta este bloque de instrucciones, la primera orden generate crea la nueva
variable Obesidad con todos los casos vacíos (.). A continuación, la primera orden replace utiliza la
variable Obesidad ya creada y substituye el valor vacío por el valor 1 en los casos que cumplan su
condición lógica; la segunda orden replace asigna el valor 2 a los casos que cumplen su condición
lógica, pudiendo modificar los valores existentes del resto de casos reemplazados en la orden anterior
si la expresión se cumpliera (por ejemplo porque no se ha definido correctamente); finalmente, la

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 15 de 24
tercera orden replace es la que asigna el valor 3 a los casos que cumplen su condición lógica,
pudiendo modificar también el valor existente en los casos restantes.
9. Para acabar, hay que comprobar que la nueva variable Obesidad aparece como última columna en la
ventana Data Editor (Browse). Verifica también en algunos casos que la nueva variable contiene
efectivamente la categoría correspondiente a la definición de obesidad especificada en el análisis
previo y que hay casos que presentan un valor vacío (.) por no disponer de su IMC.

P2S.5 Recuento de eventos


Stata también permite crear nuevas variables a partir del recuento del número de sucesos o eventos que se
producen en un conjunto de variables. Un suceso puede ser un valor, una lista y/o un rango de valores.
Vamos a crear una nueva variable, de nombre Numdrogas, que contendrá el número de drogas que
consumen (ya sea habitual o bien ocasionalmente) los participantes que han respondido al Cuestionario
sobre hábitos tóxicos.
1. Ejecuta el menú Data | Create or change data | Create new variable (extended).
2. En el cuadro de diálogo escribe Numdrogas en el recuadro Generate variable; en Egen function
argument selecciona las variables Maria, Alucin y Opio de la lista de variables; y en Egen function
selecciona la función Any count de la lista de funciones disponible (que aparecen ordenadas
alfabéticamente). En Integer number list, escribe los valores discretos a recontar: 2 (categoría
“Ocasionalmente”) y 3 (categoría “Habitualmente”). Finalmente, pulsa OK.

Tratamiento de los valores faltantes en los recuentos


En Stata, el procedimiento de recuento se inicializa con el valor 0 en la nueva variable para todos
los casos.
Si se desea tener en cuenta este hecho para que la nueva variable de recuento contenga el valor
faltante cuando las variables a recontar están vacías, a continuación, puede ejecutarse una orden
replace condicionado a la presencia de valores faltantes, para substituir dichos valores 0.
Para ello, la orden egen dispone de las funciones rowmiss y rownonmiss que retornan,
respectivamente, el número de valores faltantes y el número de valores válidos de una lista de
variables.

3. Comprueba que la nueva variable Numdrogas aparece como última columna en la ventana Data
Editor (Browse). Observa también que en los casos en que no se dispone de valor en ninguna de las
tres variables Maria, Alucin y Opio la nueva variable contiene el valor 0 en lugar de vacío (.).

Pàgina 16 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
4. Vamos a controlar ahora la presencia de valores faltantes en las variables de consumo de drogas cuyos
valores estamos recontando, de modo que la nueva variable contenga el valor faltante cuando alguna
de las variables de consumo de drogas no contenga un valor válido. En primer lugar, generaremos la
variable Nmissdrogas como el recuento de los valores perdidos de las tres variables Maria, Alucin y
Opio, con la orden egen y la función rowmiss que encontrarás en Egen Function bajo el nombre
Row number of missing.

5. Una vez creada la variable Nmissdrogas, asignaremos a continuación un valor vacío (.) a la variable
ya existente Numdrogas con la orden replace (menú Data | Create or change data | Change
contents of variable) en aquellos casos con un número de valores faltantes en las variables Maria,
Alucin y Opio mayor a 0. Para ello hay que indicar el punto en New contents de la pestaña Main y la
expresión Nmissdrogas > 0 en if: (expression) de la pestaña if/in:

6. Una vez ejecutada la orden replace anterior, abre la ventana Variables Manager para indicar la
etiqueta de la nueva variable Numdrogas.

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 17 de 24
7. Finalmente, comprueba en la ventana Data Editor (Browse) que la nueva variable Numdrogas
contiene ahora el valor vacío (.) cuando no se dispone de respuesta a alguna de las variables originales
Maria, Alucin u Opio. Una vez realizada esta comprobación, puedes eliminar la variable Nmissdrogas
seleccionándola en la ventana Variables Manager o en el panel Variables de la ventana principal y
escogiendo la opción Drop selected variables en el menú contextual:

P2S.6 Grabación del fichero de datos y de sintaxis


Al finalizar la sesión de trabajo hay que almacenar los ficheros de datos y de sintaxis que se han creado o
modificado.

1. En la ventana principal, ejecuta el menú File | Save as.


2. En el cuadro de diálogo escribe el nombre del fichero HABITOX_P2S.final; no es necesario escribir
la extensión .dta ya que será asignada automáticamente por el programa.
3. En la ventana Review, selecciona todas las órdenes y pulsa el botón derecho del ratón. A
continuación, selecciona Send to Do-file Editor y ejecuta el menú File | Save as.
4. En el cuadro de diálogo escribe el nombre del fichero HABITOX_P2S; no es necesario escribir la
extensión .do ya que será asignada automáticamente por el programa.

Pàgina 18 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
5. Si durante la sesión ya tenías un archivo *.do abierto, en el paso 3 puedes proceder de la siguiente
forma para añadir la nueva sintaxis al archivo ya existente. Selecciona en la ventana Review las
órdenes de interés y cópialas en el portapapeles (Ctrl+C). Y en el archivo de sintaxis, pega el
contenido del portapapeles (Ctrl+V) y guárdalo.
6. Sal de Stata ejecutando File | Exit.

Ejercicio
Crea las variables que se indican a continuación. En el caso de variables de tipo lógico presta especial
atención al análisis previo (tabla de antecedentes y consecuente) y a la consideración en dicho análisis de
la posible presencia de valores faltantes (missing) –el resultado de las nuevas variables deberá ser missing
cuando no se disponga de información suficiente en las variables antecedentes. Guarda la sintaxis en el
archivo HABITOX_P2S.do.

 Nivdroga: debe contener el grado de adicción a las drogas expresado como la suma de los valores de
las tres variables que recogen su frecuencia de consumo siempre que se disponga de la respuesta de
los sujetos en todas ellas.

 Bebedor1: debe contener la siguiente clasificación a partir de la información de la suma de las


variables Vino, Cerve y Copas aunque alguna de ellas no tenga valor:

VINO+CERVE+COPAS BEBEDOR
Valor Valor Etiqueta
0 0 No bebedor
1a7 1 Menos de 8 vasos o copas/semana
8 a 14 2 Menos de 15 vasos o copas/semana
Mayor o igual a 15 3 15 o más vasos o copas/semana
Antes de crear la variable Bebedor1 deberás crear una variable auxiliar llamada Bebedor que
contenga la suma de las tres variables con independencia que haya valores faltantes; puedes usar para
crearla la orden egen y la opción rowtotal marcando la opción Do not treat missing values as 0. A
partir de esta variable auxiliar Bebedor te resultará fácil crear la variable Bebedor1 definida en el
presente ejercicio y también la variable Bebedor2 que se define en el siguiente.

 Bebedor2: debe contener la misma clasificación anterior, pero sólo para los sujetos de los cuales se
disponga de respuesta al menos en dos de las tres variables que recogen el consumo de los diferentes
tipos de bebidas alcohólicas. Para ello, debes generar en primer lugar una nueva variable auxiliar
Nvalbebidas con la orden egen y la función rownonmiss (que encontrarás en Egen Function bajo el
nombre Row number of nonmissing) que contenga el recuento de los datos válidos en las variables
antecedentes. A continuación, podrás generar la variable Bebedor2 a partir de la variable auxiliar
Bebedor creada en la pregunta anterior y la nueva variable auxiliar Nvalbebidas.

 Alcohol: debe contener el número de tipos distintos de bebidas alcohólicas que toman los sujetos,
siempre que se disponga de respuesta en las tres variables que recogen el consumo de los diferentes
tipos de bebidas alcohólicas. Nota: para indicar un valor muy alto en el consumo de cada tipo distinto
de bebida alcohólica, puedes usar el valor 99.

 Habito: debe contener el valor 0 si el sujeto no fuma ni bebe ni toma habitualmente ningún tipo de
droga, o el valor 1 si tiene alguno de estos hábitos. ¡Atención a los valores missing! Si de un sujeto
no se dispone de ningún valor en las variables antecedentes, Habito deberá contener el valor faltante.

Una vez hayas finalizado este ejercicio puedes comparar tus resultados con la solución que se presenta en
la siguiente página y que se encuentran también en el fichero HABITOX_P2S.do.

© 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB) Pàgina 19 de 24
Ejercicio opcional avanzado
 IMC_edad: esta variable denominada "Normopeso según la edad" debe contener el valor 1 si el
sujeto tiene un IMC en el rango de la normalidad, y el valor 0 si se encuentra fuera de dicho rango.
En la siguiente tabla se muestran los valores de referencia de los IMC normales para distintas edades
según algunos autores. Al crear la nueva variable IMC_edad hay que tener en cuenta la posibilidad
que no se conozca el IMC o bien la Edad del sujeto, y también que la Edad del sujeto esté por debajo
del valor mínimo baremado:

EDAD IMC
19-24 19-24
> 24-34 20-25
> 34-44 21-26
> 44-54 22-27
> 54-65 23-28
> 65 24-29
 IMC_edad_sexo: esta variable denominada "Normopeso según la edad y el sexo" modifica la
clasificación IMC_edad anterior teniendo en cuenta también el Genero de los sujetos. Debes
considerar que el límite de IMC que determina el diagnóstico de Normopeso en los hombres es el que
se muestra en la tabla anterior, y que el de las mujeres se sitúa un punto por debajo del de los
hombres en cada franja de Edad.

Pàgina 20 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
Solución del ejercicio

Matriz de datos HABITOX_P2S_final.dta: Aspecto del contenido del editor de datos


Matriz de datos HABITOX_P2S_final.dta: Variables Manager

Pàgina 22 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)
recode Bebedor (0=0 "No bebedor") (1/7=1 "Menos de 8 vasos o copas/semana") (8/14=2 "Menos de 15 vasos o
Archivo de sintaxis HABITOX_P2S.do copas/semana") (15/max=3 "15 o más vasos o copas/semana") (else=.), generate(Bebedor1) label(dBebedor)
label variable Bebedor1 "Nivel de consumo de alcohol semanal"
* Ejemplo de Recodificación: NUMCIG
recode Numcig (0=0 "No fumador") (1/4=1 "Menos de 5 cigarrillos/día") (5/9=2 "Menos de 10 cigarrillos/día") * Ejercicio: variable BEBEDOR2
(10/max=3 "10 o más cigarrillos/día") (else=.), generate(Fumador) label(dFumador) egen float Nvalbebidas = rownonmiss( Vino Cerve Copas )
label variable Fumador "Nivel de consumo de tabaco" recode Bebedor 0=0 1/7=1 8/14=2 15/max=3 else=. if Nvalbebidas >= 2, generate(Bebedor2)

* Ejemplo de Cálculo: IMC label values Bebedor2 dBebedor


generate IMC = Peso /(Talla/100)^2 label variable Bebedor2 "Nivel de consumo de alcohol semanal"
label variable IMC "Índice de masa corporal (kg/m2)"
*Comentario: La orden recode también se podría haber especificado de la misma forma que el ejercicio anterior,
* Ejemplo de cálculo: EDAD añadiendo el filtro if:
generate Edad = ( Fresp - Fnac )/365.25 recode Bebedor (0=0 "No bebedor") (1/7=1 "menos de 8 vasos") (8/14=2 "menos de 15 vasos") (15/max=3 "Más
label variable Edad "Edad de respuesta al cuestionario (años)" de 15 vasos") if Nvalbebidas > 1, generate(Bebedor2) label(dBebedor)
* Ejercicio: variable ALCOHOL
* Ejemplo de cálculo con expresión lógica: FUMA egen byte Alcohol = anycount(Vino Cerve Copas), values(1/99)
generate Fuma = Numcig > 0 if Numcig != . replace Alcohol = . if Nvalbebidas < 3
label variable Fuma "Hábito de fumar" label variable Alcohol "Nº de tipos de bebida alchoholica"
label define dSiNo 0 "No" 1 "Sí"
label values Fuma dSiNo * Ejercicio: variable HABITO
generate Habito = (Numcig > 0 & Numcig !=.) | (Bebedor > 0 & Bebedor !=.) | (Nivdroga > 3 & Nivdroga !=.)
* Ejemplo de cálculo condicional: OBESIDAD replace Habito = . if Habito==0 & (Numcig==. | Vino+Cerve+Copas==. | Nivdroga==.)
generate Obesidad = . label variable Habito "Hábito tóxico"
replace Obesidad = 1 if ((Genero == 0 & IMC < 25) | (Genero == 1 & IMC < 24) | (IMC < 24)) label values Habito dSiNo
replace Obesidad = 2 if ((Genero == 0 & IMC >= 25 & IMC < 30) | (Genero == 1 & IMC >= 24 & IMC <29) |
(IMC >= 25 & IMC < 29)) * Ejercicio opcional avanzado: variable IMC_EDAD
replace Obesidad = 3 if ((Genero == 0 & IMC >=30 & IMC < .) | (Genero == 1 & IMC >=29 & IMC < .) | (IMC >= 30 generate IMC_edad = .
& IMC !=.)) replace IMC_edad = 1 if (Edad >= 19 & Edad <= 24) & (IMC >= 19 & IMC <= 24) | (Edad > 24 & Edad <= 34) &
label variable Obesidad "Obesidad (diagnóstico)" (IMC >= 20 & IMC <= 25) | (Edad > 34 & Edad <= 44) & (IMC >= 21 & IMC <= 26) | (Edad > 44 & Edad <= 54)
label define dObesidad 1 "Normopeso" 2 "Sobrepeso" 3 "Obesidad" & (IMC >= 22 & IMC <= 27) | (Edad > 54 & Edad <= 65) & (IMC >= 23 & IMC <= 28) | (Edad > 65 & Edad <= .)
label values Obesidad dObesidad & (IMC >= 24 & IMC <= 29)
replace IMC_edad = 0 if ! ((Edad >= 19 & Edad <= 24) & (IMC >= 19 & IMC <= 24) | (Edad > 24 & Edad <= 34) &
* Ejemplo de Recuento: NUMDROGAS (IMC >= 20 & IMC <= 25) | (Edad > 34 & Edad <= 44) & (IMC >= 21 & IMC <= 26) | (Edad > 44 & Edad <= 54)
egen byte Numdrogas = anycount(Maria Alucin Opio), values(2 3) & (IMC >= 22 & IMC <= 27) | (Edad > 54 & Edad <= 65) & (IMC >= 23 & IMC <= 28) | (Edad > 65 & Edad <= .)
egen float Nmissdrogas = rowmiss(Maria Alucin Opio) & (IMC >= 24 & IMC <= 29))
replace Numdrogas = . if Nmissdrogas > 0 replace IMC_edad = . if (Edad == . | Edad < 19 | IMC == .)
label variable Numdrogas "Nº de drogas consumidas informadas" label variable IMC_edad "Normopeso según la edad"
label values IMC_edad dSiNo
* Ejercicio: variable NIVDROGA
generate Nivdroga = Maria + Alucin + Opio * Ejercicio opcional avanzado: variable IMC_EDAD_SEXO
label variable Nivdroga "Nivel de consumo de drogas" generate IMC_edad_sexo = .
replace IMC_edad_sexo = 1 if Genero == 0 & ((Edad >= 19 & Edad <= 24) & (IMC >= 19 & IMC <= 24) | (Edad >
* Ejercicio: variable BEBEDOR1 24 & Edad <= 34) & (IMC >= 20 & IMC <= 25) | (Edad > 34 & Edad <= 44) & (IMC >= 21 & IMC <= 26) |
egen float Bebedor = rowtotal(Vino Cerve Copas), missing (Edad > 44 & Edad <= 54) & (IMC >= 22 & IMC <= 27) | (Edad > 54 & Edad <= 65) & (IMC >= 23 & IMC <= 28)
| (Edad > 65 & Edad <= .) & (IMC >= 24 & IMC <= 29))
View publication stats

replace IMC_edad_sexo = 0 if Genero == 0 & ! ((Edad >= 19 & Edad <= 24) & (IMC >= 19 & IMC <= 24) | (Edad >
24 & Edad <= 34) & (IMC >= 20 & IMC <= 25) | (Edad > 34 & Edad <= 44) & (IMC >= 21 & IMC <= 26) |
(Edad > 44 & Edad <= 54) & (IMC >= 22 & IMC <= 27) | (Edad > 54 & Edad <= 65) & (IMC >= 23 & IMC <= 28)
| (Edad > 65 & Edad <= .) & (IMC >= 24 & IMC <= 29))
replace IMC_edad_sexo = 1 if Genero == 1 & ((Edad >= 19 & Edad <= 24) & (IMC >= 18 & IMC <= 23) | (Edad >
24 & Edad <= 34) & (IMC >= 19 & IMC <= 24) | (Edad > 34 & Edad <= 44) & (IMC >= 20 & IMC <= 25) |
(Edad > 44 & Edad <= 54) & (IMC >= 21 & IMC <= 26) | (Edad > 54 & Edad <= 65) & (IMC >= 22 & IMC <= 29)
| (Edad > 65 & Edad <= .) & (IMC >= 23 & IMC <= 28))
replace IMC_edad_sexo = 0 if Genero == 1 & ! ((Edad >= 19 & Edad <= 24) & (IMC >= 18 & IMC <= 23) | (Edad >
24 & Edad <= 34) & (IMC >= 19 & IMC <= 24) | (Edad > 34 & Edad <= 44) & (IMC >= 20 & IMC <= 25) |
(Edad > 44 & Edad <= 54) & (IMC >= 21 & IMC <= 26) | (Edad > 54 & Edad <= 65) & (IMC >= 22 & IMC <= 29)
| (Edad > 65 & Edad <= .) & (IMC >= 23 & IMC <= 28))
replace IMC_edad_sexo = . if (Genero == . | Edad == . | Edad < 19 | IMC == .)
label variable IMC_edad_sexo "Normopeso según la edad y el sexo"
label values IMC_edad_sexo dSiNo

Pàgina 24 de 24 © 2016 - Josep Maria Losilla Vidal, Jaume Vives Brosa y Eva Penelo (UAB)

También podría gustarte