BookmarkSubscribeRSS Feed
chirayujaiswal
Calcite | Level 5

Hello Guys,

need your help in macro.

below is my code.

%let a1=1;

%let a2=2;

%let a3=3;

%let a4=4;

%let a5=5;

%let a6=;

%let a7=;

%let a8=;

%let a9=;

%let a10=;

  %macro export;

%do i = 1 %to &nod;

%let nm&i = &&nm&i;

proc sort data = db.&&nm&i out = &&nm&i;

by &subject;

run;

data db1.&&nm&i;

set &&nm&i;

by &subject;

where &subject in (&a1,&a2,&a3,&a4,&a5); ***************provide subject/patient number for output data set***********************;

run;

%end;

%mend export;

%export;

now i want the result on the base of my macroparameters means if i fillup 5 macro para then in my where condition it should took only 5 variables and if i fill up 10 then it should take 10 values.i have highlited the part.

is it possible ? kindly guide me.

Thanks,

Chirayu

4 REPLIES 4
allurai0412
Fluorite | Level 6

hi,

i am still have some questions ...

what are the values you assinged to the following ?

&nod...........?

&subject...........?

And please try without macros for single value/excution......and post here...some one would help you

Regards

ALLU

chirayujaiswal
Calcite | Level 5

Thanks for replaying,

i just want to know how we can use all global macros in where condition with IN operator ? Means if i use 5 macro value then no need to update where condition,my where condition should be remain same. Is it possible ?

Tom
Super User Tom
Super User

You can reference the empty macro variables in your where condition.  For example run these simple test cases.

%let a1=14;

%let a2=;

%let subject=age ;

data want ;

  set sashelp.class ;

  where &subject in (&a1,&a2);

run;

%let a1='Alfred';

%let a2=;

%let subject=name ;

data want ;

  set sashelp.class ;

  where &subject in (&a1,&a2);

run;

Patrick
Opal | Level 21

I believe below sample covers what you're asking for.

%let a1=1;
%let a2=2;
%let a3=3;
%let a4=4;
%let a5=5;
%let a6=;
%let a7=;
%let a8=8;
%let a9=;
%let a10=;

proc sql noprint;
  select value into :in_values separated by ','
  from dictionary.macros
  where scope='GLOBAL' and prxmatch('/A\d+/oi',name)=1 and not missing(value)
  ;
quit;

data test;
  do i= 0 to 10;
    if i in (&in_values) then output;
  end;
run;

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 964 views
  • 1 like
  • 4 in conversation