Esta es la sexta parte de Introducción a Stata. Si es nuevo en Stata, le recomendamos que comience desde el principio.
Ir al contenido que sigue a este video
Este artículo le enseñará los conceptos básicos para crear nuevas variables, modificar variables existentes y crear etiquetas.
Generar y Reemplazar
Los comandos principales para crear y cambiar variables son generar (generalmente abreviado gen) y reemplazar (que, al igual que otros comandos que pueden destruir información, no tiene abreviatura). gen crea nuevas variables; reemplazar cambia los valores de las variables existentes. Su sintaxis principal es idéntica:
gen variable = expresión
o
reemplazar variable = expresión
donde variable es el nombre de la variable que desea crear o cambiar, y expresión es la expresión matemática cuyo resultado desea poner en ella. Las expresiones pueden ser tan simples como un solo número o involucrar todo tipo de funciones complicadas. Puede explorar qué funciones están disponibles escribiendo funciones de ayuda. Si la expresión depende de un valor que falta en cualquier punto, falta el resultado. Por lo general, esto es exactamente lo que esperarías y querrías.
Es especialmente importante utilizar archivos do cuando cambia sus datos, así que comience creando un archivo do que cargue el conjunto de datos automático:
registro de captura cerrar registro mediante vars.log, replace
borrar todo
sysuse auto
Los precios en el conjunto de datos automático están en dólares de 1978, por lo que podría ser útil convertirlos a dólares de 2020. Para hacerlo, debe multiplicar los precios por un factor de conversión que es el Índice de Precios al Consumidor en 2020 dividido por el Índice de Precios al Consumidor en 1978, o aproximadamente 4. El código será:
gen price2020 = price*4
Agregue esta línea a su archivo do, ejecútela y examine los resultados con:
explore make price price2020
Los precios siguen siendo generalmente más bajos de lo que vería en un concesionario de automóviles, pero probablemente porque los automóviles de hoy en día son mucho más agradables que los autos de 1978. Este es un buen ejemplo de cómo verificar su trabajo: compare lo que obtuvo con lo que esperaba, y si no coinciden, asegúrese de saber por qué.
Internamente, Stata ejecutó un bucle: calculó el precio * 4 para la primera observación y almacenó el resultado en price2020 para la primera observación, luego calculó el precio*4 para la segunda observación y almacenó el resultado en price2020 para la segunda observación, y así sucesivamente para todas las observaciones en el conjunto de datos. Aprenderás a estirar este paradigma de una observación a la vez en el Manejo de datos en Stata, pero las tareas que lo rompen (como calcular medias) requieren un enfoque diferente del que hablaremos pronto.
Supongamos que queremos ser un poco más precisos y usar 4.14 como factor de conversión. Es posible que se sienta tentado a intentar agregar código que «arregle» la variable price2020 (por ejemplo, multiplicándola por 4.14/4). Pero es más sencillo y limpio arreglar el código que lo creó en primer lugar. Cambie:
gen price2020 = price * 4
a:
gen price2020 = price*4.14
y vuelva a ejecutar el archivo do. Debido a que su archivo do carga los datos originales del disco cada vez que se ejecuta, simplemente puede crear la variable price2020 de la manera que debería ser.
Tener tanto price como price2020 le permitió comparar sus valores y verificar su trabajo. Pero si solo desea trabajar con dólares 2020 y está seguro de que tiene la fórmula correcta, puede usar el comando reemplazar para cambiar la variable de precio existente en lugar de crear una nueva:
reemplazar precio = precio*4.14
Ejecute esta versión y recibirá el mensaje (74 cambios reales realizados). Dado que el conjunto de datos tiene 74 observaciones, esto le dice que todas fueron cambiadas, como era de esperar. Una vez que comience a incluir las condiciones de si, cuántas observaciones se cambiaron realmente puede ser información muy útil.
Ejercicio: Fuera de los Estados Unidos, la eficiencia del combustible se mide con frecuencia en litros por kilómetro (tenga en cuenta que debido a que el combustible utilizado está en el numerador, un número bajo es bueno). Para convertir millas por galón a litros por kilómetro, multiplique el recíproco de mpg (1/mpg) por 2,35. Cree una variable que almacene la eficiencia de combustible de cada automóvil en litros por kilómetro.
Crear variables con condiciones If
Ir al contenido que sigue a este vídeo
Si un comando gen tiene una condición if, la variable resultante seguirá existiendo (y debe seguir existiendo) para todas las observaciones. Sin embargo, se le asignará un valor faltante para las observaciones en las que la condición if no sea verdadera. Si un comando replace tiene una condición if, las observaciones en las que la condición if no es verdadera se mantendrán sin cambios. Esto le permite establecer variables a diferentes valores para diferentes observaciones.
Supongamos que desea colapsar la escala de cinco puntos de la variable rep78 en una escala de tres puntos. Agregue el siguiente código a su archivo do para hacerlo:
gen rep3 = 1 si rep78<3
reemplazar rep3 = 2 si rep78==3
reemplazar rep3 = 3 si rep78>& rep78<.
La primera línea crea la nueva variable rep3, pero solo la establece en una para los casos en los que rep78 es inferior a tres. Los otros desaparecen. La segunda línea cambia algunas de esas faltas a dos, y la tercera cambia más de ellas a tres. Ejecute el archivo do, anote el número de observaciones cambiadas por cada línea y compárelo con el número total de observaciones en el conjunto de datos.
¿Cuál será el valor de rep3 para las observaciones en las que falta rep78? Desaparecido, como debería ser, porque nunca se estableció en otra cosa. Las cinco observaciones en las que falta rep78 se excluyeron implícita o explícitamente de los tres comandos, por lo que comenzaron con un valor faltante para rep3 y nunca se cambiaron. (Si olvidaste excluir los valores faltantes del último comando, rep3 sería tres para autos donde falta rep78, un error muy común. Recuerde, lo que falta es esencialmente infinito.)
Ejercicio: Combinar unos y dos tiene sentido porque hay muy pocos de ellos, pero no había una necesidad particular de combinar los cuatro y los cinco. Cree una variable rep4 que combine unos y dos y renumere las otras categorías en consecuencia (es decir, rep4 debería ir de uno a cuatro).
Recode
Ir al contenido que sigue a este vídeo
El comando recode le ofrece una forma alternativa de crear rep3. Está diseñado únicamente para tareas de recodificación y es mucho menos flexible que gen y replace. Pero es muy fácil de usar. La sintaxis es:
recodificar var (regla 1) (regla 2) (más reglas según sea necesario…), gen(newvar)
La opción gen al final no es necesaria; si no está allí, se cambiará la variable original en lugar de crear una nueva variable con los nuevos valores. También puede tener un trabajo de recodificación en una lista de variables, recodificándolas todas de la misma manera.
El núcleo del comando recode es una lista de reglas, cada una entre paréntesis, que le indican cómo se va a recodificar una variable. Toman la forma (inputValue = outputValue). El valor de entrada puede ser un solo número, una lista de números separados por espacios o un rango de números especificados con inicio/fin. El valor de salida siempre será un solo número. Todo lo que no está cubierto por una regla se deja sin cambios, por lo que puede usar recodificación para cambiar solo unos pocos valores de una variable o redefinirla completamente como lo hacemos aquí. Esta es una versión de recodificación de la conversión de rep78 a una escala de tres puntos:
recodificar rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen (rep3b)
Valores faltantes no se requiere manejo especial: dado que falta no aparece en los valores de entrada de ninguna regla, las observaciones con valores faltantes no se cambian.
Ejercicio: Crea rep4b, combinando solo unos y dos como se indica arriba, usando recodificación.
Variables indicadoras
Ir al contenido que sigue a este vídeo
Al crear variables indicadoras, puede aprovechar el hecho de que Stata trata true como uno y false como cero configurando la nueva variable igual a una condición. Considere:
gen lowMPG = (mpg < 20)
(Los paréntesis son opcionales, pero facilitan la lectura.) Esto crea una variable indicadora llamada lowMPG que es uno (verdadero) para autos donde mpg es menor a veinte y cero (falso) donde mpg es mayor o igual a veinte. Para ver los resultados, ejecute el archivo do y, a continuación, escriba browse make mpg si es lowMPG.
Ningún coche tiene un valor faltante para mpg, pero si uno lo tuviera, el código anterior le asignaría un cero para lowMPG como si se supiera que tiene un buen kilometraje de gasolina. La variable lowMPG debe faltar en estos casos, lo que puede hacer con:
gen lowMPG = (mpg< 20) si mpg<.
Ejercicio: Cree una variable indicadora que identifique los automóviles con buenos registros de reparación (definidos como rep78 mayor que 3). ¿Cómo cambiaría su código si la variable indicadora necesitara identificar automóviles que se sabe que tienen buenos registros de reparación?
Variables de cadena
Ir al contenido que sigue a este vídeo
Los comandos gen y replace también funcionan con variables de cadena. Las expresiones en el lado derecho del signo igual no son matemáticas, pero siguen reglas similares. Los valores de cadena siempre van entre comillas, por lo que si desea almacenar la letra x en una variable llamada x, diría gen x = «x». Stata no encontraría esto confuso (aunque podría hacerlo) porque x entre comillas («x») significa la letra x y x sin comillas significa la variable x.
La adición de cadenas se define como poner una cadena tras otra, por lo que «abc» + «def» = «abcdef». Pero la mayor parte del trabajo con cadenas se realiza mediante funciones de propósito especial que toman cadenas como entrada (ya sea valores de cadena o variables que contienen cadenas) y devuelven cadenas como salida.
La variable make realmente registra dos piezas de información: el nombre de la empresa que produjo el automóvil y el nombre del modelo de automóvil. Puede extraer fácilmente el nombre de la empresa utilizando la función word ():
gen company = word (make,1)
Para ver los resultados, ejecute el archivo do y escriba browse make company. La primera entrada, o argumento, para la función word() es la cadena sobre la que actuar (en este caso, una variable que contiene cadenas). El segundo es un número que dice qué palabra quieres. La función divide la cadena de entrada en palabras en función de los espacios que contiene, y devuelve la que pidió, en este caso la primera.
Diremos mucho más sobre las funciones de cadena en Datos de texto (próximamente), pero si está ansioso por comenzar, puede hacer mucho con solo las siguientes funciones:
palabra() | Extractos de una palabra a partir de una cadena |
strpos() | Indica si una cadena contiene otra cadena, y si por lo que su posición |
substr() | Extrae partes de una cadena |
subinstr() | Reemplaza parte de una cadena con otra cosa |
length() | Indica la duración de una cadena (el número de caracteres que contiene) |
el Tipo de ayuda y, a continuación, el nombre de una función en el ventana principal de Stata para aprender cómo funciona.
Ejercicio: Crea una variable de modelo que contenga el nombre del modelo de coche (es decir, el resto de marca). El código debe ser capaz de manejar nombres de modelo que tengan una o dos palabras de longitud.
Convertir Variables de cadena en Variables numéricas
Ir al contenido que sigue a este vídeo
A veces, una variable que debería ser numérica se introduce en Stata como una cadena. Puede solucionarlo con el comando destring, que convierte una variable de cadena que contiene números en una variable numérica. La sintaxis es simplemente destring variable, replace, donde variable debe ser reemplazada por el nombre de la variable (o variables) a ser destring. Si la variable de cadena contiene cualquier cosa menos números, puede agregar la opción forzar para indicar a Stata que la convierta de todos modos, pero las observaciones con cualquier carácter no numérico obtendrán un valor faltante. Tenga en cuenta que los «caracteres no numéricos» incluyen signos de dólar y comas.
En general, si tienes que usar la opción de fuerza es porque Stata no está seguro de que lo que estás haciendo sea una buena idea, y debes pensar cuidadosamente antes de hacerlo. En este caso, debe examinar los caracteres no numéricos para ver si tendría sentido eliminarlos primero (como los signos de dólar y las comas) o si la variable no es realmente solo números después de todo.
Este conjunto de datos no tiene ninguna variable que necesite ser desvinculada, así que hagamos una:
gen x = «5»
Observe cómo las comillas alrededor de «5» significan que x es una variable de cadena que contiene el carácter 5, no una variable numérica que contiene el valor 5. Solo para complicar las cosas, cambiemos algunos de los valores de x a texto real:
reemplazar x = «faltante» si foráneo
Ahora intenta destruir x:
destruir x, reemplazar
Stata rechazará, porque algunos de los valores de x no se pueden convertir en números. Pero los valores que no se pueden convertir «faltan», por lo que es totalmente apropiado convertirlos a valores faltantes. Así que inténtelo de nuevo con la opción forzar:
destring x, reemplace force
Ahora Stata convertirá x en una variable numérica, con algunos valores faltantes.
Egen
pase a la siguiente contenido de este video
El egen comando, abreviatura de «extended generar» le da acceso a otra biblioteca de funciones. Es un poco una mezcolanza, pero las funciones de egen usarán la mayoría de las estadísticas de resumen de cálculo:
Name | Description |
---|---|
min() | Minimum value |
max() | Maximum value |
mean() | Mean |
median() | Median |
sd() | Standard Deviation |
total() | Total |
These are examples of aggregate functions: they take multiple numbers as input and return a single number as output. También funcionan a través de observaciones, y por lo tanto no se pueden hacer fácilmente usando gen, ya que funciona una observación a la vez. La sintaxis es casi idéntica a gen:
egen variable = function ()
La gran diferencia con egen es que no estás escribiendo tu propia expresión matemática; solo estás usando una función de la biblioteca. Por ejemplo, si necesita establecer una variable en una media dividida por dos, no podría decir egen y = media (x) / 2. En su lugar, primero ejecutaría egen y = mean(x) y luego reemplazaría y = y/2.
Otra diferencia importante es cómo se manejan los valores faltantes. Recuerde que con gen, si falta alguna parte de la entrada, faltaría la salida. Sin embargo, egen simplemente ignora los valores faltantes y calcula el resultado utilizando los datos disponibles. Por lo general, esto es lo que quieres, pero debes ser consciente de lo que está haciendo egen y asegurarte de que tenga sentido para tu tarea en particular.
Las funciones egen para calcular estadísticas de resumen se combinan muy comúnmente con by para calcular estadísticas de resumen para grupos. Calcule el precio medio del automóvil para cada empresa y luego vea los resultados con:
bysort company: egen meanPrice = mean (price)
tab company, sum (meanPrice)
Recuerde que bysort company: primero ordena los datos por empresa y luego ejecuta el siguiente comando egen por separado para cada empresa.
Los ceros de desviación estándar reflejan el hecho de que cada automóvil producido por la misma empresa tiene el mismo valor de precio medio. Eso es porque meanPrice describe la compañía, no el auto. De hecho, esa es la definición de una variable que describe un grupo: cada unidad dentro del mismo grupo debe tener el mismo valor de la variable.
Si solo hubiéramos querido ver el valor medio del precio para cada empresa, podríamos haber ejecutado:
tab empresa, suma(precio)
Pero al ejecutar egen ahora tenemos la media en una variable, disponible para su uso.Ejercicio
: Crear una variable que contenga el valor medio de rep78 para cada empresa. Luego, examine las frecuencias de rep78 dentro de cada empresa creando una tabla bidireccional con pestaña. Asegúrese de incluir los valores faltantes. Lincoln y Olds tienen la misma media; ¿qué tan bien crees que esto resume la distribución de rep78 para las dos compañías? A continuación, considere los valores que faltan: supongamos que se revelara el valor real de rep78 para los autos con vales faltantes. ¿Qué tendrían que ser para que estos medios no cambiaran? ¿Qué tan plausible es eso?
Etiquetas
Ir al contenido que sigue a este vídeo
Las buenas etiquetas hacen que sus datos sean mucho más fáciles de entender y trabajar con ellos. Si bien Stata tiene muchos tipos de etiquetas, nos centraremos en las más comunes y útiles: etiquetas variables y etiquetas de valor.
Etiquetas de variables
Las etiquetas de variables transmiten información sobre una variable y pueden sustituir a los nombres de variables largos. Este conjunto de datos ya tiene un buen conjunto de etiquetas de variables, como puede ver en la ventana Variables. El único que es confuso es la etiqueta en foreign, así que cámbiala usando el comando variable label. La sintaxis para establecer una etiqueta de variable es:
etiqueta variable Nombre de variable «etiqueta»
Así que escriba:
etiqueta variable extranjera «Origen del automóvil»
Mire la ventana Variables de nuevo para ver los resultados.
Etiquetas de valor
Las etiquetas de valor se utilizan con variables categóricas para indicar el significado de las categorías. Hemos visto uno en acción con la variable foránea: fueron las etiquetas de valor las que nos dijeron que un 0 significa » Nacional «y un 1 significa «Extranjero».»
Exploremos las etiquetas de valor etiquetando los valores de rep3, la nueva variable que recodificamos para contraer rep78 de una escala de cinco puntos a una escala de tres puntos. Las etiquetas de valor son una asignación de un conjunto de enteros a un conjunto de descripciones de texto, por lo que el primer paso es definir el mapa. Para ello, utilice el comando label define:
label define mapName value1 «label1» value2 «label2″…
Así:
label define replabel 1 «Malo» 2 «Promedio » 3″Bueno»
Esto crea una asignación llamada replabel, pero no se aplica a nada. Antes de que haga algo útil, debe decirle a Stata que etiquete los valores de la variable rep utilizando la asignación de etiquetas que acaba de definir. La sintaxis es:
valores de etiqueta mapa de variables
Y por lo tanto:
valores de etiqueta rep3 replabel
Para ver los resultados, ejecute:
list make rep3
Una vez definido un mapa, puede aplicarlo a cualquier número de variables: simplemente reemplace la variable única en el comando valores de etiqueta anterior con una lista de variables. Supongamos que está trabajando con datos de encuestas y sus variables incluyen el género del encuestado, el género del cónyuge del encuestado y los géneros de todos los hijos del encuestado. Podría definir un solo mapa llamado género y luego usarlo para etiquetar los valores de todas las variables de género.
Tres comandos para administrar etiquetas de valor: label dir le da una lista de todas las etiquetas definidas, y label list le dice lo que significan. El comando describir le indica el nombre de las etiquetas de valor asociadas a cada variable (entre muchas otras cosas útiles).
Ejercicio: Cree etiquetas de valor para rep4 y aplíquelas. Siéntase libre de decidir cómo describir los niveles.Etiquetas
mediante Recodificación
Cuando utilice recodificación para crear una nueva variable, Stata creará automáticamente una etiqueta de variable para ella («RECODIFICACIÓN de…»). También puede definir etiquetas de valor para él colocando la etiqueta deseada para cada valor al final de la regla que lo define. Cree otra versión de rep3, esta vez con etiquetas desde su creación, con:
recode rep78 (1 2 = 1 «Malo») (3 = 2 «Promedio») (4 5 = 3 «Bueno»), gen(rep3c)
Ejercicio: Cree un rep4c con recodificación, estableciendo etiquetas de valor para él.
Este archivo do cambia el conjunto de datos que utiliza, por lo que debería guardar la nueva versión. Recuerde, nunca guarde su salida sobre su entrada, por lo que no guarde los nuevos datos como automáticos. Si lo hizo, no podría volver a ejecutar este archivo do: se bloquearía cuando intentara crear price2020 porque esa variable ya existiría en el conjunto de datos modificado. En su lugar, guarde los datos como autoV2, como en «versión 2 del conjunto de datos del automóvil».»
guardar autoV2, reemplazar
Finalmente, cerrar el registro:
cerrar registro
Esto nos lleva al final de la Introducción a Stata. Esperamos que le haya sido de ayuda. Para obtener más información, considere la posibilidad de leer la Disputa de datos en Stata u otros contenidos de la Base de Conocimientos de Computación Estadística del SSCC.
Última revisión: 27/5/2020