Log SAS : Pourquoi votre programme tourne mais produit des erreurs (Warning & Notes)

Niveau de difficulté
Débutant
Publié le :
Michael

Le Conseil de l'Expert

Michael
Responsable de l'infrastructure Viya.

Ne négligez jamais une "Note" ou un "Warning" dans le journal, même si le programme se termine. Utilisez des structures de contrôle comme if UnitsOnHand > 0 then... ou vérifiez la validité de vos indices de tableaux avant l'affectation. Une exécution sans erreur de syntaxe ne garantit pas la justesse de vos résultats.

Les erreurs d'exécution se produisent lorsque SAS© exécute un programme qui traite des valeurs de données. La plupart de ces erreurs se traduisent par des messages d'avertissement ou des notes dans le journal SAS©, mais permettent au programme de continuer à s'exécuter. L'emplacement d'une erreur d'exécution est généralement indiqué par les numéros de ligne et de colonne dans une note ou un message d'erreur. Les erreurs courantes incluent les arguments de fonction invalides, les opérations mathématiques invalides (par exemple, division par 0), les observations dans le mauvais ordre pour le traitement par groupe BY, la référence à un membre inexistant d'un tableau (lorsque l'indice du tableau est hors de portée), les erreurs d'ouverture et de fermeture sur les jeux de données SAS© et autres fichiers dans les instructions INFILE et FILE, et les instructions INPUT qui ne correspondent pas aux lignes de données. Des erreurs peuvent également survenir en cas de manque de ressources (disque plein, mémoire insuffisante), où SAS© peut demander la permission de libérer des ressources temporaires.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines).

1 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Cet exemple démontre une erreur d'exécution due à une division par zéro. Dans la deuxième observation, 'UnitsOnHand' est égal à 0, ce qui rend le calcul de 'UnitCost' impossible. SAS émet une note dans le journal, affecte une valeur manquante à 'UnitCost' pour cette observation, mais continue le traitement. Le PROC PRINT affiche le jeu de données résultant avec la valeur manquante.
Copié !
1DATA inventory;
2 INPUT Item $ 1-14 TotalCost 15-20
3 UnitsOnHand 21-23;
4 UnitCost=TotalCost/UnitsOnHand;
5 DATALINES;
6Hammers 440 55
7Nylon cord 35 0
8Ceiling fans 1155 30
9;
10 
11PROC PRINT DATA=inventory;
12 FORMAT TotalCost dollar8.2 UnitCost dollar8.2;
13RUN;
2 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Cet exemple illustre une erreur d'exécution due à un indice de tableau hors limites. Le tableau 'all' est défini avec 3 éléments (x1-x3). Dans la deuxième observation, la variable 'I' est manquante (.), ce qui entraîne une tentative d'accès à un élément de tableau avec un indice invalide (hors limites). SAS arrête le traitement de l'étape DATA en raison de cette erreur.
Copié !
1DATA test;
2 array all{*} x1-x3;
3 INPUT I measure;
4 IF measure > 0 THEN
5 all{I} = measure;
6 DATALINES;
71 1.5
8. 3
92 4.5
10;
11 
12PROC PRINT DATA=test;
13RUN;
L'Astuce Pro
Pour eviter les plantages silencieux ou les resultats invalides, surveillez les notes de division par zero dans votre calcul de UnitCost et les erreurs d indexation de tableau avec la variable I manquante, car SAS continuera l execution du programme en affectant une valeur manquante au resultat au lieu de stopper le processus, ce qui peut fausser l integralite de vos analyses statistiques sans alerte bloquante.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved