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!
proc pmenu catalog=orion.menus;
menu exit;
item 'Exit' menu=x;
menu x;
item 'OK' selection=y;
item 'Cancel' selection=z;
selection y 'end';
selection z 'command focus';
quit;
1
PROC 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
13
QUIT;
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!
%let msg=Press ENTER to continue.;
%window dsn columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set: ' dsn 41 attr=underline required=yes
#5 @ 6 'Press ENTER to continue.' msg protect=yes;
%window var columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
#5 @ 6 'Variables: ' var 41 attr=underline
#7 @ 6 'Press ENTER to continue.' msg protect=yes;
%window opt columns=80 rows=20 menu=orion.menus.exit
# 3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
# 5 @ 6 'Variables: ' var 41 attr=underline protect=yes
# 7 @ 6 '# of obs: ' obs 2 attr=underline
# 9 @ 6 'Suppress Obs #s (Y or N): ' sup 1 attr=underline
#10 @ 6 'Double Space (Y or N): ' dbl 1 attr=underline
#11 @ 6 'Column Labels (Y or N): ' lab 1 attr=underline
#14 @ 6 'Press ENTER to continue.' msg protect=yes;
%window err columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set ' c=red dsn p=yes c=red attr=rev_video
' does not exist.' c=red
#5 @ 6 'Enter Y to try again or N to stop: '
try 1 attr=underline
#7 @ 6 'Press ENTER to continue.' msg protect=yes;
#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.
%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 PRINTDATA=&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!
%printwindow
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.