Este enunciado ha sido aprobado por expertos para asegurar la veracidad de nuestro tutorial.
Solución:
sas7bdat
funcionó bien para todos menos uno de los archivos que estaba mirando (específicamente, este); al informar el error al sas7bdat
desarrollador, Matthew Shotwell, también me indicó la dirección de Hadley’s haven
paquete en R que también tiene un read_sas
método.
Este método es superior por dos razones:
1) No tuvo ningún problema para leer el archivo vinculado anteriormente 2) Es mucho (Yo estoy hablando mucho) más rápido que read.sas7bdat
. Aquí hay un punto de referencia rápido (en este archivo, que es más pequeño que los demás) como evidencia:
microbenchmark(times=10L,
read.sas7bdat("psu97ai.sas7bdat"),
read_sas("psu97ai.sas7bdat"))
Unit: milliseconds
expr min lq mean median uq max neval cld
read.sas7bdat("psu97ai.sas7bdat") 66696.2955 67587.7061 71939.7025 68331.9600 77225.1979 82836.8152 10 b
read_sas("psu97ai.sas7bdat") 397.9955 402.2627 410.4015 408.5038 418.1059 425.2762 10 a
Así es–haven::read_sas
toma (en promedio) 99.5% menos tiempo que sas7bdat::read.sas7bdat
.
actualización menor
Anteriormente no pude determinar si los dos métodos producían los mismos datos (es decir, que ambos tenían los mismos niveles de fidelidad con respecto a la lectura de los datos), pero finalmente lo logré:
# Keep as data.tables
sas7bdat <- setDT(read.sas7bdat("psu97ai.sas7bdat"))
haven <- setDT(read_sas("psu97ai.sas7bdat"))
# read.sas7bdat prefers strings as factors,
# and as of now has no stringsAsFactors argument
# with which to prevent this
idj_factor <- sapply(haven, is.factor)
# Reset all factor columns as characters
sas7bdat[ , (idj_factor) := lapply(.SD, as.character), .SDcols = idj_factor]
# Check equality of the tables
all.equal(sas7bdat, haven, check.attributes = FALSE)
# [1] TRUE
Sin embargo, tenga en cuenta que read.sas7bdat
ha mantenido una lista masiva de attributes para el archivo, presumiblemente un remanente de SAS:
str(sas7bdat)
# ...
# - attr(*, "column.info")=List of 70
# ..$ :List of 12
# .. ..$ name : chr "NCESSCH"
# .. ..$ offset: int 200
# .. ..$ length: int 12
# .. ..$ type : chr "character"
# .. ..$ format: chr "$"
# .. ..$ fhdr : int 0
# .. ..$ foff : int 76
# .. ..$ flen : int 1
# .. ..$ label : chr "UNIQUE SCHOOL ID (NCES ASSIGNED)"
# .. ..$ lhdr : int 0
# .. ..$ loff : int 44
# .. ..$ llen : int 32
# ...
Entonces, si por casualidad usted necesitar estas attributes (Sé que algunas personas están particularmente interesadas en el label
s, por ejemplo), tal vez read.sas7bdat
es la opción para usted después de todo.
A partir del 18 de enero de 2018, la biblioteca Have R cargará conjuntos de datos sas y stata en el entorno R. En R, simplemente:
library(haven)
data <- read_sas("C:/temp/mysasdataset.sas7bdat")
View(data)
También puede cargar los datos manualmente dentro de R studio. En el panel de entorno, elija
Importar conjunto de datos > Desde SAS...
Seleccione la ubicación del archivo y haga clic en "Importar"
Problema
El problema parece que los archivos que está tratando de usar tienen un formato deficiente. Específicamente, las celdas en blanco no están codificadas (R
usos NA
) pero simplemente se dejan vacíos. Al intentar cargar el archivo delimitado por tabuladores, esto crea problemas para R, que cree que hay un número incorrecto de columnas.
Solución alternativa con archivos SAS
Encontré una solución al cargar el archivo SAS usando el sas7bdat
paquete y luego recodificar celdas en blanco (""
) como NA:
install.packages("sas7bdat")
require("sas7bdat")
download.file("http://nces.ed.gov/ccd/Data/zip/ag121a_supp_sas.zip",
destfile = "sas.zip")
unzip("sas.zip")
sas <- read.sas7bdat(file = "ag121a_supp.sas7bdat", debug = FALSE)
sas[sas == ""] <- NA
Sin embargo, hay dos problemas con este método a tener en cuenta:
- Es lento (ver comentarios)
sas7bdat
paquete se considera actualmente experimental en el momento de la escritura por su autor. Por lo tanto, es posible que no cargue todos los archivos sas, y revisaría minuciosamente los que carga en busca de inconsistencias antes de usarlos.
Solución no R
No es exactamente canónico, pero también puede descargar los archivos delimitados por tabulaciones, abrirlos en LibreOffice Calc (Microsoft Excel parece arruinar las cosas) y encontrar y reemplazar todo buscando ""
y reemplazando con NA
.
Te mostramos comentarios y calificaciones
Te invitamos a añadir valor a nuestra información contribuyendo tu veteranía en las interpretaciones.