-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.Rmd
165 lines (126 loc) · 5 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
<!-- badges: start -->
![GitHub top language](https://img.shields.io/github/languages/top/InseeFrLab/fmtsas)
[![R check status](https://github.com/InseeFrLab/fmtsas/workflows/R-CMD-check/badge.svg)](https://github.com/InseeFrLab/fmtsas/actions/workflows/check-release.yaml)
[![codecov](https://codecov.io/gh/InseeFrLab/fmtsas/branch/master/graph/badge.svg?token=25MHI8O62M)](https://codecov.io/gh/InseeFrLab/fmtsas)
[![CRAN status](https://www.r-pkg.org/badges/version/fmtsas)](https://cran.r-project.org/package=fmtsas)
[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental)
<!-- badges: end -->
```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
<!-- ![](https://gitlab.insee.fr/uploads/-/system/project/avatar/1134/visuel_fmt_sas.png?width=64) -->
# fmtsas
Le package R **fmtsas** permet d'importer dans R des données servant à
construire des formats SAS.
Pour cela, il construit une liste de vecteurs, à partir de tables SAS ou de
programmes SAS. Cette liste pourra ensuite être utilisée pour effectuer des
conversions ou agrégations.
_Le package ne gère (pour l'instant) que des formats caractères comportant un
nombre défini de modalités._
## Installation
```r
# install.packages("remotes")
remotes::install_github("InseeFrLab/fmtsas")
```
## Chargement
```{r}
library(fmtsas)
```
## Exemples d'import des données
### Depuis une table : `from_tab`
En entrée un data.frame qui proviendra typiquement d'une table SAS servant dans
une `proc format` avec l'option `CNTLIN=`.
```{r}
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)
)
conv_t <- from_tab(format_data)
conv_t
```
### Depuis un programme : `from_pgm`
En entrée un programme SAS contenant une ou plusieurs `proc format` avec
`value(s)`.
```{r}
test_pgm <-
'PROC FORMAT;
VALUE $ sexe "1"="Homme" "2"="Femme" ;
value vnum
0-99 = "petit" 100-high = "grand" ;
value $rega /* (geographie) */
"01", "02", "03", "04", "06" = "Outre-mer"
"11", "24", "27", "28", "32",
"44", "52", "53", "75", "76",
"84", "93", "94" = "Métropole"
other = "ERREUR" ;
RUN;'
conv_p <- from_pgm(test_pgm)
conv_p
```
## Utilisation après import
### Format de l'objet
Les fonctions `from_tab` et `from_pgm` retournent toutes deux une liste de
vecteurs :
- les noms de la liste correspondent aux noms des formats SAS ;
- 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 notamment
d'utiliser `[]`
avec prise en compte des valeurs par défaut (`other`). Cf. infra pour plus de
détails sur cet opérateur.
### Exemple d'utilisation
Par exemple, si l'on a un jeu de données avec des codes pour lesquels on
souhaite avoir une correspondance en clair et/ou une agrégation.
```{r}
donnees <-
data.frame(
ID = c("001", "002", "003", "004", "005"),
SEXE = c( "1", "2", "1", "2", "#"),
REG = c( "04", "11", "##", NA, "24")
)
```
On utilise les listes générées par les fonctions `from_*` et l’opérateur `[]`
pour objet “fmtsas” :
```{r}
donnees$SEXE_LIB <- conv_t$sexe[donnees$SEXE]
donnees$REG2 <- conv_p$rega[donnees$REG]
donnees
```
> Utiliser `[]` sur un élément d'une liste créée par `from_tab` ou `from_pgm`
fonctionne comme une sélection sur des vecteurs _normaux_, à la différence que
d'éventuels `NA` seront remplacés par :
>
> - la valeur contenue dans l'attribut "other", si cet attribut est présent ;
> - la valeur initiale, s'il n'y a pas d'attribut "other".
>
> Ces modifications ont pour but de reproduire le comportement d'un format SAS.
>
> Pour que cet opérateur dédié soit utilisé, il faut que **le package soit
chargé**. Dans le cas contraire, l'opérateur `[]` de base sera utilisé.
### Conversion de code SAS
Le package offre également la possibilité de rechercher dans un programme SAS
les instructions qui créent des variables à partir de formats (de la forme
`NEW = put(OLD, $var.);`), pour générer le code R correspondant :
```{r convert_put}
pgm_sas <-
"data t2 ; set t1 ;
SEXE_LIB = put(SEXE, $sexe.) ;
REG2 = put(REG, $rega.) ;
run ;"
convert_put(pgm_sas, fmt_list = "conv_p", style = "dplyr")
convert_put(pgm_sas, fmt_list = "conv_p", style = "base")
```
Il ne reste plus qu'à copier ces instructions dans un programme R (après
quelques éventuels ajustements).