Publicado el :
Macro EXTERNE

Macro de Ventanas para PROC PRINT

Este código también está disponible en: Deutsch English Français
Este script define primero una serie de ventanas modales con PROC PMENU y %WINDOW para crear una interfaz de usuario. La macro %printwindow orquesta luego la interacción: solicita al usuario que introduzca un nombre de conjunto de datos, valida su existencia, solicita una lista de variables (opcional) y valida su presencia, y luego solicita opciones de formato para PROC PRINT (número de observaciones, supresión de números, etc.). Finalmente, ensambla y ejecuta dinámicamente un paso de PROC PRINT basado en toda la información recopilada.
Análisis de datos

Type : EXTERNE


El script está diseñado para operar en cualquier conjunto de datos SAS cuyo nombre sea proporcionado interactivamente por el usuario a través de una ventana de entrada. La existencia del conjunto de datos se valida en el momento de la ejecución.

1 Bloque de código
PROC PMENU
Explicación :
Este procedimiento define una estructura de menú llamada 'exit' en el catálogo orion.menus. Este menú es utilizado por las ventanas interactivas para ofrecer opciones de salida ('OK', 'Cancel') y asocia acciones a estas selecciones.
¡Copiado!
1PROC PMENU catalog=orion.menus;
2 menu exit;
3 item 'Exit' menu=x;
4 
5 menu x;
6 
7 item 'OK' selection=y;
8 item 'Cancel' selection=z;
9 
10 selection y 'end';
11 selection z 'command focus';
12 
13QUIT;
2 Bloque de código
%WINDOW
Explicación :
Declara cuatro ventanas modales (dsn, var, opt, err) que servirán como interfaz de usuario para la entrada de parámetros. Cada ventana tiene un diseño específico para mostrar texto y campos de entrada para el nombre del conjunto de datos, las variables, las opciones de impresión, o para mostrar mensajes de error.
¡Copiado!
1%let msg=Press ENTER to continue.;
2 
3%window dsn columns=80 rows=20 menu=orion.menus.exit
4 
5 #3 @ 6 'Data Set: ' dsn 41 attr=underline required=yes
6 #5 @ 6 'Press ENTER to continue.' msg protect=yes;
7 
8%window var columns=80 rows=20 menu=orion.menus.exit
9 
10 #3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
11 #5 @ 6 'Variables: ' var 41 attr=underline
12 #7 @ 6 'Press ENTER to continue.' msg protect=yes;
13 
14%window opt columns=80 rows=20 menu=orion.menus.exit
15 
16 # 3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
17 # 5 @ 6 'Variables: ' var 41 attr=underline protect=yes
18 # 7 @ 6 '# of obs: ' obs 2 attr=underline
19 # 9 @ 6 'Suppress Obs #s (Y or N): ' sup 1 attr=underline
20 #10 @ 6 'Double Space (Y or N): ' dbl 1 attr=underline
21 #11 @ 6 'Column Labels (Y or N): ' lab 1 attr=underline
22 #14 @ 6 'Press ENTER to continue.' msg protect=yes;
23 
24 %window err columns=80 rows=20 menu=orion.menus.exit
25 
26 #3 @ 6 'Data Set ' c=red dsn p=yes c=red attr=rev_video
27 ' does not exist.' c=red
28 
29 #5 @ 6 'Enter Y to try again or N to stop: '
30 try 1 attr=underline
31 
32 #7 @ 6 'Press ENTER to continue.' msg protect=yes;
3 Bloque de código
Macro
Explicación :
El corazón del script. Esta macro gestiona el flujo interactivo: muestra las ventanas para recopilar las entradas del usuario, valida la existencia del conjunto de datos y las variables utilizando funciones %sysfunc, construye dinámicamente las opciones y la instrucción VAR para PROC PRINT, y ejecuta el informe.
¡Copiado!
1%macro printwindow;
2 
3 %local dsn var vars dsid rc obs sup dbl lab supx dblx labx try msg;
4 %let msg=Press ENTER to continue.;
5 %let sysmsg=Enter dataset name.;
6 %display dsn;
7 %let dsn=%upcase(&dsn);
8 
9 %DO %while(%sysfunc(exist(&dsn))=0);
10 %let dsn=%upcase(&dsn);
11 %let try=;
12 %display err;
13 %IF %upcase(&try)=Y %THEN %display dsn;
14 %ELSE %DO;
15 %put ERROR: Dataset &dsn does not exist.;
16 %return;
17 %END;
18 %END;
19 
20 %let sysmsg=Enter variable names or leave blank.;
21 %display var;
22 
23 %IF &var ne %THEN %DO;
24 %let dsid=%sysfunc(open(&dsn(keep=&var)));
25 %let rc=%sysfunc(close(&dsid));
26 %let var=%upcase(&var);
27 %IF &dsid=0 %THEN %DO;
28 %put ERROR: Variables(&var) not in &dsn..;
29 %return;
30 %END;
31 %let vars=var &var;
32 %END;
33 
34 %let sysmsg=Select options.;
35 %display opt;
36 
37 %IF &obs ne %THEN %let obs=(obs=&obs);
38 %IF %upcase(&sup)=Y %THEN %let supx=noobs;
39 %IF %upcase(&dbl)=Y %THEN %let dblx=double;
40 %IF %upcase(&lab)=Y %THEN %let labx=label;
41 
42 PROC PRINT DATA=&dsn &obs &supx &dblx &labx;
43 &vars;
44 title "&dsn";
45 RUN;
46 RUN;
47 title;
48 
49 %put NOTE: Processing complete.;
50 
51%mend printwindow;
4 Bloque de código
Macro Call
Explicación :
Ejecuta la macro %printwindow, iniciando así el proceso interactivo de generación de informes.
¡Copiado!
1%printwindow
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.