Introduction au logiciel SAS
INTRODUCTION
Un programme SAS est une liste d’instructions décrivant au logiciel l’endroit où se trouvent les données à traiter, la manière dont elles se présentent et ce qu’il faut en faire.
BASES DU LANGAGE
Une instruction
Chaque instruction se termine toujours par un point-virgule (;).Son oubli est une erreur (fréquente) qui empêche le bon déroulement du programme. Les lettres autorisées correspondent au code ASCII de base, il faut donc éviter : les espaces, les accentuations (é, à, ç,…) ainsi que les caractères spéciaux qui peuvent avoir une signification particulière pour SAS.
Un commentaire
Penser à indérer des commentaires pour rendre le programme plus compréhensible. On peut aussi désactiver des lignes de programme sans les détruire en les transformant en commentaires.
– pour des caractères : * commentaire sur une ligne ;
– pour désactiver un ensemble de lignes /* lignes successives */
Des étapes successives et différentes : PROC, DATA
– L’étape DATA, table ou tableau, est la description de l’agencement des données dans le fichier à traiter,
– L’étape PROC ou procédurale est la description des manipulations à faire subir à une table spécifiée dans DATA = .
Une étape DATA commence par le nom DATA et se finit par RUN ou lorsque le mot PROC est rencontré (et inversement). Il peut y avoir plusieurs phases DATA et phases PROC dans un même fichier d’instructions SAS pour autant que l’on respecte la logique, premièrement de description des données puis, deuxièmement, de traitement de ces données.
Chaque étape se termine par l’instruction RUN.
Par défaut l’étape PROC travaille sur le dernier DATA créé.
/************************************************************/
/* premier programme */
/************************************************************/
DATA in; * tableau de lecture ;
Instructions …
PROC PRINT data=in ; * impression ;
DATA Tab1 ;
…
PROC SORT data=tab1 * tri des observations ;
Une variable
Une variable est, par défaut, définie uniquement à l’intérieur de son tableau (data).
– Le nom de variable commence toujours par une lettre, contient des lettres ou des chiffres et le caractère souligné (_) mais pas d’espace. Ne pas commencer le nom des variables par un souligné « _ » car les noms système commencent par ce caractère (_N_,…).
– La taille maximale du nom d’une variable est de 8 caractères, au delà le nom est tronqué (à partir de la version 7, la limite est maintenant de 32 caractères).
– Les variables sont, par défaut, des variables numériques.
– SAS ne différencie pas les majuscules des minuscules pour le nom des variables (mais il le fait pour le contenu de la variable).
– Les variables alpha-numériques (nom, adresse) ne peuvent faire l’objet d’une manipulation arithmétique. Elles sont identifiées au moment de leur lecture (INPUT) par un « $ » ou par une définition préalable. Les valeurs sont différenciées majuscules/minuscules et sont délimitées par des quotes (‘don‘ ou “don” ). Pour les quotes simples Prenom =’Pierre’ la valeur est considérée comme un bloc, par des doubles quotes Prenom= “donnees”, la valeur est considérée comme une succession de caractères.
Par défaut, la taille d’une variable alpha-numérique est de 8 caractères.
Le contenu maximal d’une variable alphanumérique est 200 caractères.
Groupe de variables
Le groupage permet d’invoquer plusieurs variables de manière synthétique
– le tiret permet de lire des variables ayant la même racine (Q1-Q5)
– le double tiret permet de traiter les variables en séquence selon l’ordre de leur lecture (vendeur– age) correspond à toutes les variables entre vendeur et age),
– vendeur – numeric – age ne reprend que les variables numériques de la liste (autre option character)
– le deux points « : » remplace tous les suffixes (X: correspond à xage, xgenre, xmontant)
ETAPE DATA : ACQUISITION ET TRAITEMENT DES DONNEES
Elle permet de faire (1) l’acquisition de données externes, la création d’autres tableaux SAS, (2) la manipulation des variables et des individus, (3) la sortie de fichiers. Un tableau de données (DATA) est une table rectangulaire qui comporte : en ligne, des individus et en colonne des variables. Ce tableau a un nom pour lequel on peut utiliser le caractère souligné « _ » pour le différencier des noms de variables (DATA tab_Clients ;). Les tableaux sont gardés en mémoire jusqu’à la fin de la session. Un tableau peut être constitué de différentes manières :(1) par insertion directe des valeurs dans le programme SAS avec CARDS, ou (2) par lecture d’un fichier externe FILE.
– Pour faire une étape DATA sans créer un tableau : utiliser DATA _NULL_ ;
– Si aucun nom n’est spécifié des tableaux DATAn sont créés successivement (DATA1, DATA2,…)
– Pour créer un tableau permanent : créer une librairie permanente (LIBNAME) qui permet de raccourcir les noms de fichiers, qui sont exprimés en deux parties séparées par un point (perm.classes) et d’organiser en répertoires les différents travaux en cours.
LIBNAME PERM ‘C:\REPERT1’;DATA PERM.CLASSES;
Surveiller l’espace mémoire des tableaux successifs constitués et « faire le ménage » régulièrement en supprimant les tableaux inutiles.
Les noms de fichiers sont toujours en minuscules.
INFILE / INPUT : lecture d’un fichier externe
Les observations sont lues une à la fois et placées dans un espace tampon (buffer) pour éventuellement être manipulées puis envoyées dans un tableau.
• INFILE définit le nom et le chemin d’accès du fichier à lire. L’option LRECL permet de préciser la longueur de l’enregistrement (par défaut LRECL=256), DELIMITER = ‘ ?-‘ les séparateurs de variables, et OBS=n le nombre d’observations à lire, à utiliser notamment pour tester le programme.
• INPUT décrit les données à lire et leurs caractéristiques, notamment leur nature alphanumérique ($).
– en format libre (sans précision) si les données sont séparées par un caractère séparateur (DLM ou DELIMITER=), par défaut un espace ;
Data in ;
Infile ‘c:\data\donnees.dat’ lrecl=300 DELIMITER = ‘ ?-‘ OBS=20;
Input X1 X2 X3 ; * délimiteurs espace ? et – ;
– en format fixe par le nombre de caractères suivi d’un point (.): le nom du vendeur est sur 12 caractères, puis sauter une colonne, … ;
– en format fixe à la colonne : le nom du vendeur occupe les colonnes 1 à 12, … Ce format permet de ne lire que les variables souhaitées ;
input vendeur $ ca age;
input vendeur $ 12. +1 ca 10. age 3.;
input vendeur $ 1-12 age 24-26 ;
input (vendeur X1-X3) ($1-12 3*3.) ;
– par défaut, les espaces devant une variable alphanumérique sont éliminés sauf avec le format $char (nom $char8.)
– si la valeur contient un espace blanc indiquer $& (dans ce cas 2 espaces sont nécessaires pour indiquer la fin d’une variable alpha-numérique), sinon l’espace est considéré comme un séparateur.
data choc;
input Chocolat $ coeur $ noisettes $& note;
cards;
noir moelleux noisettes 7
noir moelleux sans noisettes 6 ;
– le deux points « : » indique de lire selon un format mais de s’arrêter lorsqu’un espace est rencontré.
data in; input x1 : comma. x2 : comma. X3; cards;20,23 39,31 43,78 ;
– pour positionner le curseur sur une colonne particulière utiliser l’arobase (@)
input @24 nom $; * lire nom a partir de la colonne 24 ;
– pour plusieurs enregistrements logiques par enregistrement physique, l’enregistrement physique est maintenu dans la mémoire tampon par un @@. Les instructions ci-dessous lisent d’abord le nombre d’enregistrements logiques puis les différentes valeurs.
Data in ;
input n ;
do I=1 to n; input age @@ ; output ; end ;
cards ;423 32 45 26 ;
– l’enregistrement physique peut être maintenu dans la mémoire tampon pour une nouvelle lecture par un @@ (par défaut chaque input appelle une nouvelle ligne). Les instructions ci-dessous ne lisent l’enregistrement que si l’âge est inférieur à 30 ans. Des choix plus avancés sont présentés plus loin.
input age 24-26 @@ ;
if age <30 then input vendeur $ 12. +1 ca 10. ;
else input;
– si un enregistrement logique (un questionnaire) comporte plusieurs enregistrements physiques du fait du grand nombre de variables, une ligne est lue en utilisant le dièse (#) et dans l’exemple ci-dessous la ligne 3 (des variables Q6 à Q10) n’est pas lue. un (/) avance à la ligne suivante.
input age 24-26
#2 (Q1-Q5) (4.)
#4 (Q11-Q15) (4.) ;
La lecture d’un fichier peut être difficile et il faut s’assurer que toutes les données ont bien été lues correctement. Il est impératif de comparer le nombre de lignes lues et le nombre d’observations crées.
Ce message doit correspondre à une alerte sur une mauvaise lecture et ne doit JAMAIS être ignoré.
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.