Convertit les données utilisées pour une proc format (option CNTLIN=) en une liste de vecteurs qui pourra servir à effectuer des conversions.

from_tab(sas_data)

Arguments

sas_data

un data.frame importé depuis une table SAS pour proc format. Ce data.frame doit contenir a minima les colonnes FMTNAME, START, LABEL et TYPE (majuscule ou minuscule).

Value

Une liste contenant autant d'éléments que de formats si les données avaient été générées par une proc format.

  • les noms de la liste correspondent aux noms des formats (FMTNAME) ;

  • les éléments de la liste sont des vecteurs contenant les relations entre valeurs initiales et valeurs converties ;

  • chaque élément a un éventuel attribut "other" ;

  • chaque élément est un objet de type fmtsas_c, ce qui permet d'utiliser l'opérateur de sélection avec prise en compte d'une valeur par défaut (other).

Voir les exemples pour l'utilisation de cette liste.

Details

La table en entrée est un data.frame, à importer dans R à partir d'une table SAS (par exemple avec le package haven).

Cette fonction ne gère pour l'instant que des formats caractère. De plus, s'il y a une colonne END dans la table en entrée, elle doit être égale à la colonne START.

La modalité SAS other (valeur par défaut), présente dans la table si une colonne HLO existe et vaut "O", est sauvegardée dans l'attribut "other" pour les éléments de la liste concernés.

See also

from_pgm pour importer les formats contenus dans un programme SAS.

Examples

## Donnees en entree (provenant d'une table SAS) :

format_data <-
  data.frame(
    FMTNAME = c( "fmt1_", "fmt1_", "fmt1_", "fmt1_",  "sexe",  "sexe"),
    TYPE    = c(     "C",     "C",     "C",     "C",     "C",     "C"),
    START   = c(     "A",     "B",     "C",      NA,     "1",     "2"),
    LABEL   = c(     "A",    "BC",    "BC", "ERROR", "Homme", "Femme"),
    HLO     = c(      NA,      NA,      NA,     "O",      NA,      NA)
  )

## Conversion des formats :

conv <- from_tab(format_data)
conv
#> $fmt1_
#> # a character `fmtsas` object
#>    A    B    C 
#>  "A" "BC" "BC" 
#> [other] "ERROR"
#> $sexe
#> # a character `fmtsas` object
#>       1       2 
#> "Homme" "Femme" 
#> 

## Utilisation :

# soit un jeu de donnees contenant des codes a convertir en libelles
donnees <-
  data.frame(
    VAR1_CODE = c("A", "B", "A", "C", "Z",  NA),
    SEXE_CODE = c("1", "2", "1", "2",  NA, "Z")
  )

# pour remplacer les codes par les libelles (pour VAR1)
donnees$VAR1_LIB  <- conv$fmt1_[donnees$VAR1_CODE]
donnees$VAR1_LIB2 <- conv$fmt1_[donnees$VAR1_CODE, keep_na = TRUE]
donnees$SEXE_LIB  <- conv$sexe[donnees$SEXE_CODE]

donnees
#>   VAR1_CODE SEXE_CODE VAR1_LIB VAR1_LIB2 SEXE_LIB
#> 1         A         1        A         A    Homme
#> 2         B         2       BC        BC    Femme
#> 3         A         1        A         A    Homme
#> 4         C         2       BC        BC    Femme
#> 5         Z      <NA>    ERROR     ERROR     <NA>
#> 6      <NA>         Z    ERROR      <NA>        Z