macros - SAS: Ejecutar el código SAS usando la tecla de acceso directo
hotkeys shortcuts (2)
Quiero ejecutar código que es independiente de mi programa actual mediante atajos de teclado dentro del Editor mejorado en SAS 9.4 para Windows. Lo he logrado con un éxito limitado y solo puedo ejecutar macro declaraciones. Sin embargo, también quiero poder ejecutar sentencias que no sean macros. ¿Cómo hago esto?
Esto es lo que descubrí hasta ahora.
Configuración general
Acceda al menú de LLAVES escribiendo "LLAVES" en el símbolo del sistema o enviando
dm ''keys'';
Para una de las claves, ingrese la definición
%put Hello, world!;
Guarde el nuevo enlace de clave presionando Ctrl+s
. Para los propósitos de esta explicación, lo vincularé a F7
. Una vez guardado, presiona F7
y "¡Hola, mundo!" se imprimirá en el registro.
Podemos ampliar este concepto colocando el código anterior en una macro.
%macro HelloWorld();
%put Hello, world!;
%mend;
Compila la macro %HelloWorld
. Si luego unimos %HelloWorld();
a F7
, podemos demostrar que se puede invocar una macro con un atajo.
A través de AUTOCALL
Podemos avanzar aún más y guardar nuestra macro %HelloWorld
como un programa HelloWorld.sas
. Si luego lo colocamos en una biblioteca AUTOCALL
(ejecute %put %sysfunc(pathname(sasautos));
para encontrar dónde están ubicados en su computadora, podemos ejecutarlo dentro de cualquier nueva sesión de SAS.
Sin embargo, parece que solo las macro declaraciones funcionan con este método. Para demostrar esto, supongamos que en su lugar definimos %HelloWorld
como
%macro HelloWorld();
data _null_;
put ''Hello, world!'';
run;
%mend;
Nuevamente, guarde esto como HelloWorld.sas
y colóquelo en un directorio AUTOCALL. Para mí, cuando intento ejecutar esto, aparece el siguiente error:
ERROR: The SAS/EIS product with which the procedure is associated is either not licensed for
your system or the product license has expired. Please contact your SAS installation
representative.
Via% INCLUDE
Como un AUTOCALL requiere que se compile y llame una macro, pensé que %INCLUDE
podría ejecutar el código directamente.
Crea un archivo llamado HelloWorld.sas
contenga %put Hello, world!
. Guárdelo en una ruta de archivo corta. Luego, en el menú KEYS, unir F7
a %include "C:/Short Path/HelloWorld.sas";
. Ahora F7
imprimirá "¡Hola, mundo!" al registro.
Si, en cambio, ahorramos
data _null_;
put ''Hello, world!'';
run;
a HelloWorld.sas
y tratamos de ejecutarlo usando nuestro atajo %INCLUDE
, recibo el mismo error:
ERROR: The SAS/EIS product with which the procedure is associated is either not licensed for
your system or the product license has expired. Please contact your SAS installation
representative.
Misc. Intenta
También intenté ingresar el código directamente en una definición de KEY, pero de nuevo, parece que solo funciona para las declaraciones de macro.
Podría ser posible usar %SYSFUNC
, pero mi objetivo final es poder usar PROC SQL
o pasos de datos y no creo que %SYSFUNC
pueda hacer esto.
Basándose en la respuesta de @ Quentin, si su paso de datos es enorme, puede escribir su paso de datos y guardarlo como un programa compilado como tal:
/* store your datastep (below stored in WORK, can be stored in any defined library */
data male female / pgm=work.saved_program;
set sashelp.class;
if SEX="M" then output male;
else output female;
run;
Luego, como @Quentin sugirió, vaya a su ventana KEYS<DMKEYS>
e ingrese:
submit "data pgm = work.saved_program; describe; execute; run;"
Esto enviará la totalidad de su paso de datos guardado en la biblioteca que elija.
Puede usar el comando de envío, es decir, definir una clave como:
submit "data _null_ ; put ''Hello World!''; run;"
También funciona con una macro llamada:
submit "%HelloWorld()"