Introduction à SAS® et gestion de base des données

Cet article en deux mots :

Plongez au cœur de la programmation SAS avec ce guide pratique dédié à l'étape DATA. En vous glissant dans la peau d'un analyste automobile, vous apprendrez à transformer des fichiers bruts en tables exploitables, à calculer des variables métier et à valider vos résultats avec les procédures PRINT et MEANS. Une base indispensable pour tout data analyst souhaitant automatiser ses traitements avec précision et efficacité.

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 :

1
2
3
4
5
6
7
8
9
10
11
data parc_auto;
/* 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é ?

  • data signale le début de l'étape et nomme la table de sortie.
  • infile pointe vers notre fichier source.
  • input agit comme un calque : il dit à SAS de lire les caractères 1 à 17 pour remplir la variable num_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.

1
2
3
4
5
6
7
8
9
10
data parc_auto_enrichi;
/* 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 :

1
2
3
proc print data=parc_auto_enrichi(obs=5);
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 :

1
2
3
4
5
proc means data=parc_auto_enrichi mean min max;
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."

Henry Ford
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;

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.