Publié le :

Gestion des Erreurs et Débogage SAS

En attente de validation
Le script est divisé en plusieurs sections. La première partie se concentre sur la gestion des erreurs logiques à l'aide de l'instruction PUTLOG dans un DATA step. Elle montre comment utiliser PUTLOG pour afficher des messages conditionnels, des valeurs de variables et pour le débogage. La seconde partie présente des exemples d'erreurs de syntaxe courantes (faute de frappe, option invalide, point-virgule manquant) et explique comment le journal SAS© peut aider à les diagnostiquer. Le code est conçu pour être exécutable dans un environnement SAS© Viya 4 et SAS© Studio.
Analyse des données

Type : MIXTE


Le script utilise les jeux de données `SASHELP.CLASS` et `SASHELP.CARS` comme sources. Il crée également des jeux de données intermédiaires (`new_student`, `class_updated`) et des variables macro (`student_name`, `height`, `weight`, `age`, `sex`) définies au début du script pour simuler des données d'entrée. Aucune donnée externe non gérée n'est utilisée.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc initialise des variables macro puis crée un jeu de données nommé `new_student`. Il utilise `sashelp.class` comme base, remplace certaines variables avec les valeurs des macros (`symget` est utilisé pour les valeurs alphanumériques). Une logique conditionnelle vérifie si la valeur de la macro variable `height` est comprise entre 12 et 100. Selon le résultat, la variable `height` est soit mise à une valeur manquante, soit assignée, et un message pertinent est écrit dans le journal SAS via `PUTLOG`.
Copié !
1%let student_name = Pat;
2%let height = 70;
3%let weight = 120;
4%let age = 15;
5%let sex = M;
6 
7DATA new_student;
8 SET sashelp.class (obs=1);
9
10 name = symget('student_name');
11 weight = &weight;
12 age = &age.;
13 sex = symget('sex');
14
15 IF &height. not in (12:100) THEN DO;
16 height = .;
17 putlog "NOTE: The height is not a valid number. It has been set to missing.";
18 END;
19
20 ELSE DO;
21 height = &height.;
22 putlog "NOTE: The height is a valid number. It has been set to &height..";
23 END;
24
25RUN;
2 Bloc de code
DATA STEP Data
Explication :
Ce DATA step crée le jeu de données `class_updated` en concaténant `sashelp.class` et `new_student`. Il utilise ensuite `PUTLOG` pour écrire les valeurs des variables `name` et `age` de chaque observation dans le journal SAS, démontrant comment inspecter les valeurs des variables en cours d'exécution.
Copié !
1DATA class_updated;
2 SET sashelp.class new_student;
3
4 putlog "NOTE: Their name is " name ;
5 putlog "NOTE: Their Age is " age ;
6
7RUN;
3 Bloc de code
DATA STEP Data
Explication :
Ce bloc lit le jeu de données `class_updated` et applique une logique conditionnelle. Si la variable `age` est supérieure ou égale à 15, il utilise `PUTLOG` pour afficher le nom et l'âge de l'étudiant dans le journal SAS. Ceci illustre le débogage conditionnel pour cibler des observations spécifiques ou des conditions de données.
Copié !
1DATA class_updated;
2 SET class_updated;
3
4 IF age ge 15 THEN DO;
5
6 putlog "NOTE: Their name is " name ;
7 putlog "NOTE: Their Age is " age ;
8
9 END;
10
11RUN;
4 Bloc de code
DATA STEP Data
Explication :
Ce DATA step lit les 5 premières observations de `class_updated`. Il utilise `PUTLOG` pour afficher les valeurs des variables automatiques `_N_` (le numéro de l'itération actuelle du DATA step), `name` (la variable du jeu de données), et `_ERROR_` (un indicateur d'erreur, 1 si une erreur s'est produite dans l'observation actuelle, 0 sinon). C'est une technique courante pour déboguer le flux d'exécution et identifier les erreurs au niveau des observations.
Copié !
1DATA class_updated;
2 SET class_updated (obs=5);
3
4 putlog _N_ ;
5 putlog name;
6 putlog _ERROR_ ;
7
8
9RUN;
5 Bloc de code
DATA STEP Data
Explication :
Ce bloc présente un exemple d'erreur de syntaxe due à un mot-clé mal orthographié. Le mot-clé `dota` est utilisé au lieu de `data`, ce qui entraînera une erreur de compilation dans le journal SAS. Il démontre une erreur typique qui peut être diagnostiquée par l'analyse du journal.
Copié !
1dota mycars;
2 SET sashelp.cars;
3RUN;
6 Bloc de code
DATA STEP Data
Explication :
Ce bloc illustre une erreur de syntaxe causée par l'utilisation d'une option invalide (`notvalidoption`) dans l'instruction `SET`. SAS générera une erreur dans le journal, indiquant que l'option spécifiée n'est pas reconnue ou n'est pas applicable, soulignant l'importance de connaître les options valides pour chaque instruction.
Copié !
1 
2DATA mycars;
3SET sashelp.cars(notvalidoption=this);
4RUN;
5 
7 Bloc de code
DATA STEP Data
Explication :
Ce bloc montre un exemple où un point-virgule est implicitement manquant (le commentaire original l'indique). Dans un vrai scénario, si le point-virgule après `set sashelp.cars` était omis, SAS signalerait une erreur de syntaxe, car chaque instruction SAS doit se terminer par un point-virgule. Cela met en évidence une erreur de syntaxe très courante.
Copié !
1DATA mycars;
2 SET sashelp.cars;
3RUN;
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.