Desktop productivity for business analysts and programmers

create macro to go back from start date

Reply
Contributor
Posts: 66

create macro to go back from start date


Hello,

I would like to bring data 10 days older from the start date.

I have created a macro for start date shown below.

%let start_dt = '01APR2014'd ;

% let old_dt = %eval(%input(&start_dt ,8.)  -  10);

this gives erro

Community Manager
Posts: 2,691

Re: create macro to go back from start date

Dates are just numbers, so the easy thing to do is to ensure you seed your %EVAL expression with them as numbers using SAS functions.

Examples:

/* 10 days before today */
%let cutoff = %eval(%sysfunc(today()) - 10);

/* 10 days before April 1, 2014 */
%let cutoff = %eval(%sysfunc(mdy(4,1,2014)) - 10);

Chris
Super Contributor
Posts: 336

Re: create macro to go back from start date

%LET old_dt=%Sysfunc(PutN(%Sysfunc(IntNX(day,&start_dt.,-10)),Date9.));

Esteemed Advisor
Esteemed Advisor
Posts: 7,190

Re: create macro to go back from start date

Well, few things there.  The start_dt macro variable will contain the text '01APR2014'd

when this resovles on the eval you will get: %let old_dt = %eval(%input('01APR2014'd ,8.)  -  10);

This will fail as there is a d after the quote.  Also, you have a space between the % and let.  

I would question why you need to do this as:

data _null_;

     call symput('OLD_DT','01APR2014'd - 10);

run;

would give the result, plus several other methods of getting there.

Contributor
Posts: 66

Re: create macro to go back from start date

Chris example seems simple to use. I will try that.

thanks all

Ask a Question
Discussion stats
  • 4 replies
  • 409 views
  • 3 likes
  • 4 in conversation