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(®ion) |
%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.
.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.
- Abre SAS Studio (o el editor de programa de SAS Base) y crea un programa nuevo.
- Escribe la definición de la variable con
%LETy úsala dentro de un título entre comillas dobles. - 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:
| 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 |
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.
%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.
- Escribe el bloque
%MACRO resumen(anio, region);…%MEND resumen;con unPROC MEANSdentro. - Llama a la macro dos veces, una por región, con
%resumen(2026, Norte)y%resumen(2026, Sur). - Ejecuta y revisa la pestaña Results.
%MACRO resumen(anio, region);
PROC MEANS DATA = trabajo.ventas MEAN SUM;
WHERE anio = &anio AND region = "%UPCASE(®ion)";
VAR importe;
TITLE "Resumen ®ion - &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.
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.
- Escribe un
%DO i=2024 %TO 2026;que envuelva elPROC PRINT. - Dentro, un
%IFque compare el número de filas con cero y muestre un mensaje si no hay datos. - 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ño &i";
RUN;
%IF &syserr = 0 %THEN %DO;
%PUT - Listado del año &i generado correctamente.;
%END;
%ELSE %DO;
%PUT - AVISO: el año &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.
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.
- En el editor de SAS, ejecuta
PROC EXPORTapuntando a una carpeta local. - Abre Excel y ve a la cinta para cargar el archivo.
- Revisa que las columnas hayan quedado en celdas separadas.
PROC EXPORT DATA = trabajo.ventas
OUTFILE = "C:\datos\ventas.csv"
DBMS = CSV REPLACE;
RUN;
| 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 |
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.
- Guarda el libro de Excel como
.xlsxen una carpeta local. - En SAS, ejecuta
PROC IMPORTapuntando al archivo. - Abre el dataset
trabajodesde el explorador para verificar las filas.
PROC IMPORT DATAFILE = "C:\datos\ventas.xlsx"
DBMS = XLSX REPLACE
OUT = trabajo;
GETNAMES = YES;
RUN;
PROC IMPORT es mejor cuando el archivo tiene miles de filas o se repite cada mes.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.
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.
Lo que ya sabes hacer con macros en SAS y el siguiente paso
- Definir variables macro con
%LETy leerlas con&nombre. - Encerrar código en
%MACRO ... %MENDy pasarle parámetros. - Recorrer años con
%DO ... %TO ... %ENDy avisar conIF ... %THEN ... %ELSE. - Sacar el resultado a
.xlsxo.csvconPROC 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
- OracleSAS Macro Catalogconsultado el 06/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 06/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 06/10/2026
- MicrosoftTRIMRANGE — documentación oficialconsultado el 06/10/2026
- MicrosoftVF.PLAN — documentación oficialconsultado el 06/10/2026