sas

Cómo crear una macro en Excel desde un script de SAS

octubre 13, 2026 Tuto Excel 12 min read
Cómo crear una macro en Excel desde un script de SAS

Cuando alguien busca "macro en sas" normalmente quiere aprender a escribir una macro dentro del programa SAS, no a grabar una macro de Excel. Aquí lo tomamos con ese sentido: macros del software estadístico SAS, con sus palabras clave %LET, %MACRO y %MEND, y la forma de llevarlas a un libro de Excel.

Al terminar este tutorial vas a saber definir una variable con %LET, empaquetar tu código en un programa macro que reciba parámetros, recorrer años con %DO ... %TO y mover el resultado a Excel con PROC EXPORT o traer un .xlsx a SAS con PROC IMPORT. El libro que usamos como ejemplo es el informe de ventas de una tienda, con tres años y dos regiones.

Qué es una macro en SAS y para qué se usa

Una macro en SAS es un bloque de código reutilizable que automatiza lo que repetirías a mano cada mes, cada trimestre o cada año. Se escribe con tres piezas: %LET para guardar un valor, %MACRO ... %MEND para encerrar el programa, y los parámetros entre paréntesis cuando quieres que el mismo bloque sirva para casos distintos.

Imagina el informe mensual de ventas de una tienda. El año cambia cada vez, pero el resto del programa es siempre el mismo. Con una macro, escribes el informe una sola vez y le pasas el año: en enero usas %resumen(2026, Norte) y en febrero %resumen(2026, Sur). SAS genera el listado por ti y tú no tocas el código. La palabra "macro" aquí no tiene nada que ver con la grabadora de macros de la pestaña Programador de Excel: vive dentro de SAS.

Las piezas de una macro: variables, programa y funciones

Una macro se apoya en tres elementos: las variables macro, que guardan texto o números; el programa macro, que es el bloque de código que se ejecuta; y las funciones macro, que operan sobre ese texto (contarlo, cortarlo, pasarlo a mayúsculas).

Las variables macro se crean con %LET. Hay dos clases: las globales, que existen durante toda la sesión y se ven desde cualquier programa, y las locales, que solo viven dentro de la macro donde se declaran como parámetros. Los programas macro empiezan con %MACRO nombre(arg1, arg2); y terminan con %MEND nombre;. Las funciones integradas más usadas son %UPCASE (pasa a mayúsculas), %SUBSTR (recorta una parte) y %LENGTH (cuenta caracteres).

Pieza Para qué sirve Ejemplo
%LET Guardar un valor %LET anio = 2026;
%MACRO ... %MEND Encerrar el bloque %MACRO resumen; ... %MEND resumen;
Parámetros Personalizar la macro %MACRO resumen(anio, region);
%UPCASE Pasar texto a mayúsculas %UPCASE(&region)
%SUBSTR Recortar texto %SUBSTR(&anio, 1, 4)

Dónde se ejecuta una macro en SAS y qué necesitas instalar

Las macros se escriben en el editor de programa de SAS: el panel donde escribes código y abajo ves la salida. Necesitas una instalación de SAS (SAS Base), o el cliente SAS, o SAS Studio si trabajas en el navegador. Una vez escrita, pulsas F3 o el botón Ejecutar y el resultado aparece en la ventana de resultados.

Nota: Excel no ejecuta código SAS. Si tu idea era automatizar algo dentro de Excel, lo que necesitas son las macros de la pestaña Programador, que se escriben en VBA o se graban con la grabadora. Aquí el código vive en SAS y los datos viajan a Excel solo cuando los exportas a .csv o .xlsx.

Tu primera macro: cambiar el título de un informe con una variable

Empezamos con el caso más sencillo: una variable macro que cambia el título del informe según el año. Usa el conjunto de datos trabajo.ventas, que tiene las ventas por región y mes.

  1. Abre SAS Studio (o el editor de programa de SAS Base) y crea un programa nuevo.
  2. Escribe la definición de la variable con %LET y úsala dentro de un título entre comillas dobles.
  3. Pulsa F3 (o el botón Ejecutar) para enviarlo a SAS.

%LET anio = 2026;

PROC PRINT DATA = trabajo.ventas;
    WHERE anio = &anio;
    TITLE "Informe anual de ventas - &anio";
    VAR region mes importe;
RUN;

La hoja que verás al abrir trabajo.ventas en el visor es la siguiente:

A1fx**region**
A B C D
1 region mes anio importe
2 Norte Enero 2026 12.450
3 Norte Febrero 2026 13.020
4 Sur Enero 2026 9.880
5 Sur Febrero 2026 10.210
6 Centro Enero 2026 11.300
7 Centro Febrero 2026 11.980
ventas

El listado que imprime SAS lleva el título "Informe anual de ventas – 2026". Si cambias %LET anio = 2025; y vuelves a ejecutar, el título cambia sin tocar el resto del programa.

Comprueba: En la pestaña Results aparece el listado y arriba, como título, el año que pusiste en %LET.

Una macro con parámetros para no repetir código

El caso útil es escribir el informe una vez y llamarlo con datos distintos. Ahora la macro recibe dos parámetros: el año y la región.

  1. Escribe el bloque %MACRO resumen(anio, region); … %MEND resumen; con un PROC MEANS dentro.
  2. Llama a la macro dos veces, una por región, con %resumen(2026, Norte) y %resumen(2026, Sur).
  3. Ejecuta y revisa la pestaña Results.

%MACRO resumen(anio, region);
    PROC MEANS DATA = trabajo.ventas MEAN SUM;
        WHERE anio = &anio AND region = "%UPCASE(&region)";
        VAR importe;
        TITLE "Resumen &region - &anio";
    RUN;
%MEND resumen;

%resumen(2026, Norte);
%resumen(2026, Sur);

SAS genera dos tablas de medias y suma, una por región. La macro es la misma, solo cambia lo que le pasas entre paréntesis.

Comprueba: En la pestaña Results hay dos listados separados, el primero con el título "Resumen NORTE – 2026" y el segundo con "Resumen SUR – 2026".

Bucles y condiciones dentro de una macro

Cuando el mismo informe toca hacerse para varios años, se mete dentro de un %DO … %END. Aquí recorremos tres años y añadimos una condición con %IF/%THEN/%ELSE para avisar cuando un año no tiene ventas.

  1. Escribe un %DO i=2024 %TO 2026; que envuelva el PROC PRINT.
  2. Dentro, un %IF que compare el número de filas con cero y muestre un mensaje si no hay datos.
  3. Cierra con %END; y ejecuta.

%MACRO informe_anual;
    %DO i = 2024 %TO 2026;
        PROC PRINT DATA = trabajo.ventas;
            WHERE anio = &i;
            TITLE "Ventas del a&ntildeo &i";
        RUN;

        %IF &syserr = 0 %THEN %DO;
                %PUT - Listado del a&ntildeo &i generado correctamente.;
            %END;
            %ELSE %DO;
                %PUT - AVISO: el a&ntildeo &i no tiene datos.;
            %END;
    %END;
%MEND informe_anual;

%informe_anual;

La salida que verás en la pestaña Log es:

- Listado del año 2024 generado correctamente.
- Listado del año 2025 generado correctamente.
- AVISO: el año 2026 no tiene datos.

Si en tu tienda el año 2026 todavía no tiene ventas cargadas, la macro lo detecta y avisa en vez de fallar en silencio.

Comprueba: En la pestaña Results aparecen tres listados (uno por año) y en la pestaña Log aparecen tres líneas, las dos primeras de "generado correctamente" y la tercera de aviso.

Pasar datos de una macro de SAS a Excel y de Excel a SAS

SAS y Excel se entienden, pero solo a través de archivos. Una vez escrita, suelta Excel y pasa al intercambio: .csv y .xlsx son los formatos que conectan ambos programas.

Exportar desde SAS y abrir el archivo en Excel

Para sacar datos de SAS a Excel, usa PROC EXPORT. Esto escribe un .csv en una carpeta de tu equipo; después lo abres en Excel desde la cinta.

  1. En el editor de SAS, ejecuta PROC EXPORT apuntando a una carpeta local.
  2. Abre Excel y ve a la cinta para cargar el archivo.
  3. Revisa que las columnas hayan quedado en celdas separadas.

PROC EXPORT DATA = trabajo.ventas
    OUTFILE = "C:\datos\ventas.csv"
    DBMS = CSV REPLACE;
RUN;
DatosObtener y transformar datosDesde texto o CSV
A1fx**region**
A B C D
1 region mes anio importe
2 Norte Enero 2026 12.450
3 Norte Febrero 2026 13.020
4 Sur Enero 2026 9.880
5 Sur Febrero 2026 10.210
6 Centro Enero 2026 11.300
7 Centro Febrero 2026 11.980
ventas
Comprueba: Al elegir el archivo en el cuadro "Desde texto o CSV", Excel muestra una vista previa con las cuatro columnas (region, mes, anio, importe) y los datos en su sitio.

Traer un Excel a SAS sin reescribir los datos

Para el camino contrario, usa PROC IMPORT. Eliges el archivo .xlsx, le dices que la primera fila tiene nombres (GETNAMES=YES) y SAS crea un dataset nuevo.

  1. Guarda el libro de Excel como .xlsx en una carpeta local.
  2. En SAS, ejecuta PROC IMPORT apuntando al archivo.
  3. Abre el dataset trabajo desde el explorador para verificar las filas.

PROC IMPORT DATAFILE = "C:\datos\ventas.xlsx"
    DBMS = XLSX REPLACE
    OUT = trabajo;
    GETNAMES = YES;
RUN;
Consejo: Si la tabla es pequeña, también puedes copiarla de Excel y llevarla a SAS con Pegado especial: en Excel selecciona, Ctrl+C, y en SAS pegas en el editor. PROC IMPORT es mejor cuando el archivo tiene miles de filas o se repite cada mes.
Comprueba: En el explorador de SAS aparece el dataset TRABAJO y, al abrirlo, tiene las mismas filas y columnas que la hoja de Excel.

Por qué una macro no hace lo que esperas

Tres errores aparecen una y otra vez cuando se empieza con macros: la variable que no existe, el %MEND que se olvida y el %DO que se queda sin %END. La buena noticia es que SAS los avisa con mensajes claros en la pestaña Log.

Para ver cómo SAS expande tu macro mientras se ejecuta, añade al principio del programa:

OPTIONS MPRINT SYMBOLGEN MLOGIC;

MPRINT muestra cada sentencia de la macro tal como se genera, SYMBOLGEN enseña el valor de cada variable y MLOGIC dibuja el flujo del %IF y del %DO. Cuando la macro falla, estas tres opciones son las gafas con las que ves dónde se ha roto.

La macro no compila o no entra en el bucle

Si la pestaña Log dice ERROR: se esperaba el nombre del archivo de comandos, casi siempre hay una comilla doble mal cerrada en el WHERE o en el TITLE. Revisa que cada " tenga su pareja y que dentro del texto no haya comillas sueltas.

Si dice ERROR: se esperaba %END, falta el %END; que cierra el %DO. El mensaje suele venir acompañado del número de línea donde se abrió el bucle, así que vuelve a ese punto y ciérralo.

Si la macro se ejecuta pero el PROC PRINT no muestra nada, mira la pestaña Log: SYMBOLGEN te dirá qué valor tomó &anio. Si está vacío, falta el %LET o lo has escrito dentro de la macro, donde solo se ve en ese bloque.

Cuidado: OPTIONS MPRINT deja la expansión activada para toda la sesión. Cuando termines de depurar, quítala con OPTIONS NOMPRINT NOSYMBOLGEN NOLOGIC; para que el Log vuelva a verse limpio.

Lo que una macro de SAS no puede hacer en Excel

Una macro de SAS vive dentro de SAS. Excel no la interpreta, no la ejecuta ni la muestra. Si guardas un programa con %LET en una celda de Excel, lo que verás es el texto %LET, no una variable. Cualquier automatización que quieras dentro de Excel se hace con VBA, con la grabadora de macros o, en Microsoft 365, con Python en Excel.

Nota: "Macro en SAS" y "macro en Excel" se llaman igual pero son cosas distintas. Las macros de SAS automatizan bloqueos de código SAS; las de Excel automatizan tareas externas (formato, tablas dinámicas, gráficos) grabadas o escritas en VBA.

Lo que ya sabes hacer con macros en SAS y el siguiente paso

  • Definir variables macro con %LET y leerlas con &nombre.
  • Encerrar código en %MACRO ... %MEND y pasarle parámetros.
  • Recorrer años con %DO ... %TO ... %END y avisar con IF ... %THEN ... %ELSE.
  • Sacar el resultado a .xlsx o .csv con PROC EXPORT.
  • Traer un libro de Excel a SAS con PROC IMPORT ... DBMS=XLSX.

El siguiente paso natural es juntar todo en una sola macro que genere el informe por región con un solo clic: %informe_completo(2026); recorre las tres regiones, exporta cada tabla a .csv y deja en tu carpeta tres archivos listos para abrirlos en Excel.

Datos comprobados en octubre de 2026.

Dudas al escribir una macro en SAS

1. Ejemplo de macro en SAS

Una macro en SAS es un bloque de código que automatiza tareas repetitivas. Se define con %MACRO nombre; y se cierra con %MEND;, y se ejecuta escribiendo %nombre. Por ejemplo, %MACRO saludo; %PUT Hola; %MEND; crea una macro llamada saludo que imprime Hola al ejecutarla.

2. Técnicas avanzadas del lenguaje de macros de SAS

Entre las técnicas avanzadas están el uso de parámetros con valores por defecto, las llamadas dinámicas con %SYSEVALF y la creación de macros que generan código con CALL SYMPUT. También se trabaja con resolución diferida de símbolos para construir nombres de variables en tiempo de ejecución.

3. Programación de macros en SAS

La programación de macros en SAS permite escribir código reutilizable que ahorra tiempo en informes y análisis. Se basa en variables de macro, bloques %MACRO/%MEND y funciones como %EVAL, %SUBSTR o %SYSFUNC. Lo recomendable es empezar con ejemplos sencillos e ir incorporando lógica condicional con %IF/%THEN.

4. Curso de macros de SAS

SAS ofrece el curso oficial SAS Macro Language 1: Essentials, disponible en su web de formación con materiales y ejercicios guiados. También hay libros introductorios y videotutoriales que cubren desde la grabación de macros hasta la generación automática de informes. Para aprender, lo más práctico es combinar teoría con un proyecto real donde apliques lo aprendido.

5. SAS Macro Language 1: Essentials

Es el curso oficial de SAS para iniciarse en el lenguaje de macros. Cubre la creación de %MACRO, el uso de variables de macro, la automatización de tareas y la reutilización de código. Está disponible en la plataforma de formación de SAS Institute, con manuales, ejemplos y ejercicios prácticos.

6. Libro o manual de SAS Programming 2 en PDF

SAS publica materiales de sus cursos y, en algunos casos, distribuye PDFs de los manuales a través de su web oficial de formación. Los manuales de SAS Programming 2 cubren temas como SQL en SAS, técnicas de combinación de tablas y el uso avanzado de macros. Para conseguirlos, conviene entrar en support.sas.com o en la página de aprendizaje de SAS Institute.

Fuentes

  1. OracleSAS Macro Catalogconsultado el 06/10/2026
  2. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 06/10/2026
  3. MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 06/10/2026
  4. MicrosoftTRIMRANGE — documentación oficialconsultado el 06/10/2026
  5. MicrosoftVF.PLAN — documentación oficialconsultado el 06/10/2026