SAS Proc SQL INTO – ¿No se puede escribir una variable macro en una macro?
data COLUMN_LIST_DATA;
length COLUMN_LIST CATEGORY $8.;
input COLUMN_LIST CATEGORY;
datalines;
COL1 MIS_COLUMNAS
COL2 OTRO
COL3 MIS_COLUMNAS
COL4 OTRO
COL5 OTRO
;
run;
%macro TBL_Mantener(var); %macro _; %mend _;
<pre><code> PROC SQL NOPRINT;
*Crear declaración SELECT para las columnas que queremos;
SELECT COLUMN_LIST INTO: &var. SEPARADO POR ' &#39;
FROM COLUMN_LIST_DATA
WHERE CATEGORY = "&var."
;
QUIT;
</code></pre>
%mend;
%TBL_Mantener(MISCOLUMNAS);
%put &MIS_COLUMNAS.;
No estoy seguro de por qué el código anterior no funciona…. ¿Acaso INTO no acepta variables macro como entrada?
Si escribo el mismo código, sustituyendo manualmente el macroed “&var.” con “MIS_COLUMNAS”, funciona bien.
davy.ai
Parece que el problema en el código tiene que ver con la resolución de variables de macro. La variable de macro &var. no se resuelve adecuadamente dentro de la sentencia SELECT, lo que provoca un error.
Una forma de resolver este problema es utilizar la función de macro %SYSFUNC() para resolver la variable de macro antes de pasarla a la sentencia SELECT. Aquí hay una versión actualizada del código que debería funcionar:
En este código actualizado, primero utilizamos %SYSFUNC() para citar el valor de &var. y guardarlo en una nueva variable de macro llamada select_var. Luego utilizamos &select_var. en la cláusula WHERE de la sentencia SELECT para asegurarnos de que la variable de macro se resuelva correctamente.
Al realizar este cambio, el código debería funcionar como se espera.