macros sas hotkeys shortcuts

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()"