Publié le :
Débogage CREATION_INTERNE

Débogage des programmes SAS

En attente de validation
L'analyse fonctionnelle couvre plusieurs aspects du débogage en environnement SAS© Viya 4 et SAS© Studio. Elle détaille les définitions des types d'erreurs (syntaxe, sémantique, exécution, données, macros) et propose des outils de vérification d'erreurs comme la variable automatique _IORC_ et la macro SYSRC. Le document explique également le fonctionnement des modes de point de contrôle et de redémarrage pour les programmes par lots, permettant de reprendre l'exécution après une interruption. Le mode de vérification de la syntaxe est décrit comme un moyen de détecter les erreurs sans exécuter l'intégralité du programme. Enfin, il liste des options système importantes telles que ERRORABEND, ERRORCHECK=, MSGLEVEL= pour affiner la gestion des erreurs et le niveau de détail des logs.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) pour assurer leur autonomie.

1 Bloc de code
DATA STEP Data
Explication :
Ce programme révisé met à jour un ensemble de données principal ('master') avec des informations provenant d'un ensemble de données de transaction ('transaction'). Il lit 'transaction' séquentiellement et 'master' directement à l'aide de l'instruction MODIFY avec l'option KEY= (sur PartNumber). Une instruction SELECT est utilisée pour contrôler le flux d'exécution en fonction de la valeur de la variable automatique _IORC_:
- Si une correspondance est trouvée (_SOK), la quantité est mise à jour et l'observation est remplacée.
- Si aucune correspondance n'est trouvée (_DSENOM), une nouvelle observation est ajoutée avec la quantité spécifiée dans 'transaction', et la variable _ERROR_ est réinitialisée pour éviter l'arrêt du programme.
- En cas de condition inattendue, un message d'erreur est affiché dans le log et le DATA step est arrêté. Les ensembles de données 'master_initial' et 'transaction' sont créés de manière autonome pour cet exemple.
Copié !
1/* Création des données initiales */
2DATA master_initial;
3 INFILE DATALINES;
4 INPUT PartNumber Quantity;
5 DATALINES;
61 10
72 20
83 30
94 40
105 50
11;
12RUN;
13 
14PROC SORT DATA=master_initial out=master;
15 BY PartNumber;
16RUN;
17 
18PROC SQL;
19 create index PartNumber on master;
20QUIT;
21 
22DATA transaction;
23 INFILE DATALINES;
24 INPUT PartNumber AddQuantity;
25 DATALINES;
264 14
276 16
282 12
29;
30RUN;
31 
32PROC SORT DATA=transaction;
33 BY PartNumber;
34RUN;
35 
36/* Programme révisé avec gestion des erreurs */
37DATA master;
38 SET transaction;
39 modify master key=PartNumber;
40 
41 select(_iorc_);
42 when(%sysrc(_sok)) DO;
43 Quantity = Quantity + AddQuantity;
44 replace;
45 END;
46 when(%sysrc(_dsenom)) DO;
47 Quantity = AddQuantity;
48 _error_ = 0;
49 OUTPUT;
50 END;
51 otherwise DO;
52 put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
53 put 'Program terminating. DATA step iteration # ' _n_;
54 put _all_;
55 stop;
56 END;
57 END;
58RUN;
59 
60PROC PRINT DATA=master;
61 title 'Master Data Set après mise à jour';
62RUN;
2 Bloc de code
DATA STEP Data
Explication :
Cet exemple crée un ensemble de données combiné ('combine') contenant la description et la quantité en stock pour chaque pièce d'une commande, en excluant les pièces non trouvées dans les ensembles de données 'master' et 'description'.
Le programme lit l'ensemble de données 'order' séquentiellement. Il utilise ensuite deux instructions SET avec l'option KEY= pour lire directement les ensembles de données 'description' et 'master' basés sur la valeur de 'PartNumber'.
Une variable 'Foundes' est utilisée pour suivre si une correspondance a été trouvée dans 'description'.
Des blocs SELECT sont utilisés après chaque instruction SET KEY= pour gérer les différentes conditions de retour (_IORC_):
- Si une correspondance est trouvée (_SOK), l'exécution se poursuit.
- Si aucune correspondance n'est trouvée (_DSENOM), une description par défaut est attribuée ('No description') ou un message d'avertissement est émis si la pièce n'est présente dans aucun des deux ensembles de données.
- En cas de condition inattendue, le programme affiche un message d'erreur et s'arrête.
Les ensembles de données 'master_initial', 'order_data' et 'description_initial' sont créés de manière autonome pour cet exemple.
Copié !
1/* Création des données initiales */
2DATA master_initial;
3 INFILE DATALINES;
4 INPUT PartNumber Quantity;
5 DATALINES;
61 10
72 20
83 30
94 40
105 50
11;
12RUN;
13PROC SORT DATA=master_initial out=master; BY PartNumber; RUN;
14PROC SQL; create index PartNumber on master; QUIT;
15 
16DATA order_data;
17 INFILE DATALINES;
18 INPUT PartNumber;
19 DATALINES;
202
214
221
233
248
255
266
27;
28RUN;
29PROC SORT DATA=order_data out=order; BY PartNumber; RUN;
30 
31DATA description_initial;
32 INFILE DATALINES;
33 INPUT PartNumber PartDescription $;
34 DATALINES;
354 Nuts
363 Bolts
372 Screws
386 Washers
39;
40RUN;
41PROC SORT DATA=description_initial out=description; BY PartNumber; RUN;
42PROC SQL; create index PartNumber on description; QUIT;
43 
44 
45/* Programme révisé avec gestion des erreurs */
46DATA combine(drop=Foundes);
47 LENGTH PartDescription $ 15;
48 SET order;
49 Foundes = 0;
50 SET description key=PartNumber;
51 select(_iorc_);
52 when(%sysrc(_sok)) DO;
53 Foundes = 1;
54 END;
55 when(%sysrc(_dsenom)) DO;
56 PartDescription = 'No description';
57 _error_ = 0;
58 END;
59 otherwise DO;
60 put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
61 put 'Program terminating. Data set accessed is Description';
62 put _all_;
63 _error_ = 0;
64 stop;
65 END;
66 END;
67SET master key=PartNumber;
68select(_iorc_);
69 when(%sysrc(_sok)) DO;
70 OUTPUT;
71 END;
72 when(%sysrc(_dsenom)) DO;
73 IF not Foundes THEN DO;
74 _error_ = 0;
75 put 'WARNING: PartNumber ' PartNumber 'is not in'
76 ' Description or Master.';
77 END;
78 ELSE DO;
79 Quantity = 0;
80 _error_ = 0;
81 OUTPUT;
82 END;
83 END;
84 otherwise DO;
85 put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
86 put 'Program terminating. Data set accessed is Master';
87 put _all_;
88 _error_ = 0;
89 stop;
90 END;
91 END; /* ends the SELECT group */
92RUN;
93 
94PROC PRINT DATA=combine;
95 title 'Combined Data Set après traitement';
96RUN;
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


Documentation liée : Débogage

Sujet / Mot-cléLien vers la ressource
DOC Erreurs liées aux macros fr/sampleCode/ERREUR6CA6
DOC Définitions des types d'erreurs dans SAS fr/sampleCode/DEFINI9A72
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Ne sous-estimez pas le "mode de vérification de la syntaxe". Avant de soumettre un script qui manipule des téraoctets de données dans CAS, exécutez-le une fois avec ce mode. Cela vous permet de valider toute la logique sémantique et les droits d'accès sans consommer de ressources de calcul coûteuses. »