Macros query

Reply
Contributor
Posts: 59

Macros query

I'm passing a date and it will b a character only,can't i store it in any variable or macro variable like %let or as i'm doingin code.And how can i change this date into numeric and store in a variable so that i can find no of weekdays between these two dates.


%macro ab(strt,end);

a=&strt;
b=&end;

%put a= b=;

%mend;

 

%ab(01jan2015,31jan2015);

 

Grand Advisor
Posts: 9,576

Re: Macros query

%macro ab(strt,end);
a="&strt"d ;
b="&end"d ;
%put a= b=;
%mend;
Contributor
Posts: 59

Re: Macros query

it is giving error
Contributor
Posts: 59

Re: Macros query

but if i'm creating a dataset then it is working fine .

%macro ab(strt,end);
data _null_;
a="&strt"d;
b="&end"d;

put a= b=;
run;
%mend;

%ab(01jan2015,31jan2015);
Contributor
Posts: 55

Re: Macros query

[ Edited ]

There's some mixing of data step and macro functionality going on in previous posts.

This would be an alternative to save those strings as dates.

 

%macro ab(strt,end);
  %let a="&strt"d;
  %let b="&end"d;
  %put a=&a. b=&b.;
%mend;
 
%ab(01jan2015,31jan2015);

At that point, you should be able to use the dates in a function such as intck

 

e.g.

 

%macro ab(strt,end);
  %let diff = %sysfunc(intck(day,"&strt."d,"&end."d));
  %put Days between = &diff.;
%mend;
 
%ab(01jan2015,31jan2015);

 

I'm assuming this is part of a larger macro, so you'll be able to use the resulting value in a variable. 

Grand Advisor
Posts: 9,576

Re: Macros query

You want express them as macro variable ?

 

%macro ab(strt,end);
%let a=%sysfunc(inputn(&strt,date9.));
%let b=%sysfunc(inputn(&end,date9.));
%let dif=%eval(&b-&a);

%put a=&a b=&b dif=&dif;
%mend;
%ab(01jan2015,31jan2015)

 

Ask a Question
Discussion stats
  • 5 replies
  • 314 views
  • 0 likes
  • 3 in conversation