Publicado el :
Reporting CREATION_INTERNE

Demostración de estructuras de control en ODS Tagsets

Este código también está disponible en: English Français
Este programa utiliza el procedimiento TEMPLATE para crear un Tagset personalizado llamado 'tagsets.do_done'. El objetivo es demostrar las capacidades de programación del lenguaje de plantillas ODS, en particular el uso de variables (eval), bucles (do /while), instrucciones de control de flujo (continue, stop, breakif) y condiciones (do /if - else). El script ejecuta posteriormente este tagset para producir un archivo de texto de prueba.
Análisis de datos

Type : CREATION_INTERNE


No se utilizan datos externos ni tablas SAS. El contenido se genera dinámicamente mediante la lógica de la plantilla.

1 Bloque de código
PROC TEMPLATE
Explicación :
Definición del Tagset 'tagsets.do_done'. El evento 'doc' contiene la lógica principal (bucles y pruebas), y el evento 'bif' demuestra el uso condicional de breakif.
¡Copiado!
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 Bloque de código
ODS
Explicación :
Ejecución del Tagset definido previamente para generar el archivo de salida 'do_done_out.txt'.
¡Copiado!
1ods tagsets.do_done file="do_done_out.txt";
2ods tagsets.do_done close;
3 
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.