SAS Enterprise Guide
Trabajar con programas SAS
Cómo combinar DATA step y PROC SQL, dónde aplican las funciones, conversiones implícitas y matices respecto a SQL estándar.
Descripción
En Enterprise Guide escribirás **programas SAS** como texto: bloques DATA, PROCs, macros (%let, %macro) y comentarios /* */ o * ;. El flujo típico es leer una tabla SAS (o importada), transformar con asignaciones y funciones, y volcar resultados con PROC SQL, MEANS, REPORT, etc. **PROC SQL** te ofrece SELECT/FROM/WHERE/GROUP BY muy parecido a SQL de bases de datos; el motor traduce a pasos internos y respeta reglas SAS (por ejemplo alias con AS, tratamiento de NULL como valor ausente). El **DATA step** ejecuta un bucle implícito por cada fila: las funciones escalares (SUM, MEAN, SUBSTR…) se evalúan en ese contexto, y puedes usar arrays, RETAIN y BY groups para lógica secuencial. Un matiz clave frente a SQL puro: en SAS las variables tienen **longitud y tipo** fijados en compilación; mezclar caracter y numérico provoca conversiones implícitas que ves en el log. Otro matiz: **MISSING** en numérico es distinto de cadena vacía; muchas funciones estadísticas ignoran missing en agregados, pero debes conocer N y NMISS. Para SQL dentro de SAS, revisa también **dialecto** (funciones permitidas en PROC SQL pueden diferir del DATA step). Para el detalle de cada función y variaciones por versión, usa la ayuda de tu instalación o la documentación del producto que corresponda a tu entorno.
Estructura general
Comparación de bloques PROC SQL frente a DATA step: misma función puede aparecer en ambos con matices de sintaxis y de evaluación.
/* PROC SQL: estilo declarativo */
PROC SQL;
CREATE TABLE trabajo.resumen AS
SELECT grupo,
SUM(venta) AS venta_total,
MEAN(venta) AS venta_media
FROM ventas
WHERE fecha BETWEEN '01JAN2026'd AND '31MAR2026'd
GROUP BY grupo;
QUIT;
/* DATA step: fila a fila + funciones */
DATA trabajo.etiquetas;
set trabajo.resumen;
etiqueta = catx(" | ", put(grupo, best12.), put(venta_media, 12.2));
RUN;
Componentes
Cómo encajan PROC SQL, DATA step y el uso de funciones en expresiones.
- PROC SQL ... QUIT;
- Bloque de consultas SQL embebidas. CREATE TABLE materializa una tabla SAS. Los nombres de columnas y alias siguen reglas SAS; los valores nulos se tratan con funciones como COALESCE.
- DATA paso
- Cada iteración lee una fila de entrada (SET/MERGE/UPDATE). Las asignaciones y funciones se aplican por fila salvo que uses BY, RETAIN o arrays para efectos acumulados.
- PUT / INPUT
- Conversión formato ↔ valor. PUT convierte numérico/fecha a texto con formato; INPUT parsea texto a numérico según informato. Es el equivalente práctico a CAST en SQL con más control en SAS.
- CATX, STRIP, SUBSTR…
- Funciones de cadena y fecha que comparten nombre entre DATA step y expresiones en PROC SQL, pero revisa restricciones del procedimiento.
Ejemplo
PROC SQL NOPRINT;
CREATE TABLE trabajo.top_clientes AS
SELECT cliente_id,
SUM(importe) AS total FORMAT=COMMA12.2
FROM facturas
WHERE estado = "PAGADO"
GROUP BY cliente_id
HAVING calculated total > 1000
ORDER BY total DESC;
QUIT;
DATA _NULL_;
set trabajo.top_clientes(obs=3);
put cliente_id= total=;
RUN;
Comprueba la sintaxis y el comportamiento en la versión de SAS de tu entorno; el log del programa y la ayuda integrada suelen ser la referencia más fiable ante dudas.