La automatización es el corazón de la programación SAS©. Un escenario clásico consiste en verificar el contenido de una tabla antes de iniciar un procesamiento: "Si mi tabla contiene datos, ejecuta el informe estándar; de lo contrario, ejecuta un informe de anomalías."
Aunque la lógica parece simple, su implementación a través del lenguaje macro puede encontrar dos obstáculos importantes: el alcance de las variables y el comportamiento engañoso de ciertas variables automáticas como SQLOBS.
El Problema: ¿Por qué mi código no detecta el error?
Imaginemos un código estructurado en dos macros:
%Check_Data: Verifica los datos y crea un indicador&error.%Run_Report: Lee&errory decide qué informe imprimir.
El error frecuente es definir la variable &error dentro de la primera macro sin precaución.
1. La trampa del alcance (Scope)
Por defecto, una macro-variable creada dentro de una macro (mediante %LET) es local. Solo existe durante la ejecución de esa macro.
Tan pronto como %Check_Data finaliza, la variable &error se destruye. Cuando %Run_Report intenta leer &error, no encuentra nada y el programa falla (error "Apparent symbolic reference not resolved").
La Solución: Es necesario declarar la variable como global al principio del programa o antes de su uso: