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.

SAS
/* 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

SAS
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.