Es la pesadilla de todo administrador de procesamiento por lotes (Batch): su programa debe procesar 30 días de datos. Falta el archivo del 3er día. SAS© desencadena un error, entra en 'Modo de Comprobación de Sintaxis', y se niega a ejecutar los 27 días siguientes, aunque sean válidos.
¿Cómo forzar a SAS© a 'olvidar' el error y continuar el procesamiento? Aquí están las lecciones aprendidas de una discusión de expertos sobre el tema.
1. El Fenómeno: Modo de Comprobación de Sintaxis
Cuando SAS© se ejecuta en modo interactivo (SAS© Enterprise Guide, Ventana Display Manager), un error no lo detiene todo. Pero en modo Batch (envío a través de script, .bat, cron), SAS© está programado para ser cauteloso.
Tan pronto como encuentra un error grave (ej: 'Physical file does not exist'), activa el Modo de Comprobación de Sintaxis.
Consecuencias inmediatas:
La opción OBS pasa a 0.
La opción REPLACE pasa a NOREPLACE.
SAS© solo comprueba la sintaxis del código restante sin ejecutarlo.
El log muestra entonces:
NOTE: SAS© set option OBS=0 and will continue to check statements.
2. Solución A: La Prevención (Verificación de existencia)
El método más limpio es evitar que ocurra el error.
El usuario Darryl sugiere usar la función fileexist() antes de intentar leer el archivo.
El problema específico (FTP):
El autor de la publicación original (Chuck) se enfrenta a una limitación: sus archivos están en un servidor FTP remoto al que se accede a través de SAS© (FILENAME FTP). En este caso particular, fileexist a menudo falla o devuelve falsos negativos porque no puede verificar la ruta de red remota tan fácilmente como una ruta local.
La alternativa: Es necesario recuperar la lista de archivos del directorio FTP (a través de un comando ls o dir enviado al FTP) y analizar esta lista para verificar la presencia del archivo. Es robusto, pero pesado de codificar.
3. Solución B: El Reinicio de 'Fuerza Bruta'
Si el error es inevitable (o demasiado complejo de prevenir), ¿cómo forzar a SAS© a salir del modo 'Syntax Check' y reanudar el trabajo?
El experto David propone restablecer manualmente las opciones que SAS© modificó durante el error. Si inserta este código después de cada paso que pueda fallar (o al principio de su bucle de procesamiento), forzará al sistema a volver a estar operativo.
Aquí están los comandos mágicos para 'resucitar' su sesión SAS©:
OBS=MAX : Cancela el OBS=0 que impedía la lectura de datos.
REPLACE : Permite nuevamente la sobrescritura de tablas.
NOSYNTAXCHECK : Desactiva explícitamente el modo de verificación.
Nota avanzada: En algunas versiones o contextos, David menciona la opción no documentada NO$SYNTAXCHECK. Sin embargo, en la mayoría de los casos modernos, las tres opciones anteriores son suficientes. A veces también es necesario restablecer el código de error de macro a través de %let SYSCC=0;.
4. El Truco del Experto: ¿Cómo encontrar estas opciones?
¿Cómo saber qué opciones SAS© modifica secretamente durante un error? David comparte un método de depuración genial:
Utilice PROC OPTSAVE para guardar el estado 'sano' de sus opciones en una tabla.
Provoque un error voluntario.
Utilice PROC OPTSAVE nuevamente para guardar el estado de 'error'.
Utilice PROC COMPARE para ver las diferencias.
Ejemplo de código de investigación:
Para sobrevivir a un error en batch:
Idealmente: Verifique la existencia de los archivos antes de la lectura (FILEEXIST).
Si es imposible (FTP/Complejo): Coloque un bloque de reinicio (OPTIONS OBS=MAX REPLACE NOSYNTAXCHECK;) al principio de cada iteración de su bucle de procesamiento para garantizar que el día N+1 se procese incluso si el día N falló.