Le journal, un mouchard qu’on aime bien

Voici un début de réflexion sur l’usage des informations disponibles dans le journal pour valider vos programmes et guider l’utilisateur final dans l’usage de vos programmes.

Selon l’interface utilisée pour exécuter vos programmes SAS, vous disposez de plus ou moins de fonctionnalités pour identifier les problèmes potentiels dans votre journal.

Faire défiler le journal pour repérer les messages critiques est une opération manuelle qui n’est pas fiable à 100 %. De plus, elle est fastidieuse. Cela signifie que la vérification sera effectuée de temps à autre, et non à chaque exécution du programme. 

Il peut être intéressant de créer son propre outil pour vérifier les messages.

De quels types de messages parle-t-on ?

Les message classiques

Par défaut, les systèmes SAS génèrent trois types de messages : ERROR, WARNING et NOTE.

Alors que les messages ERROR doivent être corrigés et que les messages WARNING doivent être corrigés ou documentés, certains messages NOTE peuvent mettre en évidence des points à prendre en considération.

Les messages sur demande

De plus, des messages INFO: peuvent s’afficher lorsque l’option globale msglevel=i est utilisée.

options msglevel=i;

Le message indiquant que des variables communes aux datasets fusionnés ne sont pas listées dans l’instruction by sont à prendre au sérieux.

Cette option génère de très nombreux messages. Cependant, à ma connaissance, seul celui qui concerne la fusion est utile au programmeur.

Les messages propres à l’utilisateur

Enfin, des messages spécifiques à l’utilisateur peuvent également s’afficher dans le journal. Il s’agit d’une pratique courante lors du développement de macros SAS, afin d’aider l’utilisateur final dans l’interprétation des résultats.

data _null_;
   putlog 'MYMACRO: Macro Start';
run;
%put MYMACR: Macro Start;

Qu’est-ce qu’un bon filtre ?

Filtrer les lignes pertinentes du journal permet d’avoir une vue d’ensemble des points à vérifier ou modifier.

Les filtres sont utiles, mais les bons filtres sont encore mieux. Qu’est-ce qu’un bon filtre ?

  • Un filtre qui répertorie de manière concise tous les problèmes pertinents, et uniquement ceux-là.
  • Un filtre facilement accessible afin de consulter le journal à chaque fois qu’un programme est exécuté.

Si les problèmes peuvent être identifiés en amont, avant même d’exécuter le programme, c’est encore mieux.

Quelles sont les solutions disponibles ?

L’interface Altair Workbench (Altair SLC/Rapidminer SLC)

Avec l’interface Altair Workbench, vous êtes averti de certains problèmes de syntaxe avant même d’exécuter votre code. Imaginons que vous ayez oublié une virgule dans votre procédure SQL ou qu’il manque une instruction de fin dans votre étape data, vous pourrez le voir dans l’éditeur d’Altair Workbench.

L’interface SAS Studio

SAS Studio vous aide à identifier les messages ERROR, WARNING et NOTE, qui sont regroupés dans la petite fenêtre d’en-tête du journal. Cliquez sur l’un de ces messages pour être redirigé vers la ligne correspondante dans le journal. Les messages INFO ne sont pas inclus, même lorsque l’option globale est activée.

Cela facilite la gestion des ERRORs, mais n’est pas vraiment pratique pour consulter les autres messages, en particulier les NOTEs critiques. Il est difficile de garder une vue d’ensemble des problèmes à résoudre.

Les interfaces développées en interne

Certaines interfaces propres à l’entreprise peuvent offrir des fonctionnalités supplémentaires pour filtrer les ERRORs, les WARNINGs et les NOTEs critiques, telles que des messages identifiés par l’entreprise comme problèmes à résoudre ou à documenter.

Un programme SAS qui lit votre journal

Un journal n’est qu’un fichier texte facilement lisible.

Faute de pouvoir ajouter une fonctionnalité à votre interface de programmation, vous pouvez créer un programme qui vous listera les messages importants pour vous.

  • Les NOTEs critiques
  • Les messages utilisateurs
  • Les messages nécessitant d’être documentés

Ce rapport pourra servir dans votre processus de validation de vos programmes.

filename demo catalog 'work.pgm.procprint.source';

data _null_;
    infile demo; 
    input ; 
    file print; 
    if find(_infile_,'ERROR:') ne 0 then put _infile_ ; 
run;

filename demo clear;

Dans l’exemple ci-dessus, toutes les lignes avec le terme ERROR: sont envoyés dans la destination par défaut.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *