La llegada de SAS© Viya™ y el motor CAS (Cloud Analytic Services) introdujo el uso de FedSQL, una implementación estandarizada del lenguaje SQL diseñada para la escalabilidad. Sin embargo, FedSQL es mucho más estricto que el PROC SQL clásico de SAS© Base, especialmente en lo que respecta a los tipos de datos.
Un error frecuente ocurre al filtrar fechas a través de variables macro numéricas.
El Problema: Tipado Fuerte vs Tipado Débil
En SAS© clásico (Base SAS©), una fecha no es más que un número (el número de días desde el 1 de enero de 1960). Por lo tanto, puedes escribir sin problema:
WHERE mi_columna_fecha > 23040.
En FedSQL, los tipos son estrictos. Una columna definida como DATE no se puede comparar directamente con un INTEGER (entero). Si intentas inyectar una macro-variable numérica bruta en tu consulta CAS, obtendrás el siguiente error:
ERROR: Operator is not unique: DATE > INTEGER
Esto significa que el motor no sabe cómo comparar estos dos tipos de datos incompatibles sin una conversión explícita.
La Solución: El Formato ANSI
FedSQL respeta el estándar ANSI SQL. Para filtrar por una fecha, debes proporcionar un valor literal en el formato específico:
DATE 'YYYY-MM-DD'
El desafío técnico es transformar tu macro-variable numérica (ej: 23040) en una cadena de caracteres formateada (ej: '2023-01-30'), gestionando al mismo tiempo las restricciones del macro-lenguaje SAS© (comillas, guiones).
La Receta Técnica
Para construir esta cadena dinámicamente, debemos combinar tres herramientas:
PUTN: Para convertir el número bruto a formato de fecha con guiones (yymmddd10.).%QSYSFUNC: Para ejecutarPUTNmientras se ocultan los guiones (-). Sin laQ(Quoting), SAS© podría interpretar los guiones de la fecha (2023**-01-**30) como signos "menos" (resta).%TSLIT: Una macro proporcionada por SAS© que resuelve el problema de las comillas. En SQL, los literales deben estar entre comillas simples ('valor'), pero las macros SAS© no se resuelven dentro de comillas simples.%TSLIT(Time Share Literal) genera una cadena entre comillas simples permitiendo la resolución de la macro dentro.
El Código Corregido
Así es como se combinan estos elementos para una consulta FedSQL robusta:
