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)
sas_data | un data.frame importé depuis une table SAS pour proc format.
Ce data.frame doit contenir a minima les colonnes |
---|
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.
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.
from_pgm pour importer les formats contenus dans un programme SAS.
## 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