Sie sind auf Seite 1von 133

U E:

P : C F. H R., PD.
C : A A V.
P B E.
W C V.
E H C.

J I E
R, A
O 2006


Indice
general
1. Estructura general para proyectos
1.1. Rotulacion de carpetas, variables y programas
1.1.1. Carpetas por proyecto . . . . . . . .
1.1.2. Sub carpetas . . . . . . . . . . . . .
1.1.3. Variables y etiquetas . . . . . . . . .
1.1.4. Nombres de Programas . . . . . . . .
1.2. Documentacion . . . . . . . . . . . . . . . .
1.2.1. Documentar lo solicitado . . . . . . .
1.2.2. Documentar tareas realizadas . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

2. Acceso a Stata
2.1. Como acceder a Stata? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Pantalla Principal del Stata . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1. Ventanas de Stata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.2. Barra de Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Administracion Basica de Datos . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1. Como Crear una Base de Datos en Stata? . . . . . . . . . . . . . . . . .
2.3.2. Comandos basicos para la administracion y analisis descriptivo de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

7
7
7
8
8
9
10
10
10

.
.
.
.
.
.

11
11
11
12
12
13
14

. 15

3. Los datos y el editor de programas


21
3.1. Como leer los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2. Que es un archivo do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4. Nociones generales del uso de Stata
4.1. Creacion de rotulos label . . . . . . . . .
4.1.1. Rotulos de archivos . . . . . . . . .
4.1.2. Rotulos de variables . . . . . . . .
4.1.3. Rotulos para valores de variables . .
4.1.4. Archivo do utilizado en esta seccion
4.2. Creacion de nuevas variables generate . .
4.2.1. Archivo do utilizado en esta seccion
4.3. Uso del Comando egen . . . . . . . . . . .
4.3.1. Archivo do utilizado en esta seccion
3

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

23
23
24
25
26
30
31
34
34
37

INDICE GENERAL

4.4. Concatenando la informacion . . . . . . . .


4.4.1. Uso del comando merge . . . . . .
4.4.2. Uso del comando append . . . . .
4.4.3. Archivo do utilizado en esta seccion
5. Nociones generales de graficos en Stata
5.1. Grafico de tallo y hoja: stem . . . .
5.2. Scatterplots y graficos de caja . . . .
5.3. Graficos para datos longitudinales .
5.4. Histogramas . . . . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

38
38
40
41

.
.
.
.

43
43
45
50
54

6. Limpieza y analisis de datos


57
6.1. Procedimiento de limpieza de una base de datos en Stata . . . . . . . . . . . . . . 57
6.2. Analisis estadstico mediante tablas . . . . . . . . . . . . . . . . . . . . . . . . . 60
7. Administracion de datos
7.1. Errores sistematicos . . . . . . . . . . . . . . . . . . .
7.2. Valores perdidos . . . . . . . . . . . . . . . . . . . . .
7.3. Traspaso de informacion . . . . . . . . . . . . . . . .
7.3.1. Como solucionar este problema? . . . . . . .
7.4. Errores no sistematicos . . . . . . . . . . . . . . . . .
7.5. Datos faltantes . . . . . . . . . . . . . . . . . . . . .
7.5.1. Periodos . . . . . . . . . . . . . . . . . . . .
7.5.2. Codigos de valor faltante o espacios en blanco:
8. Como almacenar lo calculado
8.1. Return list . . . . . . . . . . . .
8.1.1. Para el comando summarize
8.1.2. Para el comando describe
8.1.3. Para el comando table . .
8.1.4. Para el t-test . . . . . . .
8.2. Ereturn list . . . . . . . . . . .
8.2.1. Para el comando regress .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

9. Datos que contienen fechas


9.1. Las fechas en Stata . . . . . . . . . . . . . . .
9.2. La funcion date . . . . . . . . . . . . . . . .
9.2.1. Una primera implementacion . . . . . .
9.2.2. Especificando las centurias . . . . . . .
9.2.3. Acotando las fechas a traves de los anos
9.3. Funciones complementarias a la funcion date .
9.3.1. El d
a desde una fecha . . . . . . . . .
9.3.2. El semestre desde una fecha . . . . .
9.3.3. El trimestre desde una fecha . . . .
9.3.4. El mes desde una fecha . . . . . . . . .
4

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

69
69
70
71
72
73
75
75
76

.
.
.
.
.
.
.

79
79
79
82
82
84
84
85

.
.
.
.
.
.
.
.
.
.

87
87
88
88
89
89
92
92
94
96
97

INDICE GENERAL

9.4.

9.5.

9.6.

9.7.

9.8.

9.9.

9.3.5. La semana desde una fecha . . . . . . . . . . . . . . . . . . . . .


9.3.6. El a
no desde una fecha . . . . . . . . . . . . . . . . . . . . . . . .
Convirtiendo una fecha en formato caracter en una serie de temporal . . . .
9.4.1. Funcion daily . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.2. Funcion halfyearly . . . . . . . . . . . . . . . . . . . . . . . .
9.4.3. Funcion monthly . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.4. Funcion quarterly . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.5. Funcion weekly . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.6. Funcion yearly . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transformando datos en formato de fecha a serie temporal y viceversa . . .
9.5.1. Formato de fecha a serie temporal . . . . . . . . . . . . . . . . . .
9.5.2. Serie temporal a formato de fecha . . . . . . . . . . . . . . . . . .
Tipeando fechas fijas en expresiones . . . . . . . . . . . . . . . . . . . . .
9.6.1. Fijando un da . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.2. Fijando un semestre . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.3. Fijando un mes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.4. Fijando un trimestre . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.5. Fijando una semana . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.6. Fijando un ano . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creando series temporales desde argumentos numericos . . . . . . . . . . .
9.7.1. El ano y el semestre . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.2. El ano y el mes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.3. El ano y el trimestre . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.4. El ano y la semana . . . . . . . . . . . . . . . . . . . . . . . . . .
La fecha de hoy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.8.1. Caracterstica principal . . . . . . . . . . . . . . . . . . . . . . . .
9.8.2. Como trabajar con la fecha de hoy? . . . . . . . . . . . . . . . . .
Cambiando el formato que se muestra por defecto . . . . . . . . . . . . . .
9.9.1. Caracteres utilizados y sus definiciones para mostrar los resultados .
9.9.2. La implementacion . . . . . . . . . . . . . . . . . . . . . . . . . .

10. Comandos de programacion


10.1. Las macros . . . . . . . . . . . . . .
10.1.1. Variable local . . . . . . . .
10.1.2. Variable global . . . . . . .
10.2. Comandos: if, forvalues, foreach
10.2.1. Condicion if . . . . . . . . .
10.2.2. Condicion forvalues . . . .
10.2.3. Condicion foreach . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

98
98
98
99
99
100
100
100
101
101
101
103
104
104
105
106
107
107
108
109
109
110
112
113
114
115
115
116
117
117

.
.
.
.
.
.
.

119
119
119
120
120
120
121
122

Indice
alfabetico

123

Indice
de cuadros

129

Indice
de figuras

131
5

INDICE GENERAL

Bibliografa

133

Captulo 1

Estructura general para proyectos


1.1.

Rotulacion de carpetas, variables y programas

1.1.1.

Carpetas por proyecto

El presente captulo es de caracter informativo. Tiene por objeto ordenar ideas de como almacenar los archivos afines asociados al o a los proyectos que este trabajando en su computador.
Entre los archivos afines se incluyen los datos originales, el proyecto en s con sus objetivos (el
general y los especficos) y la metodologa propuesta de recoleccion y analisis de los datos, y por
supuesto las sub carpetas numeradas secuencialmente con los programas en Stata (u otro software
estadstico) y un respaldo de los correos electronicos en Word, por ejemplo, con lo solicitado por
el investigador principal, los co-investigadores o las personas que ellos designen para los analisis.
A modo de recomendacion, evite rotular todos sus proyectos como Proyecto. A modo de
ejemplo, disponga de una gran carpeta donde podra ir almacenando todos sus proyectos o trabajos.
Es recomendable incluso escoger un par de letras que podra usted y cualquiera de sus colaboradores usar a traves del desarrollo de su proyecto agregando numeros consecutivos. En este curso
de Stata, suponga que se usara CS, de esta forma se tendra CS001, CS002, etc. al interior de
una carpeta denominada Curso de Stata. Una alternativa es disponer de carpetas para cada uno
de los das del curso: Martes, ..., Viernes; sin embargo, el juevesquedara en primer lugar.
Una opcion ampliamente utilizada es ordenar las carpetas por fecha pero en un sentido, al principio, poco intuitivo, que comience con el ano, luego el mes y por u ltimo el da. Para el curso se
tendran cuatro carpetas desde CS 2006 10 11hasta CS 2006 10 13. La ventaja de esta sugerencia se ve no cuando se tiene una cantidad reducida de carpetas. Se ha preguntado usted, donde
guarde ese archivo que ...? Esto se torna aun mas complicado de encontrar cuando se almacena
informacion en mas de un computador y en medios electronicos de almacenamiento (diskettes,
CD, pendrives, etc.).
Que opcion utilizar?, es una decision personal. El uso del explorador de Windows le puede
ayudar a organizar sus carpetas.
La idea es que opte por una alternativa de almacenamiento que usted y sus colaboradores usen
y respeten.
7

1.1. R ,

1.1.2.

Sub carpetas

En forma natural surge la necesidad de crear estructuras jerarquicas o anidadas al interior de


las carpetas madres.
Proyectos
2004
2005
2006
Curso de Stata
2006 10 11
2006 10 12
2006 10 13
Aplicaciones de Stata
Varios
El objetivo principal es mejorar la organizacion de su trabajo en equipo. Esto es la base para
documentar posteriormente el trabajo que usted realiza. Se debiera tener en cuenta la replicabilidad de los trabajos que realizan los equipos de trabajo. Siempre habra quien sepa mas de un tema;
no obstante, otros debieran estar en condiciones de entender que es lo que el experto esta haciendo.
El concepto de replicabilidad involucra dos aspectos:
1. Que el trabajo que usted haga pueda ser repetido a traves del tiempo arrojando los mismos
resultados.
2. Que cualquiera de las personas que trabajan en su equipo puedan complementar lo realizado
por otros y puedan reproducir los mismos resultados.
Para ello deben saber que modificar para obtener lo mismo que obtuvo quien realizo las tareas
de programacion. Para ello desde ya piense en documentar cada cosa que haga; ya que la memoria
es fragil. Siempre piense que la base de datos que va a trabajar no esta libre de errores. Respalde
sus bases de datos originales en una carpeta o subcarpeta y no la modifique bajo ningun argumento.
Si nota una discrepancia podra reproducir sus resultados sin problemas haciendo uso de los datos
originales .

1.1.3.

Variables y etiquetas

Si tiene una base de datos con 5, 10 o 15 variables puede usar el nombre que le parezca adecuado. Si esta trabajando con una base de datos con 100, 150 o 300 variables, la creatividad para
elegir nombres se agota y el chequeo de potenciales problemas se dificulta. Una opcion de uso
comun entre los que administran datos es el escoger una raz de por ejemplo tres caracteres que
distingan el proyecto y o la subetapa del proyecto. As una encuesta en la Facultad F, con 12 grupos mayores; con una cantidad variable de preguntas, se pueden denominar: eof0101, eof0102,
eof0103a, eof0103b, ... (eof = encuesta de opinion farmacia). Dentro de los numeros los primeros
8

C 1: E

dos se refieren a los grupos (desde 01 hasta 12), los u ltimos dos dgitos se refieren a las preguntas
que van en cantidades variables dentro de los grupos.
Las variables (help varname) en Stata pueden ser de 1 a 32 caracteres de largo con la u nica
restriccion de comenzar con a-z, A-Z o . El resto de los caracteres deben ser a-z, A-Z, , 0-9.
Cabe mencionar que genero, GENERO y Genero son tres nombres diferentes
No admite n o N.
de variables. Aun cuando peso ninho prematuro en hospital es un nombre valido no es muy recomendable en la practica por razones obvias.
Stata dispone de un sistema de etiquetado (help label) que es de mucha utilidad y que en la
practica sirve tanto para construir un libro de codigos como para la rotulacion de variables que se
requiere en la mayora de los procedimientos de Stata.
Toda las variables que auto genera Stata al realizar ciertos procedimientos comienzan con ,
por lo que se sugiere evitar nombres que comiencen con . Tambien se recomienda que defina
procedimientos para las variables derivadas. Por ejemplo, c cs01 (c por centrada) y d cs01 (d por
derivada).

1.1.4.

Nombres de Programas

Desde ya, se recomienda distinguir dos grandes grupos de programas, aquellos que se utilizan
para realizar Administracion de datos (que comienzan con ad) y los que utilizan para hacer los
Analisis propiamente tales (que comienzan con an). As en la carpeta 2006, se encuentra otra,
Enc Opi Alum Facultad F, con dos carpetas mas, una para los datos y la otra para los programas
de Administracion de Datos y los Analisis propiamente tales. Aqu se distinguen archivos que son
los de administracion de datos y los de analisis. A cada uno de los programas con extension do se
le asocia un programa con el mismo nombre pero con extension log.
2006
Enc Opi Alum Facultad F
Datos
AD y Analisis
 ad eof00.do
 ad eof01.do
 ad eof02.do
 an eof01.do
 an eof02.do
 an eof03.do
 an eof04.do
 ad eof00.log
 ad eof01.log
 ad eof02.log
 an eof01.log
 an eof02.log
 an eof03.log
9

1.2. D

 an eof04.log
Preliminar

1.2.

Documentacion

1.2.1.

Documentar lo solicitado

Lo que se vaya a realizar en un programa, regularmente es solicitado va correos electronicos,


fax u otros medios de comunicacion.
Es recomendable guardar electronicamente todo lo que sea posible almacenar lo que muchas
veces permite documentar el o los programas que se esten elaborando segun se describio en la
seccion previa. Tambien se debe considerar el almacenamiento de papeles en archivos de gabinete.

1.2.2.

Documentar tareas realizadas

Dentro de los programas con extension do es posible documentar dejando como comentario
lo que se ha solicitado as como justificar algunos cambios que decide hacer la persona que esta a
cargo de la escritura de los programas.
/**************************************************************/
/*************** Este es un comentario en Stata ***************/
/**************************************************************/
Es decir, comienzan con /* y terminan con */.

10

Captulo 2

Acceso a Stata
2.1.

Como acceder a Stata?

, o ir al menu inicio-todos
Para acceder a Stata habra que hacer click en el acceso directo
los programas-Stata 9-Stata 9. Otra forma es saber la ubicacion del programa Stata y acceder a
e l. Cualquiera sea la va que se escoja, se llegara a la siguiente ventana:

2.2.

Pantalla Principal del Stata

Figura 2.1: Ventana principal de Stata


11

2.2. P P S

Esta pantalla incluye cuatro ventanas, que aparece debajo de la barra de menu y son las siguientes: Results, Command, Review y Variables.

2.2.1.

Ventanas de Stata

Esta ventana muestra tanto los resultados que se van obteniendo as como los
mensajes ligados a la obtencion de los mismos (mensajes de error; cantidad de valores perdidos
obtenida al crear variables; la apertura o cierre de archivos de salida; etc); ya sea interactivamente
en la barra de comando o en un archivo de salida con extension log de un programa de resultados
(DO-file). Aqu los diferentes tipos de resultados se presentan en esta ventana negra en diferentes
colores, rojo, azul, verde o amarillo. En rojo, por ejemplo, se senalan los mensajes de error y junto
a e ste un texto en azul con el codigo de error que permitira al usuario indagar posibles problemas.
rc nnn: return code n
umero; los cuales no siempre son instructivos para los usuarios
Esta ventana deja un registro de lo que se ha hecho; ya sea, requeridos en forma
interactiva o en un codigo de programa en un DO-file. Esta ventana no es sin fin, de ah que se
requiere saber de los archivos log.
Esta ventana muestra las variables que se estan utilizando o las que se van generando, cuando se esta trabajando en Stata.
Esta ventana sirve para escribir los comandos interactivamente. No es recomendable usar siempre Stata en forma interactiva. Se sugiere escribir lo que se necesita en un archivo
DO-file, as se podra documentar todo lo que se requiere. A su vez se podra mantener un registro
de todo lo calculado.

2.2.2.

Barra de Herramientas

En esta seccion, se describe la barra de herramientas que aparece en el programa Stata, se


explicaran los conos adjuntos, que menos se conocen; ya que, los dos primeros son estandares
para quienes trabajan en Microsoft (abrir y guardar). Para mantener control de lo que se abre y
de lo que se graba, es tambien recomendable incluir lneas en un archivo do para proposito de
replicabilidad de lo requerido.

Figura 2.2: Barra de herramientas


Print: (help print) Este cono aun cuando es familiar tiene varias opciones para imprimir;
al apretar este boton da las opciones de imprimir lo que aparece en la ventana Results o lo que
se ha escrito en el DO-file.
Begin Log: (help log) Al hacer click en este cono se comenzara un archivo log. Un archivo log es donde se va guardando o almacenando la informacion que se va sacando de los datos, o
12

C 2: A S

lo que se quiere estudiar. Se usa porque la pantalla de Results tiene un lmite y esa informacion
se pierde. El archivo log permite documentar los resultados requeridos en el archivo do.
New Viewer: (help viewer) Este es el cono para obtener ayuda. Con e ste se podra buscar
toda la ayuda que se requiera sobre Stata. Se pueden tener varias ayudas abiertas.
Bring Results Window to Front: Si la pantalla principal de resultados, Results estuviera
oculta, este cono la enva hacia adelante, y las otras pantallas que estaban a la vista se ocultan.
Bring Graph Window to Front: Este cono se activa siempre que se haya hecho un grafico,
si no hay un grafico este cono va a estar desactivado. En el caso de que hubiera algun grafico y
estuviera oculto, este cono lo trae al frente (mostrandolo en primer plano).
New DO-file Editor: Este cono abre el editor de texto, DO-file, especial de Stata. En esta
pantalla se puede hacer lo mismo que en la barra de comandos (interactivo), con la diferencia que
aqu se pueden poner varios comandos y hacerlos correr de uno en uno o todos simultaneamente.
Data Editor: (help edit) Al hacer click en este cono, aparece la pantalla de los datos, en
blanco si no hay datos o con valores de las variables descritos en la ventana variables. Aqu, se
pueden editar los datos, ya sea para agregar, modificar o eliminar casos o variables. Equivalente,
puede tipear edit (por defecto edita todas las variables), o bien, se puede editar una o varias variables especificadas por el usuario.
Data Browser: (help browse) En apariencia es igual al data editor; sin embargo, e ste no
permite hacer ningun tipo de modificacion a los datos, solo se pueden ver. Analogamente, en la
lnea de comandos se puede tipear browse (para todas las variables) o browse una o algunas variables de interes.
Clear more Condition: Este cono -por defecto- aparece desactivado. Se activa siempre
que al ejecutar un comando, los resultados son mas largos que la pantalla Results, para avanzar
y ver los siguientes resultados aparece en textos azules la palabra more. Con este cono, se puede
seguir avanzando, lo mismo se obtiene al hacer un click sobre la palabra more.
Break: Este cono sirve para detener la ejecucion de un programa o de un procedimiento.

2.3.

Administracion Basica de Datos

En esta seccion se mostrara como ingresar, modificar, eliminar o realizar analisis preliminares
sobre los datos. Se veran varios comandos que seran u tiles para el analisis que requiera algun
investigador.
13

2.3. A B D

2.3.1.

Como Crear una Base de Datos en Stata?

En esta seccion se mostraran algunas alternativas que permitan crear bases de datos en Stata.
Por lo general cuando algun investigador pide ayuda o solicita una asesora estadstica, entrega
generalmente la base de datos en una planilla Excel. Como se puede trabajar en Stata si se tienen
los datos en Excel?, se veran dos formas para conseguir este objetivo.
1. Esta es la forma mas usada pero no por eso la mejor, se esta hablando de la forma mas utilizada
en la practica copiar y pegar. Esto es copiar la base de datos que esta en Excel y pegarla en el
data editor del Stata, pero por que no es la mejor forma de hacerlo?, la mayora de las veces
se tiene problemas con el traslado de los datos, pueden pegarse en Stata no como se quiere, en
cambio existe otra forma de hacerlo, que es mucho mas segura.
Los problemas mas usuales, surgen cuando se tienen formulas activas en la planilla Excel.
Otro problema ocurre cuando se esta trabajando con Excel en espanol, con coma como punto
decimal, Stata usa por defecto ., como punto decimal.
2. Esta forma es mucho mas segura de crear una base de datos teniendo la base de datos en Excel,
para explicarlo mejor se vera con un ejemplo.
Ejemplo 2.1 Se tiene la siguiente base en Excel (esta base de datos es ficticia):

Figura 2.3: Base de datos en ventana de Microsoft Excel


Primero se tiene que guardar la base de datos que esta en Excel con la extension csv (delimitado
por coma)
2.1 Aunque dice delimitado por coma, la delimitacion que se hace es con punto
Observacion
y coma, a menos que este trabajando con Excel en Ingles.

14

C 2: A S

Figura 2.4: Extension con que se guardara la base de datos desde Excel
Se supone que esta planilla Excel se guardo en la direccion:
"F:Mis documentos\Stata\datos.csv"
Con esta direccion se puede llamar la base de datos a Stata, con la siguiente instruccion:
clear all
insheet using "F:Mis documentos\Stata\datos.csv", delimiter(";")
Con esta instruccion los datos de Excel habran sido traspasados a Stata.

2.3.2.

Comandos basicos para la administracion y analisis descriptivo de las


variables

En esta seccion se veran los distintos comandos basicos que tiene Stata. Para explicar estos
comandos se usaran los datos que utiliza en la mayora de sus ejemplos Stata auto.dta. Esta base
de datos proporciona 12 variables y 74 casos. Estos datos se encuentran en Stata en la ubicacion
o
C:\Archivos de programa\Stata9\auto.dta, se carga directamente de Stata usando el cono
usando la instruccion:
use "C:\Archivos de programa\Stata9\auto.dta", clear
Ahora, se empezaran a ver los comandos mas elementales en el analisis de datos.
1. COMANDO input: (help input) Este comando se utiliza para agregar casos o variables:
a) Para agregar casos: A cada una de las variables de la base de datos. La sintaxis de input
esta dada por:
Sintaxis: input
Ejemplo 2.2

. input
.
.
. end

\* En esta parte se ingresan los datos para cada caso*\


\* y variable hasta que se termine de ingresarlas *\

15

2.3. A B D

b) Para agregar variables:


Sintaxis: input [newvar] [, automatic label]
Ejemplo 2.3

. input [nuevas variables]


.
\* Aqu
se ingresan todos los datos de las nuevas *\
.
\* variables hasta llegar a la cantidad de *\
.
\* casos que hay *\
. end

2. COMANDO describe: (help describe) Este comando permite realizar una descripcion muy
general de las variables. Esta descripcion incluye el tipo de variable (type), el formato (format),
las etiquetas de los valores si es que tienen (value label) y las etiquetas de las variables si es
que tambien estan etiquetados (variable label). Para el ejemplo se utilizaran las variables
make price mpg rep78 foreign, de la base de datos de autos.dta.
Sintaxis: describe [varlist]
Ejemplo 2.4 . describe make price mpg rep78 foreign

El comando describe proporciona en la pantalla los siguientes resultados:


storage display
value
variable name
type
format
label
variable label
-----------------------------------------------------------------make
str18 %-18s
Make and Model
price
int
%8.0gc
Price
mpg
int
%8.0g
Mileage (mpg)
rep78
int
%8.0g
Repair Record 1978
foreign
byte
%8.0g
origin
Car type

3. COMANDO list: (help list) Este comando muestra los datos. Para el ejemplo se utilizaran
las variables trunk length turn gear ratio foreign. Para el ejemplo de utilizaran los
datos de la base de datos de autos.dta se mostraran cinco casos.
Sintaxis: list [varlist] [if] [in] [, options]
Ejemplo 2.5 . list length turn gear_ratio foreign in 1/5

El comando list proporciona en la pantalla los siguientes resultados:


+---------------------------------------------+
| trunk
length
turn
gear_ro
foreign |
16

C 2: A S

1.
2.
3.
4.
5.

|---------------------------------------------|
|
11
186
40
3.58
Domestic |
|
11
173
40
2.53
Domestic |
|
12
168
35
3.08
Domestic |
|
16
196
40
2.93
Domestic |
|
20
222
43
2.41
Domestic |
+---------------------------------------------+

4. COMANDO generate: (help generate) Este comando crea variables a partir de otras. Para el
ejemplo se utilizara la variable price de la base de datos auto.dta que se le quitara el 10 %
del precio original.
Sintaxis: generate [type] newvar [:lblname] = exp [if] [in]
Ejemplo 2.6

. generate n_price = price*0.9


. generate price2 = price2
El comando generate creara una nueva variable llamada n price que va corresponder al 90 %
de la variable price. Tambien para crear variables a partir de otras se pueden hacer operaciones
matematicas mezclando varias variables.
5. COMANDO replace: (help replace) Este comando reemplaza valores de casos y variables.
En el ejemplo se reemplazara el valor del precio de Ford Fiesta que es US$4389 por US$4279.
Sintaxis: replace oldvar =exp [if] [in] [, nopromote]
Ejemplo 2.7 . replace price = 4279 if make == "Ford Fiesta"

El comando replace proporciona en la ventana de Results lo siguiente:


. replace price = 4279 if make == "Ford Fiesta"
(1 real change made)

6. COMANDO sort: (help sort) Este comando ordena las variables. Si no se le dice a Stata que
ordene la variable, e sta no va a estar ordenada, por mucho que uno vea que s lo esta. Para el
ejemplo se ordenara la variable mpg.
Sintaxis: sort varlist [in] [, stable]
Ejemplo 2.8 . sort mpg

Con esto la variable va hacer la u nica variable que va a estar ordenada y Stata lo va a reconocer
as.
17

2.3. A B D

7. COMANDO codebook: (help codebook) Este comando muestra el detalle de la variable. Para
el ejemplo se mostraran las variables price y rep78, de la base de datos de auto.dta.
Sintaxis: codebook [varlist] [if] [in] [, options]
Ejemplo 2.9 . codebook price rep78

El comando codebook proporciona en la pantalla los siguientes resultados:


----------------------------------------------------------------price
Price
----------------------------------------------------------------type: numeric (int)
range: [3291,15906]
unique values: 74

units:
missing .:

1
0/74

mean: 6163.77
std. dev: 2950.43
percentiles:

10%
3895

25%
4195

50%
5006.5

75%
6342

90%
11385

----------------------------------------------------------------rep78
Repair Record 1978
----------------------------------------------------------------type:

numeric (int)

range: [1,5]
unique values: 5
tabulation:

Freq.
2
8
30
18
11
5

units:
missing .:

1
5/74

Value
1
2
3
4
5
.

8. COMANDO summarize: (help summarize) Este comando calcula las estadsticas descriptivas
basicas de cada variable. Para el ejemplo se calcularan las estadsticas descriptivas basicas de
las variables numericas, y no las de las categoricas.
18

C 2: A S

Sintaxis: summarize [varlist] [if] [in] [weight] [, options]


Ejemplo 2.10

summarize price mpg rep78 headroom trunk weight /*


*/ length turn displacement gear_ratio, format
El comando summarize proporciona en la pantalla los siguientes resultados:
Variable |
Obs
Mean
Std. Dev.
Min
Max
-------------+----------------------------------------------------price |
74
6,163.77
2,950.43
3,291
15,906
mpg |
74
21.2973
5.785503
12
41
rep78 |
69
3.405797
.9899323
1
5
headroom |
74
3.0
0.8
1.5
5.0
trunk |
74
13.75676
4.277404
5
23
-------------+----------------------------------------------------weight |
74
3,019.46
777.1936
1,760
4,840
length |
74
187.9324
22.26634
142
233
turn |
74
39.64865
4.399354
31
51
displacement |
74
197.2973
91.83722
79
425
gear_ratio |
74
3.01
0.46
2.19
3.89
Aqu se muestran el numero de observaciones, promedio, desviacion estandar, mnimo y maximo, de cada variable, con su respectivo formato.
2.2 Si se quiere usar alguno de estos comandos con varias variables, existe la opObservacion

cion de poner el comando pero abreviar las variables, siempre y cuando el nombre de la variable
tengan una misma raz o terminen igual. Por ejemplo, en la base de datos de los autos, si escribe
la siguiente instruccion: describe make mpg, esta instruccion proporcionara en la pantalla lo
siguiente:
storage display
value
variable name
type
format
label
variable label
-----------------------------------------------------------------make
str18 %-18s
Make and Model
mpg
int
%8.0g
Mileage (mpg)
y si cambia la instruccion por: describe m*, la pantalla proporcionara el siguiente resultado:
storage display
value
variable name
type
format
label
variable label
-----------------------------------------------------------------make
str18 %-18s
Make and Model
mpg
int
%8.0g
Mileage (mpg)

19

2.3. A B D

Como se puede ver, las dos formas arrojan los mismos resultados.
Ejercicio 2.1 De la base de datos contenida en el cuadro 2.1:
codigo
1941
1943
1937
1945
1950

edad
20
23
24
21
21

genero
1
0
0
1
0

carrera
Enfermera
Kinesiologa
Educacion Parvularia
Psicologa
Odontologa

arancel
1273300
1615000
1273000
1470000
2235000

Cuadro 2.1: Base de datos para el ejercicio 10.4 del captulo 2


1. Calcule las estadsticas descriptivas de los aranceles y cree una nueva variable donde el arancel
aumenta un 5 %.
2. Escriba la base de datos del ejercicio anterior en una planilla Excel y trasladela a Stata.
3. Con la base de datos anterior utilize el comando codebook, y comente los resultados, y etiquete
las variables que no sean numericas.

20

Captulo 3

Los datos y el editor de programas


3.1.

Como leer los datos

Los datos de Stata son accesibles y se pueden leer, en terminos practicos, de las siguientes
maneras:
1. interactivamente, tomando informacion que esta en archivos con extension txt, o archivos
ASCII.
2. Colocandola en el data editor, que es la manera como Stata guarda la informacion en su
interior.
Es usual que el modo batch (no interactivo) sea usado cuando las bases de datos son extremadamente grandes. Sin embargo, si una base es pequena o moderadamente manejable, una manera
u til y eficiente de trabajar la informacion con Stata, es crear directamente los archivos con extension dta. Para introducir la informacion hay dos maneras, dato a dato en el data editor, o bien
se puede utilizar un programa conocido como StataTransfer, el cual permite introducir archivos
desde casi cualquier otro programa a Stata. Presionando con el mouse en el cono correspondiente
al data editor se puede observar los datos dentro de Stata.

3.2.

Que es un archivo do

Un archivo con extension do, es uno en el cual se elabora un programa detallado para ejecutar.
As por ejemplo, cuando se usa una base de datos, toda transformacion de observaciones o de
variables puede ser llevada a cabo a traves de este tipo de archivo sin modificar la base de datos
original. A traves del DO-file se crea una nueva base de datos independiente de la original y sobre
ella es posible trabajar. Esta nueva tabla es u til si se quiere tener menos datos de los que estan en
la original o menos variables. Es decir existe una informacion que no se quiere usar, pero tampoco
eliminar, as que es mejor elaborar una nueva tabla permanente solo con la informacion requerida.
Hay dos maneras de ejecutar el archivo do, a traves del Stata command o desde el archivo do
mismo, solo presionando el cono DO current file. Desde el Stata command hay que dar
la orden DO filename, y desde aqu es como si hiciese el programa por pasos desde el Stata
command. Si hay errores el programa se detiene. No obstante, si se le ordena nostop el programa
no se detendra aun si hay errores.
21

Captulo 4

Nociones generales del uso de Stata


4.1.

Creacion de rotulos label

En Stata se pueden asignar rotulos de hasta 80 caracteres, encerrados por comillas cuando hay
espacios en blanco entre palabras o sin comillas si hay una sola palabra. En Stata se pueden rotular
o etiquetar los archivos, las variables, y los valores de variables numericas. (help label)
Ejemplo 4.1 Para la explicacion de cada uno de estos casos, se ocupara un archivo que tendra el

nombre de Alumnos Matriculados UV 2005, el cual muestra un grupo de variables con datos ficticios de alumnos matriculados en distintas carreras de la Universidad de Valparaso (Vea el cuadro
4.1).

Nombre
Claudia Donoso
Raul Toledo
Rodrigo Saavedra
Catalina Ros

Va ingreso
3
1
2
1

Lugar ingreso
24
31
7
40

Region procedencia
5
6
4
13

Codigo carrera
1972
1940
1931
1943

Cuadro 4.1: Alumnos Matriculados UV 2005


Los codigos de las carreras se presentan en el Cuadro 4.2.
Codigo
1972
1940
1931
1943

Carrera
Ingeniera en Estadstica
Medicina
Trabajo Social
Kinesiologa

Cuadro 4.2: Codigos de carrera


El cuadro 4.2 muestra las carreras con sus respectivos codigos. Posteriormente (cuadro 4.3) se
tiene la va de ingreso de los alumnos y sus correspondientes codificaciones:

23

4.1. C label

Codigo
1
2
3

Va de Ingreso
P.A.A
P.S.U
Otra

Cuadro 4.3: Codigos de Va de Ingreso


Luego, las regiones de donde provienen los alumnos con sus respectivas codificaciones son las
ensenadas en el cuadro 4.4.
Codigo
1
4
5
13

Region
Primera
Cuarta
Quinta
Metropolitana

Cuadro 4.4: Codigos de region


Hay que destacar que al momento de ingresar los datos a Stata las variables fueron ingresadas
con los siguientes nombres:
Nombre: nombre
Va ingreso: via ing
Lugar de ingreso: lug ing
Region de procedencia: reg proce
Codigo carrera: cod carr
4.1 Rotular los nombres no tiene sentido, pues frecuentemente todos los nombres
Observacion

son diferentes.
4.2 Note que los valores para via ing, reg proce y cod carr son expresados en
Observacion

numeros, pero en realidad son variables categoricas.


4.3 No obstante lo descrito en la observacion 2 es posible etiquetar los valores de
Observacion

todas las variables.

4.1.1.

Rotulos de archivos

Primero, se etiquetara el conjunto de datos. La sintaxis es la siguiente:


label data ["label"]
24

C 4: N S

Para los datos del ejemplo 4.1, se tiene la siguiente estructura, ya sea en la lnea de comandos o
bien en el DO-file editor de Stata: label data "Alumnos Matriculados UV en 2005"
Luego, utilizando el comando describe se puede ver que la base de datos ha sido rotulada:
obs:
4
Alumnos Matriculados UV en 2005
vars:
5
4 Dec 2005 21:48
size:
68 (99.9% of memory free)
---------------------------------------------------------------------storage display
value
variable name
type
format
label
variable label
---------------------------------------------------------------------nombre
str8
%9s
via_ing
byte
%8.0g
lug_ing
byte
%8.0g
reg_proce
byte
%8.0g
cod_carr
int
%8.0g
---------------------------------------------------------------------Cabe mencionar que esto se puede realizar en un archivo del tipo DO en el editor de texto de
Stata, el cual se detalla al final de este captulo (seccion 4.1.4, pagina 30).

4.1.2.

Rotulos de variables

Para rotular a las variables, la sintaxis esta dada de la siguiente manera:


label variable varname ["label"]
Hay que notar que para etiquetar una variable e sta debe ser numerica, por lo que si se tienen
variables alfa-numericas hay que transformarlas primero a variables numericas.
Realizando un browse se puede notar que los valores de las variables categoricas aparecen en
rojo (en el ejemplo 4.1 los nombres de las personas) y los de las variables numericas en negro.
En este caso, los rotulos para las variables estan dados de la siguiente manera:
label
label
label
label
label

variable
variable
variable
variable
variable

nombre "Nombre"
via_ing "Via de Ingreso"
lug_ing "Lugar de Ingreso"
reg_proce "Region de procedencia"
cod_carr "Codigo Carrera"

Ocupando nuevamente el comando describe, se puede observar el rotulo para cada una de las
variables:
25

4.1. C label

Figura 4.1: Distincion del tipo de variable.

obs:
4
Alumnos Matriculados UV
vars:
5
13 Dec 2005 21:35
size:
68 (99.9% of memory free)
-------------------------------------------------------------------storage display
value
variable name
type
format
label
variable label
-------------------------------------------------------------------nombre
str8
%9s
Nombre
via_ing
byte
%8.0g
Via de Ingreso
lug_ing
byte
%8.0g
Lugar de Ingreso
reg_proce
byte
%8.0g
Region de procedencia
cod_carr
int
%8.0g
Codigo Carrera
--------------------------------------------------------------------

4.1.3.

Rotulos para valores de variables

Los valores numericos de una variable pueden ser rotulados de manera que estos rotulos aparezcan, por ejemplo, cuando se pida a Stata construir una tabla de frecuencias. Esta rotulacion se hace
en dos etapas:
1. Se definen los rotulos para cada valor numerico de la variable, donde se tiene la siguiente
sintaxis:
label define lblname# "label" [#"label"...]
2. Luego, se asignan estos rotulos a la o las variables que tengan los mismos tipos de valores. Para
esto, se tiene la siguiente sintaxis:
label values varname

[lblname]

A modo de ejemplo, se crearan rotulos para los valores de la variable via ing (Va ingreso)
del ejemplo 4.1:
26

C 4: N S

label define cod_ing 1 "PAA" 2 "PSU" 3 "Otra"


label values via_ing cod_ing
De la misma manera se pueden crear rotulos para los valores de las variables reg proce y
cod carr. A continuacion, ocupando los comandos describe y list, se pueden ver los rotulos
de las variables y de sus correspondientes valores:
-------------------------------------------------------------------storage display
value
variable name
type
format
label
variable label
-------------------------------------------------------------------nombre
str8
%9s
Nombre
via_ing
byte
%8.0g
cod_ing
Via de Ingreso
lug_ing
byte
%8.0g
Lugar de Ingreso
reg_proce
byte
%13.0g
cod_reg
Region de procedencia
cod_carr
int
%8.0g
cod_car
Codigo Carrera
--------------------------------------------------------------------

1.
2.
3.
4.

+---------------------------------------------------------+
|
nombre
via_ing
lug_ing
reg_proce
cod_carr |
|---------------------------------------------------------|
| claudia
Otra
24
quinta
Ing_Est |
|
raul
PAA
31
sexta
Med |
| rodrigo
PSU
7
cuarta
Trab_soc |
| catalina
PAA
40
metropolitana
Kine |
+---------------------------------------------------------+

Luego, observando el Data Editor de Stata, se puede notar que ahora aparecen en azul los
valores de las variables numericas que estan con codigos alfa-numericos como tambien al marcar
la celda correspondiente a la Region Metropolitana se observa que el reg proce[4] es igual a 13,
valor que corresponde al codigo de dicha region.
Ahora suponga que se tiene una gran cantidad de variables, lo que hace muy difcil conocer
los codigos para cada uno de los valores de las variables rotuladas, para esto, existe otra manera
muy practica de crear los label define y label values, como ejemplo, se tomara la variable
via ing y sera rotulada de la siguiente manera:
label define cod_ing 1 "1: PAA" 2 "2: PSU" 3 "3: Otra", modify
Note que se modifico el label value correspondiente a via ing mediante el uso del comando modify. Con esto, el resultado obtenido es el siguiente:
+--------------------+
|
nombre
via_ing |
|--------------------|
27

4.1. C label

Figura 4.2: Data Editor de Stata.

1.
2.
3.
4.

| claudia
3: Otra |
|
raul
1: PAA |
| rodrigo
2: PSU |
| catalina
1: PAA |
+--------------------+

Se puede notar que al lado de cada forma de ingreso a la Universidad aparece su correspondiente codigo (por ejemplo, en vez de PAA, ahora aparece 1: PAA), lo que es muy u til cuando se
quieren realizar distintos tipos de analisis y como se dijo antes, cuando se tiene una gran cantidad
de datos.
Para el siguiente ejemplo, suponga que la variable reg proce esta ingresada a Stata de la
siguiente manera:

Figura 4.3: Cambio de la variable reg proce.

Note que los valores de la variable reg proce son de color rojo, es decir, esta variable ahora
es del tipo categorica aun cuando fue ingresada como numeros romanos. Al momento de etiquetar
o rotular los valores de esta variable se obtiene el mensaje de error mostrado en la figura 4.4.

28

C 4: N S

Figura 4.4: Mensaje de error entregado por Stata.

Como se dijo con anterioridad, este mensaje de error es debido a que la variable reg proce
debe ser numerica para que sus valores puedan ser etiquetados. Para transformar esta variable a
numerica se generara sobre la base de ella una nueva variable llamada lug ori de la siguiente
forma:
gen lug_ori
replace
replace
replace

= 5 if reg_proce == "V"
lug_ori = 6 if reg_proce == "VI"
lug_ori = 4 if reg_proce == "IV"
lug_ori = 13 if reg_proce == "RM"

Ahora, se puede observar que la nueva variable lug ori es numerica (de color negro):

Figura 4.5: Variable numerica lug ori.

Entonces, el rotulo para los valores de esta variable queda de la siguiente manera:
label define cod_reg 6 "VI" 4 "IV" 5 "V" 13 "RM"
label values lug_ori

cod_reg

Como se ve en la Figura 4.6, los valores de la variable lug ori han sido rotulados de la misma
forma en que fueron ingresados originalmente a Stata dentro de la variable reg proce (como
numeros romanos), con la diferencia que ahora esos mismos valores corresponden a una variable
numerica, es decir, cada uno representa un valor numerico como se puede ver para la sexta region
en lug ori[2] = 6:
29

4.1. C label

Figura 4.6: Rotulo para la variable lug ori.

4.1.4.

Archivo do utilizado en esta seccion

label data "Alumnos Matriculados UV en 2005"


label variable nombre "Nombre"
label variable

lug_ing "Lugar de Ingreso"

label variable

reg_proce "Region de procedencia"

label variable cod_carr "Codigo Carrera"


label define cod_ing 1 "PAA" 2 "PSU" 3 "Otra"
label values via_ing cod_ing
label define cod_car 1972 "Ing_Est" 1940 "Med" 1931 "Trab_soc" 1943 "Kine"
label values cod_carr cod_car
gen lug_ori=5 if reg_proce=="V"
replace lug_ori=6 if reg_proce=="VI"
replace lug_ori=4 if reg_proce=="IV"
replace lug_ori=13 if reg_proce=="RM"
label define cod_reg 6 "VI" 4 "IV" 5 "V" 13 "RM"
label values lug_ori cod_reg

30

C 4: N S

4.2.

Creacion de nuevas variables generate

En Stata se pueden crear variables a partir de las existentes, ya sea ocupando expresiones algebraicas usuales, funciones matematicas, funciones estadsticas, etc. Para crear una nueva variable
el comando a utilizar es generate (help generate) y la sintaxis esta dada por:
generate [type] newvar[:lblname] = exp [if] [in]
Otra forma de generar o crear una variable es modificando una ya existente, o bien, modificando
su contenido. En este caso, la sintaxis es la siguiente:
replace oldvar = exp [if] [in] [, nopromote]
Tambien se puede fijar una semilla como valor inicial para la generacion de numeros aleatorios:
set seed {#|code}
Ejemplo 4.2 Para una mejor explicacion, se utilizaran los datos de sysuse bpwide.dta del Example

datasets de Stata, los que corresponden a medidas de la presion sangunea tomadas a un grupo
de 120 personas antes y despues de la aplicacion de un medicamento. En la figura 4.7 se muestra
una parte de estos datos:
Ahora, suponga que a un investigador le interesa saber si en la segunda medicion hay una
subida en la presion sangunea de los pacientes, para esto primero se generara una nueva variable
que tendra por nombre bp dif, la cual estara formada por la diferencia entre la segunda medicion
(after) y la primera medicion (before) y luego se generara otra variable llamada bp alza que
tendra solo los casos en los que la diferencia entre las mediciones es mayor que cero:
gen bp_dif = bp_after-bp_before
gen bp_alza = bp_dif if bp_dif>0
Hay que notar que al crear la variable bp alza tambien se generaron 77 valores perdidos correspondientes a los casos en los que la diferencia entre las mediciones de la presion sangunea es
menor que cero (ver figura 4.8).
Luego, se borraran los casos en los cuales la diferencia entre mediciones es negativa:
drop if bp_alza == .
Con esto quedan solo los 43 pacientes que presentaron un alza en la presion sangunea.
Ahora suponga que el mismo investigador tiene que tomar una muestra aleatoria de la mitad de los pacientes que presentaron un alza en la presion sangunea para poder probar otro tipo
de tratamiento. Para esto primero se generaran numeros aleatorios con distribucion uniforme de
semilla igual a 1990 (ver figura 4.9):
31

4.2. C generate

Figura 4.7: Datos de sysuse bpwide.dta.

set seed 1990


gen random = uniform()
Luego, haciendo:
sort random
sample 21, count
Se obtiene una muestra aleatoria de 21 pacientes de los 43 que presentaron un alza en la presion
sangunea. A continuacion se presenta la lista de los pacientes a los que se les aplicara el nuevo
tratamiento:

1.
2.
3.
4.
5.

+------------------------------+
| patient
bp_alza
random |
|------------------------------|
|
34
36
.4832145 |
|
87
5
.6497909 |
|
77
7
.3519351 |
|
49
14
.1419565 |
|
26
6
.137853 |
32

C 4: N S

Figura 4.8: Variables bp dif y bp alza.

Figura 4.9: Variable random.

6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

|------------------------------|
|
55
15
.7210993 |
|
97
25
.465901 |
|
73
27
.3593707 |
|
101
10
.3661099 |
|
119
2
.0242004 |
|------------------------------|
|
14
14
.5665284 |
|
2
7
.7746237 |
|
108
7
.4608473 |
|
1
10
.3160134 |
|
33
8
.1500585 |
|------------------------------|
|
60
2
.0320469 |
33

4.3. U C egen

17.
18.
19.
20.

|
63
2
.6549666 |
|
38
19
.1134934 |
|
114
26
.2365237 |
|
91
3
.1445396 |
|------------------------------|
21. |
46
9
.2519576 |
+------------------------------+

Existen dos comandos que se encuentran fuertemente relacionados con el comando generate,
estos son: drop y keep. El primero elimina ya sea datos o variables desde la memoria, mientras
que el segundo se utiliza para especificar las variables u observaciones que se quieren conservar.
Por ejemplo, para eliminar la variable bp dif hay que tipear en la lnea de comando de Stata o en
el DO-file editor:
drop bp_dif
Mientras que si solo se quiere conservar en la base de datos las variables patient y bp alza,
hay que tipear:
keep patient bp_alza

4.2.1.

Archivo do utilizado en esta seccion

sysuse bpwide.dta (fictional blood-pressure data)


gen bp_dif=(bp_after-bp_before)
gen bp_alza=bp_dif if bp_dif>0
drop if bp_alza==.
set seed 1990
gen random = uniform()
sort random
sample 21, count

4.3.

Uso del Comando egen

El comando egen (help egen) realiza funciones por individuos para cada una de las variables
que se le indique, es decir, realiza operaciones por filas en las bases de datos.
34

C 4: N S

Ejemplo 4.3 Para una mejor explicacion, se utilizaran datos ficticios (ver cuadro 4.5) que corresponden a una parte de las notas de un curso.

Alumno
Claudia
Hector
Francisco
Pa
Andres
Andrea
Pamela
Antonio

Nota 1
5.5
4.2
6.0
4.7
6.7

Nota 2
6.0
5.2
4.9
6.2
5.4
3.8

5.5

Nota 3
6.7
5.5
4.7
5.2
5.8
4.1

Cuadro 4.5: Parte de las notas del curso


Como se puede apreciar en el cuadro 4.5, hay lugares en los cuales no existen notas, es decir, existen valores perdidos. Ocupando el comando egen se puede conocer el numero de valores
perdidos para cada uno de los alumnos. Esta funcion es de gran utilidad cuando se tiene una gran
cantidad de datos.
La sintaxis para el uso de este comando es la siguiente:
egen [type] newvar = fcn(arguments)[if exp][in range][, options]
Como primer ejemplo, se calculara el numero de notas perdidas para cada uno de los alumnos
de la tabla anterior. Se debe tomar en cuenta que el nombre de las variables fue ingresado a Stata
de la siguiente manera:
nota 1: nota_1
nota 2: nota_2
nota 3: nota_3
Entonces, la estructura queda de la forma:
egen n_per = rmiss(nota_1 - nota_3)
Con esto se genera una nueva variable llamada n per la cual contiene el numero de notas faltantes para cada uno de los alumnos (rmiss = row miss).
Luego, utilizando el comando list se puede observar la nueva variable generada:
+----------------------------------------------+
|
alumno
nota_1
nota_2
nota_3
n_per |
|----------------------------------------------|
35

4.3. U C egen

1.
2.
3.
4.
5.

|
Claudia
5.5
6
6.7
0 |
|
Hector
4.2
.
.
2 |
| Francisco
6
5.2
.
1 |
|
Pia
.
.
4.7
2 |
|
Andres
4.7
4.9
5.2
0 |
|----------------------------------------------|
6. |
Andrea
6.7
6.2
5.8
0 |
7. |
Pamela
.
5.4
.
2 |
8. |
Antonio
5.5
3.8
4.1
0 |
+----------------------------------------------+
Ahora se generara otra variable que contenga la nota promedio para cada uno de los alumnos,
para esto se creara una variable que tenga el numero total de notas por alumno (numero de notas
que debera tener cada alumno - valores perdidos):
gen n_tot = 3 - n_per
Luego, utilizando el comando rsum para sumar las notas de cada alumno:
egen sum = rsum(nota_1 - nota_3)
Que hubiese ocurrido si se genera una variable con un promedio simple prom s?
gen prom_s = (nota_1 + nota_2 + nota_3)/3
Entonces, el promedio de notas queda dado por:
gen prom = sum / n_tot

1.
2.
3.
4.
5.
6.
7.
8.

+-----------------------------------------------------------------+
|
alumno nota_1 nota_2 nota_3 n_per n_tot
sum
prom |
|-----------------------------------------------------------------|
|
Claudia
5.5
6
6.7
0
3 18.2 6.066667 |
|
Hector
4.2
.
.
2
1
4.2
4.2 |
| Francisco
6
5.2
.
1
2 11.2
5.6 |
|
Pia
.
.
4.7
2
1
4.7
4.7 |
|
Andres
4.7
4.9
5.2
0
3 14.8 4.933333 |
|-----------------------------------------------------------------|
|
Andrea
6.7
6.2
5.8
0
3 18.7 6.233334 |
|
Pamela
.
5.4
.
2
1
5.4
5.4 |
|
Antonio
5.5
3.8
4.1
0
3 13.4 4.466667 |
+-----------------------------------------------------------------+

Ahora se creara la variable rank not, que tendra el ranking del promedio de notas del grupo,
esta nueva variable presenta la siguiente estructura:
egen rank_not = rank(prom)
36

C 4: N S

Como se puede ver en la siguiente figura, una vez ingresada la variable rank not, y haciendo
un sort rank not para ordenar las notas promedios desde la mas baja a la mas alta, se obtiene el
ranking de notas de los alumnos:

1.
2.
3.
4.
5.
6.
7.
8.

+---------------------------------+
|
alumno
prom
rank_not |
|---------------------------------|
|
Hector
4.2
1 |
|
Antonio
4.466667
2 |
|
Pia
4.7
3 |
|
Andres
4.933333
4 |
|
Pamela
5.4
5 |
|---------------------------------|
| Francisco
5.6
6 |
|
Claudia
6.066667
7 |
|
Andrea
6.233334
8 |
+---------------------------------+

Por u ltimo, para una presentacion mejor de los datos, se reducira a 2 el numero de decimales
de la variable prom de la siguiente manera:
format prom %9.2f
Donde 9 indica el ancho, 2 el numero de decimales y f indica que el numero de decimales es fijo.
Ahora, el resultado obtenido es el siguiente:

1.
2.
3.
4.
5.
6.
7.
8.

4.3.1.

+-----------------------------+
|
alumno
prom
rank_not |
|-----------------------------|
|
Hector
4.20
1 |
|
Antonio
4.47
2 |
|
Pia
4.70
3 |
|
Andres
4.93
4 |
|
Pamela
5.40
5 |
|-----------------------------|
| Francisco
5.60
6 |
|
Claudia
6.07
7 |
|
Andrea
6.23
8 |
+-----------------------------+

Archivo do utilizado en esta seccion

egen n_per=rmiss( nota_1- nota_3)


gen n_tot=3-n_per

37

4.4. C

egen sum=rsum( nota_1- nota_3)


gen prom=sum/n_tot
egen rank_not=rank(prom)
sort

rank_not

list alumno prom rank_not


format prom %9.2f

4.4.

Concatenando la informacion

Los comandos merge y append se utilizan para juntar bases de datos que son grandes (puede
ser que tengan una gran cantidad de variables) y estan divididas en varios archivos de tipo de texto.
A continuacion se explicara cada uno de estos comandos.

4.4.1.

Uso del comando merge

El comando merge (help merge) realiza una concatenacion horizontal, es decir, junta la informacion por filas. La sintaxis para este comando es la siguiente:
merge [varlist] using filename [filename ...] [, options]
Si el nombre del archivo que se va a utilizar tiene espacios en blanco hay que escribirlo entre
comillas. Tambien hay que destacar que una vez que se lleva a cabo la concatenacion Stata genera
una variable llamada merge que puede tomar tres valores segun sea el origen de la o las nuevas
observaciones:
merge = 1 Si la observacion estaba en la base de datos original.
merge = 2 Si la observacion esta solo en la nueva base fucionada.
merge = 3 Si las observaciones estaban en ambas bases antes de la concatenacion.
Ejemplo 4.4 Para explicar de una mejor manera como funciona este comando, se utilizaran los
datos de auto.dta y autornd.dta del Example datasets de Stata.

El primer paso sera crear una variable indicadora que se encuentre en ambas bases de datos,
esta variable llevara el nombre de id y enumerara las marcas de auto de manera ascendente desde
1 a 74.
Entonces para auto.dta se tiene:
38

C 4: N S

use auto
gen id = _n
save auto, replace
Con lo anterior, se le indica a Stata que para el archivo auto.dta se crea la variable indicadora
id. Para ver el resultado obtenido se realizara un list de las variables make e id, del cual se
mostraran solo los primeros 10 casos y 2 variables:

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

+------------------------+
| make
id |
|------------------------|
| AMC Concord
1 |
| AMC Pacer
2 |
| AMC Spirit
3 |
| Audi 5000
4 |
| Audi Fox
5 |
|------------------------|
| BMW 320i
6 |
| Buick Century
7 |
| Buick Electra
8 |
| Buick LeSabre
9 |
| Buick Opel
10 |
|------------------------|

Luego, para el archivo autornd.dta se tiene:


use autornd
gen id = _n
save autornd, replace
Con esto se obtiene el mismo resultado que para auto.dta. Ahora, para concatenar los dos
archivos mediante el comando merge la secuencia a seguir es la siguiente:
use auto
sort id
save auto
use autornd
sort id
merge id using auto

Note que para los dos archivos de datos se ocupa el comando sort para ordenar la variable
indicadora, con esto se consigue que dicha variable tenga el mismo orden en ambos archivos de
datos. Ahora se mostrara una parte de los datos concatenados:
39

4.4. C

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

+-----------------------------------------------------------+
| make
weight
mpg
price
turn
_merge |
|-----------------------------------------------------------|
| AMC Concord
3000
20
4,099
40
3 |
| AMC Pacer
3500
15
4,749
40
3 |
| AMC Spirit
2500
20
3,799
35
3 |
| Buick Century
3500
20
9,690
37
3 |
| Buick Electra
4000
15
6,295
36
3 |
|-----------------------------------------------------------|
| Buick LeSabre
3500
20
9,735
34
3 |
| Buick Opel
2000
25
4,816
40
3 |
| Buick Regal
3500
20
7,827
43
3 |
| Buick Riviera
4000
15
5,788
43
3 |
| Buick Skylark
3500
20
4,453
34
3 |
|-----------------------------------------------------------|

Como se puede ver en el resultado anterior, las bases de datos han sido correctamente concatenadas, como tambien se observa la variable merge creada por Stata, compuesta solo por numeros
3 que indica que las observaciones estaban en ambas bases de datos antes de la concatenacion.

4.4.2.

Uso del comando append

El comando append (help append) se utiliza cuando se quiere hacer concatenacion vertical.
Como se sabe, en la mayora de los casos las bases de datos vienen dadas por columnas, por lo
tanto, para utilizar correctamente este comando los nombres de las variables deben ser los mismos,
es decir, deben estar escritos de la misma forma en ambas bases de datos. Uno de los errores mas
comunes es el uso de minusculas o mayusculas al escribir el nombre de las variables en las distintas bases de datos, con lo que se hace imposible el poder concatenar la informacion.
La sintaxis para el uso de este comando es la siguiente:
append using filename [, options]
Al igual que el comando merge si el nombre del archivo que se va a utilizar tiene espacios en
blanco hay que escribirlo entre comillas.

Ejemplo 4.5 Para aclarar el uso de este comando, se utilizaran nuevamente los archivos auto.dta

y autornd.dta del Example datasets de Stata.


El primer paso es abrir el archivo auto.dta:
use auto
Luego, se procede a la concatenacion de ambos archivos:
append using autornd
40

C 4: N S

4.4 Se tiene que recordar que cada base de datos tiene un total de 74 observaciones
Observacion

(filas), con lo que al concatenar ambas bases se tendra un total de 148 observaciones.
4.5 Como el archivo autornd solo consta de tres variables (make, weight, mpg)
Observacion

para el resto de las variables del archivo auto se generaran valores perdidos al momento de la
concatenacion de archivos.
Utilizando el comando describe se puede ver que el numero de observaciones ha aumentado:
Contains data from auto.dta
obs:
148
vars:
13
size:
8,140 (99.9% of memory free)

1978 Automobile Data


25 Dec 2005 20:51
(_dta has notes)

En la figura 4.10 se muestra una parte de los datos concatenados.

Figura 4.10: Datos concatenados por el comando append.

4.4.3.

Archivo do utilizado en esta seccion

/** Concatenado por el comando merge **/


use auto
41

4.4. C

gen id=_n
save auto, replace
use autornd
gen id=_n
save autornd, replace
use auto
sort id
save auto, replace
use autornd
sort id
merge id using auto
/** Concatenado por el comando append **/
use auto
append using autornd

42

Captulo 5

Nociones generales de graficos en Stata


Un grafico podra definirse como una representacion visual de un grupo de datos, es por esto
que un grafico debe ser lo mas practico y explicativo posible. Stata cuenta con una gran variedad
de graficos que se pueden utilizar en la presentacion de un grupo de datos. En este captulo se
explicara el uso de alguno de estos graficos (help graph).

5.1.

Grafico de tallo y hoja: stem

Este tipo de grafico generalmente se utiliza al inicio de cualquier investigacion ya que permite
observar tanto el centro de la distribucion de los datos como tambien la forma general de dicha
distribucion. Otra cosa importante que se puede observar en este tipo de grafico es la existencia de
outliers, que son observaciones individuales que caen por fuera del patron general de los datos.
La sintaxis para el uso de este tipo de grafico es la siguiente:
stem varname [if] [in] [, options]
Existen dos opciones muy u tiles al momento de utilizar este tipo de grafico:
lines(#) : Corresponde al numero de tallos por intervalos de 10 dgitos.
digits(#) : Corresponde al numero de dgitos que se quieren utilizar por hoja. Si este numero no

es especificado, por defecto Stata lo asume como 1.


Ejemplo 5.1 Se utilizaran los datos de auto.dta del Example datasets de Stata, en donde se

ocupara la variable length (largo).


Primero se realizara un grafico de tallo y hoja que tenga 1 lnea por tallo y 1 dgito por hoja:
stem length, lines(1) digits(1)
El resultado obtenido es el que se muestra a continuacion:
Stem-and-leaf plot for length (Length (in.))
14* | 279
43

5.1. G : stem

15*
16*
17*
18*
19*
20*
21*
22*
23*

|
|
|
|
|
|
|
|
|

45567
133455589
00002234457999
02469
23356788889
00001113446667
224788
00112
03

Se puede observar que el primer tallo es 14, y sus correspondientes hojas son 2, 7 y 9, es decir,
el primer valor o largo es 142 y corresponde al auto de marca Renault Le Car que se encuentra en
el lugar 65 de la base de datos.
Luego, aumentando a 2 el numero de dgitos por cada hoja:
stem length, lines(1) digits(2)
Se obtiene el siguiente resultado:
Stem-and-leaf plot for length (Length (in.))
1** | 42,47,49,54,55,55,56,57,61,63,63,64,65,65,65,68,69,70, ... (47)
2** | 00,00,00,00,01,01,01,03,04,04,06,06,06,07,12,12,14,17, ... (27)
Ahora, se puede observar que solo existen dos tallos, 1 y 2, para los que se tienen 47 y 27
hojas respectivamente (note que la suma del numero total de hojas para cada tallo es 74, valor que
corresponde al numero total de datos del archivo).
Ejemplo 5.2 Para el tipo de grafico de tallo y hoja, se aumentara a 2 el numero de tallos (lneas)

para cada categora.


stem length, lines(2) digits(1)
Con esto, el resultado obtenido es:
Stem-and-leaf plot for length (Length (in.))
14*
14.
15*
15.
16*
16.
17*
17.
18*

|
|
|
|
|
|
|
|
|

2
79
4
5567
1334
55589
000022344
57999
024
44

C 5: N S

18.
19*
19.
20*
20.
21*
21.
22*
22.
23*

|
|
|
|
|
|
|
|
|
|

69
233
56788889
0000111344
6667
224
788
00112
03

En el resultado anterior se puede observar que ahora existen dos lneas por tallo, como se puede
notar para el primer caso, donde para el tallo 14 en la primera lnea solo aparece la hoja con valor
2 y en la segunda lnea aparecen las hojas 7 y 9.

5.2.

Scatterplots y graficos de caja

El primer grafico que se estudiara es el scatterplot. Este tipo de grafico es comunmente utilizado
para la presentacion de dos variables. La sintaxis para este tipo de grafico es la siguiente:
scatter varlist [if] [in] [weight] [, options]
Para explicar este tipo de grafico y los que vendran mas adelante, se ocupara la base de datos
limpiada (vea el ejemplo 6.1 del captulo 6, pagina 57). Los datos corresponden a un estudio
realizado en Estados Unidos a un grupo mujeres embarazadas, durante los anos 1960 y 1967. Este
estudio que se realizo con el fin de observar si el tabaco afecta negativamente a los recien nacidos.
Ejemplo 5.3 Se hara un grafico de dispersion para las variables meses y p nac kg (peso al nacer

en kilogramos).
scatter meses p_nac_kg
El grafico obtenido se muestra en la figura 5.1(a), en el cual se puede observar que en la esquina inferior derecha existen dos valores atpicos u outliers, los que pueden requerir una especial
atencion por parte del investigador.
Entre las opciones que tiene este tipo de grafico existe la de poder cambiar el smbolo que
representa a las observaciones, es decir, suponga que en vez de querer que aparezcan las observaciones en forma de crculo se prefiere que aparezcan como pequenos cuadrados, para esto se debe
utilizar la opcion symbol de la siguiente manera:
scatter meses p_nac_kg, symbol(sh)
donde las letras sh que se encuentran en parentesis especifican que el smbolo que se quiere utilizar
corresponde a cuadrados pequenos, como se ve en la Figura 5.1(b).

45

5.2. S

(a) Realizado por defecto

(b) Observaciones representadas por otro smbolo

Figura 5.1: Scatterplot meses y p nac kg.


Otra opcion interesante es la de poder identificar a traves de un nombre o caracterstica cada
punto del scatterplot. Para esto se debe utilizar la opcion mlabel, la que en este caso sera ocupada
para poder identificar en el scatterplot que puntos corresponden a madres que fumaron durante el
embarazo y cuales no lo hicieron:
scatter meses p_nac_kg, mlabel(smoke)
Entonces, graficamente se obtiene el resultado mostrado en la figura 5.2.

Figura 5.2: Scatterplot meses y p nac kg utilizando mlabel.

Ahora, suponga que se quiere identificar los dos puntos atpicos que se observan en la esquina
inferior derecha del grafico de dispersion, para esto, se utiliza un grafico del tipo twoway, que para
este caso tiene la siguiente estructura:
46

C 5: N S

twoway (scatter meses p_nac_kg)


(scatter meses p_nac_kg if meses<7, mlabel(id)), legend(off)
Se puede notar en el segundo parentesis que se agrega la condicion if meses<7, lo que indica
que el mlabel(id) que aparece despues es solo aplicable a los puntos que se encuentran por
debajo de los siete meses. Con esto el resultado obtenido se ensena en el grafico 5.3(a).

(a) Identificacion de datos atpicos.

(b) Ttulo del grafico y nombre de los ejes

Figura 5.3: Complementos para un scatterplot


Con esto, se puede ver que los datos atpicos corresponden a los casos 15 y 42, respectivamente.
Ahora, suponga que se quiere colocar nombre al grafico 5.3(a) y a sus ejes, para lo cual se
utilizara la opcion title. El ttulo del grafico sera Meses y Peso al nacer, mientras que el de
los ejes x e y seran Meses de gestacion y Peso al nacer, respectivamente. Para esto, se tiene la
siguiente estructura:
twoway (scatter meses p_nac_kg) (scatter meses p_nac_kg if
meses<7, mlabel(id)), title("Meses de Gestaci\on y Peso al nacer")
xtitle("Meses de gestaci
on") ytitle("Peso al nacer")
De manera similar al etiquetado de variables, cuando existen espacios en blanco, ya sea en el
nombre del grafico como en el de sus ejes, estos deben ir entre comillas. El nombre del grafico y
el de sus ejes se presentan en la Figura 5.3(b).
Suponga que se quiere ajustar un modelo de regresion a los datos, con lo que es necesario ver
que tipo de ecuacion (una recta o una curva) se ajusta mejor. Para esto se agrega la opcion (lfit
variables) para ajustar una recta y la opcion (qfit variables) para ajustar una curva de la
forma que se muestra a continuacion:
twoway (scatter meses p_nac_kg) (scatter meses p_nac_kg if
meses<7, mlabel(id)) (lfit meses p_nac_kg) (qfit meses p_nac_kg),
47

5.2. S

title("Meses y Peso al nacer") xtitle("Meses de gestaci


on")
ytitle("Peso al nacer")
Hay que destacar que toda la instruccion que se muestra para ajustar las curvas, como todas
las descritas con anterioridad, deben ser especificadas en una sola lnea en el DO-file Editor o
en la lnea de comandos de Stata para que puedan ser ejecutadas de manera correcta y no arrojen
algun mensaje de error. Teniendo esto en consideracion, el grafico obtenido se muestra en la figura
5.4:

Figura 5.4: Ajuste de curvas.

En la figura 5.4 se pueden ver las dos curvas ajustadas, la lnea recta es de color verde y la
curva de color salmon.
Ejemplo 5.4 Suponga que se quiere comparar los meses de gestacion y el peso de los bebes con

respecto a si la madre fue fumadora (identificada con 1) o no fue fumadora (identificada con 0).
Para poder realizar esta comparacion se ocupa la instruccion by dentro de la siguiente estructura:
twoway scatter p_nac_kg meses, by(smoke) title("Meses y Peso al
nacer") xtitle("Meses de gestaci
on") ytitle("Peso al nacer")
En Figura 5.5 se ve que las mujeres que no fuman durante el embarazo tienen bebes con un
mayor peso, pero a la vez estos pesos son mas dispersos que en el caso de las mujeres que fumaron
durante el embarazo, tambien se puede ver que es en el grupo de las no fumadoras en donde se
encuentran los dos valores atpicos observados en los graficos anteriores:
Otro tipo de grafico que puede ser u til en este caso es el de caja. Este grafico es comunmente
utilizado para comparar la medianas como tambien para ver la dispersion entre distintos grupos de
datos. La sintaxis esta dada por:
48

C 5: N S

Figura 5.5: Comparacion por sexo.

graph box

yvars [if] [in] [weight] [, options]

Como ejemplo, se hara un grafico de caja para las mismas variables que para el scatterplot con
respecto a si la madre fue fumadora (identificada con 1) o no fue fumadora (identificada con 0).
Para este caso, se tiene la siguiente estructura:
graph box meses p_nac_kg, by(smoke)
Al ejecutar las sentencias anteriores en Stata, se obtiene el grafico de la figura 5.6:

Figura 5.6: Grafico de caja de meses y p nac kg.

Como se puede ver en la figura 5.6, los cajones de color celeste corresponden a los meses de
gestacion, en donde se puede ver que el cajon correspondiente a las mujeres que no fumaron durante el embarazo (designadas por 0) es mas ancho que para el caso de las mujeres que lo hicieron
49

5.3. G

(designadas por 1), es decir, presenta una mayor dispersion en los meses de gestacion, mientras
que para sus respectivas medias presentan valores aproximadamente similares.
Con respecto al peso al nacer representado en el mismo grafico (figura 5.6) por los cajones de
color marron, se puede decir que los pesos de los bebes de las madres que no fumaron durante el
embarazo son mas altos y mas dispersos que el de los bebes de madres que fumaron durante el
embarazo, mientras que para sus valores medios se puede notar que difieren de manera muy leve.
Otro tipo de grafico que puede ser u til en distintos tipos de estudios es el graph matrix o
gr
afico de matriz, el cual sirve para crear scatterplots a partir de dos o mas variables. La
sintaxis para este tipo de grafico es la siguiente:
graph matrix varlist [if] [in] [weight] [, options]
A modo de ejemplo, se hara un grafico de matriz para las variables peso de la madre durante el
embarazo (p m p kg), meses y peso al nacer en kilogramos (p nac kg) con respecto a si la madre
fumo o no durante el embarazo. Para esto se tiene la siguiente estructura:
graph matrix p_m_p_kg meses p_nac_kg, by(smoke)

(a) Grafico de matriz completa.

(b) Parte inferior del grafico de matriz.

Figura 5.7: Graficos de Matriz.


El resultado grafico se muestra en la figura 5.7(a) y como se puede observar, los tres graficos
de la parte superior son como un reflejo de los tres de la parte inferior. Agregando la palabra
half al final de la secuencia establecida para elaborar el grafico solo se dejan los tres graficos de
la parte inferior de la matriz como se muestra en la figura 5.7(b).

5.3.

Graficos para datos longitudinales

Se podra definir como datos longitudinales a las mediciones de ciertas caractersticas realizadas a traves del tiempo, como por ejemplo mediciones del peso de un grupo de ninos sometidos
50

C 5: N S

a un determinado tratamiento durante un tiempo determinado, mediciones de efectividad de un


medicamento, etc.
Ejemplo 5.5 Para una mejor explicacion, se tomaran los datos de Variceal Pressures que se en-

cuentran en la pagina 156, tablas 4.1 y 4.2 del libro Linear Mixed Models in Practice. Estos
datos muestran medidas de la presion sangunea en las varices para 17 individuos, y sobre la base
de tal medicion se intenta determinar si existe riesgo de sangramiento.
A continuacion se muestra una parte de estos datos:

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.

+----------------------------------------+
| id
tiempo
presion
grupo |
|----------------------------------------|
| 1
0
11.6
0:Placebo |
| 1
.5
11.1
0:Placebo |
| 1
1
11.3
0:Placebo |
| 1
1.5
11.4
0:Placebo |
| 1
2
11
0:Placebo |
|----------------------------------------|
| 1
2.5
11.5
0:Placebo |
| 1
3
12.3
0:Placebo |
| 1
3.5
12
0:Placebo |
| 1
4
13.2
0:Placebo |
| 1
4.5
13.6
0:Placebo |
|----------------------------------------|
| 1
5
13.5
0:Placebo |
| 1
5.5
14
0:Placebo |
| 1
6
13.8
0:Placebo |
| 2
0
22.5
0:Placebo |
| 2
.5
22.6
0:Placebo |
|----------------------------------------|
| 2
1
23.1
0:Placebo |
| 2
1.5
23.5
0:Placebo |
| 2
2
23.9
0:Placebo |
| 2
2.5
23.8
0:Placebo |
| 2
3
24.2
0:Placebo |
|----------------------------------------|

Se puede notar que se tienen cuatro variables: id, tiempo, presi


on y grupo. La variable id es
indicadora y muestra cuantas mediciones fueron tomadas para cada individuo (por ejemplo, el individuo 1 tiene 13 mediciones). La variable tiempo muestra el tiempo en que se realizaron dichas
mediciones, la variable presi
on muestra el resultado de cada medicion y por u ltimo la variable
grupo muestra si el individuo pertenece al grupo de placebos o al grupo tratado con terlipressin.
Ya que para cada individuo existen distintos numeros de mediciones a lo largo del tiempo establecido (8 minutos) puede ser de interes ver graficamente el comportamiento de estas mediciones
51

5.3. G

para cada individuo con respecto al tiempo y al total del grupo. Para esto se debe seguir la siguiente
secuencia:
twoway scatter presion tiempo, by(id, total) mfcolor (gs13)
mlcolor(gs0)

Figura 5.8: Comportamiento de las mediciones para los 17 individuos.

La figura 5.8 muestra el grafico generado; para poder analizarlo hay que destacar que los individuos desde el 1 al 9 pertenecen al grupo de placebos, y el resto al grupo tratado con terlipressin.
Se puede observar para los individuos del grupo placebo que las mediciones realizadas presentan
una leve pendiente positiva, es decir, en la mayora de los casos las mediciones tienen una pequena
alza o bien se mantienen casi constantes. Para los individuos del grupo tratado con terlipressin se
puede observar que la pendiente de las mediciones es negativa para la mayora de los casos, lo que
podra estar indicando que el tratamiento causa una disminucion en la presion de las varices.
Para ver la situacion anterior de una manera mas clara, se realizara un grafico que permitira ver
el tipo de pendiente e intercepto de cada uno de los individuos. Para ello, se utilizara el comando
statsby como se muestra a continuacion:
egen num=count (presion), by(tiempo)
statsby inter=_b[_cons] pend=_b[tiempo],
by(id) clear: regress presion tiempo
La salida entregada por Stata es:
(running regress on estimation sample)
command:
inter:
pend:

regress presion tiempo


_b[_cons]
_b[tiempo]
52

C 5: N S

by:

id

Statsby groups
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5
.................
Luego, tomando como base lo entregado por Stata, el grafico para identificar la pendiente y el
intercepto para cada individuo esta disenado de la siguiente manera:
graph twoway scatter pend inter, xtitle(Intercepto)
ytitle(Pendiente) mlabel(id) mlabsize(tiny) msize(small)
yline(0)
El grafico resultante se muestra en la figura 5.9.

Figura 5.9: Grafico intercepto vs pendiente.

En la Figura 5.9 se observa que el grafico es cortado por una lnea roja, la cual identifica el
lugar en donde no existe pendiente, es decir, donde la pendiente es igual a cero. Los puntos que
se encuentran por sobre la lnea roja indican que los interceptos para las mediciones de esos individuos en particular tienen una pendiente positiva, los que en su mayora pertenecen al grupo
de placebos. Mientras que los puntos que se encuentran por debajo de la lnea roja indican que
los interceptos para las mediciones de esos individuos en particular tienen pendiente negativa y
corresponden en su mayora a los individuos tratados con terlipressin.
Ahora, al realizar un summarize (basta tipear sum)para el intercepto y la pendiente, se tiene la
siguiente tabla:
sum inter pend
Variable |
Obs
Mean
Std. Dev.
Min
Max
---------+-------------------------------------------------------53

5.4. H

inter |
pend |

17
17

21.25257
-.8065553

7.494384
1.39126

10.74835
-3.660606

31.59556
1.286667

Al ver la tabla entregada por Stata, se puede notar que la media de las pendientes es negativa
(-0,806), lo que entrega un indicio de que hay una tendencia a pendientes negativas.
Ahora, para finalizar con el ejemplo, se realizaran estimaciones de rectas para cada uno de los
casos. Para esto se tiene la siguiente secuencia:
1. Al momento de determinar el intercepto y la pendiente la base de datos solo quedo con id,
intercepto y pendiente como variables, por lo que es necesario concatenar esta base de
datos con la base original tomando como referencia la variable id.
2. El siguiente paso es generar las ecuaciones de prediccion estimadas:
gen pred=inter+pend*tiempo
sort id tiempo
3. Para finalizar se tiene el grafico con las ecuaciones de prediccion estimadas (Figura 5.10):
graph twoway (line pred tiempo, connect(ascending)), \*
*\ xtitle(tiempo(minutos)) \*
*\ ytitle(Ecuaciones de rectas estimadas)

Figura 5.10: Ecuaciones de rectas estimadas.

5.4.

Histogramas

El histograma (help histogram) de un conjunto de datos es un grafico de barras que representan las frecuencias con que aparecen las mediciones agrupadas en ciertos rangos o intervalos. La
sintaxis para este tipo de grafico es:
54

C 5: N S

histogram varname [if] [in] [weight] [, [continuous_opts |


discrete_opts], [options]
Hay que destacar que para hacer un histograma en Stata hay que hacer la distincion entre un
conjunto de datos con variables discretas o un conjunto con variables continuas.
Ejemplo 5.6 Se ocuparan nuevamente los datos que corresponden a un estudio realizado en Es-

tados Unidos a mujeres embarazadas, durante los anos 1960 y 1967, estudio que se realizo con el
fin de observar si el tabaco afecta negativamente a los recien nacidos.
Entonces, se hara un histograma de la variable peso al nacer en kilogramos:
histogram p_nac_kg
Luego de ejecutar la secuencia anterior, Stata ademas de entregar el grafico (figura 5.11(a))
entrega la siguiente informacion:
(bin=7, start=1.559224, width=.36044388)
Lo que indica que el grafico consta de 7 bines (barras), 1,55 es el mnimo valor teorico y que
cada bin tiene un ancho de 0,36 unidades.

(a) Frecuencia relativa

(b) Frecuencia absoluta

Figura 5.11: Histograma variable peso al nacer.


Ahora, si prefiere que en el eje y aparezca la frecuencia:
histogram p_nac_kg, frequency
Con esto, se tiene la figura 5.11(b).
Para el u ltimo ejemplo, suponga que se quiere crear un histograma que identifique tanto la
media como la desviacion estandar, para esto primero se hace un summarize de la variable peso
al nacer:
55

5.4. H

Variable |
Obs
Mean
Std. Dev.
Min
Max
-----------+-------------------------------------------------------p_nac_kg |
59
2.752306
.6358634
1.559224
4.082331
Entonces, conociendo tanto la media como la desviacion estandar se tiene la siguiente secuencia:
histogram p_nac_kg, freq xaxis(1 2) ylabel(0(10)60, grid)
xlabel(2.752306 "mean" 2.1164426 "-1 s.d." 3.3881694 "+1 s.d.",
axis(2) grid gmax)xtitle("", axis(2))subtitle("Ultimo ejemplo")
note("Grafico con la media y s.d")
Con esto, graficamente se obtiene el resultado ensenado en la figura 5.12(a).

(a) Histograma variable peso al nacer.

(b) Ajuste de la curva normal.

Figura 5.12: Histograma y normalidad.


Como se puede ver en la figura 5.12(a), se destacan claramente la media, -1 s.d (media - desv.
est) y +1 s.d (media + desv. est).
Luego, para ajustar una curva normal a los datos del histograma hay que agregar en la secuencia
anterior la palabra normal despues de freq. En la figura 5.12(b) se puede ver el ajuste de la curva
normal de color verde.

56

Captulo 6

Limpieza y analisis de datos


6.1.

Procedimiento de limpieza de una base de datos en Stata

En estadstica la limpieza de datos es algo fundamental para realizar cualquier analisis. Esto se
explicara con detalles en el captulo 7 (pagina 69). En este captulo, se quiere motivar y desarrollar
el topico; se presentara una idea a traves de un ejemplo.
Ejemplo 6.1 La siguiente base de datos corresponde a un estudio realizado en Estados Unidos en

un grupo de mujeres embarazas entre las cuales algunas fumaban y otras no, durante los anos 1960
y 1967. Esto se realizo con el fin de observar si el tabaco afecta negativamente a los recien nacidos.
Esta base de datos se encuentra disponible en:
http://www.stat.berkeley.edu/users/statlabs/data/babies.data
En este sitio (http://www.stat.berkeley.edu/users/statlabs/data) aparece una breve descripcion de las variables en la unidades tpicamente usadas por los norteamericanos. De ah en forma
natural se utilizaron los siguientes procedimientos:
1. Cambio de nombre a las variables .
2. Codificacion de algunos valores (99, 999).
3. Cambio de unidades de medicion. Se utilizaron las siguientes unidades de medida.
a)
b)
c)
d)
e)

1 onza = 0,0283495 kg
1 semana = 7 das
1 mes = 4 semanas
1 pulgada = 0,0254 metros
1 libra = 0,0453592 kg

4. Se realiza un chequeo para ver si existen datos anomalos, o si existen valores perdidos
5. Como existen valores perdidos en algunas variables y datos anomalos en otras, se convierten
por valores correctos.
57

6.1. P S

6. La base de datos esta limpia.


7. Se realiza un analisis estadstico a las variables para ver que efecto tiene el fumar durante el
embarazo sobre los recien nacidos.
8. Este analisis se ve mediante tablas.

9. Graficos. Estos
se pueden observar en el captulo 5 de graficos (pagina 43).
El procedimiento en Stata es el siguiente:
clear all
insheet using "C:\Documents and Settings\Katherine Rojas\Escritorio\
willimas\base_manual.csv", delimiter(";")
/* cambio de nombre a las variables */
/* pesos del recien nacido en onzas */
rename bwt p\_nac\_onzas
/* longitud del embarazo en
rename gestation gestaci
on

dias */

rename parity paridad


/* edad madre en a
nos */
rename age e\_m\_a
nos
/* altura madre en pulgadas */
rename height a\_m\_pulgadas
/* peso madre durante el embarazo en libras */
rename weight p\_m\_p\_libras
/* se realiza un chequeo a las variables */
codebook p_nac_onzas gestaci
on e_m_a
nos a_m_pulgadas p_m_p_libras smoke
/* como existen valores desconocidos se reemplaza por un valor
especifico, en este caso por un ".", estas variables son
gestaci
on, e_m_a
nos, a_m_pulgadas p_m_p_libras, smoke */
replace
replace
replace
replace
replace

gestaci
on=. if gestaci
on==999
e\_m\_a
nos=. if e\_m\_a
nos==99
a\_m\_pulgadas=. if a\_m\_pulgadas==99
p\_m\_p\_libras=.if p\_m\_p\_libras==999
smoke=. if smoke==9

58

C 6: L

/* comprobar si existen valores desconocidos */


codebook p_nac_onzas gestaci
on e_m_a
nos a_m_pulgadas p_m_p_libras smoke

gen
gen
gen
gen

/* cambio de unidades, para esto se generan nuevas variables */


p\_nac\_kg=p\_nac\_onzas*0.02834952
gest\_semanas=gestaci
on/7
a\_m\_metros=a\_m\_pulgadas*0.0254
p\_m\_p\_kg=p\_m\_p\_libras*0.4535924

/* otro chequeo */
codebook p_nac_kg gest_semanas e_m_a
nos a_m_metros p_m_p_kg smoke
/* se crea la variables meses */
gen meses=gest\_semanas/4
/* se realiza un conteo de cuantas mujeres, se existen
con m
as de 9 y 9.2 meses de embarazo */
count if meses > 9
count if meses > 9.2
/* existe un problema con la base de datos */
/* ya ques la longitud de embarazo de las mujeres */
/* y hay de m
as de 1172 con 9 mesess de embarazo*/
count if meses < 9
/* se trabaja con las variable que quedan limpias */
/* el comando para esto es:*/
keep if meses < 9
keep smoke p_nac_kg gest_semanas /*
*/ a_m_metros p_m_p_kg meses e_m_a
nos
/* Se crea una variable indicadora */
gen id=\_n

/* Se etiquetan

las variables */

label data "Datos Consecuencia del cigarrillo durante el embarazo"


label variable meses "meses" label variable p_nac_kg "Peso al
nacer en kilogramo"
label variable gest_semanas "tiempo de gestacion del bebe"
label variable e_m_a
nos "edad madre en a
nos"

59

6.2. A

label
label
label
label
label

variable a_m_metros "altura madre en metros"


variable p_m_p_kg "Peso madre durante el embarazo en kilogramos"
variable smoke "fuma"
define codfuma 1 "1:si" 0 "0:no"
values smoke codfuma

Hay que dejar claro que esta base de datos, fue un estudio realizado en Estados Unidos durante
los anos 1960 y 1967, la cual se encuentra disponible en internet, pero no esta del todo correcta ya
que existen varios problemas como: mujeres con mas de nueve meses de embarazo, por lo cual se
llevo un proceso de limpieza y los problemas que se presentaron durante este proceso fueron los
siguientes:
1. Cambio de nombre a las variables.
2. Datos desconocidos o faltantes
3. Cambio de unidades de medidas
4. Mujeres con mas de nueve meses de embarazo.

6.2.

Analisis estadstico mediante tablas

Las tablas son una herramienta clave para resumir la informacion o dar respuestas claras y
correctas a los estudios, por ejemplo: se quiere saber cuantos ninos estan con bajo peso al nacer y
si sus madres fuman, esta informacion se puede obtener de manera correcta y clara mediante una
tabla de doble entrada.
Para este efecto, se tiene la siguiente tabla.
by smoke: sum smoke meses p_m_p_kg a_m_metros p_nac_kg , f
__________________________________________________________________
-> smoke = 0
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+---------------------------------------------------smoke | 34
0
0
0
0
meses | 34
8.426471
.7486817
5.285714
8.964286
p_m_p_kg | 34
60.40778
11.37875
43.99842
95.25432
a_m_metros | 34
1.621865
.069387
1.4732
1.778
p_nac_kg | 34
2.926671
.681678
1.559224
4.082331
__________________________________________________________________
-> smoke = 1
Variable | Obs
Mean
Std. Dev.
Min
Max
------------+----------------------------------------------------60

C 6: L

smoke
meses
p_m_p_kg
a_m_metros
p_nac_kg

|
|
|
|
|

25
25
25
25
25

1
8.592857
56.42684
1.618488
2.515169

0
.2879378
8.140471
.0628703
.4863354

1
7.964286
44.45201
1.4478
1.644272

1
8.964286
77.11064
1.7272
3.600389

6.1 Estas variables se encuentran sin formato, pero estan etiquetadas.


Observacion

Se puede ver que las variables tienen 6 decimales, lo que a veces trae mas de algun problema en
cuanto a legibilidad. Es por eso que antes de seguir creando mas tablas, se modifica la presentacion
de los resultados numericos, fijando el numero de decimales, sin perder la precision interna de
los respectivos valores de las variables. Stata dispone de varios tipos de formato los que pueden
modificarse. El formato de variables numericas tiene la siguiente estructura:
format %w.dg : w indica el ancho, d el numero de decimales y g tipo de formato por defecto.
format %w.df : w y d como antes, f indica que el numero de decimales es fijo.
format %w.de : w y d como antes, e indica presentacion en notacion cientfica (exponentes).
Para realizar estas tablas se ocuparon los siguientes comandos.
tabulate: Cuenta el numero de observaciones en las diversas categoras de una variable categorica o discreta.
Su sintaxis es:
[by variable:] tabulate [variable][if expresi
on][in rango]
[,missing nofreq nolabel]

Tambien se pueden obtener tablas de frecuencia univariantes, pueden obtenerse medias y desviaciones estandar de otra variable.
La sintaxis del comando es:
[by variable:] tabulate variable 1 [variable 2][if expresion][in rango],
summarize(variable 3) [[no]means [no]standar [no]freq [no]obs [no]label
missing]

Las opciones producen los siguientes resultados:


missing
nofreq
nolabel

:
:
:

Los datos faltantes son tabulados como otros.


Suprime la impresion de frecuencias.
Se usan los valores numericos y no los rotulos de las observaciones.
61

6.2. A

Si no indica la supresion de una alternativa, Stata entrega media, desviacion estandar y frecuencias para las diversas categoras de la tabulacion.
Para obtener tablas bivariadas se puede usar el comando tab2
El procedimiento del analisis mediante tablas en Stata es el siguiente:
/* ANALISIS */
/* contar cuantos ni
nos hay bajo peso */
count if p_nac_kg < 90*0.02834952
/* fijar el numero de decimales */
/* para presentacion en tablas */
sort smoke
format p_m_p_kg %9.2f
format a_m_metros %9.2f
format p_nac_kg %9.2f
format meses %9.2f
format gest_semanas %9.2f
tabulate smoke
tab

meses , summ (p_nac_kg) means freq


/* tabla de medias , desviaciones desviaciones estandar */
/* maximo y minimos sin resticciones, para meses */

by smoke: sum smoke meses p_m_p_kg a_m_metros p_nac_kg ,f


/* tabla de medias , desviaciones desviaciones estandar */
/* maximo y minimos sin resticciones, para semanas de gestaci
on */
by smoke: sum smoke gest_semanas p_m_p_kg a_m_metros p_nac_kg , f
/* tabla de medias , desviaciones desviaciones estandar */
/* maximo y minimos, con respecto al nacimiento */
/* bajo peso con respesto a meses */
by smoke: sum smoke meses p_m_p_kg a_m_metros p_nac_kg
if p_nac_kg < 90*0.02834952, f

/* tabla de medias , desviaciones desviaciones estandar */


/* maximo y minimos sin resticciones con respesto */
/* a semanas gestadas */
62

C 6: L

by smoke: sum smoke gest_semanas p_m_p_kg a_m_metros


p_nac_kg if p_nac_kg < 90*0.02834952, f
/* tabla multivariada con respecto */
/* a ni
no que nacen antes de 7 meses */
tab smoke p_nac_kg if meses < 7
tab2 smoke p_nac_kg e_m_a
nos if meses < 7
/* tabla multivarada con respecto */
/* a ni
no que nacen bajo peso antes de 28 semanas */
tab smoke p_nac_kg if gest_semanas < 28
tab2 smoke p_nac_kg e_m_a
nos if gest_semanas < 28
/* tabla con respecto al peso medio de los ni
nos */
tabulate smoke e_m_a
nos, summ (p_nac_kg) means
Las salidas para las tablas en Stata son las siguientes:
tabulate smoke
fuma |
Freq.
Percent
Cum.
------------+----------------------------------0:no |
34
57.63
57.63
1:si |
25
42.37
100.00
------------+----------------------------------Total |
59
100.00
Aca se observa que mas del 57 % de las madre no fuma, que equivale a 34 mujeres de las 59
que quedaron despues de limpiar la base de datos.
tab

meses , summ (p_nac_kg) means freq

|
Summary of Peso al
|
nacer en kilogramo
meses |
Mean
Freq.
------------+-----------------------5.29 |
3.29
1
6.46 |
3.12
1
7.29 |
1.56
1
7.96 |
1.93
1
8.00 |
2.61
1
8.04 |
3.16
2
8.14 |
1.76
1
8.18 |
2.47
1
8.29 |
1.98
3
63

6.2. A

8.32 |
2.98
1
8.36 |
2.39
3
8.39 |
3.66
1
8.43 |
1.79
1
8.46 |
2.03
2
8.50 |
2.30
3
8.54 |
2.13
1
8.57 |
2.92
1
8.61 |
3.18
2
8.64 |
3.02
2
8.68 |
2.83
1
8.71 |
3.35
3
8.75 |
2.72
4
8.79 |
2.92
6
8.82 |
2.73
3
8.86 |
3.04
3
8.89 |
2.79
4
8.93 |
2.97
3
8.96 |
3.59
3
------------+-----------------------Total |
2.75
59
Esta tabla indica la frecuencia del peso al nacer con respecto al tiempo de embarazo de la madre
(tiempo de embarazo en meses).
by smoke: sum smoke meses p_m_p_kg a_m_metros p_nac_kg , f
------------------------------------------------------------------> smoke = 0:no
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+---------------------------------------------------smoke | 34
0
0
0
0
meses | 34
8.43
0.75
5.29
8.96
p_m_p_kg | 34
60.41
11.38
44.00
95.25
a_m_metros | 34
1.62
0.07
1.47
1.78
p_nac_kg | 34
2.93
0.68
1.56
4.08
------------------------------------------------------------------> smoke = 1:si
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+---------------------------------------------------smoke | 25
1
0
1
1
meses | 25
8.59
0.29
7.96
8.96
64

C 6: L

p_m_p_kg |
a_m_metros |
p_nac_kg |

25
25
25

56.43
1.62
2.52

8.14
0.06
0.49

44.45
1.45
1.64

77.11
1.73
3.60

Aca se hacen varias observaciones, ya que hay dos tablas, estas son:
6.2 El peso promedio de los bebes al nacer de madres que fuman es menor al peso
Observacion

promedio de los bebes al nacer de madres que no fuman.


6.3 El peso promedio de las madres que fuman es mas bajo que el peso promedio
Observacion

de las madres que no fuman.


6.4 La cantidad de meses de gestacion en las madres que fuman son mas largos, en
Observacion

promedio, al numero de meses de gestacion en las madres que no fuman.


6.5 La altura promedio de las madres es la misma tanto para las madres que fuman
Observacion

como para las que no fuman.


by smoke: sum smoke gest_semanas p_m_p_kg a_m_metros p_nac_kg , f
------------------------------------------------------------------> smoke = 0:no
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+----------------------------------------------------smoke | 34
0
0
0
0
gest_semanas | 34
33.71
2.99
21.14
35.86
p_m_p_kg | 34
60.41
11.38
44.00
95.25
a_m_metros | 34
1.62
0.07
1.47
1.78
p_nac_kg | 34
2.93
0.68
1.56
4.08
-------------------------------------------------------------------> smoke = 1:si
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+-----------------------------------------------------smoke | 25
1
0
1
1
gest_semanas | 25
34.37
1.15
31.86
35.86
p_m_p_kg | 25
56.43
8.14
44.45
77.11
a_m_metros | 25
1.62
0.06
1.45
1.73
p_nac_kg | 25
2.52
0.49
1.64
3.60
Aca se hacen varias observaciones, ya que hay dos tablas, algunas de ellas son:
6.6 La cantidad de semanas de gestacion es menor, en promedio, en las madres que
Observacion

no fuman.
65

6.2. A

6.7 El peso promedio de los bebes al nacer de madres que fuman es menor al peso
Observacion

promedio de los bebes al nacer de las madres que no fuman.


6.8 El peso promedio de las madres que fuman es mas bajo al peso promedio de
Observacion

las madres que no fuman.


by smoke: sum smoke gest_semanas p_m_p_kg a_m_metros p_nac_kg if
p_nac_kg < 90*0.02834952, f
---------------------------------------------------------> smoke = 0:no
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+------------------------------------------smoke | 9
0
0
0
0
gest_semanas | 9
32.94
1.51
29.14
34.00
p_m_p_kg | 9
57.15
7.42
44.91
65.32
a_m_metros | 9
1.60
0.08
1.47
1.70
p_nac_kg | 9
2.08
0.35
1.56
2.52
---------------------------------------------------------> smoke = 1:si
Variable | Obs
Mean
Std. Dev.
Min
Max
-------------+-------------------------------------------smoke | 13
1
0
1
1
gest_semanas | 13 34.19
1.08
31.86
35.43
p_m_p_kg | 13 55.93
7.42
46.72
70.76
a_m_metros | 13
1.63
0.05
1.50
1.70
p_nac_kg | 13
2.14
0.26
1.64
2.47

Aca se ve que no hay una diferencia con las observaciones anteriores aunque los bebes esten con
bajo peso al nacer.
tab smoke p_nac_kg

if meses < 7

|
Peso al nacer en
|
kilogramo
fuma |
3.12
3.29 |
Total
-----------+----------------------+---------0:no |
1
1 |
2
-----------+----------------------+---------Total |
1
1 |
2
66

C 6: L

Se ve claramente que existen dos ninos que nacen antes de los 7 meses y ambas madres no fuman,
ademas de obtener el peso promedio de cada nino.
tabulate smoke

e_m_a
nos, summ (p_nac_kg) means

Means of Peso al nacer en kilogramo


|
edad madre en a
nos
fuma | 17
18
19
20
21 |
Total
-------+---------------------------------+---------0:no |3.63
.
3.69
3.03
3.60 |
2.93
1:si |3.60
2.52
2.91
2.44
3.09 |
2.52
-------+---------------------------------+---------Total |3.61
2.52
3.17
2.74
3.35 |
2.75

|
edad madre en a
nos
fuma |23
24
25
26
27 |
Total
-------+---------------------------------+---------0:no |2.98
2.51
.
2.75
2.79 |
2.93
1:si |2.66
1.84
2.44
2.68
. |
2.52
-------+---------------------------------+---------Total |2.77
2.38
2.44
2.73
2.79 |
2.75

|
edad madre en a
nos
fuma |28
30
31
32
33 |
Total
-------+---------------------------------+---------0:no |3.64
4.08 1.84
.
2.73 |
2.93
1:si |
.
. 2.38
1.97
2.64 |
2.52
-------+---------------------------------+---------Total |3.64
4.08 2.20
1.97
2.72 |
2.75

|
edad madre en a
nos
fuma |34
35
36
37
38 |
Total
-------+---------------------------------+---------0:no |3.08
2.18
. 2.69
. |
2.93
1:si |1.64
. 2.13 2.47
2.18 |
2.52
-------+---------------------------------+---------Total |2.60
2.18 2.13 2.62
2.18 |
2.75

| edad madre en a
nos
fuma |
39
40 |

Total
67

6.2. A

-------+----------------------+---------0:no |
.
2.92 |
2.93
1:si |
2.83
. |
2.52
-------+----------------------+---------Total |
2.83
2.92 |
2.75
Estas tablas se presentan solo con fines de mostrar que tambien es posible usar procedimientos
basicos para detectar dificultades en las bases de datos.

68

Captulo 7

Administracion de datos
Nunca de por hecho que las observaciones que conforman una base de datos estan libres de
errores. Si toma en cuenta esta afirmacion y la considera en cada uno de sus proyectos Ud. disminuira los denominados errores que suelen descubrirse en etapas avanzadas de los analisis. As al
limpiar los datos de errores en las etapas preliminares, los analisis que Ud. realice en sus datos
seran validos y a la vez sera altamente probable que no contengan errores.
El chequear la consistencia de los datos debiera ser una tarea tan primordial como rutinaria para
todos los que esten involucrados con el uso de datos en estudio. Se debe tener claridad como opera
el sistema computacional escogido con los valores perdidos. El observar los datos en planillas
de calculos ordenados por filas y columnas no es garanta que esten sin errores. Existe una gran
gama de errores. Estos pueden ser de tipo sistematico producto de la etiqueta que se uso para
estandarizar parte o la totalidad de los mismos; no sistematicos o esporadicos que se producen al
tipear incorrectamente un registro. Estos u ltimos pueden llegar a ser mas complicados de detectar.
Por ejemplo, si un alumno de primer ano es ingresado como de 91 anos en vez de 19, es facil de
ver. Sin embargo en vez de 19 se tipea 21; puede ser practicamente imposible de chequear si es
incorrecto o no, etc.

7.1.

Errores sistematicos

Como su nombre indica, no son debidos al azar o a causas no controlables.


Pueden surgir de emplear un metodo inadecuado, un instrumento defectuoso o bien por usarlo
en condiciones para las que no estaba previsto su uso. Por ejemplo, emplear una regla metalica a
una temperatura muy alta, puede introducir un error sistematico si la dilatacion del material hace
que su longitud sea mayor que la nominal. En este caso, todas las medidas pecaran (sistematicamente) por defecto. El error podra evitarse eligiendo un material de coeficiente de dilatacion bajo
o controlando la temperatura a la que se mide.
Medir temperaturas con un termometro graduado en grados Fahrenheit, suponiendo por equivocacion que esta graduado en grados Celsius, introduce tambien un error sistematico al registro.
El error se evita en este caso recabando informacion sobre la escala del termometro.

69

7.2. V

Otro ejemplo. Suponga que se quiere estudiar la procedencia segun la region de un grupo de
alumnos, suponga ademas que no se establece para lo digitadores algun procedimiento de digitacion para los valores de la variable region (de procedencia). As, algunos pueden digitar las
regiones de distintas formas estas pueden ser: 1, 2, 3, ..., 12 y 13, otros como primera, segunda,
tercera, ...,duodecima y R M , o I, II, III, ..., XII, R M.
Se debe tener presente como el Software trata esta situacion, ya que si se coloca 13 como region metropolitana La variable de procedencia quedara como numerica, pero si se coloca como
R M la variable quedara como caracter, lo cual para realizar cualquier analisis estadstico, como
obtener media, varianza, etc. no se podra realizar.
Los errores sistematicos no son objeto de la teora de errores. Realmente son equivocaciones
que pueden y deben evitarse, empleando metodos e instrumentos de medida correctos y adecuados
a los fines que se deseen obtener.

7.2.

Valores perdidos

En Stata los valores perdidos se muestran como . (periodo) cuando las variables son numericas o con espacios en blanco cuando las variables son categoricas. Esta entrada se crea cuando un
campo numerico esta vaco, o son de un valor numerico muy alto.
A continuacion se ejemplificara el tipo de error mas frecuente que se comete al momento de
traspasar una base de datos a Stata.
Ejemplo 7.1 Se tiene la siguiente base de datos.

Nombre
Carlos
Alberto
Alejandro
Alison

edad peso
26 58,3
25 60,5
20 67,9
21 57,1

Cuadro 7.1: Base de datos 1


Al reconocer en Stata solo una variable que fue creada en Excel, se tiene:
list

edad
+------+
| edad |
|------|
1. |
. |
2. |
25 |
3. |
20 |
70

C 7: A

4. |
21 |
+------+
Se observa que existe un valor perdido. Al realizar un listado de las personas mayores de 20
anos, se obtiene:
list

edad if
+------+
| edad |
|------|
1. |
. |
2. |
25 |
4. |
21 |
+------+

edad > 20

La salida de Stata muestra que existen 2 personas mayores de 20 anos, si observa el cuadro 7.1
existen 4 personas mayores de 20 anos, si estos datos se llevan a un analisis se estaran cometiendo
graves errores. Por ejemplo. Obtener una estadstica descriptiva de las edades, Stata entrega lo
siguiente:
Variable |
Obs
Mean
Std. Dev.
Min
Max
-------------+-------------------------------------------------------edad |
3
22
2.645751
20
25
Aca se observa que la media es 22 y el maximo es 25, desde el cuadro 7.1 se puede ver que
esto no es as, ya que la media es 23 y el maximo es 26. Es por esto y muchos otros casos, que se
debe tener mucho cuidado con la manipulacion y el trabajo que se realiza con los datos cuando
existan valores perdidos.

7.3.

Traspaso de informacion

Uno de los errores mas comunes se produce en el traspaso de datos a Stata. Para este efecto
se utilizara la misma base de datos. Una vez pasados los datos de la Tabla 7.1 a Stata, lo primero
que se sugiere hacer para verificar si los datos estan correctamente ingresados es hacer uso de los
siguientes comandos:
codebook,summarize
En el ejemplo se tiene:
codebook edad peso
La salida generada en Stata por el comando codebook es la siguiente:
--------------------------------------------------------------------edad (unlabeled)
--------------------------------------------------------------------type: numeric (byte)
71

7.3. T

range:
unique values:
tabulation:

[20,26]
units: 1
4
missing .: 0/4
Freq. Value
1 20
1 21
1 25
1 26
--------------------------------------------------------------------peso (unlabeled)
--------------------------------------------------------------------type: string (str4)
unique values: 4
missing "": 0/4
tabulation: Freq. Value
1 "57,1"
1 "58,3"
1 "60,5"
1 "67,9"
En esta salida se observa que la variable peso es erroneamente reconocida como de tipo
string.
Aun mas, si se realiza summarize a las variables peso y edad, para este ejemplo se tiene: sum
peso. La salida generada por Stata del comando summarize es la siguiente:
sum edad peso
Variable |
Obs
Mean
Std. Dev.
Min
Max
-------------+----------------------------------------------------edad |
4
23
2.94392
20
26
peso |
0

7.3.1.

Como solucionar este problema?

Para esto se deben tener en cuenta los siguientes comandos: enconde y decode.
encode : Permite transformar variables alfa-numericas (como nombre, caracteres, etc.) en numericas, su sintaxis es:
encode varname [if expression] [in rang] , generate(newvar) [label(name)]
decode :
generate () : No es opcional. Especifica el nombre de la variable que se creara.
label () : Es opcional. Especifica el nombre de los rotulos que se crearan o se emplearan si ya
existen.
Si se escribe: encode peso, generate(pesova), se creara la variable pesova con los valores numericos.

72

C 7: A

Por otra parte al escribir: encode peso, generate(pesoval) label(codval), se creara la


variable pesoval con los valores numericos que se almacenan como variable de rotulos con nombre codval. Para verificar esto se usa un codebook, la salida computacional es la siguiente.
codebook edad pesova
--------------------------------------------------------------------edad (unlabeled)
--------------------------------------------------------------------type: numeric (byte)
range: [20,26]
units: 1
unique values: 4
missing .: 0/4
tabulation: Freq. Value
1 20
1 21
1 25
1 26
--------------------------------------------------------------------pesova (unlabeled)
--------------------------------------------------------------------type: numeric (long)
label: pesova
range: [1,4]
units: 1
unique values: 4
missing .: 0/4
tabulation: Freq.
Numeric Label
1
1 57,1
1
2 58,3
1
3 60,5
1
4 67,9
Aca se puede observar que la variable pesoval es de tipo numerica y contiene los mismos valores
numericos que la variable peso.

7.4.

Errores no sistematicos

Estos son los errores mas difcil de detectar, es cuando a una variable en particular se le ha
asignado erroneamente un valor que no le corresponde.
Ejemplo 7.2 Cuando se tiene una variable genero, codificada con 1 para hombre y 0 para
mujer, estaran bien los posibles registros si se han ingresado, supuestamente, solo 0 y 1 a la
variable genero.

Como lograr detectar el que un hombre haya sido codificado por 0 o que mujeres hayan sido
codificadas por 1? Este error de ingreso de datos solo podra ser detectado a traves del cruce con
otra(s) variable(s). Una forma de detectar si estan bien ingresados los datos, es realizar un analisis
73

7.4. E

de esta variable con respecto a una que registra datos exclusivamente para mujeres o exclusivamente para hombres.
Especficamente, si se relaciona la variable genero con la variable marca t h que registra la
marca preferida de toallas higienicas, se debe realizar un listado de todos los hombres que indican
una preferencia de marca. Ante lo cual surgen dos alternativas: tales hombres realmente eran mujeres, o bien habran sido datos falseados por los encuestadores? As puede percatarse que tiene
un 1 en vez de 0.
Para visualizar como solucionar este problema, se presentan los siguientes datos:
observacion genero marca t h
1
0
A
2
0
B
3
0
C
4
1
A
5
1
6
0
A
7
0
C
8
1
9
0
B
Cuadro 7.2: Preferencia de marca de toalla higienica
Aca se observa que en la observacion numero 4, la variable genero es 1 (hombre) tiene una
marca de tipo A.
Para realizar esta operacion se utiliza el comando browse, e ste permite mostrar solo las variables que se quiere observar. Si se quiere ver exclusivamente las variables genero y marca t h se
debe escribir:
br genero marca

Para solucionar este problema existen varias alternativas: La primera es verificar si el valor 1
realmente es un hombre, la segunda es verificar si ese valor de la variable marca t h realmente
debiera estar, es decir, habra sido un error de digitacion?, habran falseados los datos? Por ello
hay que tener bastante cuidado cuando se realiza una limpieza de datos.
7.1 Cuando existen muchas observaciones es recomendable utilizar el comando
Observacion
list con sus respectiva restricciones, para e ste caso sera de la siguiente forma:

list genero marca\_t\_h if genero == "1"


Esto solo mostrara las variables genero y marca t h que cumplan la condicion que la variable
genero sea igual a 1.
74

C 7: A

7.5.

Datos faltantes

Otro problema que puede ocurrir es sobre los datos faltantes y e stos pueden ocurrir de las
siguientes maneras: periodos, ausencia de codigos o espacios en blanco.

7.5.1.

Periodos

Stata suele representar al valor faltante introduciendolo como missing (valor perdido) en el
lugar que correspondera al valor de la variable.
Ejemplo 7.3 Suponga que se tiene un grupo de personas a las que se les registro su nombre, edad

y peso.
Si no se tuviera la edad de Carlos, en Stata se representara como un missing en el lugar en el
que debiera ir el dato de su edad. Es decir, Stata lo tomara como se indica en la Figura 7.1.

Figura 7.1: Muestra de valores perdidos

Si realiza un codebook a la variable edad se obtiene lo siguiente.


------------------------------------------------------------------edad (unlabeled)
------------------------------------------------------------------type: numeric (byte)
range: [20,25]
units: 1
unique values: 3
missing .: 1/4
tabulation: Freq. Value
1 20
75

7.5. D

1
1
1

21
25
.

Se observa que existe un missing, pero para Stata los missing, aparte de tomarlos como
valores perdidos, son valores numericos grandes con formato de .. Esto implica que el programa
no incluira a Carlos en los calculos o procedimientos de la variable edad.

7.5.2.

Codigos de valor faltante o espacios en blanco:

Lo mas comun es asignar un valor negativo o positivo especfico a la variable, cuando el verdadero valor falta. Por ejemplo: la edad debe ser un valor positivo, se puede asignar el valor -1.
Existen dos formas de convertir un codigo de valor faltante. La mas comun es mediante el
comando replace. Los datos apareceran tal y como se muestra en la figura 7.2:

Figura 7.2: Reemplazando un valor faltante por -1

El comando replace indica a Stata que sustituya los valores de la variable edad con la representacion del valor faltante en aquellos casos en los que edad sea igual a -1.
Esta tecnica resulta tediosa si se tiene un gran numero de variables en las que faltan el mismo
codigo de valor. Stata dispone de un comando, mvencode, que convierte los valores faltantes de
las variables edad y peso. Se podra introducir un u nico comando para acomodar los valores que
faltan:
mvencode edad pesova (-1)
Los datos aparecen de la forma mostrada en la figura 7.3:
76

C 7: A

Figura 7.3: Reemplazo de los valores perdidos

7.2 Este comando solo resulta si las variables son numericas.


Observacion
7.3 Existe una limitacion en este comando, es que solo funciona cuando las variaObservacion

bles en cuestion usan un mismo codigo de valor faltante. En encuestas, los investigadores suelen
emplear distintos codigos para indicar los distintos motivos por los que no existe un valor. En estos
casos resulta mas conveniente crear una nueva variable con generate y realizar el reemplazo de
los valores, este reemplazo se hace con el comando replace.

77

Captulo 8

Como almacenar lo calculado


A veces se quiere estandarizar una o varias variables en un conjunto de datos. A la variable X
solo se le resta su media para centrarla o se le resta su media y se divide por su desviacion estandar
para estandarizarla. Para eso se necesita calcular solo la media y adicionalmente la desviacion
estandar para estandarizar. En la practica es comun calcularlas, anotarlas y despues incluirlas en
las sentencias o comandos correspondientes que permiten calcular (con el generate) las nuevas
variables centradas y estandarizadas. Un problema adicional que suele ocurrir cuando se trabaja
en Stata es que los calculos no se van modificado automaticamente como en Excel cuando las variables se crean en funcion de las otras. Que pasara si se agrega uno o mas casos o variables?, es
evidente que la media y la desviacion estandar ya no van a ser las mismas. Stata tiene la capacidad
de calcular: media, mediana, moda, desviacion estandar, cuartiles, percentiles, etc. sin tener que
anotarlas en papel para retipearlos al crear las nuevas variables; ya que estos estadgrafos, -para la
u ltima variable requerida en Stata- quedan almacenadas y el usuario puede acceder a tales valores.

Existen dos comandos para recuperar lo que se calcula. Estos


son:
Return list: Para comandos regulares (por ejemplo summarize).
Ereturn list: Para comandos de estimacion (por ejemplo regress).

8.1.

Return list

8.1.1.

Para el comando summarize

El commando summarize, es el comando que calcula las medidas de tendencia central, de posicion y de dispersion. Al usar este comando automaticamente estos valores y otras medidas quedan
almacenadas en una memoria RAM. Para visualizarlas se usa el comando return list (help
return list). Para que este comando muestre esto, antes hay que usar el comando summarize.
Ejemplo 8.1 summarize price

Este comando proporciona en la pantalla los siguientes resultados:


Variable |
Obs
Mean
Std. Dev.
Min
Max
----------+---------------------------------------------------------79

8.1. Return list

price |

74

6165.257

2949.496

3291

15906

Ahora al escribir return list en la ventana de comandos o en el DO-file:


Ejemplo 8.2 return list

Este comando proporciona en la pantalla los siguientes resultados:


scalars:
r(N)
r(sum_w)
r(mean)
r(Var)
r(sd)
r(min)
r(max)
r(sum)

=
=
=
=
=
=
=
=

74
74
6165.256756756757
8699525.974268789
2949.495884768919
3291
15906
456229

Se tienen ocho medidas de la variable price. Con e stas se podra centrar e incluso estandarizar
esa variable escribiendo lo siguiente en la barra de comandos o bien, en un codigo de programacion
DO-file.
Ejemplo 8.3 Para recuperar la media por ejemplo se tiene que usar r(mean).

1. Para centrar: generate price_cen=price-r(mean)


2. Para estandarizar: generate price_est=(price-r(mean))/r(sd)
Con esto se tendran nuevas variables que se podran ver en el Browser Editor o en el Data
Editor, usando la siguiente instruccion: browse price price_cen price_est.
Pero esto no es suficiente, que pasa ahora si se quisiera hacer algun calculo con el percentil
5? El comando detail (help detail) entrega resultados mucho mas detallados, como se ven en
el siguiente ejemplo.
Ejemplo 8.4 summarize price, detail

Este comando proporciona en la pantalla los siguientes resultados:


Price
------------------------------------------------------------Percentiles
Smallest
1%
3291
3291
5%
3748
3299
10%
3895
3667
Obs
74
80

C 8: C

25%

4195

50%

5006.5

75%
90%
95%
99%

6342
11385
13466
15906

3748

Sum of Wgt.

Largest
13466
13594
14500
15906

74

Mean
Std. Dev.

6165.257
2949.496

Variance
Skewness
Kurtosis

8699526
1.653434
4.819188

Analogamente se usara el return list para mostrar lo que aparece en la ventana Results.
Ejemplo 8.5 return list

Este comando proporciona en la pantalla los siguientes resultados:


scalars:
r(N)
r(sum_w)
r(mean)
r(Var)
r(sd)
r(skewness)
r(kurtosis)
r(sum)
r(min)
r(max)
r(p1)
r(p5)
r(p10)
r(p25)
r(p50)
r(p75)
r(p90)
r(p95)
r(p99)

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

74
74
6165.256756756757
8699525.97426879
2949.49588476892
1.653433511704859
4.819187528464004
456229
3291
15906
3291
3748
3895
4195
5006.5
6342
11385
13466
15906

Teniendo esto, se pueden hacer los calculos necesarios para cualquier problema que se tenga,
como por ejemplo el calculo del percentil 5, aqu se puede observar que el r(p5)=3748, para visualizarlo en la pantalla Results se escribe display r(p5). Esto es de gran ayuda principalmente
cuando se tienen grandes bases de datos, y con un pequeno codigo de programacion la informacion
se guardara o almacenara para reproducir los resultados cada vez que se quieran utilizar.
81

8.1. Return list

8.1.2.

Para el comando describe

Este comando hace una descripcion general de las variables, esta informacion se puede recuperar tambien con el return list.
Ejemplo 8.6 describe rep78

Este comando proporciona los siguientes resultados:


scalars:
r(changed)
r(widthmax)
r(k_max)
r(N_max)
r(width)
r(k)
r(N)

=
=
=
=
=
=
=

0
60000
5000
201647
43
12
74

Esto nos proporciona informacion general de las variables, no importa que variable se este describiendo, por ejemplo el valor r(k) muestra el numero de variables, en este caso son 12 y el r(N)
muestra la cantidad de observaciones que tienen las variables.

8.1.3.

Para el comando table

Con este comando se hacen tablas que registran la cantidad de veces o frecuencia que tienen
los valores de una variable. Si se tienen dos o mas variables, hace una tabla de frecuencia unidimensional o multidimensional.

Ejemplo 8.7 table rep78

Este comando proporciona los siguientes resultados:


---------------------Repair
|
Record
|
1978
|
Freq.
----------+----------1 |
2
2 |
8
3 |
30
4 |
18
5 |
11
----------------------

82

C 8: C

Ahora se escribira return list en la ventana de comandos o en el DO-file:


Ejemplo 8.8 return list

Este comando proporciona el siguiente resultado:


scalars:
r(N) =

69

Se sabe que este ejemplo tiene 74 casos y el return list muestra que tiene 69, esto ocurre
porque la variable rep78 tiene valores perdidos.
Ahora se probara el comando table con dos variables: rep78 y foreign.
Ejemplo 8.9 table rep78 foreign

Este comando proporciona el siguiente resultado:


-----------------------------Repair
|
Record
|
Car type
1978
| Domestic
Foreign
----------+------------------1 |
2
2 |
8
3 |
27
3
4 |
9
9
5 |
2
9
-----------------------------Esto es una tabla de contingencia donde se muestra la frecuencia que tienen los valores de
la variable rep78 y foreign. Se puede notar aqu que dos autos que fueron reparados una vez
durante el ano 1978 fueron nacionales, en cambio, ningun auto que fue reparado el ano 1978 fue
extranjero.
Ahora se escribira return list en la ventana de comandos o en el DO-file:
Ejemplo 8.10 return list

Este comando proporciona los siguientes resultados:


scalars:
r(N) =

69

83

8.2. Ereturn list

8.1.4.

Para el t-test

El comando ttest realiza el test de comparacion de medias para una o dos muestras. Se puede
recuperar la informacion que se requiera para llegar a la conclusion del test, como por ejemplo el
valor p.
Ejemplo 8.11 ttest price == 6000

Este comando proporciona en la pantalla los siguientes resultados:


One-sample t test
---------------------------------------------------------------------Variable | Obs
Mean
Std. Err. Std. Dev. [95% Conf. Interval]
---------+-----------------------------------------------------------price |
74 6165.257
342.8719
2949.496
5481.914
6848.6
---------------------------------------------------------------------mean = mean(price)
t =
0.4820
Ho: mean = 6000
degrees of freedom =
73
Ha: mean < 6000
Pr(T < t) = 0.6844

Ha: mean != 6000


Pr(|T| > |t|) = 0.6313

Ha: mean > 6000


Pr(T > t) = 0.3156

Ejemplo 8.12 return list

Este comando proporciona en la pantalla los siguientes resultados:


scalars:
r(sd_1)
r(se)
r(p_u)
r(p_l)
r(p)
r(t)
r(df_t)
r(mu_1)
r(N_1)

=
=
=
=
=
=
=
=
=

2949.495884768919
342.8719320889989
.3156317175379593
.6843682824620407
.6312634350759185
.4819780836241245
73
6165.256756756757
74

Con esta informacion se puede recuperar el valor que se requiera como el valor p, que en este
caso es 0,6313 siempre y cuando se quiera hacer un test bilateral.

8.2.

Ereturn list

84

C 8: C

8.2.1.

Para el comando regress

El comando regress calcula la regresion lineal simple (o multiple) para las variables de respuesta y regresora(s) que se senalan, adjuntando la tabla ANOVA. En el siguiente ejemplo se
vera como recuperar el R2 , para estudios posteriores, relacionados con el ajuste o relacion que
existe entre las variables price weight length, de los datos del archivo de los autos.
Ejemplo 8.13 regress price weight length

Este comando proporciona los siguientes resultados:


Source |
SS
df
MS
---------+-----------------------------Model |
220725280
2
110362640
Residual |
414340116
71 5835776.28
---------+-----------------------------Total |
635065396
73 8699525.97

Number of obs
F( 2,
71)
Prob > F
R-squared
Adj R-squared
Root MSE

=
=
=
=
=
=

74
18.91
0.0000
0.3476
0.3292
2415.7

---------------------------------------------------------------------price |
Coef. Std. Err.
t
P>|t|
[95% Conf. Interval]
---------+-----------------------------------------------------------weight | 4.699065
1.122339
4.19
0.000
2.461184
6.936946
length | -97.96031
39.1746 -2.50
0.015
-176.0722
-19.84838
_cons | 10386.54
4308.159
2.41
0.019
1796.316
18976.76
----------------------------------------------------------------------

Ejemplo 8.14 ereturn list

Este comando proporciona los siguientes resultados:


scalars:
e(N)
e(df_m)
e(df_r)
e(F)
e(r2)
e(rmse)
e(mss)
e(rss)
e(r2_a)
e(ll)
e(ll_0)

=
=
=
=
=
=
=
=
=
=
=

74
2
71
18.91138982106364
.3475630724239044
2415.735142695644
220725280.2661347
414340115.8554868
.3291845674217608
-679.9123590332625
-695.7128688987767

macros:
e(title) : "Linear regression"
85

8.2. Ereturn list

e(depvar)
e(cmd)
e(properties)
e(predict)
e(model)
e(estat_cmd)

:
:
:
:
:
:

"price"
"regress"
"b V"
"regres_p"
"ols"
"regress_estat"

matrices:
e(b) :
e(V) :

1 x 3
3 x 3

functions:
e(sample)

Ejercicio 8.1 La siguiente base de datos muestra la fecha en que una mujer dio a luz, la edad que
tena, cuantas veces dio a luz antes, la talla y el peso.
fecha de parto
28-12-2004
30-12-2004
11-01-2005
15-01-2005

edad paridad
32
3
24
1
20
2
23
1

talla
1,58
1,58
1,56
1,62

peso
50
65
68
59

Cuadro 8.1: Base de datos para el ejercicio 2 del captulo 8


1. A la variable talla restele su media y divdala por su desviacion estandar.
2. Haga una regresion con la variable de respuesta peso y las variables regresoras: edad, paridad
y talla, y a continuacion realice un ereturn list y comente los resultados.

86

Captulo 9

Datos que contienen fechas


Al recolectar datos usualmente una o mas variables involucran fechas, las que suelen ser utilizadas para determinar o actualizar edades, calcular los das de estada de un paciente en una
clnica, determinar el numero de das, semanas o meses que una persona extranjera ha permanecido
en el pas, etc. Estas fechas pueden estar ingresadas en las bases de datos como variables categoricas; por ejemplo, 12-04-99 o marzo12, 1999, o en tres valores por separado: da, mes y ano, donde
da y ano son numericas y mes es categorica.
Stata 9.0 (Statacorp, 2005) proporciona herramientas muy amigables que le permitiran trabajar
de manera o ptima con los datos relacionados con fechas de calendario.

9.1.

Las fechas en Stata

En Stata las fechas se registran como un numero del cual no hay que preocuparse, pues el
sistema le entrega un formato leble y comprensible. El software para poder trabajar con datos que
contienen fechas las transforma en un valor numerico entero u nico mediante la funcion date, que
sera abarcada en el punto 9.2. Luego, el formato %d de Stata, transforma esos valores numericos
enteros en un formato de fecha, siguiendo la regla que se muestra en el cuadro 9.1, en donde se
considera al cero como valor de referencia:
Cada da es representado por un numero entero u nico. Stata considera como el da 0 al 1o de
febrero de 1960, cualquier otra fecha anterior a e sta, sera identificada con un numero entero negativo; similarmente fechas posteriores, seran representadas por un numero entero positivo.
La utilidad de esta caracterstica, es que se podran calcular facilmente la cantidad de das existentes entre dos fechas cualesquiera, simplemente realizando la resta de las fechas involucradas.
Por ejemplo, si se quiere determinar la cantidad de das existentes entre el 11 de abril de 1960 y el
02 de enero de 1960, Stata realizara el siguiente calculo:
11apr1960 02jan1960 = 101 1 = 100
Aun cuando las fechas no son sustrables, e stas son solo formatos y por ende el Software realiza la
diferencia entre los numeros que corresponden al formato de fecha.

87

9.2. L date

...
-16500
...
-101
...
-1
0
1
...
101
...
16500
...

corresponde a 29oct1914
corresponde a 22sep1959
corresponde a 31dec1959
corresponde a 01jan1960
corresponde a 02jan1960
corresponde a 11apr1960
corresponde a 05mar2005

Cuadro 9.1: Regla de valores numericos asociados a las fechas


Existen varias otras funciones asociadas a las fechas, las que involucran el trabajo con los
meses, trimestres, semestres, meses o anos, que seran abarcadas en este mismo captulo.

9.2.

La funcion date

Como primer paso, para poder ocupar las funciones de fechas (date functions), es necesario que las variables involucradas se encuentren en formato caracter (string), para que Stata las
pueda convertir a formato de fecha (date). Esto generalmente no es un problema, pues al importar
su base de datos a Stata, las variables relacionadas con fechas son automaticamente reconocidas
en formato string, al estar usualmente escritas con elementos como - o / entre los numeros
que representan las fechas. Por ejemplo, 12/23/2005 o 16-08-04.
Otra consideracion importante es que los meses del ano deben estar escritos con el respectivo
valor numerico que los representa: enero = 1, febrero = 2, ..., y diciembre = 12.

9.2.1.

Una primera implementacion

La funcion mas basica de todas es date(var1,s); la cual toma la fecha indicada a traves del
argumento var1, que corresponde al nombre de una variable caracter en Stata; siguiendo el orden
dado por el segundo argumento s: mes (m), da (d), y ano (y), asociandole su respectivo valor
numerico. El orden de los factores en el componente s es arbitrario; usted asigna el orden segun
los datos que posea: mdy o dmy o ymd o cualquier otro orden; debiendo utilizar las letras
del ingles (solo ano no coincide con year).
El cuidado que se debe tener en esta implementacion de la funcion date, es que el ano necesariamente debe estar escrito con sus cuatro dgitos especificados (por ejemplo, 12/04/1986); en caso
contrario, Stata no reconocera los valores contenidos en la variable original y su salida sera sim88

C 9: D

plemente un valor perdido.


Suponiendo que la variable caracter var_original incluye fechas con la siguiente estructura:
18-04-1986, la forma de ejecutar el comando es: gen fecha = date((var_original),"dmy")

9.2.2.

Especificando las centurias

La funcion date permite especificar la centuria en la cual se esta trabajando; o sea, indicar
en el argumento s de la funcion a que siglo corresponden los anos trabajados. Esta modificacion
en el segundo argumento de la funcion date permite trabajar exclusivamente y sin inconvenientes
las fechas en las que el ano se encuentra indicado solo con sus dos u ltimos dgitos, como podra
ser: 12-04-86. Para implementar en Stata esta modificacion, se debe agregar en el argumento s de
la funcion date, antes de la letra y que representa a los anos, los dgitos relacionados con el
milenio y la centuria, respectivamente.
La u nica precaucion que se debe tener, es ser consistente con la forma de la variable en la base
de datos teniendo claro el orden de los factores y, d y m.
Suponga que la base de datos contiene las fechas con la siguiente estructura: 07-21-97, y que
corresponden a fechas de muebles finos fabricados en el siglo XIX. Por ende, los anos deberan
tener la estructura 18YY y el comando es: gen fecha = date((var_original),"md18y")

9.2.3.

Acotando las fechas a traves de los anos

Stata proporciona un nuevo argumento a la funcion date que le permitira dar una cota superior
a las fechas que este trabajando en cuanto al ano. Es decir, podra indicar el ano maximo admisible
para las fechas de la variable original. Los restantes argumentos de la funcion, se trabajan de la
misma forma indicada en la seccion 9.2.1. Se debe tener presente que en la variable original, el
ano debe estar especificado solo con sus dos u ltimos dgitos. Por ejemplo, 08/15/63.
Suponga que se esta trabajando con datos de pasajeros de una lnea aerea cualquiera. En esta
situacion las fechas de nacimiento de los pasajeros pueden fluctuar mucho; sin embargo, ninguno
de ellos puede tener una fecha de nacimiento posterior al ano en curso (2006 en este caso). Por
ello, se colocara como ano maximo admisible a 2006 y la forma de ejecutar el comando con este
nuevo argumento es: gen fecha = date((var_original),"mdy",2006)
Es importante destacar que el valor del ano especificado en la funcion date es admitido tambien. Pero no hay problema alguno en indicar un valor superior a e ste, siempre y cuando tenga la
precaucion de no causar incoherencias en los datos. Podra suceder que si acota por el valor 2040
y una persona nacio en el ano 1937, en su nueva variable figurara naciendo el ano 2037; estos cien
anos de diferencia podran distorsionar demasiado sus resultados y llevarlo a conclusiones poco
adecuadas.
Ejemplo 9.1 Suponga que se tienen algunos datos recolectados desde el 1o de enero de 2005 en

el paso fronterizo de Los Libertadores en la 5ta. region, hasta el 31 de diciembre de 2005. Las
89

9.2. L date

personas estudiadas tienen residencia en el pas trasandino y entre todos los datos solicitados a los
turistas antes de cruzar a territorio chileno, se prestara atencion a su fecha de nacimiento, fecha de
ingreso al pas, fecha de salida del pas y el genero. (Datos Ficticios)
Nota: No se registraron turistas con edad superior a los 80 anos de edad.
Visualizando los datos (utilice el browse) y suponiendo que todos los turistas nacieron en el
siglo XX, se determina que se debe aplicar el comando date como se senalo en la seccion 9.2.2:
gen nacim = date(nac_date,"dm19y")
/* Generar
a el n
umero entero asociado a la fecha de
nacimiento de los turistas, teniendo los a
nos
la estructura 19YY */
list id nombre genero nac_date nacim in 1/3
/* Listar
a los 3 primeros elementos de la base de datos */

La salida generada por Stata se muestra en la siguiente tabla:


+----------------------------------------------------------+
| id
nombre
genero
nac_date
nacim |
|----------------------------------------------------------|
| 1
ACEVEDO BRIONES, FELIPE
Masc.
12-05-64
1593 |

| 2
ACUNA MALDONADO, JORGE
Masc.
02-04-73
4840 |
| 3
AGUIRRE OLEA, PABLO
Masc.
23-03-58
-649 |
+----------------------------------------------------------+

En la tabla anterior, por ejemplo, para el primer turista de la lista, la cantidad de das entre
el da 0 en Stata (1o de enero de 1960) y su fecha de nacimiento (12 de mayo de 1964) es de
1593 das. Sin embargo, la lectura de dicho valor obtenido por el comando date para las fechas
de nacimiento, es posible mostrarlo de un modo mas amigable. Esto se logra dandole a los valores
numericos el formato de fecha a traves de: format fecha %d.
Ejecute desde la ventana de comandos (o anote en el DO-file) las siguientes lneas:
format nacim %d
/* Da formato de fecha a la variable nacim */
list id nombre genero nac_date nacim in 1/3

La nueva salida en Stata incluira la siguiente modificacion en la variable nacim:


90

C 9: D

+--------------------------------------------------------------+
| id
nombre
genero
nac_date
nacim |
|--------------------------------------------------------------|
| 1
ACEVEDO BRIONES, FELIPE
Masc.
12-05-64
12may1964 |
| 2
ACU
NA MALDONADO, JORGE
Masc.
02-04-73
02apr1973 |
| 3
AGUIRRE OLEA, PABLO
Masc.
23-03-58
23mar1958 |
+--------------------------------------------------------------+

La visualizacion dada es la que el programa Stata incluye por defecto, empero existen muchos
otros formatos para mostrar el mismo resultado, los que seran explicados en la seccion 9.9 (pagina
116).
En el codigo que se presenta a continuacion, se considera la variable original y se asigna arbitrariamente como ano maximo a 2010 (como se describio en la seccion 9.2.3). Anote en el DO-file
la siguiente rutina para realizar los calculos y visualizar parte de los resultados.
gen nacim2 = date(nac_date,"dmy",2010)
format nacim2 %d
list id nombre genero nac_date nacim2 in 1/3

A primera vista todo parece funcionar bien, no se aprecia cambio alguno en los resultados respecto a cuando se especifico la vigesima centuria para los datos (como se describio en la seccion
9.2.2). Lo mas importante es que el software . Efectivamente el
programa fue ejecutado en su totalidad por lo que se podra asumir que todo ha funcionado perfectamente; sin embargo, se produce una contrariedad en el elemento numero 26 de la base de datos.
Tipee el comando: list id nombre nac_date nacim nacim2 in 26. Stata le mostrara la
informacion relacionada al turista identificado con el numero 26:
+------------------------------------------------------------------+
| id
nombre
nac_date
nacim
nacim2 |
|------------------------------------------------------------------|
| 26
FLORES BENNER, SEBASTIAN
15-10-04
15oct2004
15oct1904 |
+------------------------------------------------------------------+

Se produce un inconveniente en la fecha de nacimiento de este turista, discrepa en 100 anos.


Precisamente esta es la situacion contradictoria mencionada en la pagina 89 de la seccion 9.2.3.
Como ayuda para orientarlo en este problema en particular esta la nota anexada tras el enunciado
del ejemplo 9.1.
Surge la pregunta: sera el u nico elemento de la lista con problemas en su fecha de nacimiento?
La forma de obtener la respuesta es a traves de:
91

9.3. F date

list id nombre nacim nacim2 if nacim2!=nacim


Para evitar este tipo de contradicciones, es razonable tener alguna referencia acerca de las
fechas que este trabajando. Es importante destacar que este inconveniente no se producira si las
fechas contienen el ano escrito con sus cuatro dgitos. En este caso, la modalidad explicada en la
seccion 9.2.1 es suficiente.

Funciones complementarias a la funcion date

9.3.

En la seccion 9.2 se mostro como utilizar la funcion date. Con la variable generada por dicha
funcion se debe trabajar en todo este segmento del captulo. Se mostraran otras funciones importantes que pueden optimizar el tiempo en el trabajo de datos que contienen fechas.
Stata proporciona una serie de funciones que permiten seleccionar desde un dato el mes, el da
de la semana o del ano o del mes, el semestre, el trimestre, el mismo ano y la semana del ano de la
fecha relacionada a un dato.
Es importante destacar que las funciones de esta seccion poseen un formato u nico y por defecto:
formato numerico. Por lo que no podra cambiar la estructura del resultado que le arroje el software.

9.3.1.

El d
a desde una fecha

Cuando se trabaja con fechas a veces es importante saber en que da de la semana, del mes
o del ano acontecio el suceso estudiado. Stata le permitira por medio de tres funciones distintas
mostrar como una nueva variable el dato solicitado.
1. Da del mes: Si es de interes obtener exclusivamente el da del mes desde un dato con formato
de fecha, debe recurrir a la funcion day. La numeracion de esta funcion va desde 1 hasta 28,
29, 30 o 31 segun corresponda. El comando para ejecutarla es:
gen dia = day(fecha)
Ejemplo 9.2 Para la base de datos trabajada en el ejemplo 9.1, anote en el DO-file y ejecute

las sentencias:
gen dia = day(nacim)
/* d
a del mes */
list id nombre nacim dia in 1/3
La salida generada por el software es:
+----------------------------------------------------+
| id
nombre
nacim
dia |
|----------------------------------------------------|
92

C 9: D

| 1
ACEVEDO BRIONES, FELIPE
12 May 1964
12 |
| 2
ACU
NA MALDONADO, JORGE
02 April 1973
2 |
| 3
AGUIRRE OLEA, PABLO
23 March 1958
23 |
+----------------------------------------------------+
Al comparar la informacion entre las variables nacim y dia, se puede apreciar que efectivamente la funcion day selecciono el da del mes en el que nacio cada uno de los turistas en la
base de datos, omitiendo tanto el mes como el ano de nacimiento. La informacion obtenida se
almaceno en la variable dia.
2. Da de la semana: En este punto, el interes del usuario es determinar exclusivamente el da de
la semana en el que acontecio el suceso estudiado. Stata codifica los nombres (en ingles) de los
das de la semana segun la siguiente regla: (0) domingo, (1) lunes, ..., (5) viernes, y (6) sabado.
Al momento de generarse la salida por Stata, e ste le mostrara el numero correspondiente al da
de la semana. El comando a emplear es:
gen dia sem = dow(fecha)
Ejemplo 9.3 Para la base de datos del ejemplo 9.1, escriba en el DO-file y ejecute las siguientes

lneas:
gen dia_sem = dow(nacim)
/* d
a de la semana */
list id nombre nacim dia_sem in 1/3
La salida generada sera:
+--------------------------------------------------------+
| id
nombre
nacim
dia_sem |
|--------------------------------------------------------|
| 1
ACEVEDO BRIONES, FELIPE
12 May 1964
2 |

| 2
ACUNA MALDONADO, JORGE
02 April 1973
1 |
| 3
AGUIRRE OLEA, PABLO
23 March 1958
0 |
+--------------------------------------------------------+
Desde la tabla anterior se aprecia que, por ejemplo, el primer turista nacio el da de la semana
numero 2, o sea, nacio un da martes (martes 12 de mayo de 1964).
Es importante destacar que los das de la semana al tener un formato numerico (desde 0 hasta 6)
pueden ser etiquetados. Es decir, se puede encomendar a Stata que muestre a cada uno de dichos
numeros como el da de la semana al que corresponden. La forma de hacerlo es la siguiente:
label variable dia_sem "Dia de la semana"
label define dias 0 Domingo 1 Lunes 2 Martes /*
*/ 3 Mi
ercoles 4 Jueves 5 Viernes 6 S
abado
93

9.3. F date

label values dia_sem dias


+----------------------------------------------------+
| id
nombre
nacim
dia_sem |
|----------------------------------------------------|
| 1
ACEVEDO BRIONES, FELIPE
12may1964
Martes |
| 2
ACU
NA MALDONADO, JORGE
02apr1973
Lunes |
| 3
AGUIRRE OLEA, PABLO
23mar1958
Domingo |
+----------------------------------------------------+
En este caso los valores posibles que se generaran oscilaran entre 1 y 366, si es
3. Da del ano:
que corresponde. Con la funcion a mostrar a continuacion, el usuario podra determinar el da
del ano en el que acontecio el suceso estudiado. El comando que permite generar estos valores
es:
gen dia anio = doy(fecha)
Ejemplo 9.4 Aplicando el comando en el ejemplo 9.1, los comandos para ejecutar la funcion

y mostrar los resultados sera:


gen dia_anio = doy(nacim)
/* d
a del a
no */
list id nombre nacim dia_anio in 1/3
Los resultados que mostrara Stata son:
+---------------------------------------------------------+
| id
nombre
nacim
dia_anio |
|---------------------------------------------------------|
| 1
ACEVEDO BRIONES, FELIPE
12 May 1964
133 |
| 2
ACU
NA MALDONADO, JORGE
02 April 1973
92 |
| 3
AGUIRRE OLEA, PABLO
23 March 1958
82 |
+---------------------------------------------------------+
Para el primer turista del listado, por ejemplo, se tiene que la nueva variable generada toma el
valor 133; o sea, esta persona nacio en el da numero 133 del ano 1964.

9.3.2.

El semestre desde una fecha

En ocasiones es de interes trabajar con el ano particionado en dos partes: primer semestre y
segundo semestre. La funcion que se mostrara a continuacion permite a partir de una variable con
formato de fecha obtener el semestre en el que acontece el suceso estudiado.

94

C 9: D

La funcion halfyear selecciona el semestre asignando el valor 1 (primer semestre) si el mes


del dato en formato de fecha oscila entre enero y junio inclusive; y asigna el valor 2 (segundo
semestre) si la fecha oscila entre julio y diciembre inclusive. El comando a ejecutar es:
gen semestre = halfyear(fecha)
Ejemplo 9.5 Para una aplicacion, nuevamente se trabajara con los datos del ejemplo 9.1 utilizado

en las secciones previas, el comando en este caso sera:


gen semestre = halfyear(nacim)
/* semestre (mitad) del a
no */
list id nombre nacim semestre in 31/34

La salida generada por el software es:


+---------------------------------------------------------------+
| id
nombre
nacim
semestre |
|---------------------------------------------------------------|
| 31
GUAJARDO SALAS, EDUARDO
30 January 1981
1 |
| 32
GUZMAN CARRASCO, FERNANDO
03 September 1973
2 |
| 33
HENRIQUEZ CASTRO, CLAUDIO
09 September 1989
2 |
| 34
LILLO VEGA, JUAN
31 March 1962
1 |
+---------------------------------------------------------------+

Se aprecia que los turistas 31 y 34 nacieron en el primer semestre de 1981 y 1962, respectivamente. Los otros dos turistas nacieron el segundo semestre de sus respectivos anos.
En este punto los semestres tambien tienen un formato numerico (1 o 2) y similarmente a como
acontecio con los das de la semana, pueden ser etiquetados. Una forma de hacerlo es:
label variable semestre "Semestre"
label define semest 1 Primero 2 Segundo
label values semestre semest
+-------------------------------------------------------+
| id
nombre
nacim
semestre |
|-------------------------------------------------------|
| 31
GUAJARDO SALAS, EDUARDO
30jan1981
Primero |
| 32
GUZMAN CARRASCO, FERNANDO
03sep1973
Segundo |
| 33
HENRIQUEZ CASTRO, CLAUDIO
09sep1989
Segundo |
| 34
LILLO VEGA, JUAN
31mar1962
Primero |
+-------------------------------------------------------+

95

9.3. F date

9.3.3.

El trimestre desde una fecha

En forma similar a la seccion 9.3.2, en esta ocasion se desea dividir el ano en 4 partes, codificando de la siguiente manera: (1) enero - marzo, (2) abril - junio, (3) julio - septiembre, y (4)
octubre - diciembre. La funcion a utilizar es:
gen trimestre = quarter(fecha)
Ejemplo 9.6 Para los datos del ejemplo 9.1 se generaran los trimestres para las fechas de nacimiento utilizando el comando tal y como se explico en el parrafo previo:

gen trimestre = quarter(nacim)


/* trimestre (cuarto) del a
no */
list id nombre nacim trimestre in 6/9
La salida obtenida es:
+---------------------------------------------------------+
| id
nombre
nacim
trimese |
|---------------------------------------------------------|
| 6
ARANCIBIA GONZALEZ, IGNACIO
10jan1980
1 |
| 7
ARAVENA GALVEZ, MIGUEL
18jul1949
3 |
| 8
ARAYA CHOQUE, DANIEL
09oct1971
4 |
| 9
ARAYA PEREZ, JUAN
20jun1984
2 |
+---------------------------------------------------------+
De los turistas mostrados, por ejemplo, el numero 6 nacio en el primer trimestre de 1980; el
numero 7 en el tercer trimestre de 1949 y as sucesivamente.
Los trimestres tambien tienen un formato numerico (1, 2, 3 o 4) y similarmente a como acontecio con los das de la semana y los semestres, pueden ser etiquetados. La forma de hacerlo es la
siguiente:
label variable trimestre "Trimestre"
label define trim 1 Primero 2 Segundo 3 Tercero 4 Cuarto
label values trimestre trim
+---------------------------------------------------------------+
| id
nombre
nacim
trimese |
|---------------------------------------------------------------|
| 6
ARANCIBIA GONZALEZ, IGNACIO
10 January 1980
Primero |
| 7
ARAVENA GALVEZ, MIGUEL
18 July 1949
Tercero |
| 8
ARAYA CHOQUE, DANIEL
09 October 1971
Cuarto |
| 9
ARAYA PEREZ, JUAN
20 June 1984
Segundo |
+---------------------------------------------------------------+

96

C 9: D

9.3.4.

El mes desde una fecha

La funcion a explicar a continuacion le permitira seleccionar desde un dato con formato de


fecha el mes que se halla inserto en e l. Los meses en la visualizacion estan codificados de la
forma tradicional pero con los nombres en ingles: (1) enero, (2) febrero, ..., (11) noviembre, y (12)
diciembre. El comando a ejecutar es:
gen mes = month(nacim)
Ejemplo 9.7 La aplicacion nuevamente se relaciona con el ejemplo 9.1; para ello tipee los si-

guientes comandos:
gen mes = month(nacim)
/* mes del a
no */
list id nombre nacim mes in 50/52
Stata mostrara el siguiente resultado:
+--------------------------------------------------------+
| id
nombre
nacim
mes |
|--------------------------------------------------------|
| 50
OYARZUN ARAYA, CRISTIAN
28 January 1970
1 |

| 51
PENA BURGOS, PAULA
25 September 1974
9 |
| 52
PEREZ LAGOS, CRISTIAN
13 April 1959
4 |
+--------------------------------------------------------+
Se desprende de la informacion mostrada que el turista numero 50 nacio el primer mes del ano
1970; el turista 51 nacio el noveno mes del ano 1974; y as sucesivamente.
Los meses del ano tambien tienen un formato numerico (1, 2, ..., 11 o 12) y similarmente a
como acontecio con los das de la semana, los semestres y los trimestres pueden ser etiquetados.
La forma de hacerlo es la siguiente:
label variable mes "Mes del Anio"
label define mes_anio 1 Enero 2 Febrero 3 Marzo 4 Abril 5 Mayo /*
*/ 6 Junio 7 Julio 8 Agosto 9 Septiembre 10 Octubre /*
*/ 11 Noviembre 12 Diciembre
label values mes mes_anio
+---------------------------------------------------------------+
| id
nombre
nacim
mes |
|---------------------------------------------------------------|
| 50
OYARZUN ARAYA, CRISTIAN
28 January 1970
Enero |
| 51
PE
NA BURGOS, PAULA
25 September 1974
Septiembre |
| 52
PEREZ LAGOS, CRISTIAN
13 April 1959
Abril |
+---------------------------------------------------------------+

97

9.4. C

9.3.5.

La semana desde una fecha

En esta seccion la funcion a utilizar le permitira especificar la informacion de la semana del


ano implcita en su dato en formato de fecha. El comando a ejecutar es:
gen semana = week(fecha)
El rango de la variable generada estara entre 1 y 52.
Ejemplo 9.8 Determine la semana del ano en que nacio cada uno de los turistas del ejemplo 9.1.
Los comandos que debera ejecutar para lograr el objetivo y visualizarlo son:

gen semana = week(nacim)


/* semana del a
no */
list id nombre nacim semana

9.3.6.

El a
no desde una fecha

Stata posee una funcion que le permitira trabajar exclusivamente con el ano contenido en su
dato en formato de fecha . El comando a utilizar es:
gen anio = year(fecha)
Ejemplo 9.9 Una aplicacion sencilla se tiene nuevamente en el ejemplo 9.1. Los anos de nacimien-

to de cada uno de los turistas en la base de datos seran generados y visualizados usando los comandos:
gen anio = year(nacim)
/* a
no de nacimiento */
list id nombre nacim anio

9.4.

Convirtiendo una fecha en formato caracter en una serie


de temporal

Comprendiendo ya el manejo correcto de la funcion date y sus complementos para extraer la


informacion de interes desde una variable con formato de fecha , en esta parte del captulo se abarcara la administracion de las fechas siguiendo su cronologa; o sea, tomar una fecha en particular
como punto de referencia y a partir de e sta contabilizar hacia adelante o hacia atras la cantidad
de meses, semanas, anos, semestres, trimestres o das transcurridos desde la fecha de referencia (o
cualquier otra) a la fecha del dato que se posea.
Por ejemplo, un calculo de facil verificacion es la cantidad de trimestres transcurrido entre las
primeras vueltas de las elecciones presidenciales de 1999 y de 2005. Naturalmente la respuesta es
98

C 9: D

24 trimestres. Se puede pensar que la funcion quarter vista en la seccion 9.3.3 servira (pagina 96),
empero e sta no distingue entre los anos, solo identifica el trimestre del ano asociado al dato analizado. Por esta razon Stata permite convertir variables en formato de fecha (%d) en un nuevo valor
numerico que contabilizara, desde la fecha de referencia, la totalidad de semestres transcurridos
hasta las fechas en cuestion, luego tras una simple diferencia, se obtendra la respuesta. Finalmente
se le asignara el formato respectivo, que en este caso sera serie de tiempo con trimestres (%tq).
Las funciones a explicar a continuacion tienen un grado de similitud en su estructura con lo
visto en la seccion 9.3 (pagina 92). Para cada una de e stas la presentacion de los datos en la variable original tiene estructuras distintas. Recordara que para usar la funcion date de la seccion
9.2 (pagina 88) se requera que el dato original incluyera da-mes-ano, en cualquier orden; en
esta seccion se requiere que la variable original contenga estrictamente lo que se quiere trabajar.
Por ejemplo, si es de su interes trabajar u nicamente con los meses y los anos, entonces la variable
original debera tener la estructura: mes-ano o ano-mes exclusivamente.
En general todas las funciones tienen tres argumentos: la variable a transformar (ejemplo: variable), el orden de los componentes del dato (ejemplo: ymd), y al ano maximo tolerado por los
datos (ejemplo: 1990).
Los resultados que arrojara Stata seguiran la siguiente regla: a
no(caracter)(valor); donde
caracter puede tomar los valores h (semestre), m (mes), q (trimestre) o w (semana); y
valor corresponde al numero del semestre, del mes, del trimestre o de la semana, segun corresponda, del ano analizado. Pero no se debe olvidar que esto es solo un formato, una representacion que
de no ser asignada mostrara, por ejemplo, la cantidad de semanas transcurridas desde la semana
cero en Stata (1ra. semana de 1960).

9.4.1.

Funcion daily

Esta funcion es identica a la funcion date de la seccion 9.2, para su comprension remtase a
la pagina 88. Los datos originales deben tener la estructura: mes-da-ano en cualquiera de los
o rdenes posibles. El formato que debera asignar es %td, que es identico al formato %d mencionado
al comienzo del punto 9.1.
El comando a ejecutar, con su repectivo formato es:
gen dia = daily(var_original,"dmy",2010)
/* nro. de d
as contados desde el d
a 0 (1o de enero de 1960) */
format dia %td
/* equivalente a format dia %d */

9.4.2.

Funcion halfyearly

Esta funcion contabiliza la cantidad de semestres o medios anos transcurridos desde el valor
de referencia: 1er. semestre de 1960, que es el semestre 0 en Stata. Los datos en la variable origi99

9.4. C

nal deben tener la estructura: ano-semestre en cualquier orden (2003/2 o 1/96). El formato que
debera asignar es %th.
El comando a ejecutar, con su respectivo formato es:
gen sem = halfyearly(var_original,"yh",2010)
/* nro. de semestres contados desde el semestre 0 */
format sem %th

9.4.3.

Funcion monthly

Esta funcion contabiliza la cantidad de meses transcurridos desde el valor de referencia: enero
de 1960, que es el mes 0 en Stata. Los datos en la variable original deben tener la estructura: anomes en cualquier orden (2001/10 o 13/00). El formato que debera asignar es %tm.
El comando a ejecutar, con su respectivo formato es:
gen meses = monthly(var_original,"my",2010)
/* nro. de meses contados desde el mes 0 */
format meses %tm

9.4.4.

Funcion quarterly

Esta funcion contabiliza la cantidad de trimestres transcurridos desde el valor de referencia:


1er. trimestre de 1960, que es el trimestre 0 en Stata. Los datos en la variable original deben tener
la estructura: trimestre-ano en cualquier orden (1998-4 o 68/1). El formato que debera asignar
es %tq.
El comando a ejecutar, con su respectivo formato es:
gen trim = quarterly(var_original,"qy",2010)
/* nro. de trimestres contados desde el trimestre 0 */
format trim %tq

9.4.5.

Funcion weekly

Esta funcion contabiliza la cantidad de semanas transcurridas desde el valor de referencia: 1ra.
semana de 1960, que es la semana 0 en Stata. Los datos en la variable original deben tener la
estructura: semana-ano en cualquier orden (2001/38 o 50-99). El formato que debera asignar es
%tw.
El comando a ejecutar, con su respectivo formato es:
100

C 9: D

gen semanas = weekly(var_original,"yw",2010)


/* nro. de semanas contadas desde la semana 0 */
format semanas %tw

9.4.6.

Funcion yearly

Esta funcion muestra el ano contenido en la variable original, en este caso ano de referencia, salvo el ano 0 de la Era Comun. Los datos en la variable original deben tener la estructura:
ano (1896 o 73). El formato que debera asignar es %ty.
El comando a ejecutar, con su respectivo formato es:
gen anyo = yearly(var_original,"y",2010)
format anyo %ty

9.1 En T las funciones puede omitir el valor 2010 que se ejemplifico como el
Observacion

ano maximo admisible, o cambiarlo por el valor que estime conveniente (segun sus datos). Si los
anos estan especificados con sus dos u ltimos dgitos, debe indicar la centuria y el milenio como se
explico en la seccion 9.2.2 (pagina 89).

9.5.

Transformando datos en formato de fecha a serie temporal


y viceversa

En este punto se ensenaran las funciones que permiten relacionar los topicos vistos en las
secciones 9.3 y 9.4, respectivamente.

9.5.1.

Formato de fecha a serie temporal

Las funciones de series temporales para variables creadas a traves de la funcion date cuyo
formato es %d o %td (date o time-date, equivalentemente), asignan el formato de serie temporal
que se requiera, los que pueden ser %td, %th, %tm, %tq, %tw o %ty. Las transformaciones posibles
en Stata se explican a continuacion:
1. Funcion dofd:
Esta funcion actua como una identidad, pues cuenta la cantidad de das transcurridos desde el
da cero en Stata (1o de enero de 1960) hasta la fecha de interes y, precisamente, la funcion
date realiza el mismo calculo. En todo caso, el comando de ejecucion es:
gen dia = dofd(fecha)
format dia %d
/* puede ser tambi
en %td */

101

9.5. T

2. Funcion hofd:
Esta funcion retorna la cantidad de semestres transcurridos desde el semestre cero en Stata (1er.
semestre de 1960) hasta la fecha de interes. A la variable generada se le asigna el formato %th
visto en la seccion 9.4.2 en la pagina 99. El comando de ejecucion es:
gen semestre = hofd(fecha)
format sem %th

3. Funcion mofd:
Esta funcion proporciona la cantidad de meses transcurridos desde el mes cero en Stata (enero
de 1960) hasta la fecha de interes. A la variable generada, se le asigna el formato %tm visto en
la seccion 9.4.3 en la pagina 100. El comando de ejecucion es:
gen mes = mofd(fecha)
format mes %tm

4. Funcion qofd:
Esta funcion proporciona la cantidad de trimestres transcurridos desde el trimestre cero en Stata
(1er. trimestre de 1960) hasta la fecha de interes. A la variable generada, se le asigna el formato
%tq visto en la seccion 9.4.4 en la pagina 100. El comando de ejecucion es:
gen trimestre = qofd(fecha)
format trim %tq

5. Funcion wofd:
Esta funcion proporciona la cantidad de semanas transcurridas desde la semana cero en Stata
(1ra. semana de 1960) hasta la fecha de interes. A la variable generada, se le asigna el formato
%tw visto en la seccion 9.4.5 en la pagina 100. El comando de ejecucion es:
gen semana = wofd(fecha)
format semana %tw

6. Funcion yofd:
Esta funcion proporciona la cantidad de anos transcurridos desde el ano cero de la Era Comun
hasta la fecha de interes. A la variable generada, le asigna el formato %ty visto en la seccion
9.4.6 en la pagina 101. El comando de ejecucion es:
gen anio = yofd(fecha)
format anho %ty

102

C 9: D

9.5.2.

Serie temporal a formato de fecha

Las funciones a tratar en este topico realizan exactamente el proceso inverso a las funciones vistas en la seccion anterior (9.5.1). En otras palabras, a partir de un dato en alguno de los formatos de
serie temporal, estas funciones transforman dicho dato a uno con formato de fecha (precisamente
el mismo formato que se obtiene con la funcion date, mencionado en la pagina 88), teniendo
siempre como referencia el da cero en Stata (1o de enero de 1960).
Las funciones en cuestion tienen una particularidad: asignan siempre el primer da del semestre,
mes, semana, trimestre o del ano, segun corresponda. Por ejemplo, al tener el dato: 1970m4 (mes
de abril de 1970) cuyo formato es %tm, no se tiene informacion del da exacto del mes de abril
en que ocurrio el suceso en estudio, por lo que el resultado en formato %d o %td que arrojara la
funcion correspondiente sera el primer da del mes de abril del ano 1970 (1o de abril de 1970).
Similarmente, el mismo dato corresponde al primer semestre de 1970: 1970h1 con formato %th,
por lo cual el resultado en formato %d o %td que se obtendra sera el primer da de dicho semestre (1o
de enero de 1970). Las restantes funciones actuaran en forma similar, todo dependera del formato
original que tengan los datos que se esten trabajando (%th, %tm, %tq, %tw o %ty).
1. Funcion dofh:
Esta funcion es valida solo para aquellos datos con formato %th visto en la seccion 9.4.2 en la
pagina 99. La nueva variable generada contabilizara la cantidad de das existentes entre el da
cero en Stata (1o de enero de 1960) y el primer da del semestre y del ano correspondientes al
dato original. Las sentencias para ejecutar esta funcion con su respectivo formato, son:
gen fecha = dofh(semestre)
format fecha %d
/* pueder ser tambi
en %td */
2. Funcion dofm:
Esta funcion es valida solo para aquellos datos con formato %tm visto en la seccion 9.4.3 en la
pagina 100. La nueva variable generada contabilizara la cantidad de das existentes entre el da
cero en Stata (1o de enero de 1960) y el primer da del mes y del ano correspondientes al dato
original. Las sentencias para ejecutar esta funcion con su respectivo formato, son:
gen fecha = dofm(mes)
format fecha %d
/* pueder ser tambi
en %td */
3. Funcion dofq:
Esta funcion es valida solo para aquellos datos con formato %tq visto en la seccion 9.4.4 en la
pagina 100. La nueva variable generada contabilizara la cantidad de das existentes entre el da
cero en Stata (1o de enero de 1960) y el primer da del trimestre y del ano correspondientes al
dato original. Las sentencias para ejecutar esta funcion con su respectivo formato, son:
gen fecha = dofq(trimestre)
format fecha %d
/* pueder ser tambi
en %td */

103

9.6. T

4. Funcion dofw:
Esta funcion es valida solo para aquellos datos con formato %tw visto en la seccion 9.4.5 en la
pagina 100. La nueva variable generada contabilizara la cantidad de das existentes entre el da
cero en Stata (1o de enero de 1960) y el primer da de la semana y del ano correspondientes al
dato original. Las sentencias para ejecutar esta funcion con su respectivo formato, son:
gen fecha = dofw(semana)
format fecha %d
/* pueder ser tambi
en %td */
5. Funcion dofy:
Esta funcion es valida solo para aquellos datos con formato %ty visto en la seccion 9.4.6 en la
pagina 101. La nueva variable generada contabilizara la cantidad de das existentes entre el da
cero en Stata (1o de enero de 1960) y el primer da del ano correspondiente al dato original. Las
sentencias para ejecutar esta funcion con su respectivo formato, son:
gen fecha = dofy(anio)
format fecha %d
/* pueder ser tambi
en %td */

9.6.

Tipeando fechas fijas en expresiones

En muchas ocasiones sera de interes del usuario fijar algun valor (entiendase como alguna fecha
en particular, algun semestre, mes, trimestre, semana o ano), ya sea para realizar comparaciones o
seleccionar un subconjunto de datos que cumplan alguna condicion de interes. En otras palabras,
en este punto definira una constante con estructura de fecha o de serie temporal.
Por ejemplo, suponga que se tienen los datos de la cantidad de pasajeros que abordaron los
trenes que realizaron los servicios ferroviarios popularmente conocidos como El Longino, entre
la estacion La Calera y la estacion Iquique (va longitudinal norte de los Ferrocarriles del Estado);
ademas se dispone de la fecha en la cual se realizo cada viaje. Los datos van desde el 1o de enero
de 1950 hasta el u ltimo servicio realizado por dicho ferrocarril (9 de junio de 1975). Es de interes
estudiar la cantidad de pasajeros mensuales que viajaron en direccion norte por el ya desaparecido Longino desde el mes de noviembre de 1972 hasta el u ltimo servicio efectuado. Stata le
permitira trabajar de una manera amigable situaciones como la descrita, pues no sera necesario
programar una rutina muy elaborada ni complicada; tampoco debera perder tiempo contabilizando
a que numero corresponden los meses de noviembre de 1972 y junio de 1975, respectivamente,
desde el mes cero en Stata (enero de 1960). Simplemente, ayudado por las funciones a describir
a continuacion podra condicionar segun los meses relevantes logrando listar, graficar o analizar
exclusivamente el subconjunto de datos deseados.

9.6.1.

Fijando un da

Si es de su interes especificar un da en especial de algun mes y ano en particular. En el argumento de la funcion d() el orden de los elementos debera ser siempre: DDMMMYYYY (da-mes-ano),
104

C 9: D

espacios entre los elementos son admitidos; DD debera reemplazarse por el numero del da solicitado, MMM indique el mes que puede escribirse abreviadamente con sus tres primeras letras o
con su nombre completo (siempre en ingles) y finalmente el ano YYYY debera tener especificados
los cuatro dgitos que lo componen. Por ejemplo: 2jan2006 (2 de enero de 2006), 9-february1980 (9 de febrero de 1980), 9 september 1989 (9 de septiembre de 1989), 15 - 08 - 1963 (15
de agosto de 1963), 12-02-1818 (12 de febrero de 1818), etc. La sentencia que debera ocupar es:
d(DD MMM YYYY), cuyo formato es %d o %td.
Ejemplo 9.10 Utilizando los datos de los turistas trasandinos del ejemplo 9.1, liste los pasajeros

que tienen una fecha de nacimiento posterior al 1o de enero de 1990.


Las sentencias que debera ocupar para lograr el objetivo planteado en este caso y el respectivo
listado obtenido por Stata son:
list id nombre nacim if nacim > d(1 January 1990)
+----------------------------------------------------+
| id
nombre
nacim |
|----------------------------------------------------|
| 11
ASTORGA LAZCANO, CAROLINA
29 December 1993 |
| 13
BRITO CORNEJO, ALEJANDRO
23 February 1993 |
| 26
FLORES BENNER, SEBASTIAN
15 October 2004 |
| 27
FUENZALIDA OGALDE, PAULINA
01 April 2002 |
+----------------------------------------------------+

9.2 Para el ejemplo recien explicado, haber condicionado por d(1 jan 1990) es
Observacion

equivalente a colocar el valor numerico 10958, que corresponde efectivamente al valor numerico para la fecha en cuestion contabilizado desde el da cero en Stata (1o de enero de 1960). El
condicionante perfectamente pudo ser: if nacim > 10958.

9.6.2.

Fijando un semestre

Si es de su interes especificar un semestre en especial de algun ano en particular. En el argumento de la funcion h() el orden de los elementos debera ser siempre: YYYYhS (ano-h-semestre),
espacios entre los elementos son admitidos; YYYY corresponde al ano de interes escrito con sus
cuatro dgitos, h debe siempre incluirse (puede reemplazarse por un guion), finalmente S se reemplazara por el numero del semestre solicitado, tomara valores 1 o 2. Por ejemplo: 1973h2 (1973,
mitad 2), 1948 h1 (1948, mitad 1), 1891-2 (1891, mitad 2), etc. La sentencia que debera ocupar es:
h(YYYY h S), cuyo formato es %th.
Ejemplo 9.11 Utilizando los datos de los turistas trasandinos del ejemplo 9.1, liste los pasajeros

que nacieron despues del primer semestre de 1990.


105

9.6. T

Para la resolucion en primer lugar debera crear una variable que se encuentre en formato %th,
para lo cual debera implementarse la funcion hofd vista en la pagina 102 (punto 2 de la seccion
9.5.1). Luego, a partir de esta nueva variable podra realizar el listado solicitado. Las sentencias a
utilizar en este caso son:
gen semestre = hofd(nacim)
format semestre %th
list id nombre nacim semestre if semestre > h(1990 h1)

9.3 Note que los resultados arrojados por Stata no varan respecto a los obtenidos
Observacion

en el ejemplo 9.10.
9.4 Para el ejemplo recien explicado, haber condicionado por h(1990 h1) es equiObservacion

valente a colocar el valor numerico 60, que corresponde efectivamente al valor numerico asociado
al semestre en cuestion, contabilizado desde el semestre cero en Stata (primer semestre de 1960).
El condicionante perfectamente pudo ser: if semestre > 60.

9.6.3.

Fijando un mes

Si es de su interes especificar un mes en especial de algun ano en particular. En el argumento de


la funcion m() el orden de los elementos debera ser siempre: YYYYmMMM (ano-m-mes), espacios entre los elementos son admitidos; YYYY corresponde al ano de interes escrito con sus cuatro dgitos,
m debe siempre incluirse (puede reemplazarse por un guion), finalmente MMM se reemplazara por el
numero del mes solicitado, tomara valores 1, 2, ..., 12. Por ejemplo: 1973m10 (1973, mes 10), 1948
m8 (1948, mes 8), 1963-4 (1963, mes 4), etc. La sentencia que debera ocupar es: m(YYYY m MMM),
cuyo formato es %tm.
Existe una leve variacion en esta constante, pues podra reemplazar en la funcion m(YYYYmMMM)
el argumento m MMM simplemente por el nombre en ingles (completo o abreviado por sus tres
primeras letras) del mes de interes. Por ejemplo: 1987m6 = 1987 june = 1987June = 1987jun =
1987 jun = 1987-Jun = 1987 - jun = 1987 - 6 = 1987-6.
Ejemplo 9.12 Utilizando los datos de los turistas trasandinos del ejemplo 9.1, liste los pasajeros

que nacieron despues del mes de octubre de 1993.


En forma similar al ejemplo 9.11 se debera en primer lugar crear una variable cuyo formato sea
%tm. Se implementara en primer termino la funcion mofd explicada en la pagina 102 (punto 3 de
la seccion 9.5.1); posteriormente se listaran a los turistas que cumplen la condicion. Las sentencias
a implementar en este caso son:
gen mes = mofd(nacim)
format mes %tm

106

C 9: D

list id nombre nacim mes if mes > m(1993 October)


/* v
alidos tambi
en son: m(1993m10) y m(1993 oct), entre otros */
9.5 Para el ejemplo recien explicado, haber condicionado por m(1993 oct) es
Observacion

equivalente a colocar el valor numerico 405, que corresponde efectivamente al valor numerico
asociado al mes en cuestion contabilizado desde el mes cero cero en Stata (enero de 1960). El
condicionante perfectamente pudo ser: if mes > 405.

9.6.4.

Fijando un trimestre

Si es de su interes especificar un trimestre en especial de algun ano en particular. En el argumento de la funcion q() el orden de los elementos debera ser siempre: YYYYqT (ano-q-trimestre),
espacios entre los elementos son admitidos; YYYY corresponde al ano de interes escrito con sus
cuatro dgitos, q debe siempre incluirse (puede reemplazarse por un guion), finalmente T se reemplazara por el numero del trimestre solicitado, tomara valores 1, 2, 3 o 4. Por ejemplo: 2003q2
(2003, trimestre 2), 1963 q4 (1963, trimestre 4), 1910-3 (1910, trimestre 3), etc. La sentencia que
debera ocupar es: m(YYYY q T), cuyo formato es %tq.
Ejemplo 9.13 Utilizando los datos de los turistas trasandinos del ejemplo 9.1, liste los pasajeros

que nacieron en el tercer trimestre de 1978.


Para la resolucion en primer lugar debera crear una variable que se encuentre en formato %tq,
para lo cual debera implementarse la funcion qofd vista en la pagina 102 (punto 4 de la seccion
9.5.1). Luego, a partir de esta nueva variable podra realizar el listado solicitado. Las sentencias a
utilizar en este caso son:
gen trimestre = qofd(nacim)
format trimestre %tq
list id nombre nacim trimestre if trimestre == q(1978 q3)
9.6 Para el ejemplo recien explicado, haber condicionado por q(1978 q3) es equiObservacion
valente a colocar el valor numerico 74, que corresponde efectivamente al valor numerico asociado
al trimestre en cuestion contabilizado desde el trimestre cero en Stata (primer trimestre de 1960).
El condicionante perfectamente pudo ser: if trimestre == 74.

9.6.5.

Fijando una semana

Si es de su interes especificar una semana en especial de algun ano en particular. En el argumento de la funcion w() el orden de los elementos debera ser siempre: YYYYwW (ano-w-semana),
espacios entre los elementos son admitidos; YYYY corresponde al ano de interes escrito con sus
cuatro dgitos, w debe siempre incluirse (puede reemplazarse por un guion), finalmente W se reemplazara por el numero de la semana solicitada, tomara valores 1, 2, ..., 51 o 52. Por ejemplo:
107

9.6. T

1879w36 (1879, semana 36), 1955s22 (1955, semana 22), 2004-16 (2005, semana 16), etc. La
sentencia que debera ocupar es: w(YYYY w W), cuyo formato es %tw.

Ejemplo 9.14 Utilizando los datos de los turistas trasandinos del ejemplo 9.1, liste los pasajeros

que nacieron entre la vigesima semana de 1970 y la cuadragesima semana de 1980.


Para la resolucion en primer lugar debera crear una variable que se encuentre en formato %tw,
para lo cual debera implementarse la funcion wofd vista en la pagina 102 (punto 5 de la seccion
9.5.1). Luego, a partir de esta nueva variable podra realizar el listado solicitado. Las sentencias a
utilizar en este caso son:
gen semana = wofd(nacim)
format semana %tw
list id nombre nacim semana if semana>=w(1980w20) & semana<=w(1980 w40)

9.7 Para el ejemplo anterior, haber condicionado por w(1970w20) y w(1980w40)


Observacion

es equivalente a colocar los valores numericos 539 y 1079, respectivamente, los que corresponden
efectivamente en cada caso al valor numerico asociado a las semanas en cuestion contabilizado
desde la semana cero en Stata (primera semana de 1960). El condicionante perfectamente pudo
ser: if semana>=539 & semana<=1079.

9.6.6.

Fijando un ano

Si es de su interes especificar un ano en particular. En el argumento de la funcion y() el elemento u nico debera ser siempre: YYYY (ano); YYYY corresponde al ano de interes escrito con sus
cuatro dgitos. Por ejemplo: 1997, 2005, 1905, etc. La sentencia que debera ocupar es: y(YYYY),
cuyo formato es %ty.

Ejemplo 9.15 Utilizando los datos de los turistas trasandinos del ejemplo 9.1, liste los pasajeros

que nacieron antes del ano 1945.


Para la resolucion en primer lugar debera crear una variable que se encuentre en formato %ty,
para lo cual debera implementarse la funcion yofd vista en la pagina 102 (punto 6 de la seccion
9.5.1). Luego, a partir de esta nueva variable podra realizar el listado solicitado. Las sentencias a
utilizar en este caso son:
gen anio = yofd(nacim)
format anio %ty
list id nombre nacim anio if anio < y(1945)

108

C 9: D

9.8 Para el ejemplo recien explicado, haber condicionado por y(1945) es equivaObservacion

lente a colocar el valor numerico 1945, que corresponde efectivamente al valor numerico asociado
al ano en cuestion contabilizado desde el ano cero en Stata (ano cero de la Era Comun). El condicionante perfectamente pudo ser: if anio < 1945.

9.7.

Creando series temporales desde argumentos numericos

Cuando se introdujeron las series temporales en este captulo (seccion 9.4, pagina 98), recordara que se indico que e stas se generaran a partir de variables en formato caracter, las que ademas
deberan cumplir una estructura determinada como se indico en su momento.
Suponga ahora que la base de datos contiene dos variables con la siguiente estructura: la
primera de ellas contiene al ano y la segunda contiene al mes; ambas poseen formato numerico. Es
posible ahora generar nueva variable con formato de serie temporal %tm en este caso particular. La
manera de lograrlo es ocupando las funciones que se detallaran a continuacion.

9.7.1.

y el semestre
El ano

Cuando el ano y el semestre son dos variables numericas distintas, trabajando la funcion yh(, )
lograra generar una nueva variable cuyo formato sera %th y su resultado sera equivalente a si utilizase la funcion halfyearly para variables en formato caracter (seccion 9.4.2, pagina 99).
Si la variables anio y semest denotan a los anos y a los semestres, respectivamente, en una
base de datos cualquiera, entonces para generar la serie temporal, con su respectivo formato, asociada a estas dos variables la funcion a implementar es:
gen semestre = yh(anio,semest)
format semestre %th

Ejemplo 9.16 Para la base de datos original utilizada en el ejemplo 9.1, utilizando las funciones

adecuadas genere la variable que le permita obtener u nicamente el semestre y el ano de nacimiento
de cada uno de los turistas.
Para este ejemplo en particular, recuerde que en primer lugar debera generar la variable en
formato de fecha usando la funcion date, luego la respuesta la obtendra facilmente ayudado por
la funcion hofd vista en el punto 2 de la seccion 9.5.1. Sin embargo, para utilizar la herramienta
proporcionada en esta seccion, la rutina a implementar ocupara las funciones complementarias a
la funcion date que se explicaron en la seccion 9.3.
gen nacim = date(nac_date,"dmy",2010)
format nacim %d
gen anio = year(nacim)
/* selecciona el a
no */
109

9.7. C

gen semest = halfyear(nacim)


/* selecciona el semestre de nacimiento: 1
o 2 */
gen semestre = yh(anio,semest)
format semestre %th
list id nombre nacim semestre in 10/14

El resultado que arrojara Stata para todos los turistas tendra la siguiente estructura:
+-----------------------------------------------------------+
| id
nombre
nacim
semestre |
|-----------------------------------------------------------|
| 10
ARENAS KEIMER, MAREN
23apr1974
1974h1 |
| 11
ASTORGA LAZCANO, CAROLINA
29dec1993
1993h2 |

| 12
BOLANOS LEON, JUAN
22nov1984
1984h2 |
| 13
BRITO CORNEJO, ALEJANDRO
23feb1993
1993h1 |
| 14
BUSTAMANTE MAC VICAR, RICARDO
03jan1947
1947h1 |
+-----------------------------------------------------------+

Compare el resultado anterior con lo que hubiese obtenido si hubiese utilizado la funcion hofd
(seccion 9.5.1). La rutina en este caso es:
gen semestre2 = hofd(nacim)
format semestre2 %th
list id nombre nacim semestre* in 10/14

9.7.2.

y el mes
El ano

Cuando el ano y el mes son dos variables numericas distintas, trabajando la funcion ym(, )
lograra generar una nueva variable cuyo formato sera %tm y su resultado sera equivalente a si utilizase la funcion monthly para variables en formato caracter (seccion 9.4.3, pagina 100).
Si la variables anio y meses denotan a los anos y a los meses, respectivamente, en una base
de datos cualquiera, entonces para generar la serie temporal, con su respectivo formato, asociada a
estas dos variables la funcion a implementar es:
gen mes = ym(anio,meses)
format semestre %tm

110

C 9: D

Ejemplo 9.17 Nuevamente utilice la base de datos original del ejemplo 9.1, utilizando las fun-

ciones adecuadas genere la variable que le permita obtener u nicamente el mes y el ano de nacimiento de cada uno de los turistas.
Nuevamente debera generar la variable en formato de fecha usando la funcion date, luego la
respuesta la obtendra facilmente ayudado por la funcion mofd vista en el punto 3 de la seccion
9.5.1. Sin embargo, para utilizar la herramienta proporcionada en esta seccion, la rutina a implementar ocupara las funciones complementarias a la funcion date que se explicaron en la seccion
9.3.
gen nacim = date(nac_date,"dmy",2010)
format nacim %d
gen anio = year(nacim)
/* selecciona el a
no */
gen meses = month(nacim)
/* selecciona el mes de nacimiento: 1, 2, ..., 11
o 12 */
gen mes = ym(anio,meses)
format mes %tm
list id nombre nacim mes in 31/35
El resultado que arrojara Stata para todos los turistas tendra la siguiente estructura:
+-----------------------------------------------------+
| id
nombre
nacim
mes |
|-----------------------------------------------------|
| 31
GUAJARDO SALAS, EDUARDO
30jan1981
1981m1 |
| 32
GUZMAN CARRASCO, FERNANDO
03sep1973
1973m9 |
| 33
HENRIQUEZ CASTRO, CLAUDIO
09sep1989
1989m9 |
| 34
LILLO VEGA, JUAN
31mar1962
1962m3 |
| 35
LOPEZ BUSTAMANTE, JAVIER
12apr1988
1988m4 |
+-----------------------------------------------------+
Compare el resultado anterior con lo que hubiese obtenido si hubiese utilizado la funcion mofd
(seccion 9.5.1). La rutina en este caso es:
gen mes2 = mofd(nacim)
format mes2 %tm
list id nombre nacim mes* in 31/35

111

9.7. C

9.7.3.

y el trimestre
El ano

Cuando el ano y el trimestre son dos variables numericas distintas, trabajando la funcion yq(, )
lograra generar una nueva variable cuyo formato sera %tq y su resultado sera equivalente a si utilizase la funcion quarterly para variables en formato caracter (seccion 9.4.4, pagina 100).
Si la variables anio y trim denotan a los anos y a los trimestres, respectivamente, en una base
de datos cualquiera, entonces para generar la serie temporal, con su respectivo formato, asociada a
estas dos variables la funcion a implementar es:
gen trimestre = yq(anio,trim)
format semestre %tq

Ejemplo 9.18 Nuevamente utilice la base de datos original del ejemplo 9.1, utilizando las funciones adecuadas genere la variable que le permita obtener u nicamente el trimestre y el ano de
nacimiento de cada uno de los turistas.

Nuevamente debera generar la variable en formato de fecha usando la funcion date, luego la
respuesta la obtendra facilmente ayudado por la funcion qofd vista en el punto 4 de la seccion
9.5.1. Sin embargo, para utilizar la herramienta proporcionada en esta seccion, la rutina a implementar ocupara las funciones complementarias a la funcion date que se explicaron en la seccion
9.3.
gen nacim = date(nac_date,"dmy",2010)
format nacim %d
gen anio = year(nacim)
/* selecciona el a
no */
gen trim = quarter(nacim)
/* selecciona el trimestre de nacimiento: 1, 2, 3
o 4 */
gen trimestre = yq(anio,trim)
format trimestre %tq
list id nombre nacim trimestre in 60/64
El resultado que arrojara Stata para todos los turistas tendra la siguiente estructura:
+-------------------------------------------------------+
| id
nombre
nacim
trimese |
|-------------------------------------------------------|
| 60
ROSSEL TORRES, JOSE
06jun1947
1947q2 |
| 61
ROZAS VIDAL, VIVIANA
04oct1949
1949q4 |
112

C 9: D

| 62
SANCHEZ GIRALDEZ, ANDRES
07aug1939
1939q3 |
| 63
SANCHEZ GIRALDEZ, RODRIGO
03apr1944
1944q2 |
| 64
SANHUEZA OLIVARES, MIGUEL
25sep1974
1974q3 |
+-------------------------------------------------------+
Compare el resultado anterior con lo que hubiese obtenido si hubiese utilizado la funcion qofd
(seccion 9.5.1). La rutina en este caso es:
gen trimestre2 = qofd(nacim)
format trimestre2 %tq
list id nombre nacim trimestre* in 60/64

9.7.4.

y la semana
El ano

Cuando el ano y la semana son dos variables numericas distintas, trabajando la funcion yw(, )
lograra generar una nueva variable cuyo formato sera %tw y su resultado sera equivalente a si utilizase la funcion weekly para variables en formato caracter (seccion 9.4.5, pagina 100).
Si la variables anio y semana denotan a los anos y a las semanas, respectivamente, en una base
de datos cualquiera, entonces para generar la serie temporal, con su respectivo formato, asociada a
estas dos variables la funcion a implementar es:
gen week = yw(anio,semana)
format week %tw

Ejemplo 9.19 Nuevamente utilice la base de datos original del ejemplo 9.1, utilizando las fun-

ciones adecuadas genere la variable que le permita obtener u nicamente la semana y el ano de
nacimiento de cada uno de los turistas.
Nuevamente debera generar la variable en formato de fecha usando la funcion date, luego la
respuesta la obtendra facilmente ayudado por la funcion wofd vista en el punto 5 de la seccion
9.5.1. Sin embargo, para utilizar la herramienta proporcionada en esta seccion, la rutina a implementar ocupara las funciones complementarias a la funcion date que se explicaron en la seccion
9.3.
gen nacim = date(nac_date,"dmy",2010)
format nacim %d
gen anio = year(nacim)
/* selecciona el a
no */
gen semana = week(nacim)
113

9.8. L

/* selecciona la semana de nacimiento: 1, 2, ..., 51


o 52 */
gen week = yw(anio,semana)
format week %tw
list id nombre nacim week in 48/52

El resultado que arrojara Stata para todos los turistas tendra la siguiente estructura:
+-----------------------------------------------------+
| id
nombre
nacim
week |
|-----------------------------------------------------|
| 48
OLIVARES COLLAO, RODRIGO
17oct1975
1975w42 |
| 49
OSORIO VARGAS, BRENDA
15apr1970
1970w15 |
| 50
OYARZUN ARAYA, CRISTIAN
28jan1970
1970w4 |

| 51
PENA BURGOS, PAULA
25sep1974
1974w39 |
| 52
PEREZ LAGOS, CRISTIAN
13apr1959
1959w15 |
+-----------------------------------------------------+

Compare el resultado anterior con lo que hubiese obtenido si hubiese utilizado la funcion wofd
(seccion 9.5.1). La rutina en este caso es:
gen week2 = wofd(nacim)
format week2 %tw
list id nombre nacim week* in 48/52

9.8.

La fecha de hoy

Stata permite trabajar con la fecha actual registrada en su computador, si e ste se encuentra
correctamente establecido en el calendario podra trabajar facilmente con datos que requieran ser
siempre actualizados (tomando como referencia la fecha actual) y as evitara estar cambiando sus
programas una y otra vez para volver a utilizarlos y mantener al da su base de datos. Simplemente
citando la fecha contenida en el sistema (vea creturn list) utilizando la sentencia:
c(current_date).
A modo de ejemplo, tipee en la barra de comandos: display c(current_date) podra visualizar la fecha actual en la ventana de resultados.
114

C 9: D

9.8.1.

Caracterstica principal

La principal caracterstica para la fecha actual es que es un caracter, o sea posee formato
string; por lo tanto para poder trabajar con ella necesariamente debe asignarle un formato de
fecha.
Por otro lado, una vez visualizada la fecha actual en la ventana de resultados, es muy importante
que note que el ano se encuentra especificado con sus 4 digtos, lo que facilitara enormemente
trabajar con ella.

9.8.2.

Como trabajar con la fecha de hoy?

La manera mas eficiente de trabajar con la fecha actual es a traves de la funcion date (seccion
9.2, pagina 88), pues el orden establecido es siempre da-mes-ano y el ano esta escrito con sus 4
dgitos. O sea, debera implementar la funcion date en su version mas simple.
A modo de ejemplo utilice una base de datos cualquiera y escriba en la lnea de comandos (o
anote en el DO-file) las siguientes lneas:
gen actual = date(c(current_date),"dmy")
format actual %td
Utilice el browse para ver que la nueva variable generada contiene precisamente la fecha del
da de hoy. Con esta nueva variable podra utilizar todas las funciones estudiadas en las secciones
previas de este captulo, podra extraer informacion sobre el da del ano en que se encuentra, en
que semana se encuentra, el trimestre, el semestre, etc. Ademas podra utilizar sin inconvenientes
las funciones que le permiten llevar este nuevo a una serie temporal (vea la seccion 9.5.1, pagina
101) para lograr determinar, entre otras cosas, el tiempo transcurrido en semanas para el suceso
estudiado.
Ejemplo 9.20 Cargue en el programa la base de datos de los turistas trasandinos que ingresaron

al pas durante el ano 2005. Genere variables que contengan la edad de cada una de las personas a
la fecha actual, la cantidad de semanas de vida, cantidad de trimestres y la cantidad de semestres.
Para realizar los calculos solicitados no es necesario que genere una nueva variable que contenga la fecha actual, puede trabajar sin inconvenientes con funciones compuestas, o sea, a la
funcion date le podra aplicar de inmediato la funcion wofd por ejemplo.
gen nacim = date(nac_date,"dmy",2010)
format nacim %tdd_M_CY
/* fecha de nacimiento */
gen edad_anios = yofd(date(c(current_date),"dmy")) - yofd(nacim)
gen edad_semanas = wofd(date(c(current_date),"dmy")) - wofd(nacim)
115

9.9. C

gen edad_semest = hofd(date(c(current_date),"dmy")) - hofd(nacim)


gen edad_trim = qofd(date(c(current_date),"dmy")) - qofd(nacim)
list nacim

edad_anios edad_semanas edad_semest edad_trim in 1/10

Un inconveniente que puede surgir con los anos es que a la fecha actual algun turista aun no
cumpla anos, pues la variable edad_anios en su estructura selecciona el ano en curso y realiza la
sustraccion de indicada, por lo cual se pueden producir errores. Lo mas aproximado a la realidad
es simplemente trabajar con la funcion date exclusivamente y si quiere obtener, por ejemplo, una
aproximacion mas cercana a la edad de los turistas debera restar la cantidad de das de vida y luego
dividirlos por 365,25.
gen edad_anios2 = (date(c(current_date),"dmy") - nacim) / 365.25
gen edad_semanas2 = (date(c(current_date),"dmy") - nacim) / 7
gen edad_semest2 = (date(c(current_date),"dmy") - nacim) / 182.5
gen edad_trim2 = (date(c(current_date),"dmy") - nacim) / 91.25
list nacim edad_anios edad_anios2 in 1/10
/* compara s
olo las edades */

9.9.

Cambiando el formato que se muestra por defecto

Cuando se trabaja con datos que contienen fechas, como se ha visto en las secciones anteriores
de este captulo, dichos datos son convertidos a un valor numerico entero que se obtiene siempre
contabilizando desde el valor de referencia situado en el ano 1960 para los das, meses, semestres,
trimestres y semanas, segun corresponda. Posteriormente a dichos valores se les asigna el formato
correspondiente (%d o %td, %tw, %tm, %tq, %th, %ty), Stata a continuacion despliega los datos en
un formato de fecha o de serie temporal claro, aunque a veces es poco elegante y probablemente
sera del gusto del usuario modificar la forma (la estructura) en la cual el software muestra los resultados. Por ejemplo, le gustara que los anos fuesen desplegados solo con sus dos u ltimos dgitos
o que los meses sean desplegados con su nombre completo (en ingles) y con su primera letra en
mayusculas, etc.
Con el fin de mostrar las diferentes formas de desplegar los resultados es que ha sido elaborada
esta seccion.
9.9 Las diferentes estructuras posibles para los formatos que se mostraran a conObservacion
tinuacion son solo aplicables para las fechas que han sido trabajadas como Series Temporales.

116

C 9: D

(Secciones 9.4 y 9.5.1, en las paginas 98 y 101, respectivamente)

9.9.1.

Caracteres utilizados y sus definiciones para mostrar los resultados

Stata dispone de una serie de caracteres, cada uno con su definicion y funcion dentro de los
formatos de fecha. En el caso de las letras se admite en algunos casos que sean mayusculas o
minusculas. Los u nicos caracteres permitidos para los formatos de fecha son:
c
C

y
Y

m
M

l
L

n
N

d
D

j
J

w
W

_ .

Cuadro 9.2: Caracteres permitidos para formatos de fecha


Los caracteres desplegados en al cuadro 9.2 probablemente sean difciles de recordar. Sin embargo, en el cuadro 9.3 (vea pagina 118) se detallan las definiciones de cada uno de ellos.

9.9.2.

La implementacion

Todos los caracteres descritos en la seccion anterior (9.9.1) siempre deben incorporarse a continuacion de la estructura que da el formato a los datos trabajados. Por ejemplo: %tqCY:q. Siguiendo esta regla el formato por defecto (formato que trae incluido Stata en su programacion) para cada
uno de los tipos de formato es:
%td o %d
%tw
%tm
%tq
%th
%ty

%tdDlCY
%twCY!ww
%tmCY!mn
%tqCY!qq
%thVY!hh
%tyCY

Ahora, conociendo ya todos los formatos disponibles y las distintas estructuras que se les puede
dar a las fechas, es cosa de empezar a jugar con distintas combinaciones, siempre y cuando sean
acordes al formato asignado al dato, pues puede conducir a errores. Por ejemplo, el da 0 en Stata
(1o de enero de 1960) se le asigna el formato %td, empero si le asigna cualquier otro no mostrara en
pantalla lo deseado.
Ejemplo 9.21 Distintas muestras para la fecha: 07 de julio de 1948.

Formatos
%td
%tdM_d,_CY
%tdY/M/D
%tdM-D-CY
%tqCY.q
%tqCY:q
%twCY,_w

formato
Fecha de muestra segun
07jul1948
July 7, 1948
48/07/11
07-11-1948
1948.3
1948:3
1948, 28

117

9.9. C

c
C

Despliega las centuria sin antecederla por un 0.


Despliega la centuria liderada por un 0 si corresponde.

y
Y

Despliega solo los dos u ltimos dgitos del ano si anteponer un 0.


Despliega solo los dos u ltimos dgitos del ano anteponiendo un 0 si corresponde.

m
M

Despliega el nombre del mes abreviado con tres letras, la primera letra capitalizada.
Despliega el nombre completo del mes, la primera letra capitalizada.

l
L

Despliega el nombre del mes abreviado con tres letras, la primera letra sin capitalizar.
Despliega el nombre completo del mes, la primera letra sin capitalizar.

n
N

Despliega el numero del mes sin anteponer un 0.


Despliega el numero del mes anteponiendo un 0 si corresponde.

d
D

Despliega el numero de da del mes sin anteponer un 0.


Despliega el numero de da del mes antecedido por un 0 si corresponde.

j
J

Despliega el numero de da del ano sin anteponer un 0.


Despliega el numero de da del ano antecedido por un 0 si corresponde.

h
q

Despliega la mitad del ano correspondiente (1 o 2).


Despliega el trimestre del ano correspondiente (1, 2, 3 o 4).

w
W

Despliega el numero de semana del ano sin anteponer un 0.


Despliega el numero de semana del ano anteponiendo un 0 si corresponde.

Genera un espacio en blanco.

Despliega un punto.

Despliega una coma.

Despliega los dos puntos.

Despliega un guion.

Despliega un slash (raya diagonal)

Despliega un apostrofe.

!k

Despliega el caracter k (!! despliega un signo de exclamacion).


Cuadro 9.3: Significado de los caracteres para los formatos de series temporales

118

Captulo 10

Comandos de programacion
En este captulo se comenzara hablando de la programacion, se hablara tambien de la importancia que tienen las variables macros (local y global) para facilitar la programacion y se
mostrara como usar los comandos if, forvalues y foreach.

Las macros

10.1.

La instruccion program (help program) define subrutinas, que pueden ser u tiles para procedimientos que se utilizan mas de una vez para distintas variables. Esta instruccion es recomendable usarla en el DO-file y no en la barra de comandos. Para facilitar estas subrutinas existen las
variables macro (help macro) que se dividen en local (help local) y global (help global),
e stas permiten definir controles de flujo. La variable local solo es valida en el programa que se
esta ejecutando corrientemente, la variable global permanece activa en todos los programas que
se ejecutan en una secuencia. Una macro se debe rodear por un acento () en la izquierda y un
apostrofe () en la derecha como se ejemplifica a continuacion: m.

10.1.1.

Variable local

Con esta variable se puede agrupar tanto variables o dejar algun numero constante, pero no
necesariamente puede ser un numero tambien puede ser un string (caracter), pero para ingresarlo
tiene que estar entre comillas.
Sintaxis: local lclname [=exp | :extended_fcn | []"[string]"[] ]
Ejemplo 10.1

local i=50
local i 50

Con esta instruccion la variable i va a ser siempre 50 dentro de un programa.


119

10.2. C: if, forvalues, foreach

10.1.2.

Variable global
Sintaxis: global mname [=exp | :extended_fcn | []"[string]"[]]

10.1 El signo igual en la variable local no es necesario colocarlo, la u nica diObservacion

ferencia que existe al ponerlo o no es la cantidad de caracteres que acepta. Con el signo igual
acepta un total de 80 caracteres, en cambio, sin el signo igual acepta 67784 caracteres.

10.2.

Comandos: if, forvalues, foreach

Existen tres condiciones que son las mas utilizadas dentro de los programas o subrutinas, e stas
ayudan y/o facilitan el uso de procedimientos.

10.2.1.

Condicion if

Este comando es de facil uso. Se utiliza para decisiones, es decir, hace una cosa si es verdadero y otra si es falso.
Sintaxis:
if exp {
or
if exp
multiple_commands
}
else {

single_command

or
else single_command
multiple_commands
}

Ejemplo 10.2

if foreign==1{
display rep78 weight length
}

Este comando ademas de ser utilizado dentro de programas o subrutinas, tambien se puede usar
interactivamente, pero hay que tener mucho cuidado de como se utiliza, por ejemplo:
summarize rep78 weight length if
Este comando proporcionan los siguientes resultados:
120

foreign==1

C 10: C

Variable | Obs
Mean
Std. Dev.
Min
Max
------------+--------------------------------------------------rep78 |
21
4.285714
.7171372
3
5
weight |
22
2315.909
433.0035
1760
3420
length |
22
168.5455
13.68255
142
193

Esta instruccion muestra las estadsticas basicas de las variables rep78 weight y lenght
siempre que la variable foreign sea igual a 1; o sea, que sean autos extranjeros.

10.2.2.

Condicion forvalues

Este comando itera sobre series de valores mas o menos complejas. Su sintaxis es:
forvalues lname = range {
commands referring to lname
}
Un ejemplo de esto, es un programa que cuente del 1 al 10 de 1 en 1.
Ejemplo 10.3

1.
2.
3.
4.
5.

program diez
forvalues i=1(1)10{
display i
}
end

Al ejecutar el programa diez, en la pantalla Results aparece lo siguiente:


. diez
1
2
3
4
5
6
7
8
9
10
Este comando no es muy utilizado, ya que casi todos los analisis que se hacen son para las
variables, por eso que se usa mas el foreach que es el comando a estudiar a continuacion.
121

10.2. C: if, forvalues, foreach

10.2.3.

Condicion foreach

Este comando es el mas utilizado dentro de los programas, e ste itera sobre una serie de variables que el usuario quiera analizar. Su sintaxis es:
foreach lname {in|of listtype} list {
commands referring to lname
}
Un ejemplo de esto usando variable local sera:
Ejemplo 10.4 A los pases de Chile, Argentina, Brasil y Estados Unidos, les asignaremos un

numero para que queden ordenados.


1. local i 0
2.
3.local pais CL AR BR US
4. foreach c of local pais {
5.
local i = i+1
6.
local newlist "newlist i c"
7.}
8.
9. display "newlist"
Con estas instrucciones lo que aparece en pantalla es lo siguiente:
1 CL 2 AR 3 BR 4 US
Ejemplo 10.5 Para el ejemplo 10.4 se hara ahora un procedimiento para que los pases queden

mostrados verticalmente.
1. local i 0
2.
3. local pais CL AR BR US
4.
5. foreach c of local pais {
6.
local i = i+1
7.
display "Pais i : c"
8.}
Al hacer correr este procedimiento da como resultado lo siguiente:
Pais
Pais
Pais
Pais

1
2
3
4

:
:
:
:

CL
AR
BR
US

122


Indice
alfabetico
abreviar
las variables, 19
abrir, 12
acceder
a Stata, 11
acceso
directo, 11
administracion
de datos, 9
agregar, 13
casos, 15
variables, 16
ajustar
una curva, 47
una recta, 47
ajuste
de la curva normal, 56
almacenamiento, 10
almacenando
la informacion, 12
almacenar, 10
archivos, 7
analisis, 9, 69, 71, 73
de datos, 7, 15
estadstico, 70
mediante tablas, 62
preliminares, 13
anova, 85
append, 38, 40
archivo
de programa, 12
do, 12, 13
log, 12

archivos, 12
ASCII, 21
de gabinete, 10
dta, 21
txt, 21
barra
de comando, 12
de comandos, 13
de herramientas, 12
de menu, 12
base
de datos, 16, 20
de datos original, 21
bases
de datos, 87
browse, 74, 90
browser
editor, 80
by, 48
codigo
de error, 12
de programa, 12
de programacion, 81
codigos
alfa-numericos, 27
campo
numerico, 70
caracteres, 9, 23
carpeta, 7, 8
categora, 44
categoras, 61
de la tabulacion, 62
123

INDICE ALFABETICO

codebook, 18, 71, 73, 75


codificaciones, 23, 24
comandos, 12, 13, 15, 61
basicos, 15
comentario, 10
comparacion, 48
comparar, 48
concatenacion, 38, 40
de archivos, 41
horizontal, 38
vertical, 40
concatenar
la informacion, 40
conclusion
del test, 84
conservar
observaciones, 34
variables, 34
consistencia
de los datos, 69
contabilizar, 98
copiar
la base de datos, 14
crear
bases de datos, 14
variables, 17
curva
normal, 56
curvas
ajustadas, 48
da
de la semana, 93
del ano, 94
del mes, 92
dgitos, 9, 88
data
editor, 21, 27, 80
date, 8789, 92
datos, 12
anomalos, 57
atpicos, 47
concatenados, 39, 41
faltante, 75

longitudinales, 50
originales, 8
day, 92, 93
decode, 72
delimitado
por coma, 14
desactivado, 13
describe, 16, 25, 27, 41, 82
descripcion
de las variables, 16
desviacion
estandar, 19, 55, 62
detail, 80
detalle
de la variable, 18
digitacion, 70
direccion, 15
dispersion, 48
distribucion
uniforme, 31
DO-file, 12, 13, 21
documentar, 10, 12
los resultados, 13
dow, 93
doy, 94
drop, 34
ecuacion, 47
ecuaciones
de prediccion, 54
editar, 13
editor
de texto, 13, 25
egen, 34, 35
ejecucion
de un programa, 13
ejecutar
el archivo do, 21
un comando, 13
eliminar, 13
datos, 34
variables, 34
encode, 72
ereturn list, 79, 84, 85
124

INDICE ALFABETICO

error, 70
sistematico, 69
errores, 8, 21, 69
no sistematicos, 69, 73
sistematicos, 69, 70
escritura
de los programas, 10
estadstica
descriptiva, 71
estadsticas
descriptivas, 18, 20
estandarizar, 69
una variable, 79
estructura, 61
etiqueta, 69
etiquetado
de variables, 47
etiquetar
archivos, 23
valores, 23, 24
variables, 23
etiquetas
de las variables, 16
de los valores, 16
explorador
de Windows, 7
fechas, 87
foreach, 119, 122
forma
interactiva, 12
formato, 16, 19, 61
caracter, 88, 98
de fecha, 87, 90, 94, 97, 98
de serie temporal, 101
fecha, 88
numerico, 92, 93, 9597
por defecto, 61
formatos, 87
forvalues, 119, 121
frecuencia, 83
frecuencias, 54, 62
generate, 17, 31, 34, 72, 77, 79
grafico, 13, 43, 48, 52, 54

de barras, 54
de caja, 48, 49
de dispersion, 45, 46
de matriz, 50
de tallo y hoja, 43, 44
scatterplot, 45
tipo twoway, 46
graph
box, 48
matrix, 50
grupos
de programas, 9
guardando, 12
guardar, 12
electronicacmente, 10
la base de datos, 14
halfyear, 95
histograma, 54, 55
hoja, 43
icluir
lneas, 12
icono, 12, 13, 21
DO current file, 21
iconos, 12
if, 119, 120
imprimir, 12
incoherencias
en los datos, 89
ingresar, 13
input, 15
instruccion, 15, 19
program, 119
interactivamente, 12, 21
interactivo, 13
intercepto, 52, 53
intervalos, 54
investigador, 45
itera, 121, 122
juntar
bases de datos, 38
keep, 34
125

INDICE ALFABETICO

lnea
de comandos, 13, 25, 48
label, 72
define, 27
values, 27
limpiar
los datos, 69
limpieza
de datos, 57, 74
list, 16, 27, 35, 74
maximo, 19
mnimo, 19
macro, 119
global, 119
local, 119
macros, 119
media, 55, 62
medias, 50
memoria
RAM, 79
mensaje
de error, 28, 48, 91
mensajes
de error, 12
merge, 3840
metodologa, 7
mezclando
varias variables, 17
missing, 75
modelo
de regresion, 47
modificacion, 13
modificar, 13
modify, 27
modo
interactivo, 21
month, 97
muestra
los datos, 16
mvencode, 76
numero
de decimales, 37, 61
de observaciones, 19, 41, 61

numeros
aleatorios, 31
consecutivos, 7
romanos, 28
nombre
del grafico, 47
notacion
cientfica, 61
objetivos, 7
observar
los datos, 21
operaciones
matematicas, 17
por filas, 34
orden
de los factores, 89
ordena
variables, 17
outliers, 43, 45
pantalla
de los datos, 13
results, 13
pegar
la base de datos, 14
pendiente, 52, 53
percentil, 81
precision, 61
problemas, 12
procedimiento, 13, 58
procedimientos
de Stata, 9
proceso
de limpieza, 60
programa, 911
detallado, 21
por pasos, 21
programacion, 8
programas, 7
con extension do, 10
promedio, 19
proyectos, 7
punto
decimal, 14
126

INDICE ALFABETICO

puntos
atpicos, 46
quarter, 96
rotulo, 29
rotulos, 23, 26
random, 31
rangos, 54
recoleccion
de datos, 7
recuperar
el valor, 84
reemplaza
valores, 17
variables, 17
registro, 12
regresion
lineal simple, 85
regress, 79, 85
replace, 17, 76, 77
replicabilidad, 8, 12
reproducir, 8
los resultados, 81
respaldo, 7
resultados, 12, 13, 20
numericos, 61
resumir
la informacion, 60
return list, 7984
rotulacion, 9
rotular, 24
archivos, 23
valores, 23
variables, 23, 25
rsum, 36
smbolo, 45
scatter, 45
scatterplot, 46, 49, 50
semilla, 31
serie
temporal, 98, 101
sistema
computacional, 69

de etiquetado, 9
sort, 17, 39
Stata
command, 21
statsby, 52
stem, 43, 44
string, 88
subconjunto
de datos, 104
summarize, 18, 71, 72, 79
t-test, 84
tab2, 62
tabla
de doble entrada, 60
de frecuencias, 26
tablas, 60, 61
bivariadas, 62
table, 82, 83
tabulate, 61
tallo, 43
teora
de errores, 70
tipo
de variable, 16
tipos
de formato, 61
trabajar
la informacion, 21
transformacion
de observaciones, 21
de variables, 21
traspasar
una base de datos, 70
twoway, 47
valor
faltante, 75, 76
numerico, 87, 88, 99
perdido, 75, 89
valores, 24
atpicos, 45, 48
de las variables, 13
numericos, 26, 73
perdidos, 12, 35, 69, 70
127

INDICE ALFABETICO

variable, 18
merge, 38, 40
categorica, 61
discreta, 61
global, 119
indicadora, 38, 51
local, 119
numerica, 29
variables, 12, 13, 16, 19, 24
alfa-numericas, 25, 72
categoricas, 18, 24, 25, 87
continuas, 55
de interes, 13
discretas, 55
numericas, 18, 25, 27, 61
ventana
results, 12, 17, 81
variables, 13
week, 98
year, 98

128


Indice
de cuadros
2.1. Base de datos para el ejercicio 10.4 del captulo 2 . . . . . . . . . . . . . . . . . . 20
4.1.
4.2.
4.3.
4.4.
4.5.

Alumnos Matriculados UV 2005


Codigos de carrera . . . . . . .
Codigos de Va de Ingreso . . .
Codigos de region . . . . . . . .
Parte de las notas del curso . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

23
23
24
24
35

7.1. Base de datos 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70


7.2. Preferencia de marca de toalla higienica . . . . . . . . . . . . . . . . . . . . . . . 74
8.1. Base de datos para el ejercicio 2 del captulo 8 . . . . . . . . . . . . . . . . . . . . 86
9.1. Regla de valores numericos asociados a las fechas . . . . . . . . . . . . . . . . . . 88
9.2. Caracteres permitidos para formatos de fecha . . . . . . . . . . . . . . . . . . . . 117
9.3. Significado de los caracteres para los formatos de series temporales . . . . . . . . 118

129


Indice
de figuras
2.1.
2.2.
2.3.
2.4.

Ventana principal de Stata . . . . . . . . . . . . . . . . .


Barra de herramientas . . . . . . . . . . . . . . . . . . . .
Base de datos en Excel . . . . . . . . . . . . . . . . . . .
Extension con que se guardara la base de datos desde Excel

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

11
12
14
15

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

26
28
28
29
29
30
32
33
33
41

5.1. Scatterplot meses y p nac kg . . . . . . . . . . . . . . .


5.2. Scatterplot meses y p nac kg utilizando mlabel . . . . .
5.3. Complementos para un scatterplot . . . . . . . . . . .
5.4. Ajuste de curvas . . . . . . . . . . . . . . . . . . . . . . .
5.5. Comparacion por sexo . . . . . . . . . . . . . . . . . . .
5.6. Grafico de caja de meses y p nac kg . . . . . . . . . . .
5.7. Graficos de Matriz . . . . . . . . . . . . . . . . . . . . .
5.8. Comportamiento de las mediciones para los 17 individuos
5.9. Grafico intercepto vs pendiente . . . . . . . . . . . . . . .
5.10. Ecuaciones de rectas estimadas . . . . . . . . . . . . . . .
5.11. Histograma variable peso al nacer . . . . . . . . . . .
5.12. Histograma y normalidad. . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

46
46
47
48
49
49
50
52
53
54
55
56

4.1. Distincion del tipo de variable . . . . . . .


4.2. Data Editor de Stata . . . . . . . . . . .
4.3. Cambio de la variable reg proce . . . . .
4.4. Mensaje de error entregado por Stata . . . .
4.5. Variable numerica lug ori . . . . . . . . .
4.6. Rotulo para la variable lug ori . . . . . .
4.7. Datos de sysuse bpwide.dta . . . . . . . . .
4.8. Variables bp dif y bp alza . . . . . . . .
4.9. Variable random . . . . . . . . . . . . . .
4.10. Datos concatenados por el comando append

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

7.1. Muestra de valores perdidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75


7.2. Reemplazando un valor faltante por -1 . . . . . . . . . . . . . . . . . . . . . . . 76
7.3. Reemplazo de los valores perdidos . . . . . . . . . . . . . . . . . . . . . . . . . . 77

131

Bibliografa

133

Das könnte Ihnen auch gefallen