*************** 1 CLASE STATA: MANEJO Y CONSTRUCCIÓN DE BASE DE BASES DE DATOS ************
*Prof. Catalina Canals Cifuentes

*PROGRAMA

/*En la pantalla de stata, se ven 3 áreas. (1) El área de comandos, donde se puede escribir
una instruccion en un lenguaje que stata reconoce. (2) Un listado de las variables y sus
etiquetas.(3)  Una vista de los resultados.

Además se pueden abrir: (1) el editor de comandos. (Signo donde sale un lápiz escribiendo en una 
 libreta). Para escribir descripciones de los comandos hay que anteponer asterizco a la frase. Si se quiere
 escribir un parrafo hay que poner / seguido de asterizco al comienzo y asterizco seguido de / al final 
 Al archivo de comandos se le llama dofile*/
 
*(2) La vista para editar datos, haciendo clic en el lapiz sobre la planilla cuadriculada, esta te permite
* editar e introducir datos. Puede abrirse escribiendo:
edit

*Notemos que en el dofile, si se selecciona un comando y se pone CONTROL + D, stata ejecuta el 
*comando.

*Si en la planilla de datos, en la modalidad de edición, cambian manualmente un dato, 
*en la "vista de resultados" les saldra el comando que hace su acción.

*(3) haciendo clic en la planilla cuadriculada con la lupa se pueden ver los datos. También puede
* abrirse escribiendo
brow

																		***I PARTE: COMANDOS GENERALES

/*Stata distingue mayuscula y minuscula, y los comandos son con minuscula, y tienen la forma: 
comando [variables] [if expression] [in expression], [opciones].
Lo que va entre corchetes es opcional. If permite poner condiciones, e in permite delimitar un rango de casos.*/

*INSTALAR Y DESINSTALAR COMANDOS
ssc install use13
ssc uninstall use13

*DEFINIENDO UN DIRECTORIO
gl dir "C:\Users\Andrea\Documents\Cursos\Electivo Estadistica y Sofware\2015"

*ABRIR BASES DE DATOS
use "$dir\base1_clase1.dta", clear

/*NOTA: Si uno va a la pantalla inicial, y pone Statistics y elige manualmente una opcion, saldra 
el codigo en la pantalla de resultados.*/

*HELP: comando para aprender a usar comandos
help brow
brow
brow, nolabel
*Vista de Datos: Cuando salen en rojo es porque la variable es cadena (letras), cuando salen en azul es porque
*son las etiquetas de una variable con numeros, y cuando salen en negro son numeros.
brow mechon in 1/3, nolabel 
brow mechon if edad==22 
help save
*En la ventana de ayuda pueden poner CONTROL+F y buscar palabras en particular

*GUARDAR
save"$dir\base1_clase1.dta"
save "$dir\base1_clase1.dta", replace

*EXPORTAR E IMPORTAR DATOS
export excel using "$dir\prueba.xls", firstrow(variables) nolabel
export delimited "$dir\prueba.csv", delimiter(";") replace
outsheet using "$dir\prueba.csv", delimiter(";") replace
import excel "$dir\prueba.xls", sheet("Sheet1") firstrow clear
insheet using "$dir\prueba.csv", delimiter(";") clear
import delimited "$dir\prueba.csv", delimiter(";") clear

																	*** II PARTE: CREANDO UNA BASE DE DATOS


clear all

*CREAR CASOS
set obs 25
brow
gen ID=_n
brow

*CREAR VARIABLES
gen edad=20 in 1/3
replace edad=21 in 4/7
replace edad=20 in 5
replace edad=22 in 6/14
replace edad=20 in 15/20
replace edad=23 in 21
brow

gen curso=2 
replace curso=3 in 6/13
replace curso=2 in 13/15
replace curso=4 in 15/20
replace curso=. in 21/25
brow

gen pos_sala=1 
*el "." se considera mayor que todos los valores, por lo que hay que solicitar
*que el valor sea además distinto de "."
replace pos_sala=2 if ID>10&ID<19&ID!=.   
replace pos_sala=3 if ID==20
replace pos_sala=. if ID>20&ID!=. 

gen mechon=.
replace mechon=0 if curso!=. 
replace mechon=1 if curso==1

gen mayor_ed=0 if edad~=.
replace mayor_ed=1 if edad==21|edad==22|edad==23|edad==24
brow


*CARACTERIZAR VARIABLES
label variable ID "Identificador del estudiante"
label variable edad "Años cumplidos el 15 de mayo"
label variable curso "Curso en carrera de sociología"
label variable pos_sala "Posicion en la sala"
label variable mechon "¿Es el estudiante mechón?"
label variable mayor_ed "¿Es el estudiante mayor de edad internacional?"

label define dummy 1 "Si" 0 "No"
label values mechon dummy
brow
label values mayor_ed dummy
brow

/*Tipos de variable
Numericas: byte, long, float, double (de más a menos byte de almacenamiento)
Texto: string (str#, con #=[1,80]), el numero indca la cantidad de caracteres.

La presentacion de los datos numericos es %w.dg, con w entero que da el ancho, y d la cantidad de decimales.
La presentacion de datos string es %w.s, donde s indica string, y w la anchura*/
describe
format edad %3.1g
edit
format curso %1.0g
brow

brow pos*
decode pos_sala, generate(pos_sala_b)
brow pos_sala*
format pos_sala_b %10s
brow pos_sala_b
replace pos_sala_b="PERSONAS QUE ESTAN UBICADAS AL LADO DERECHO" if pos_sala_b=="derecha"
replace pos_sala_b="derecha" if pos_sala_b=="PERSONAS QUE ESTAN UBICADAS AL LADO DERECHO"


encode (pos_sala_b), generate(pos_sala_c)
brow pos_sala*
drop *_c

*SELELECCIONAR VARIABLES Y ORDENAR DATOS Y VARIABLES
keep ID edad curso mechon mayor_ed pos_sala_b
rename pos_sala_b pos_sala
order ID edad mayor_ed mechon curso pos_sala 
sort edad
brow
save "$dir\base1_clase1.dta", replace


														*** III PARTE: EDITANDO Y MEZCLANDO BASES DE DATOS
														
use "$dir\CASEN 2013", clear

*SELECCION DE CASOS
brow region
tab region if region==13
drop if region!=13

*TRANSFORMACION DE VARIABLES
*Mujer (0,1)
tab sexo
tab sexo, nolabel
gen mujer=0 if sexo!=.
replace mujer=1 if sexo==2
label define dummy 1 "Si" 0 "No"
label variable mujer "¿Es mujer?"
label values mujer dummy 
tab mujer

*Dummy por nivel de hacinamiento
tab hacinamiento
brow hacinamiento
tab hacinamiento, nolabel
replace hacinamiento=. if hacinamiento==9
forvalues n=1(1)4 {
gen h_`n'=0 if hacinamiento!=.
replace h_`n'=1 if hacinamiento==`n'
}
rename h_1 sin_hacina
rename h_2 hacina_MB
rename h_3 hacina_MA
rename h_4 hacina_A

*% de ESUP por comuna
rename e6a nivel_educacional
tab nivel_educacional
tab nivel_educacional, nolabel
gen esup=0 if nivel_educacional!=.
replace esup=1 if nivel_educacional>=11&nivel_educacional!=.&nivel_educacional!=99
tab esup

egen esup_RM=mean(esup)
sum esup_RM esup
bysort comuna: egen esup_com=mean(esup)

*Ingresos promedio por comuna y desviación del promedio
rename ypchtot ingresos_pc
bysort comuna: egen ingresos_com=mean(ingresos_pc)
gen desv_ingresos_com=ingresos_com-ingresos_pc
replace desv_ingresos_com=abs(desv_ingresos_com)

*Tramo de % de trabajadores con contrato indefinido y % de personas con AFP
tab o16
tab o16, nolabel
tab o30
tab o30, nolabel
rename o16 contrato
rename o30 cotiza
foreach var in contrato cotiza {
replace `var'=. if `var'==9
}
tab contrato, gen(con)
rename con1 contrato_indef
bysort comuna: egen p_cindef=mean(contrato_indef)
replace p_cindef=round(100*p_cindef)
sum p_cindef
gen p_cindef_categ=1 if p_cindef!=.&p_cindef<34
replace p_cindef_categ=2 if p_cindef!=.&p_cindef>=34&p_cindef<67
replace p_cindef_categ=3 if p_cindef!=.&p_cindef>67


tab cotiza
tab cotiza, nolabel
gen cotizacion=0 if cotiza!=.
replace cotizacion=1 if cotiza!=7&cotiza!=.

*HACER UNA BASE DE DATOS MÁS AGREGADA (DE COMUNA)
collapse mujer sin_hacina hacina* desv_ingresos_com cotizacion (first) esup_com ingresos_com p_cindef_categ, by(comuna)
brow
drop hacinamiento
label variable mujer "porcentaje de mujeres"
label variable sin_hacina "porcentaje de personas que no viven hacinadas"
label variable hacina_MB "porcentaje de personas que viven en hacinamiento medio bajo"
label variable hacina_MA "porcentaje de personas que viven en hacinamiento medio alto"
label variable hacina_A "porcentaje de personas que viven en hacinamiento alto"
label variable desv_ingresos_com "promedio de desviacion del ingreso medio"
label variable cotizacion "porcentaje de trabajadores que cotizan"
label variable esup_com "porcentaje de personas en ed. superior"
label variable ingresos_com "promedio de ingresos"
label variable p_cindef "% de trabajadores con contrato indefinido"
label define cindef 1 "Baja [0-33]" 2 "Media [34-66]" 3 "Alta [67-100]"
label values p_cindef cindef
save "$dir\comunas.dta"

/*AGREGAR CASOS
Copiar todo el dofile que acabamos de usar mas abajo, y en la parte
de region poner region==5, y luego al final poner
save "$dir\comunas_V.dta"*/

append using "$dir\comunas.dta"
save "$dir\comunasRM-V.dta"

*AGREGAR VARIABLES
use "$dir\sinim.dta", clear
brow
*identificar y eliminar duplicados
duplicates list
drop in 53
duplicates tag CODIGO, gen(aux)
tab aux
brow if aux==1
drop in 53
save "$dir\sinimb.dta", replace

use "$dir\comunas.dta", clear
rename comuna CODIGO
merge 1:1 CODIGO using "$dir\sinimb.dta"
drop _merge
brow

*MODIFICAR VARIABLES
destring  NmerodePlazasenlaComunaa, replace
destring  NmerodePlazasenlaComunaa, force replace
brow NmerodePlazasenlaComunaa

destring NdeCentrosdeMadresN, force replace

encode Exis, generate(plan_regulador)
tab plan_regulador
tab plan_regulador, nolabel

tostring COM, replace
brow COM

gen REG=substr(COM,1,2)
brow REG
replace REG="Metropolitana" if REG=="13"

tab NdeClubesDeportivosN if regexm(NdeClubesDeportivosN, "[^0-9]")
ssc install strip
strip NdeClubesDeportivosN, of("*,_") generate(ClubDep)
brow ClubDep NdeClubesDeportivosN
destring ClubDep, replace

save "$dir\comunas.dta", replace


													*IV.-ESTADISTICA DESCRIPTIVA UNI Y BIVARIADA

*UNIVARIADO													
sum  
sum mujer
sum mujer if esup>0.5
sum mujer, detail

histogram mujer
histogram NdeJuntasdeVecinosN, normal

qnorm NdeJuntasdeVecinosN

graph box esup

graph pie, over(p_cindef_categ) title("Proporción de trabajadores con contrato indefinido")

graph bar, over (p_cindef_categ) title("Proporción de trabajadores con contrato indefinido")

scatter cotiza esup, title("Porcentaje de trabajadores que cotizan" "según portcenjate de trabajadores en ed. Superior")

graph box esup, over(p_cindef_categ) title("Porcentaje de trabajadores en ed. Superior" "Según proporción de trabajadores con contrato indefinido")

graph bar ClubDep, over(p_cindef_categ) title("Numero de clubes deportivos" "Según proporción de trabajadores con contrato indefinido")

/*Correlaciones 

Las correlaciones sirven para evaluar la relación entre 2 variables cuantitativas. A continuación 
aprenderemos a realizar correlaciones de Pearson y Spearman, con y sin variable de control. 
La variable de control se usa cuando queremos verificar que una correlación entre dos variables no se vea afectada por una tercera. 
Interpretación del coeficiente
•	Signo: Indica el sentido. Si es positivo al aumentar una aumenta la otra. Si es negativo al aumentar una 
disminuye la otra.
•	Magnitud: 0,7-1 Alta; 0,4-0,7 media; 0,2-0,4 baja; menor a 0,2 muy baja.
•	Significancia: La correlación incluye un test de hipótesis que pone a prueba la hipótesis nula "Correlación =0", 
más adelante verán test de hipótesis, pero por ahora consideren que si la significancia es menor a 0,05 podemos concluir con 95% de confianza que la correlación es distinta de 0.

Elección del coeficiente
•	Variables normales: Pearson
•	Variables no normales: Spearman
*/


corr esup mujer
pwcorr esup mujer, sig
corr NmerodePlazasenlaComunaa NdeCentrosdeMadresN NdeCentrosuOrganizacionesd NdeCentrosdePadresyApoder
spearman ClubDep esup

*Con variables control
by p_cindef_categ, sort : pwcorr esup mujer, sig
by p_cindef_categ, sort : spearman esup mujer

*Tablas de contingencia con chi cuadrado, F de Fisher, V de cramer y % columna
histogram ClubDep
gen ClubDep_c=0 if ClubDep<=50
replace ClubDep_c=1 if ClubDep>50&ClubDep<100
replace ClubDep_c=2 if ClubDep!=.&ClubDep>=100
tab ClubDep_c

*Verificar frecuencias esperadas, si mas del 25% de las casillas tiene FE<0,5 debe usarse
*F de Fisher y No chi-cuadrado
tabulate p_cindef_categ ClubDep_c, expected

tabulate p_cindef_categ ClubDep_c, chi2 exact col V

*Tablas de contingencia con chi cuadrado, F de Fisher, V de cramer y % columna y variable control
gen cotiza2=0 if cotizacion<=0.6
replace cotiza2=1 if cotizacion>=0.6&cotizacion!=.
tab cotiza2
label define cotiza 0 "60% o menos cotiza" 1 "más de 60% cotiza"
label values cotiza2 cotiza
by cotiza2, sort : tabulate p_cindef_categ ClubDep_c, chi2 exact col V
set more off
by cotiza2, sort : tabulate p_cindef_categ ClubDep_c, chi2 exact col V

