Publié le :
Reporting CREATION_INTERNE

Démonstration des structures de contrôle dans ODS Tagsets

Ce code est également disponible en : English Español
Ce programme utilise la procédure TEMPLATE pour créer un Tagset personnalisé nommé 'tagsets.do_done'. L'objectif est de démontrer les capacités de programmation du langage de template ODS, notamment l'utilisation de variables (eval), de boucles (do /while), d'instructions de contrôle de flux (continue, stop, breakif) et de conditions (do /if - else). Le script exécute ensuite ce tagset pour produire un fichier texte de test.
Analyse des données

Type : CREATION_INTERNE


Aucune donnée externe ou table SAS n'est utilisée. Le contenu est généré dynamiquement par la logique du template.

1 Bloc de code
PROC TEMPLATE
Explication :
Définition du Tagset 'tagsets.do_done'. L'événement 'doc' contient la logique principale (boucles et tests), et l'événement 'bif' démontre l'utilisation conditionnelle de breakif.
Copié !
1PROC TEMPLATE;
2 define tagset tagsets.do_done;
3 
4 define event doc;
5 
6 put "HELLO" nl ;
7 
8 eval $i 0;
9 
10 put "i is " $i nl;
11
12 put "Going into a Loop to 10" nl;
13 put "Continue at 5" nl;
14 put "stop at 8" nl;
15 
16 DO /while $i < 10;
17 eval $i $i+1;
18 continue /IF $i eq 5;
19 stop /IF $i eq 8;
20 put "I is " $i nl;
21 ELSE;
22 put "do this if i started out > 10" nl;
23 done;
24
25 eval $i 0;
26 
27 put "i is " $i nl;
28
29 put "Going into a false Loop" nl;
30 
31 DO /while $i > 10;
32 eval $i $i+1;
33 put "I is " $i nl;
34 ELSE;
35 put "Hello from a while's ELSE" nl;
36 done;
37 
38 set $poem "Jabberwocky";
39 
40 /* Test if ... */
41 do /if cmp($poem, "Jabberwocky");
42 put "inside SIMPLE IF: should PRINT" nl;
43 else;
44 put "inside ELSE: should not PRINT" nl;
45 done;
46
47 /* Test nesting in an else... */
48 do /if ^cmp($poem, "Jabberwocky");
49 put "inside IF: should not PRINT" nl;
50 else;
51 put "inside ELSE: should PRINT" nl;
52 
53 do /if cmp($poem, "Jabberwocky");
54 put "IF inside ELSE, does PRINT" nl;
55 else;
56 put "ELSE inside ELSE, doesn't print" nl;
57 done;
58 
59 put "Still inside else: should print" nl;
60 
61 done;
62 
63 /* test break if */
64 trigger bif;
65
66 put "GOODBYE" nl;
67
68 END;
69 
70 /*---------------------------------------------------------------eric-*/
71 /*-- This is a more effecient and easier to read construct which is --*/
72 /*-- equivalent to: --*/
73 /*-- --*/
74 /*-- put "Hello from bif" nl /if cmp($poem, "Jabberwocky"); --*/
75 /*-- break /if cmp($poem, "Jabberwocky"); --*/
76 /*------------------------------------------------------------29May03-*/
77 
78 define event bif;
79 put "Hello from bif: prints" nl / breakif cmp($poem, "Jabberwocky");
80 
81 put "This won't PRINT" nl;
82 END;
83 
84
85END;
86RUN;
2 Bloc de code
ODS
Explication :
Exécution du Tagset défini précédemment pour générer le fichier de sortie 'do_done_out.txt'.
Copié !
1ods tagsets.do_done file="do_done_out.txt";
2ods tagsets.do_done close;
3 
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.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« L'utilisation des ODS Tagsets via PROC TEMPLATE représente l'un des sommets de la personnalisation dans l'écosystème SAS. Bien plus qu'un simple formatage de sortie, ce langage permet de construire de véritables micro-programmes capables de piloter la structure du balisage (HTML, XML, CSV). La puissance de cet exemple réside dans l'utilisation d'instructions de contrôle de flux telles que do /while, continue et breakif, qui sont normalement l'apanage de langages procéduraux. En manipulant des variables avec eval, vous ne vous contentez plus de décorer des données : vous conditionnez dynamiquement le contenu du fichier de destination selon des règles métier complexes, directement au moment de la génération du rapport. »