Pregunta

Tengo un montón de archivos de Stata .dta que me gustaría usar en I.

Mi problema es que los nombres de las variables no son útiles para mí, ya que son como "q0100", "q0565", "q0500" y "q0202". Sin embargo, ellos están etiquetados como "fuente de alimentación", "número de embarazadas", "cabeza de familia" y "punto de referencia".

Me gustaría ser capaz de agarrar las etiquetas ( "PSU", "punto de referencia", etc...) Y utilizarlos como mis nombres de variables / columna ya que serán más fácil para mí trabajar con él.

¿Hay una manera de hacer esto, ya sea preferentemente en I, o por medio de sí mismo Stata? Sé de read.dta en la biblioteca (extranjero), pero no sé si se puede convertir las etiquetas en los nombres de variables.

¿Fue útil?

Solución

R no tiene incorporado un modo de manejar las etiquetas de variable. Personalmente creo que esto es inconveniente de que debe ser fijo. Hmisc proporciona alguna facilitiy para hadling etiquetas de variable, pero las etiquetas sólo se reconocen por las funciones en ese paquete. read.dta crea una hoja.de.datos con un atributo "var.labels", que contiene la información de la etiqueta. A continuación, puede crear un diccionario de datos de eso.

> data(swiss)
> write.dta(swiss,swissfile <- tempfile())
> a <- read.dta(swissfile)
> 
> var.labels <- attr(a,"var.labels")
> 
> data.key <- data.frame(var.name=names(a),var.labels)
> data.key
          var.name       var.labels
1        Fertility        Fertility
2      Agriculture      Agriculture
3      Examination      Examination
4        Education        Education
5         Catholic         Catholic
6 Infant_Mortality Infant.Mortality

Por supuesto este archivo .dta no tiene etiquetas muy interesantes, pero el suyo debe ser más significativo.

Otros consejos

Yo recomendaría que utilice la nueva paquete de refugio ( GitHub )  para importar los datos.

Como Hadley Wickham menciones en la README.md archivo :

  

Siempre una trama de datos, los tiempos fecha se convierten en clases R y correspondiente vectores etiquetados se devuelven como nueva clase marcado . Se puede coaccionar fácilmente a factores o reemplazar los valores marcados con missings según el caso. Si también utiliza dplyr, se dará cuenta de que las grandes tramas de datos se imprimen en una forma conveniente.

(énfasis)

Si utiliza rstudio esto mostrará automáticamente las etiquetas con nombres variables en el panel del visor View("data.frame") (< a href = "http://blog.rstudio.org/2015/03/04/haven-0-1-0/" rel = "noreferrer nofollow"> fuente ).

  

Etiquetas de variable se adjuntan como un atributo para cada variable. Estos no se imprimen (ya que tienden a ser larga), pero si usted tiene una versión preliminar de rstudio, los verás en el panel del visor renovada.

Se puede instalar el paquete usando:

install.packages("haven")

e importar su fecha de Stata usando:

read_dta("path/to/file")

Para obtener más información, véase:

help("read_dta")

Aquí hay una función para evaluar cualquier expresión que desee con las etiquetas de variable Stata:

#' Function to prettify the output of another function using a `var.labels` attribute
#' This is particularly useful in combination with read.dta et al.
#' @param dat A data.frame with attr `var.labels` giving descriptions of variables
#' @param expr An expression to evaluate with pretty var.labels
#' @return The result of the expression, with variable names replaced with their labels
#' @examples
#' testDF <- data.frame( a=seq(10),b=runif(10),c=rnorm(10) )
#' attr(testDF,"var.labels") <- c("Identifier","Important Data","Lies, Damn Lies, Statistics")
#' prettify( testDF, quote(str(dat)) )
prettify <- function( dat, expr ) {
  labels <- attr(dat,"var.labels")
  for(i in seq(ncol(dat))) colnames(dat)[i] <- labels[i]
  attr(dat,"var.labels") <- NULL
  eval( expr )
}

A continuación, puede prettify(testDF, quote(table(...))) o como se quiera.

este hilo para obtener más información.

Puede convertir las etiquetas de las variables a nombres de variable de Stata antes de exportarlo a un archivo de texto o R.
Como se menciona Ian, etiquetas de variable por lo general no son buenos nombres de variables, pero si convierte espacios y otros caracteres de subrayado y si sus etiquetas de las variables no son demasiado largos, puede volver a etiquetar sus VARs con el varlabels con bastante facilidad.

A continuación se muestra un ejemplo usando el conjunto de datos incorporado Stata "cancer.dta" para reemplazar todos los nombres de variables con etiquetas var - importante, este código no va a tratar de cambiar el nombre de la variable sin etiquetas de variable. Tenga en cuenta que también cogí un conjunto de datos, donde hay un montón de personajes que no son útiles en el nombramiento de una variable (por ejemplo:. =, 1,',, (), etc) ... se puede añadir cualquier carácter que podrían estar al acecho en sus etiquetas de variable a la lista de la línea 5: "chars locales" ..."" y que hará que los cambios para usted:

****************! BEGIN EXAMPLE
//copy and paste this code into a Stata do-file and click "do"//
sysuse  cancer, clear
desc
**
local chars "" " "(" ")" "." "1" "=" `"'"' "___" "__" "
ds, not(varlab "")    // <-- This will only select those vars with varlabs //
foreach v in `r(varlist)' {
    local `v'l "`:var lab `v''"
    **variables names cannot have spaces or other symbols, so::
        foreach s in `chars' {
    local `v'l: subinstr local `v'l "`s'" "_", all
              }
    rename `v' ``v'l'
    **make the variable names all lower case**
    cap rename ``v'l' `=lower("``v'l'")'
      }
desc
****************! END EXAMPLE

También podría considerar la posibilidad de tomar un vistazo a Stat Transferencia y sus capacidades de conversión de archivos de datos a Stata R.

Cuando se utiliza el paquete de refugio:

Si el conjunto de datos que va a importar es pesada, la visualización de los datos en rstudio podría no ser óptima.

En su lugar, se puede obtener una hoja.de.datos con nombres de columna, etiquetas de columna y un indicador de si la columna está etiquetada:

d <- read_dta("your_stata_data.dta") 

vars <- data.frame(
                   "name" = names(d),
                   "label" = sapply(d, function(x) attr(x, "label"))  %>% as.character(),
                   "labelled" = sapply(d, is.labelled) )

Nota:. Necesidad de utilizar as.characted con el fin de NULL Evitar en las etiquetas que se cayó y por lo tanto terminar con diferentes longitudes vector

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top