Cargar librerías

# para leer spss
library(haven)

# para manipular datos
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   3.5.1     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidyr)

# para visualización
library(ggplot2)
library(stargazer)
## 
## Please cite as: 
## 
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
# para archivos de excel
library(writexl)
library(haven)
library(purrr)

# Directorio donde están los archivos
ruta <- "EHPM SPSS 2014/"

# Obtener lista de archivos .sav en la carpeta
archivos_sav <- list.files(path = ruta, pattern = "\\.sav$", full.names = TRUE)

# Importar todos los archivos en una lista
lista_datos <- map(archivos_sav, read_sav)

# Asignar nombres a la lista basados en los nombres de archivo (sin extensión)
nombres_archivos <- tools::file_path_sans_ext(basename(archivos_sav))
names(lista_datos) <- nombres_archivos
# Obtener etiquetas de variables para cada archivo
etiquetas_variables <- map(lista_datos, function(df) {
  map(df, attr, "label")
})

# Mostrar etiquetas del primer archivo como ejemplo
etiquetas_variables[[1]]
## $EDICION
## [1] "Año de levantamiento"
## 
## $LOTE
## [1] "Lote"
## 
## $TIPO
## [1] "Tipo"
## 
## $FOLIO
## [1] "Folio"
## 
## $VIV
## [1] "Vivienda"
## 
## $r03
## [1] "Hogares que realizaron viajes con fines de ocio o negocio durante los últimos 3 meses"
## 
## $r7
## [1] "Si al adquirir un bien o servicio no cumplen con lo estipulado en el contrato, ¿interpondría una denuncia en la defensoría del consumidor?"
## 
## $r8
## [1] "Razón por la que no interpondría la denuncia"
## 
## $r9
## [1] "Ante un alza de precios en la canasta básica, ¿interpondría la denuncia ante la defensoría del consumidor?"
## 
## $r10
## [1] "Razón por la que no interpondría la denuncia"
## 
## $R06
## [1] "Niño o niña menor de 18 años que su padre o madre no vive en el hogar"
## 
## $R0401
## [1] "Viajes con pernoctación"
## 
## $R0402
## [1] "Viajes de un día"
## 
## $R0501
## [1] "Gasto en viajes con pernoctación"
## 
## $R0502
## [1] "Gasto en viajes de un día"
## 
## $R01A
## [1] "Hogar con algún miembro en el extranjero"
## 
## $R01B
## [1] "Total miembros en el extranjero"
## 
## $R01C
## [1] "Hombres en el extranjero"
## 
## $R01D
## [1] "Mujeres en el extranjero"
## 
## $R02A
## [1] "Hogar con pupilos"
## 
## $R02B
## [1] "Total de pupilos"
## 
## $R02C
## [1] "Hombres pupilos"
## 
## $R02D
## [1] "Mujeres pupilas"
## 
## $FAC00
## [1] "Factor de expansión"
# Extraer las etiquetas del primer archivo como un vector
etiquetas_vector <- unlist(etiquetas_variables[[1]])

# Ver el vector de etiquetas
print(etiquetas_vector)
##                                                                                                                                      EDICION 
##                                                                                                                       "Año de levantamiento" 
##                                                                                                                                         LOTE 
##                                                                                                                                       "Lote" 
##                                                                                                                                         TIPO 
##                                                                                                                                       "Tipo" 
##                                                                                                                                        FOLIO 
##                                                                                                                                      "Folio" 
##                                                                                                                                          VIV 
##                                                                                                                                   "Vivienda" 
##                                                                                                                                          r03 
##                                                      "Hogares que realizaron viajes con fines de ocio o negocio durante los últimos 3 meses" 
##                                                                                                                                           r7 
## "Si al adquirir un bien o servicio no cumplen con lo estipulado en el contrato, ¿interpondría una denuncia en la defensoría del consumidor?" 
##                                                                                                                                           r8 
##                                                                                               "Razón por la que no interpondría la denuncia" 
##                                                                                                                                           r9 
##                                 "Ante un alza de precios en la canasta básica, ¿interpondría la denuncia ante la defensoría del consumidor?" 
##                                                                                                                                          r10 
##                                                                                               "Razón por la que no interpondría la denuncia" 
##                                                                                                                                          R06 
##                                                                      "Niño o niña menor de 18 años que su padre o madre no vive en el hogar" 
##                                                                                                                                        R0401 
##                                                                                                                    "Viajes con pernoctación" 
##                                                                                                                                        R0402 
##                                                                                                                           "Viajes de un día" 
##                                                                                                                                        R0501 
##                                                                                                           "Gasto en viajes con pernoctación" 
##                                                                                                                                        R0502 
##                                                                                                                  "Gasto en viajes de un día" 
##                                                                                                                                         R01A 
##                                                                                                   "Hogar con algún miembro en el extranjero" 
##                                                                                                                                         R01B 
##                                                                                                            "Total miembros en el extranjero" 
##                                                                                                                                         R01C 
##                                                                                                                   "Hombres en el extranjero" 
##                                                                                                                                         R01D 
##                                                                                                                   "Mujeres en el extranjero" 
##                                                                                                                                         R02A 
##                                                                                                                          "Hogar con pupilos" 
##                                                                                                                                         R02B 
##                                                                                                                           "Total de pupilos" 
##                                                                                                                                         R02C 
##                                                                                                                            "Hombres pupilos" 
##                                                                                                                                         R02D 
##                                                                                                                            "Mujeres pupilas" 
##                                                                                                                                        FAC00 
##                                                                                                                        "Factor de expansión"
# Seleccionar el primer archivo de la lista
data_ejemplo <- lista_datos[[1]]

# Obtener las etiquetas de las columnas
column_labels <- sapply(data_ejemplo, function(col) attr(col, "label"))

# Convertir a un vector de etiquetas
labels_vector <- sapply(column_labels, function(x) {
  if (is.null(x)) {
    return(NA)  # Si no hay etiqueta, asigna NA
  } else {
    return(x)   # Devuelve la etiqueta
  }
})

# Convertir a tabla con nombres de columnas, etiquetas y conteo de datos no nulos
summary_table <- data_ejemplo %>%
  summarise(across(everything(), ~ sum(!is.na(.)))) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
  mutate(Description = labels_vector[Variable]) %>%
  filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
  select(Variable, Description, Non_Null_Count)

# Mostrar tabla
print(summary_table)
## # A tibble: 2 × 3
##   Variable Description                      Non_Null_Count
##   <chr>    <chr>                                     <int>
## 1 R0501    Gasto en viajes con pernoctación            283
## 2 R0502    Gasto en viajes de un día                   758
# Cargar librerías necesarias
library(haven)
library(dplyr)
library(tidyr)
library(writexl)

# Definir la ruta donde están los archivos
ruta <- "EHPM SPSS 2014/"

# Definir los nombres de los archivos en la carpeta (sin necesidad de list.files)
archivos_sav <- c(
  "SECCION 0 HOGAR.sav", "SECCION 0 PERSONA.sav", "SECCION 1 PERSONA.sav",
  "SECCION 2 A PERSONA.sav", "SECCION 2 PERSONA.sav", "SECCION 3 HOGAR.sav",
  "SECCION 4 PERSONA.sav", "SECCION 5 PERSONA.sav", "SECCION 6 PERSONA.sav",
  "SECCION 7 HOGAR.sav", "SECCION 8A.sav", "SECCION 8B.sav"
)

# Inicializar una lista para almacenar los resultados
resultados <- list()

# Loop para procesar cada archivo
for (archivo in archivos_sav) {
  # Construir la ruta completa del archivo
  ruta_completa <- file.path(ruta, archivo)
  
  # Leer el archivo SPSS
  data <- read_sav(ruta_completa)
  
  # Obtener las etiquetas de las columnas
  column_labels <- sapply(data, function(col) attr(col, "label"))
  
  # Convertir a vector de etiquetas
  labels_vector <- sapply(column_labels, function(x) ifelse(is.null(x), NA, x))
  
  # Crear tabla resumen con conteo de valores no nulos
  summary_table <- data %>%
    summarise(across(everything(), ~ sum(!is.na(.)))) %>%
    pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
    mutate(Description = labels_vector[Variable]) %>%
    filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
    select(Variable, Description, Non_Null_Count)
  
  # Agregar la tabla a la lista de resultados con el nombre del archivo
  resultados[[archivo]] <- summary_table
}

# Unir todas las tablas en un solo data frame
resultados_unidos <- bind_rows(resultados, .id = "Archivo")

# Mostrar un resumen del resultado final
print(resultados_unidos)
## # A tibble: 106 × 4
##    Archivo               Variable Description                     Non_Null_Count
##    <chr>                 <chr>    <chr>                                    <int>
##  1 SECCION 0 HOGAR.sav   R0501    Gasto en viajes con pernoctaci…            283
##  2 SECCION 0 HOGAR.sav   R0502    Gasto en viajes de un día                  758
##  3 SECCION 2 PERSONA.sav R2231    Gasto anual en matrícula                 22126
##  4 SECCION 2 PERSONA.sav R2234    Otro gasto en matrícula                      0
##  5 SECCION 2 PERSONA.sav R2241    Gasto mensual en cuota escolar           22126
##  6 SECCION 2 PERSONA.sav R2244    Otro gasto en cuota escolar                  2
##  7 SECCION 2 PERSONA.sav R223A1   Gasto anual en útiles                    22126
##  8 SECCION 2 PERSONA.sav R223A4   Otro gasto en útiles                        19
##  9 SECCION 2 PERSONA.sav R223B1   Gasto anual en uniformes                 22126
## 10 SECCION 2 PERSONA.sav R223B4   Otro gasto en uniformes                      2
## # ℹ 96 more rows
# Guardar el resultado en un archivo Excel
write_xlsx(resultados_unidos, "Resumen_Gastos.xlsx")
# Cargar librerías necesarias
library(haven)
library(dplyr)
library(tidyr)
library(writexl)

# Definir la ruta donde están los archivos
ruta <- "EHPM SPSS 2014/"

# Definir los nombres de los archivos en la carpeta (sin necesidad de list.files)
archivos_sav <- c(
  "SECCION 0 HOGAR.sav", "SECCION 0 PERSONA.sav", "SECCION 1 PERSONA.sav",
  "SECCION 2 A PERSONA.sav", "SECCION 2 PERSONA.sav", "SECCION 3 HOGAR.sav",
  "SECCION 4 PERSONA.sav", "SECCION 5 PERSONA.sav", "SECCION 6 PERSONA.sav",
  "SECCION 7 HOGAR.sav", "SECCION 8A.sav", "SECCION 8B.sav"
)

# Inicializar una lista para almacenar los resultados
resultados <- list()

# Loop para procesar cada archivo
for (archivo in archivos_sav) {
  # Construir la ruta completa del archivo
  ruta_completa <- file.path(ruta, archivo)
  
  # Leer el archivo SPSS
  data <- read_sav(ruta_completa)
  
  # Filtrar solo columnas numéricas excluyendo variables binarias (0 y 1)
  data <- data %>% select(where(is.numeric)) %>%
          select(where(~ length(unique(.)) > 2))
  
  # Obtener las etiquetas de las columnas
  column_labels <- sapply(data, function(col) attr(col, "label"))
  
  # Convertir a vector de etiquetas asegurando que sean caracteres
  labels_vector <- sapply(column_labels, function(x) ifelse(is.null(x), "", as.character(x)))
  
  # Crear tabla resumen con conteo de valores no nulos
  summary_table <- data %>%
    summarise(across(everything(), ~ sum(!is.na(.)))) %>%
    pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
    mutate(Description = labels_vector[Variable]) %>%
    filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
    select(Variable, Description, Non_Null_Count)
  
  # Asegurar que la columna Description es de tipo character
  summary_table$Description <- as.character(summary_table$Description)
  
  # Agregar la tabla a la lista de resultados con el nombre del archivo
  resultados[[archivo]] <- summary_table
}

# Unir todas las tablas en un solo data frame
resultados_unidos <- bind_rows(resultados, .id = "Archivo")

# Mostrar un resumen del resultado final
print(resultados_unidos)
## # A tibble: 103 × 4
##    Archivo               Variable Description                     Non_Null_Count
##    <chr>                 <chr>    <chr>                                    <int>
##  1 SECCION 0 HOGAR.sav   R0501    Gasto en viajes con pernoctaci…            283
##  2 SECCION 0 HOGAR.sav   R0502    Gasto en viajes de un día                  758
##  3 SECCION 2 PERSONA.sav R2231    Gasto anual en matrícula                 22126
##  4 SECCION 2 PERSONA.sav R2241    Gasto mensual en cuota escolar           22126
##  5 SECCION 2 PERSONA.sav R2244    Otro gasto en cuota escolar                  2
##  6 SECCION 2 PERSONA.sav R223A1   Gasto anual en útiles                    22126
##  7 SECCION 2 PERSONA.sav R223A4   Otro gasto en útiles                        19
##  8 SECCION 2 PERSONA.sav R223B1   Gasto anual en uniformes                 22126
##  9 SECCION 2 PERSONA.sav R223B4   Otro gasto en uniformes                      2
## 10 SECCION 2 PERSONA.sav R223C1   Gasto anual en textos                    22126
## # ℹ 93 more rows
# Guardar el resultado en un archivo Excel
write_xlsx(resultados_unidos, "Resumen_Gastos.xlsx")

```