I. Un peu d'histoire▲
L'invention du logiciel SAS est historiquement attribuée à Anthony J. BARR au début des années 1960, Anthony J. BARR était alors étudiant à l'Université de North Carolina aux États-Unis.
Le premier programme d'analyse statistique développé par Anthony J. BARR réalisait une analyse de la variance, il a ensuite enricho son programme pour lui permettre de faire des régressions multiples.
Anthony J. BARR a continué son programme en solo jusqu'à la fin des années 60, c'est à cette époque qu'il a commencé à s'associer avec d'autres personnes donner une autre ampleur à son désormais logiciel. Ce partenariat a non seulement permis l'ajout de nombreuses autres analyses statistiques, mais a aussi permis de faire de la la gestion de bases de données et du reporting ; outils indispensables à toute analyse statistique. Anthony J. BARR a de plus créé un propre langage de programmation pour son logiciel : le macro langage.
En 1976, la société SAS Institute Incorporation est créée.
Au cours de son histoire, la société SAS a su élargir son champ de compétences pour s'adapter au marché, aux nouvelles technologies et/ou techniques. Cette stratégie lui a permis de devenir l'un des leaders mondiaux du marché de la Business Intelligence.
La politique de SAS a toujours été de garantir une rétrocompatibilité de ces programmes, c'est-à-dire que les programmes et objets SAS doivent pouvoir fonctionner d'une version à l'autre.
La dernière version de SAS est la version 9.3.
II. Un fonctionnement en produits (ou modules)▲
Le logiciel SAS fonctionne sur différents systèmes d'exploitation : Windows, Macintosh, Unix, Linux, Mainframe.
SAS est un logiciel fonctionnant en modules : les modules sont en quelque sorte des sous-parties du logiciel SAS.
Par exemple pour réaliser des opérations de type ETL il est indispensable de posséder le module lié aux ETL (non inclus dans la version basique).
Comme les modules sont généralement ciblés sur des profils utilisateurs, il n'est pas rare d'observer une certaine redondance des fonctions au sein de différents modules.
En fonction de ses besoins, l'utilisateur choisira les modules les plus adaptés : l'offre de SAS peut en quelque sorte être considérée comme "une offre à la carte".
Ci-dessous une liste non exhaustive des modules de SAS, suivie d'une courte description.
Module |
Description |
---|---|
SAS/ACCESS |
Module orienté base de données, il permet un accès à de nombreux systèmes de bases de données tels que DB2, INFORMIX, ODBC, ORCALE, SYSBASE, SQL SERVER. |
SAS/AF |
Développement d'interfaces utilisateurs (Frame) à l'aide du langage SCL (langage orienté objet). |
SAS/ASSIST |
Utilise les principales caractéristiques de SAS/BASE en mode fenêtres. |
SAS/BASE |
Importation, manipulation et exportation des données. |
SAS DATA INTEGRATOR |
ETL de SAS. |
SAS/ENTERPRISE BI SERVER |
Plateforme décisionnelle de SAS. |
SAS/ENTERPRISE MINER |
Système de fenêtre pour réaliser du DATA MINING. |
SAS/ETS |
Fonctionnalités statistiques avancées pour la prévision, modélisation et simulation. |
SAS/GIS |
Manipulation de données géographiques. |
SAS/GRAPH |
Gestion des sorties graphiques. |
SAS/IML |
Programmation en langage matricielle. |
SAS/INSIGHT |
Manipulation interactive pour explorer et analyser les données. |
SAS/INTRNET |
Interaction avec Internet pour faciliter la publication des rapports obtenus sur SAS. |
SAS/MACO |
Module complémentaire à SAS/BASE, Langage permettant d'automatiser certaines tâches. |
SAS OLAP CUBE STUDIO |
Création de cubes. |
SAS/OR |
Fonctionnalités de Recherche Opérationnelle. |
SAS/QC |
Outils statistiques pour le contrôle qualité. |
SAS/STAT |
Ensemble des fonctionnalités statistiques courantes et poussées. |
SAS/TOOLKIT |
Outil pour l'écriture d'extensions SAS. |
SAS/WAREHOUSE ADMINISTRATOR |
Création et manipulation de DATA WAREHOUSE ET DATA MART. |
Remarque
SAS est un logiciel payant dont la licence doit être renouvelée tous les ans.
III. Les interfaces de SAS▲
On distingue principalement quatre types de fenêtres.
III-A. Les fenêtres d'écriture des programmes ▲
Il existe deux fenêtres permettant l'écriture de code SAS : les fenêtres "Program Editor" et "Enhanced Editor". Elles sont toutes les deux très similaires. Par la suite, nous ne nous intéresserons qu'à l' "Enhanced Editor".
III-B. Le "journal" ou "fenêtre des erreurs" ou "LOG"▲
Cette fenêtre est très certainement la plus importante de l'environnement de programmation de SAS. C'est avec cette fenêtre que vous percevrez la réaction du logiciel au code soumis.
L'aspect visuel du texte généré dans cette fenêtre suite à une soumission de code permet d'interpréter le comportement de SAS vis-à-vis de cette exécution :
- si la couleur du texte est bleu : SAS n'a détecté aucune erreur ;
- si la couleur est vert cela signifie que certaines erreurs "non fatales" à l'exécution ont été détectées ;
- si la couleur est rouge : des erreurs graves ont été détectées, empêchant l'exécution du programme.
Ci-dessous quelques exemples visuels de codes générés :
Un programme correctement exécuté :
Un programme avec des erreurs :
Nous verrons, plus en détail, dans la prochaine partie un exemple explicitant ces erreurs lors d'exécution.
III-C. La "fenêtre de résultat" ou "OUTPUT"▲
Cette fenêtre affiche les résultats des analyses statistiques lancées par l'intermédiaire des procédures ou fonctions SAS.
III-D. L'explorateur▲
Il permet la navigation parmi les objets SAS (données et catalogues) et parmi votre espace de travail. Pour naviguer dans vos données SAS, vous devez cliquer sur Bibliothèque (LIBNAME). Les bibliothèques sont en quelque sorte un raccourci pointant vers un répertoire. En créant vos propres bibliothèques, vous pouvez ainsi sauvegarder vos données et/ou vos macros pour ainsi les réutiliser facilement. La création de bibliothèques est très importante, car il faut savoir que par défaut SAS ne stocke pas en mémoire les manipulations d'une session à l'autre. En effet au cours d'une même session toutes vos données sont par défaut sauvegardées dans une bibliothèque temporaire (WORK) qui est vidée à chaque fermeture du logiciel SAS.
Pour créer vos propres bibliothèques de travail, vous devez cliquer sur "Nouvelle Bibliothèque" sur la barre de commande SAS.
Vous pouvez aussi en créer à l'aide du code suivant :
LIBNAME MonEspace "c:\MesDocs\SAS" ; |
Le gros avantage de l'utilisation des bibliothèques provient du fait qu'elles permettent le stockage des bases de données qui sont utilisées, modifiées ou créées lors de vos sessions SAS. Un autre avantage non négligeable est le stockage des macros compilées.
Ainsi vous pouvez rappeler ces macros sans forcément avoir besoin de les recompiler.
On fera remarquer que par défaut les tables sont enregistrées dans la librairie Work. Cette librairie a l'avantage ou l'inconvénient, cela dépend de l'utilisation, de supprimer toutes les tables créées lors d'une session.
IV. Le fonctionnement de SAS▲
Le logiciel SAS fonctionne par l'intermédiaire du langage SAS. Ce code visible lorsque l'on développe des programmes sur console est invisible lorsque l'on utilise le mode interactif.
La programmation SAS peut être découpée en trois parties :
- les étapes DATA : elles permettent, au mettre titre que le langage SQL, une manipulation des données ;
- les procédures PROC : elles permettent de faire des analyses statistiques de bases de données, des graphiques et de très légères manipulations de données ;
- le langage macro : il sert à automatiser les programmes et réaliser des manipulations plus sophistiquées sur les données.
Le langage SAS doit être écrit dans l'"Enhanced Editor" et exécuté en cliquant sur le bouton soumettre de la barre de menu SAS (symbolisé par un petit bonhomme qui court).
IV-A. Etape DATA ▲
Une étape DATA commence toujours par le mot clé DATA, suivi de la ou des bases de données que l'on désire créer, et finit par le mot clé RUN. Dans la suite de ce tutoriel, les mots clés seront écrits en majuscules.
DATA nomBase ; |
Nous allons maintenant créer une table en saisissant les données directement sur SAS :
DATA base ; /*La nouvelle table se nommera base*/ |
Il est important de signaler que le respect de la ponctuation est de première importance dans SAS, l'oubli ou le mauvais placement des signes de ponctuation génère des erreurs.
Après exécution du code, vous devez aller dans la fenêtre "Journal" pour voir s'il des erreurs sont apparues.
Vous devez normalement avoir le texte ci-dessous dans votre journal, si ce n'est pas le cas vérifiez bien la ponctuation ";" :
DATA
base ; /*La nouvelle table se nommera base*/
INPUT
nom$ var1 var2 ; /*On déclare 3 variables : une qualitative ($) nom et deux numériques v1 et v2*/
CARDS
;
NOTE: La table
WORK
.
BASE a 3 observations et 3 variables.
NOTE: L'étape DATA a utilisé (Durée totale du processus) :
temps réel 0.13 secondes
temps processeur 0.01 secondes
! /*Mode saisie des données*/
;
RUN;
N'ayant que du bleu vous pouvez déjà vous dire que votre programme ne contient pas d'erreurs. Ce qui est bien le cas quand on regarde dans le détail : SAS vous dit que la table SAS a été enregistrée dans la "bibliothèque Work" avec le nom "Base". Cette table contenant trois observations et trois variables, ce qui est effectivement le cas.
Pour enregistrer votre base dans une bibliothèque définie par l'utilisateur, vous devez procéder comme suit :
LIBNAME test "D:\temp"; |
Dans ce tutoriel nous n'entrerons pas dans d'autres détails de manipulation de bases de données sur SAS, cette thématique pourrait largement couvrir à elle seule un nouveau tutoriel, un livre, etc.
Sachez que pour la gestion de bases de données sur SAS vous pouvez, dans la version classique de SAS, importer des données issues de fichiers de formats très divers, manipuler vos données et créer de nouveaux fichiers.
IV-B. Procédure PROC▲
Les procédures PROC : permettent l'analyse et le reporting.
IV-B-1. Un premier exemple▲
La syntaxe classique d'une procédure est la suivante :
PROC nomProcedure / OPTIONS ; |
Une procédure commence toujours par le mot clé PROC et finit toujours par le mot clé RUN. Entre ces deux mots clés, vous pouvez paramétrer votre procédure de façon à obtenir le résultat voulu.
Je vais ci-dessous vous donner un exemple de procédure réalisant un calcul de moyenne : la PROC MEANS. Pour calculer une moyenne, nous devons spécifier à la procédure MEANS, le fichier contenant la variable dont on souhaite calculer la moyenne.
PROC MEANS DATA=base; /*Ceci est un commentaire pouvant être sur plusieurs lignes*/ |
Une fois le code exécuté, allez dans la fenêtre "Journal" pour voir s'il s'est bien déroulé.
Vous devez avoir le texte ci-dessous dans votre journal :
PROC
MEANS DATA
=
base; /*Ceci est un commentaire pouvant être sur plusieurs lignes*/
RUN
;
NOTE: 3 observations copiées de la table
WORK
.
BASE.
NOTE: La procédure MEANS a utilisé (Durée totale du processus) :
temps réel 1.
93 secondes
temps processeur 0.
06 secondes
<
br/>
10 !
De même que pour l'étape DATA, il apparaît clairement que votre code ne contient pas d'erreur.
Nous allons maintenant générer volontairement une erreur "en omettant le premier point virgule" pour observer la réaction de SAS.
PROC MEANS DATA=base |
Nous visualisons dans la fenêtre "Journal" le texte suivant :
PROC
MEANS DATA
=
base
RUN
;
22
-
200
ERREUR 22-
322: Erreur de syntaxe ; syntaxe requise : ;, (, ALPHA, CHARTYPE, CLASSDATA, CLM, COMPLETETYPES, CSS, CV, DATA
,
DESCEND, DESCENDING, DESCENDTYPES, EXCLNPWGT, EXCLNPWGTS, EXCLUSIVE, FW, IDMIN, KURTOSIS, LCLM, MAX,
MAXDEC
, MEAN, MEDIAN
, MIN, MISSING, N, NDEC, NMISS, NONOBS, NOPRINT
, NOTHREADS, NOTRAP, NWAY
, ORDER
, P1,
P10, P25, P5, P50, P75, P90, P95, P99, PCTLDEF, PRINT, PRINTALL, PRINTALLTYPES, PRINTIDS, PRINTIDVARS,
PROBT, Q1, Q3, QMARKERS, QMETHOD, QNTLDEF, QRANGE, RANGE, SKEWNESS, STDDEV, STDERR, SUM, SUMSIZE, SUMWGT,
T
, THREADS, UCLM, USS, VAR
, VARDEF.
ERREUR 200-
322: Le
symbole n'est pas reconnu et sera ignoré.
On voit très clairement que SAS ne comprend pas notre code. Cet exemple illustre l'importance de la lecture du "journal" après l'exécution d'un programme, ainsi que l'utilité du point-virgule dans le langage SAS.
Ceux-ci doivent toujours être placés à la fin d'une instruction.
Par exemple :
PROC
MEANS DATA
=
base
MEAN; /*1re instruction*/
VAR
v1; /*2e instruction*/
RUN
; /*3e instruction*/
Avec le "Journal" suivant :
PROC
MEANS DATA
=
base
MEAN; /*1re instruction*/
VAR
v1; /*2e instruction*/
RUN
; /*3e instruction*/
NOTE: 3 observations copiées de la table
WORK
.
BASE.
NOTE: La procédure MEANS a utilisé (Durée totale du processus) :
temps réel 0.
01 secondes
temps processeur 0.
01 secondes
Le dernier exemple illustre une petite partie des nombreuses options des procédures. En effet si vous ne voulez que le calcul de moyennes dans votre sortie, vous devez le signifier dans votre procédure à travers l'ajout d'options (dans cet exemple l'ajout de l'option MEAN permet l'obtention de la moyenne seule).
Pour visualiser les résultats statistiques de votre code, vous devez cliquer sur la fenêtre "Sortie".
IV-B-2. Plus de détails▲
Le nombre de procédures sur SAS est considérable, chaque méthode statistique possède sa ou ses propres procédures. Chaque procédure possède elle aussi un grand nombre d'options permettant de paramétrer tout aussi bien les entrées (bases de données) que les sorties (résultats). Ce qui fait qu'au final SAS est un logiciel dont on ne peut connaître toutes les options : l'utilisation de l'aide en ligne est à ce titre très précieuse de même que le forum et la FAQ SAS de développez.com
L'aide en ligne SAS donne une description des diverses procédures tant au niveau des sorties générées qu'au niveau des syntaxes. Cette aide en ligne est le premier outil à prendre en considération pour tout développeur SAS.
Pour illustrer la diversité des options SAS, je vais prendre l'exemple d'un calcul de chi-carré. Cette mesure sert à quantifier le degré de dépendance (identique à la notion corrélation entre variables numériques) d'au moins deux variables qualitatives (non numérique). Une variable qualitative étant une variable du style : 1 = homme, 2 = femme.
La base de données initiale peut être de deux formes :
SEXE |
MALADIE |
---|---|
1 |
0 |
1 |
1 |
2 |
0 |
1 |
0 |
2 |
0 |
1 |
0 |
1 |
1 |
2 |
1 |
2 |
1 |
2 |
1 |
2 |
0 |
2 |
0 |
DATA base; |
Ou de cette forme (tableau de contingence):
Maladie |
||
---|---|---|
0 |
1 |
|
Homme |
3 |
2 |
Femme |
4 |
3 |
DATA base2; |
Une des procédures permettant entre autres le calcul du chi-carré est la procédure FREQ, celle-ci intègre bien évidemment la possibilité de lecture des deux types de tables ci-dessus dans ces options.
Pour la première table :
PROC FREQ DATA=base; |
Pour la deuxième table :
PROC FREQ DATA=base2; |
L'ajout de l'option WEIGHT spécifie l'existence d'une variable de poids, SAS comprend alors que la base de données est sous la forme d'un tableau de contingence.
Pour calculer la valeur du test du chi-carré, vous devez rajouter l'option "CHISQ", l'ajout d'options se faisant avec le code '/ option1 option2 … '.
Dans cet exemple sans cet ajout, nous avons :
PROC FREQ DATA=base2; |
Nous n'aurions pas obtenu le calcul du chi-carré, car cette option n'est pas définie par défaut.
Le but des deux premiers exemples était de pouvoir montrer les principales utilisations des options des procédures en vue de l'obtention du résultat souhaité. Je vais ci-après vous indiquer comment récupérer vos résultats dans une table et dans un fichier Word.
IV-B-3. La gestion des sorties▲
Pour imprimer les informations de cette table dans la fenêtre résultat, vous devez utiliser la procédure PRINT. Cette dernière étant assez différente des autres, car elle ne fait qu'imprimer les données d'une table, contrairement aux autres procédures qui font des calculs sur les bases.
PROC MEANS DATA=base; |
L'autre notion de gestion des sorties sous SAS couvre la présentation des résultats dans un éditeur à partir de SAS. Nous allons ci-dessous détailler le code "imprimant les résultats" dans l'éditeur de texte Word.
ODS RTF FILE="D:\resultats.doc"; |
IV-C. Langage MACRO▲
Une macro commence par "%MACRO nomFonction ;" et finit par "%MEND ;". Les paramètres de la macro sont initialisés de la façon suivante, par exemple pour deux paramètres par1 et par2 : "%MACRO maFonction(par1,par2)".
%MACRO
maFonction(par1,par2) ;
PROC
MEANS DATA
=
&par1 ; /*Pour appeler les paramètres on utilise le &*/
VAR
&par2 ;
RUN
;
%MEND
;
%maFonction(base,v1) ;/*On exécute la macro*/
Le but de ce présent article étant une présentation générale de SAS il ne nous est pas apparu utile d'approfondir les subtilités du langage MACRO dans ce tutoriel.
Conclusion▲
Au terme de ce tutoriel, vous possédez maintenant une vue d'ensemble du fonctionnement de SAS tant au niveau des principales fonctionnalités qu'au niveau du langage informatique classiquement utilisé.
Ressources utilisées pour la rédaction de l'article▲
La communauté SAS de developpez.com▲
Internet▲
Livre▲
Maitriser SAS BASE et SAS MACRO (SAS 9 et versions antérieures) : Hélène Kontchou Kouomegni et Olivier Decourt
Remerciements▲
Je remercie Fleur-Anne.Blain, Adrien Artero et Steelspirit pour avoir collaboré à la réalisation de ce tutoriel et pour leurs précieuses relectures.