BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
EduardoQuiroz
Obsidian | Level 7

 

 

Hola, necesito crear una variable macro que contenga de 1 a N# de datos

ejemplo:

Macro normal con un dato

%let ANIO1=2021;

        ANIO=&ANIO1

 

Macro que contenga varios datos como lo sig(no se si se escriba asi, pero es mi idea)

 

%let ANIO1 IN 2021,2022,2023;

        ANIO=&ANIO1

 

pero lo ideal seria   crear una variable macro que los datos que almacene dependan de una tabla ejemplo: traeme  la colunma nombre de la tabla nombres donde en la columna apellido sea "X" .

 

esto lo he logrado con la sentensia %global , sin embargo no puedo filtrar buscando en otra tabla con esta variable.

 

Comparto mi codigo y el resultado que genera

 

Codigo:

 

DATA Nombres;
INPUT NumEmp Nombre $ Apellido $;
DATALINES;
1 Eduardo Quiroz
2 Paola Castillo
3 Jhovanny Torres
4 RosaM Corbi
5 Noemi Robles
6 Rocio Fuentes
7 Alvin Resendiz
8 Maricruz Buendia
;
RUN;

DATA Nombres1;
INPUT NumEmp Nombre $ Apellido $;
DATALINES;
1 Eduardo Quiroz
2 Paola Castillo
3 Jhovanny Torres
4 RosaM Corbi
5 Noemi Robles
6 Rocio Fuentes
7 Alvin Resendiz
8 Maricruz Buendia
;
RUN;


%global vlist;
proc sql;
select Nombre into:Vlist
From Work.Nombres
Where Apellido= 'Quiroz';
quit;

 

data lalo;
SET Nombres1;
where NOMBRE=&vlist;
RUN;

 

EduardoQuiroz_0-1638203553317.png

Gracias

1 ACCEPTED SOLUTION

Accepted Solutions
HarrySnart
SAS Employee

Hola @EduardoQuiroz 

 

Creo que puede usar un Macro Variable List. Por ejemplo:

 

title 'Create Macro Variable List';
proc sql;
select distinct("'"|| make || "'") into :makes separated by ',' from sashelp.cars
where make in ('Audi','BMW','Mercedes');
quit;

%put &make;

data work.luxury_car;
set sashelp.cars;
where make in (&makes);
run;

title 'Use Variable List to Subset Data';
proc print data=work.luxury_car(obs=10);var make model msrp;run;

El resulto es

HarrySnart_0-1638206421156.png

Gracias

Harry

View solution in original post

2 REPLIES 2
HarrySnart
SAS Employee

Hola @EduardoQuiroz 

 

Creo que puede usar un Macro Variable List. Por ejemplo:

 

title 'Create Macro Variable List';
proc sql;
select distinct("'"|| make || "'") into :makes separated by ',' from sashelp.cars
where make in ('Audi','BMW','Mercedes');
quit;

%put &make;

data work.luxury_car;
set sashelp.cars;
where make in (&makes);
run;

title 'Use Variable List to Subset Data';
proc print data=work.luxury_car(obs=10);var make model msrp;run;

El resulto es

HarrySnart_0-1638206421156.png

Gracias

Harry

EduardoQuiroz
Obsidian | Level 7
Woow aplique este código sobre el mío y obtuve lo que esperaba

Muchísimas Gracias

Saludos