Bonjour à tous et excellente année 2015 ! Pour bien démarrer cette nouvelle année sur le blog, j'ai décidé de lancer une grande série d'articles consacrée à un outil fondamental pour tout analyste de données : la programmation SAS®, et plus particulièrement l'incontournable étape DATA.
Pour rendre les choses concrètes, nous n'allons pas utiliser les habituels jeux de données académiques. Tout au long de cette série, nous allons enfiler la casquette d'un analyste travaillant pour un grand réseau de concessionnaires automobiles. Prêts à mettre les mains dans le cambouis ? C'est parti !
L'étape DATA : Le moteur de votre programme SAS
Dans SAS, le code se divise généralement en deux grandes familles : les étapes DATA (pour manipuler et créer des données) et les étapes PROC (pour analyser et présenter les résultats).
L'étape DATA est le véritable moteur de votre traitement. C'est ici que vous allez importer vos fichiers bruts, nettoyer les valeurs, calculer de nouvelles colonnes et filtrer vos observations.
1. Lire un fichier brut
Imaginons que notre service logistique nous envoie un fichier texte brut (.txt) contenant l'inventaire des véhicules livrés ce mois-ci. Les données ne sont pas séparées par des virgules, mais alignées sur des colonnes spécifiques (format fixe).
Voici comment demander à SAS de lire ce fichier pour créer notre première table, que nous appellerons parc_auto :
2
3
4
5
6
7
8
9
10
11
/* On indique à SAS où se trouve le fichier brut */
infile "C:\Automobile_2015\donnees\vehicules_brut.txt";
/* On définit le nom des variables et leur position exacte (colonnes) */
/* Le symbole '$' indique qu'il s'agit d'une chaîne de caractères */
input num_chassis $ 1-17
marque $ 19-28
annee_fab 30-33
prix_ht 35-40;
run;
Que s'est-il passé ?
datasignale le début de l'étape et nomme la table de sortie.infilepointe vers notre fichier source.inputagit comme un calque : il dit à SAS de lire les caractères 1 à 17 pour remplir la variablenum_chassis, et ainsi de suite.run;indique à SAS d'exécuter le bloc de code.
2. Créer de nouvelles variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. (et faire le tri)
Avoir le prix Hors Taxes (HT) c'est bien, mais pour nos vendeurs, il faut le prix Toutes Taxes Comprises (TTC). En France (et ce n'est pas près de changer en ce début 2015 !), la TVA standard est de 20%. Nous allons donc créer une nouvelle table à partir de la première, ajouter le prix TTC, et faire un peu de ménage dans les colonnes.
2
3
4
5
6
7
8
9
10
/* On lit la table SAS précédemment créée */
set parc_auto;
/* Création par simple affectation mathématique */
prix_ttc = prix_ht * 1.20;
/* On supprime les variables inutiles pour la force de vente */
drop annee_fab prix_ht;
run;
Note : À l'inverse de drop (qui exclut des variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage.), vous pouvez utiliser keep pour indiquer à SAS de ne conserver que les variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. listées.
3. Valider son travail avec les PROC de base
L'étape DATA crée la donnée, mais pour la visualiser en cette année 2015, rien ne remplace une bonne vieille procédure. Voici deux PROC indispensables pour vérifier que votre code a bien fonctionné :
La PROC PRINT pour visualiser les premières lignes :
2
3
title "Aperçu de notre inventaire (5 premiers véhicules)";
run;
(L'option obs=5 est très pratique pour éviter d'inonder votre fenêtre de résultats si votre parc contient 10 000 voitures !)
La PROC MEANS pour obtenir quelques statistiques descriptives :
2
3
4
5
var prix_ttc;
class marque;
title "Prix moyen, min et max TTC par marque dans notre parc";
run;
Ce petit bloc de code va nous sortir un tableau récapitulatif nous donnant le prix de vente moyen, le moins cher et le plus cher, et ce, pour chaque marque (Peugeot, Renault, Ford, etc.).
Et voilà pour ce premier article ! Vous savez désormais comment ingérer un fichier texte complexe, créer une nouvelle variable métier (notre prix TTC) et vérifier vos données.
Dans le prochain article, nous passerons à la vitesse supérieure en apprenant à utiliser la création conditionnelle de variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. (les fameux IF-THEN/ELSE). Nous verrons comment classer automatiquement nos véhicules d'occasion selon leur niveau d'usure.
"Avant toute chose, la préparation est le secret du succès."
| Instruction / Procédure | À quoi ça sert ? | Exemple dans notre code |
|---|---|---|
DATA |
Déclare le début de l'étape et nomme la nouvelle table SAS à créer. | data parc_auto; |
INFILE |
Indique à SAS le chemin précis où se trouve le fichier texte brut à importer. | infile "C:\donnees\vehicules.txt"; |
INPUT |
Définit le nom, le type ($ pour du texte) et la position des colonnes à lire dans le fichier brut. |
input num_chassis $ 1-17; |
SET |
Lit une table SAS déjà existante (souvent pour y ajouter des variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. ou la filtrer). | set parc_auto; |
= (Affectation) |
Permet de créer une nouvelle variable ou d'en modifier une via un calcul mathématique. | prix_ttc = prix_ht * 1.20; |
DROP / KEEP |
Nettoie la table de sortie en supprimant (drop) ou en ne gardant que (keep) certaines colonnes. |
drop annee_fab prix_ht; |
PROC PRINT |
Affiche les données de la table directement dans la fenêtre de résultats. | proc print data=parc_auto(obs=5); |
PROC MEANS |
Calcule des statistiques basiques (moyenne, minimum, maximum) sur des variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. numériques. | proc means mean min max; |






