📖 Module VI - Les procédures utilitaires
- Comprendre la logique de l'étape PROC et sa différence avec l'étape DATA
- Décrire une table avec CONTENTS, la trier et dédoublonner avec SORT
- Produire des listings soignés avec PRINT
- Importer et exporter des fichiers, et créer ses propres formats avec FORMAT
1. Généralités sur l'étape PROC
L'objectif des procédures est d'effectuer des actions spécifiques sur les données : agrégations, tri, statistiques, listings, graphiques. Là où les étapes DATA travaillent ligne par ligne, les procédures travaillent sur un ensemble de lignes.
proc NOM_PROCEDURE <options> ;
<parametres, variables, mots-cles> ;
run ;
Ce module présente cinq procédures essentielles : CONTENTS, SORT, PRINT, IMPORT/EXPORT et FORMAT.
2. PROC CONTENTS
La PROC CONTENTS produit la description de toutes les variables d'une table, mais aussi la date de création, la version de SAS ayant créé la table, la présence d'un tri préalable, le nombre d'observations et de variables. Sa syntaxe est minimale et la richesse de son information l'a rendue très populaire.
proc contents data = TABLE
<out = table_decrivant_les_variables>
<noprint> ;
run ;
L'option NOPRINT annule la production de toute sortie texte ; elle s'accompagne souvent de OUT= qui récupère les informations sur les variables dans une table SAS — pratique pour construire des traitements génériques.
3. PROC SORT
La procédure SORT trie une table selon une ou plusieurs variables, en ordre ascendant ou descendant, et permet également l'élimination de doublons.
proc sort data = TABLE
<out = TABLE_TRIEE>
<nodup | nodupkey | dupout = TABLE_DOUBLONS> ;
by <descending> liste_de_variables ;
run ;
| Élément | Effet |
|---|---|
| by | Variables de tri, séparées par un blanc. Ordre croissant par défaut ; faire précéder de DESCENDING pour l'inverse — seule la variable qui suit ce mot est concernée |
| out = | Nom de la table en sortie |
| nodup | Supprime les enregistrements en double sur toutes les variables de la table |
| nodupkey | Supprime les doublons sur les variables de tri uniquement |
| dupout = | Table dans laquelle les doublons seront stockés |
Deux remarques sur le tri : les données manquantes — le point pour le numérique, le blanc pour le caractère — se placent toujours au début en tri croissant ; et, sauf cas particulier lié au système d'exploitation, c'est le premier enregistrement distinct rencontré qui est conservé par NODUPKEY.
4. PROC PRINT
La procédure PRINT édite un listing des données d'une table. Les informations peuvent être sélectionnées et une mise en forme simple réalisée. Les listings peuvent être redirigés vers la fenêtre OUTPUT ou vers un fichier externe (htm, rtf, pdf) grâce à l'ODS.
proc print data = TABLE <options> ;
<instructions> ;
run ;
Les options principales :
| Option | Effet |
|---|---|
| LABEL | Affiche les libellés des variables au lieu de leurs noms |
| NOOBS | N'affiche pas les numéros d'observation |
| SPLIT = '*' | L'astérisque dans un libellé ne s'affiche pas et provoque un retour à la ligne |
| N | Affiche le nombre d'observations en fin de listing ; on peut y ajouter un intitulé |
| DOUBLE | Une ligne blanche entre chaque ligne imprimée |
| UNIFORM | Uniformise le nombre de variables sur les pages |
| ROUND | Arrondit à 2 décimales les variables sommées |
Les instructions principales :
| Instruction | Effet |
|---|---|
| var | Liste des variables à éditer, dans l'ordre cité. Sans elle, toutes les variables sont imprimées dans leur ordre de création |
| id | Variables présentées sur chaque page, remplaçant le numéro d'observation |
| sum | Variables pour lesquelles un total colonne sera calculé |
| by | Variables de rupture. La table doit être triée au préalable sur ces mêmes variables |
| sumby | Seule variable de rupture provoquant un sous-total |
| pageby | Variable de rupture provoquant un saut de page à chaque changement de valeur |
proc sort data = MALIB.PRDSALE out = work.ventes ;
by YEAR COUNTRY ;
run ;
proc print data = work.ventes noobs label ;
by YEAR COUNTRY ;
var PRODTYPE PRODUCT ACTUAL PREDICT ;
sum ACTUAL ;
sumby YEAR ;
label ACTUAL = "Ventes reelles" PREDICT = "Ventes prevues" ;
where ACTUAL between 500 and 520 ;
run ;
5. PROC EXPORT et PROC IMPORT
La procédure EXPORT écrit des données dans un fichier externe à partir d'une table SAS.
proc export data = TABLE
outfile = "chemin/fichier"
<dbms = identifier> <replace>
<sheet = nom_feuille> ;
<delimiter = ";"> ;
run ;
L'option DELIMITER permet de choisir son séparateur lors d'un export non spécifié dans le tableau des DBMS ; elle doit être utilisée avec dbms = DLM.
La procédure IMPORT fait l'opération inverse :
proc import datafile = "chemin/fichier"
out = TABLE_DE_SORTIE
<dbms = identifier>
<replace>
<sheet = nom_feuille> ;
run ;
6. PROC FORMAT : créer ses propres formats
Un format associe des libellés aux valeurs des variables d'une table. Mais au-delà du simple affichage, les formats permettent de faire facilement des calculs par tranche, sans créer de variable ni faire de jointure. C'est leur usage le plus puissant.
Le résultat de la procédure FORMAT est un catalogue SAS nommé par défaut FORMATS, placé dans WORK si sa localisation n'est pas précisée.
proc format lib = LIBRAIRIE_SAS ;
value $ NOM_FORMAT_CARACTERE
"CODE1", "CODE2" = "Intitule du code 1"
"CODE3" = "Intitule du code 2"
other = "Autres" ;
value NOM_FORMAT_NUMERIQUE
low - 11 = "Moins de 12 ans"
12 - 13 = "12-13 ans"
14 - 15 = "14-15 ans"
15 <- high = "Plus de 15 ans" ;
run ;
| Élément | Règle |
|---|---|
| Nom du format | 8 caractères maximum, sans caractère spécial hormis le tiret bas, ne peut pas se terminer par un chiffre |
| $ devant le nom | Indique un format caractère ; sans lui, format numérique |
| other = | Intitulé général pour toutes les valeurs non citées |
| BORNE_INF - BORNE_SUP | Intervalle dont les bornes sont incluses |
| BORNE_INF - < BORNE_SUP | Le signe < exclut la borne qu'il précède |
Le format est ensuite appliqué à l'affichage par une instruction FORMAT, ou utilisé pour recoder via la fonction PUT :
proc print data = work.class ;
format AGE age_recod. SEX $sex_recod. ;
run ;
data work.class2 ;
set work.class ;
TRANCHE_AGE = put(AGE, age_recod.) ;
run ;
7. Exercices d'application
Voir le corrigé
proc contents data = sashelp.prdsale ; run ;
Voir le corrigé
proc sort data=sashelp.class out=work.tri1 ;
by age name ;
run ;
proc sort data=sashelp.class out=work.tri2 ;
by descending age descending name ;
run ;
proc sort data=sashelp.class out=work.tri3 nodupkey ;
by age ;
run ;
Voir le corrigé
proc print data=malib.prdsale ;
var prodtype product actual predict ;
run ;
proc sort data=malib.prdsale out=work.ventes ;
by year country ;
run ;
proc print data=work.ventes noobs ;
by year country ;
var prodtype product actual predict ;
run ;
/* Version complete : libelles, sous-totaux, total general, filtre */
proc print data=work.ventes noobs label ;
by year country ;
var prodtype product actual predict ;
sum actual ;
sumby year ;
label actual="Ventes reelles" predict="Ventes prevues" ;
where actual between 500 and 520 ;
run ;
Voir le corrigé
proc export data=sashelp.prdsale
outfile="/chemin/prdsale.txt"
dbms=tab replace ;
run ;
proc export data=sashelp.class
outfile="/chemin/class.csv"
dbms=csv replace ;
run ;
proc export data=sashelp.class
outfile="/chemin/class_pv.csv"
dbms=dlm replace ;
delimiter=";" ;
run ;
Voir le corrigé
proc import datafile="/chemin/prdsale.txt"
out=work.prdsale_import
dbms=tab replace ;
run ;
proc import datafile="/chemin/class.csv"
out=work.class_import
dbms=csv replace ;
run ;
Voir le corrigé
data work.taille ;
input taille @@ ;
cards ;
1 2 2 2 1 2 1 2 1 2 1 2
;
run ;
proc format ;
value taille_ref 1="GRAND" 2="petit" ;
run ;
proc print data=work.taille ;
format taille taille_ref. ;
run ;
Voir le corrigé
proc format ;
value age_recod low-11="Moins de 12 ans" 12-13="12-13 ans"
14-15="14-15 ans" 15<-high="Plus de 15 ans" ;
value $sex_recod "M"="Homme" "F"="Femme" ;
run ;
data work.class ;
set sashelp.class ;
tranche_age = put(age, age_recod.) ;
sexe_lettres = put(sex, $sex_recod.) ;
run ;
- QCM — QCM Module VI — 5 questions, auto-évaluation
Couleur de fond
Police
Crénage de la police
Visibilité de l’image
Hauteur de ligne
Surbrillance de lien
Alignement du texte
Taille de police
Espacement des lettres
Couleur de texte
Largeur de paragraphe