Importer des fichiers SAS avec formats en R

Importation
Auteur·rice·s
Affiliation

A.Muller

Ined

E.Baril

Ined

Date de publication

13 août 2024

Résumé

Par défaut les catalogues de formats SAS ne s’importe pas dans R. Vous trouverez dans cette fiche comment importer des tables SAS associées à un catalogue de formats.

Charger les librairies

Importer un fichier SAS

Pour importer des fichiers SAS, il existe le package haven avec l’instruction read_sas. Si on a un catalogue de formats, il faut l’ajouter dans l’instruction catalog_file.

Import avec la library haven
erfi_ext<- read_sas("erfi_extrait.sas7bdat",catalog_file="formats.sas7bcat")
erfi_ext
IDENT poids12 MB_STOC EA_VERIFC CA_MARIE OA_ASPIR OA_BRICO OA_SATREP MA_SEXE MA_LNAIS MA_ANAIS MA_AGER OA_REPAS2
3 3037.634 4 2 1 1 1957 48 NA
7 2395.681 4 2 2 1 1971 34 NA
8 3063.513 4 2 2 1 1986 19 NA
9 3868.504 1 1 2 5 1 8 1 1 1969 36 5
11 3489.272 4 2 1 2 1974 31 NA
15 4094.624 2 1 2 3 2 10 1 1 1957 48 4
16 2053.740 2 2 1 1 1937 67 NA
17 2034.167 2 1 1 1 3 6 2 1 1955 50 1
20 4137.163 5 1 1 3 1 7 1 1 1968 36 3
21 4070.500 4 1 2 2 5 5 2 1 1977 28 2


Par défaut lorqu’on ouvre dans R le fichier erfi_ext, on ne voit pas les formats mais on a l’indication dans les labels.

Retrouver les formats cachés
str(erfi_ext$MB_STOC)


Prise en compte des formats SAS

Vous trouverez ci-dessous la fonction “import_sas_label” créé par Arno Muller. Les variables character avec formats deviennent des variables factor. Les valeurs sont en texte.

Import de import_sas_label
source("https://raw.githubusercontent.com/arnomuller/Fonction_R/main/SAStoR/import_sas_label/fonction_import_sas_label.R")
Exemple :
erfi_ext <- import_sas_label(data_file = "erfi_extrait.sas7bdat", 
                             catalog_file = "formats.sas7bcat", 
                             blanc_as_NA = TRUE)

Pour readapter ce code il faut changer “erfi_ext” par le nom de votre fichier importé, ainsi que l’emplacement ou le nom de votre fichier sas et votre catalogue de formats. L’option blanc_as_NA : TRUE ou FALSE, permet de transformer les cases vides (““) en NA.

IDENT poids12 MB_STOC EA_VERIFC CA_MARIE OA_ASPIR OA_BRICO OA_SATREP MA_SEXE MA_LNAIS MA_ANAIS MA_AGER OA_REPAS2
3 3037.634 Locataire ou sous-locataire non NA NA NA Homme France métropolitaine 1957 48 NA
7 2395.681 Locataire ou sous-locataire non NA NA NA Femme France métropolitaine 1971 34 NA
8 3063.513 Locataire ou sous-locataire non NA NA NA Femme France métropolitaine 1986 19 NA
9 3868.504 Accédant à la propriété oui non Toujours mon conjoint Toujours moi 8 Homme France métropolitaine 1969 36 Toujours mon conjoint
11 3489.272 Locataire ou sous-locataire non NA NA NA Homme Etranger ou DOM-TOM 1974 31 NA
15 4094.624 Propriétaire non accédant oui non Autant moi que mon conjoint Le plus souvent moi 10 Homme France métropolitaine 1957 48 Le plus souvent mon conjoint
16 2053.740 Propriétaire non accédant non NA NA NA Homme France métropolitaine 1937 67 NA
17 2034.167 Propriétaire non accédant oui oui Toujours moi Autant moi que mon conjoint 6 Femme France métropolitaine 1955 50 Toujours moi
20 4137.163 Logé gratuitement oui oui Autant moi que mon conjoint Toujours moi 7 Homme France métropolitaine 1968 36 Autant moi que mon conjoint
21 4070.500 Locataire ou sous-locataire oui non Le plus souvent moi Toujours mon conjoint 5 Femme France métropolitaine 1977 28 Le plus souvent moi


Limites pour les variables avec intervalles

SAS a la particularité d’afficher des variables numériques continues en classe d’âge sans recréer de nouvelles variables. Ce n’est pas encore possible en R à notre connaissance. Nous conservons donc les valeurs d’origine lors de l’import mais nous pouvons recréer de nouvelles colonnes prenant en compte les intervalles du formats sas avec la fonction “create_var_label”.

Par exemple on sait que la variable “MA_AGER” a été défini par un format (nommé AGE4C) en classe d’âge sous SAS, il suffit d’utiliser la fonction comme ci-dessous et une nouvelle colonne prenant le nom du format sas apparait

Import de create_var_label
source("https://raw.githubusercontent.com/arnomuller/Fonction_R/main/SAStoR/create_var_label/fonction_create_var_label.R")
Exemple :
erfi_ext2 <- create_var_label(erfi_ext, "MA_AGER")
erfi_ext2
IDENT poids12 MB_STOC EA_VERIFC CA_MARIE OA_ASPIR OA_BRICO OA_SATREP MA_SEXE MA_LNAIS MA_ANAIS MA_AGER OA_REPAS2 AGE4C
3 3037.634 Locataire ou sous-locataire non NA NA NA Homme France métropolitaine 1957 48 NA 46-55 ans
7 2395.681 Locataire ou sous-locataire non NA NA NA Femme France métropolitaine 1971 34 NA moins de 36 ans
8 3063.513 Locataire ou sous-locataire non NA NA NA Femme France métropolitaine 1986 19 NA moins de 36 ans
9 3868.504 Accédant à la propriété oui non Toujours mon conjoint Toujours moi 8 Homme France métropolitaine 1969 36 Toujours mon conjoint 36-45 ans
11 3489.272 Locataire ou sous-locataire non NA NA NA Homme Etranger ou DOM-TOM 1974 31 NA moins de 36 ans
15 4094.624 Propriétaire non accédant oui non Autant moi que mon conjoint Le plus souvent moi 10 Homme France métropolitaine 1957 48 Le plus souvent mon conjoint 46-55 ans
16 2053.740 Propriétaire non accédant non NA NA NA Homme France métropolitaine 1937 67 NA plus de 55 ans
17 2034.167 Propriétaire non accédant oui oui Toujours moi Autant moi que mon conjoint 6 Femme France métropolitaine 1955 50 Toujours moi 46-55 ans
20 4137.163 Logé gratuitement oui oui Autant moi que mon conjoint Toujours moi 7 Homme France métropolitaine 1968 36 Autant moi que mon conjoint 36-45 ans
21 4070.500 Locataire ou sous-locataire oui non Le plus souvent moi Toujours mon conjoint 5 Femme France métropolitaine 1977 28 Le plus souvent moi moins de 36 ans


Une nouvelle variable a été ajoutée à la fin des données

Variable discrétisée selon le format
table(erfi_ext2$AGE4C)
AGE4C Effectifs
moins de 36 ans 2900
36-45 ans 1977
46-55 ans 1904
plus de 55 ans 3298

Référence

https://github.com/arnomuller/Fonction_R/tree/main/SAStoR/import_sas_label