Descripteurs et données sous SAS

Visualiser les datasets SAS avec les instructions Proc Contents et Proc Print

Pour rappel, une table SAS, appelée aussi DSS pour Data Set SAS, est composée d'un bloc descripteur et d'une zone de données. Deux instructions sont à connaitre pour accéder aux informations des blocs descripteurs et aux données, respectivement Proc Contents et Proc Print. Voyons ceci en détail.
Pour ce faire nous allons nous servir de la table cars disponible par défaut dans la bibliothèque sashelp.

Le bloc descripteur d'une table SAS

Lorsqu'il est demandé à SAS d'afficher le bloc descripteur d'une table, les informations retournées sont, d'une part, les propriétés de la table, à savoir, entre autres, son nom, sa date de création, de modification, son codage, le nombre d'observations ainsi que le nombre de variables (comprenez colonnes).
D'autre part, SAS retourne également une synthèse des propriétés de l'image physique de la table sur la machine hôte. Cette partie sera notamment utile aux administrateurs.
Enfin SAS retourne la structure de la table avec le nom des variables, leur type, longueur, format et libellé.
Il faut savoir qu'il est possible de demander l'affichage du bloc descripteur d'une bibliothèque entière. Dans ce cas SAS edite en plus les propriétés du répertoire source de la bibliothèque, ainsi que la liste des tables qui la composent.

L'instruction proc contents sur une table :


proc contents data=sashelp.cars;
run;

Et la même instruction sur la bibliothèque sashelp entière :


proc contents data=sashelp._ALL_;
run;

Les données SAS

L'instruction de base pour visualiser le contenu d'une table SAS est la proc print. Voici ci-dessous la version la plus simple, sans option :


proc print data=sashelp.cars;
run;

Et un extrait du résultat retourné :

SAS proc content proc print

Entre la structure retournée par proc contents et le contenu retourné ci-dessus par proc print, une colonne supplementaire Obs vient s'ajouter au début. SAS a ajouté cette colonne pour compter les lignes affichées.

Proc print : Les options disponibles

Proc print dispose de nombreuses options, que nous allons parcourir.
Ci-dessous nous avons ajouté au bloc d'instructions précèdent 3 options :
- (obs=n) qui va nous permettre de n'afficher que les n premières lignes,
- le mot-clé noobs qui va nous éviter d'avoir la colonne Obs dont nous avons parlée précédemment,
- l'instruction var col1 col2 ... à placer entre proc print et run afin de n'afficher que certaines variables.

Ci-dessous un exemple pour lequel nous ne demandons que les 10 premières lignes et uniquement les informations associées au constructeur (Make), au modèle, au type de véhicule et à la puissance (Horsepower).
Deux remarques concernant l'instruction var : les noms de variables (colonnes) ne sont pas sensibles à la casse et, par ailleurs, elles sont séparées dans l'instruction par des espaces et non des virgules.


proc print data=sashelp.cars (obs=10) noobs;
 var Model Make Type Horsepower;
run;

Nous continuons avec 3 options supplémentaires :
- n = "Nb de lignes : " qui va venir ajouter, après l’édition de la table, le nombre de lignes affichées, avec le texte qu'on aura paramétré. Notez que cette option affichera 10 si l'option (obs=10) par exemple a été utilisée.
- sum col1 col2 ... : l'instruction sum va demander à SAS d'éditer en fin de table également un total général pour les colonnes listées
- id col1 : par défaut la colonne Obs est l'identifiant de la ligne, nous avons vu qu'il était possible de ne pas l'afficher avec noobs. Avec l'instruction "id" il est possible d'en définir une nouvelle.

Voici un exemple et le résultat associé :


proc print data=sashelp.cars (obs=15) noobs n="Nb de lignes affichees : " ;
 var Model Make Type Horsepower MSRP Invoice;
 sum MSRP Invoice;
 id Model;
run;
SAS proc content proc print

Les variables SAS et leurs attributs

Une variable SAS possède 3 attributs obligatoires (le nom, le type et la longueur) et 2 attributs facultatifs (le format et le label).

Les labels des variables SAS

On pourrait comparer le label d'une variable a un alias, une dénomination sous laquelle on veut voir s'afficher la variable. Contrairement aux noms de variables, les labels ne suivent pas de règles syntaxiques, ils peuvent contenir des caractères spéciaux et avoir une longueur max de 256 caractères.
Un label peut être attribue à une variable dans une étape PROC, il sera donc temporaire. Il peut aussi être modifié définitivement dans les propriétés de la variables via une étape DATA.

Voici ci-dessous comment afficher les labels, s'ils existent, en lieu et place des noms de variables.


proc print data=sashelp.cars (obs=15) label;
 var Model Make Type Horsepower mpg_city;
run;

Il est également possible de forcer les labels, donc, de façon temporaire.


proc print data=sashelp.cars (obs =15) label;
 var Model Make Type Horsepower;
 label make='Constructeur'
       model='Modèle';
run;

Le format des variables SAS

Modifier le format d'une variable signifie formatter la sortie de cette variable à l'écran. Il ne s'agit donc, en aucun cas, de modifier la valeur même de la variable. A l'instar des labels, un format peut être modifié temporairement pour une sortie (dans une étape PROC donc), ou définitivement dans les propriétés de la table (via une étape DATA).

Il existe 2 types de format : les formats SAS prédéfinis et les formats personnalisés (à initialiser dans une étape PROC FORMAT).
Il y a par ailleurs 2 catégories de formats : les formats associés à une variable caractère et ceux associés à un variable numérique.

Le format de chacune des 2 catégories est défini ainsi :
- Format de type caractère : $nom_du_format<w>.
- Format de type numérique : nom_du_format<w>.<d>

Dans les patterns ci-dessus <w> correspond à la longueur attendue, <d> correspond au nombre de décimales.
Une liste des formats est disponible sur le site de l'éditeur à cette adresse : liste des formats

Voici un petit exemple, et le résultat associé :


proc print data=sashelp.cars (obs =15);
 var Model Make Type Horsepower Invoice;
 format Model $UPCASE10.
        Invoice DOLLARX8.2;
run;
SAS proc content proc print

Retrouvez dans la rubrique "Nos datasets" toutes les données dont vous aurez besoin pour tester et pratiquer !