zapatos software military check airline sas

software - sas wikipedia



¿Hay alguna manera de hacer que SAS se detenga en la primera advertencia o error? (5)

A SAS le gusta continuar procesando bien después de advertencias y errores, por lo que a menudo necesito desplazarme por las páginas del registro para encontrar un problema. ¿Hay alguna manera mejor? Me gustaría que se detenga tan pronto como aparezca el primer error o advertencia para que pueda solucionarlo e intentarlo de nuevo.


Como complemento a la respuesta de Rwill:

Si está utilizando un proceso almacenado (STP), también es bueno no mostrar el registro a sus usuarios cuando se produce un error y eliminar el botón "Mostrar registro SAS".

Eso se puede lograr con esto.

%macro checkcc; options obs=max no$syntaxcheck; %if (&syscc gt 4) %then %do; data _null_; file _webout; put "<h3>Sorry, your request was not processed successfully.<h3>"; rc = stpsrvset(''program error'', 0); run; %end; %let syscc=0; %mend checkcc; %checkcc;

fuente: http://support.sas.com/kb/16/225.html

Y aquí hay una versión mejorada que hice para mostrar el error en formato json.

%macro checkErrors; options obs=max no$syntaxcheck; %let old = %sysfunc(stpsrv_header(Content-type, application/json%str(;) charset=utf-8)); %put &=syscc; %put &=syserr; %put &=sysrc; %put &=syswarningtext; %put &=syserrortext; %if (&syscc gt 4) %then %do; data _null_; file _webout; put ''{''; put '' "success":"false"''; put '' ,"message":"'' "&syserrortext" ''"''; put '' ,"syscc":"'' "&syscc" ''"''; put ''}''; rc = stpsrvset(''program error'', 0); run; %end; %let syscc=0; %mend checkErrors; %checkErrors;

y versión HTML:

%macro checkErrors_HTML; options obs=max no$syntaxcheck; %if (&syscc gt 4) %then %do; data _null_; file _webout; put ''<!doctype html> ''; put ''<html> ''; put '' <head> ''; put '' <title>Error</title> ''; put '' </head> ''; put '' <body> ''; put '' <h1>An Error Occured</h1>''; put '' <p>'' "&syserrortext" ''</>''; put '' </body>''; put ''</html>''; rc = stpsrvset(''program error'', 0); run; %end; %let syscc=0; %mend checkErrors_HTML; %checkErrors_HTML;


Con frecuencia hago algo parecido a RWill, pero envuelvo todo mi programa en una macro. Después de cada paso de DATOS, PROC SQL, PROC SORT, etc., compruebo un código de error (& SYSERR o & SQLRC). Si no es cero, salto al final.

Más detalles y código aquí: https://heuristically.wordpress.com/2012/02/09/return-codes-errors-sas/

No puedo usar los fines de RWill debido a cómo el sistema por lotes de nuestra organización ejecuta programas independientes en una sesión de SAS.


He estado usando la macro %runquit recientemente. Funciona bien tanto para trabajos por lotes como para sesiones interactivas (no cierra su sesión, simplemente deja de ejecutar el código).

Fuente: http://www.cpc.unc.edu/research/tools/data_analysis/sas_to_stata/sas-macros/runquit.html

Para usarlo básicamente %runquit; al final de cualquier paso de datos o PROC, en lugar de escribir su run habitual o la declaración de quit .

Código:

%macro runquit; ; run; quit; %if &syserr. ne 0 %then %do; %abort cancel; %end; %mend runquit;

Uso de datos:

data something; * do some stuff; %runquit;

Uso de PROC:

proc sql; * do some stuff; %runquit;

No es tan bonito cuando se lee el código, pero facilita mucho la depuración.


La opción ERRORES = 1 se sugirió anteriormente, pero eso solo evita que los mensajes de ERRORES se escriban en el registro. Sugeriría otra opción de sistema ERRORABEND que evitará que el programa siga procesándose para la mayoría de los errores. No conozco una opción para finalizar el procesamiento debido a advertencias, pero creo que podría agregar una macro como la siguiente para detener el procesamiento.

%macro check_for_errors; %if &syserr > 0 %then %do; endsas; %end; %mend check_for_errors; data test1; <data step code> run; %check_for_errors;

Podría repetir la llamada a la macro después de cada paso de su programa, y ​​debería terminar en el punto en que el código de error sea todo menos 0.


Una opción es reemplazar run con run &g_cancel todo, y proc sql; con proc sql &g_noexec; . Inicialmente, &g_cancel y &g_noexec están configurados en nada, por lo que todo funciona.

Al golpear un error (ya sea %sys_rc , %sql_rc o usar la referencia a la lógica de negocios), configure &g_cancel para cancelar y &g_noexec para noexec.

Esto debería impedir que se ejecuten los pasos subsiguientes; obviamente, las variables de macro pueden omitirse para los pasos que deben ejecutarse independientemente (por ejemplo, una ordenación) o verificarse antes de realizar los pasos puramente en macro.

Nota para los usuarios de Enterprise Guide: la única nota de advertencia es que si está ejecutando varios elementos de código en la misma sesión, deberá restablecer los términos de error al comienzo de cada elemento de código, para que no haya errores no relacionados.