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


Hey folks,

I get really frustrated working with SAS dates!  I created a variable called SpringDLS that I want to call and use in a calculation in a data step.  The macro variable is right, (02/11/2015), but I'm getting a syntax error.  Any ideas?

libname GADS 'C:\TEMP\';
data _null_;
SpringDLS = '11-feb-2015'd;
call symput ('SpringDLS',trim(left(put(SpringDLS, mmddyy10.))));
run;

proc import
datafile =  'C:\Temp\GADS CM 02 Feb 2015.CSV'
out = gads1
DBMS = CSV replace;
run;

data gads2 (drop = Cause_detail Sub_System);
set gads1;

format &SpringDLS mmddyy10.;

StartTime = timepart(StartDateTime);
format StartTime HHMM.;

EndTime = timepart(EndDateTime);
format EndTime HHMM.;

StartDate = datepart(StartDateTime);
format StartDate mmddyy10.;

EndDate = datepart(EndDateTime);
format EndDate mmddyy10.;

NumDays = EndDate-StartDate + 1;

if (&SpringDLS >= StartDate and &SpringDLS <= EndDate) then DLS = 'Y';

if DLS = 'Y' then NumIntervals = NumDays*96-4;
  else NumIntervals = NumDays*96;

run;

1 ACCEPTED SOLUTION

Accepted Solutions
art297
Opal | Level 21

I'd start by changing the initial datastep, as you aren't getting a SAS date with your current code. Try:

data _null_;

  SpringDLS = '11feb2015'd;

  call symput ('SpringDLS',SpringDLS);

run;

Plus, I don't think you can use a format statement to assign a format to a macro variable (like &SpringDLS) and don't need it anyway.

View solution in original post

4 REPLIES 4
art297
Opal | Level 21

I'd start by changing the initial datastep, as you aren't getting a SAS date with your current code. Try:

data _null_;

  SpringDLS = '11feb2015'd;

  call symput ('SpringDLS',SpringDLS);

run;

Plus, I don't think you can use a format statement to assign a format to a macro variable (like &SpringDLS) and don't need it anyway.

Steelers_In_DC
Barite | Level 11

I broke it down a little different but get the same results:

%let date = '11feb2015';

data _null_;

call symput('SpringDLS',input(&date,date9.));

run;

data test;

format date2 mmddyy10.;

date1=&date;

date2=&SpringDLS + 1;

run;

Astounding
PROC Star

Mark,

Regarding your original question, you have to picture the statemetn in  your DATA step:

if (02/11/2015 >= StartDate and 02/11/2015 <= EndDate) then DLS = 'Y';

If you had coded this in a DATA step, the slahes would indicate division:  02 divided by 11, divided by 2015.  In that light, perhaps it makes sense why you got the wrong result originally.

Similarly, picture this statement in a DATA step:

date1 = '11feb2015';

That would make DATE1 a character variable.  If you want it to be a date, you would need to code:

date1 = '11feb2015'd;

In this case, that would mean:

date1 = &date.d;

The trick is to picture what the SAS code looks like, once macro language has helped generate the SAS statements.

Good luck.

BU2B
Calcite | Level 5

Thanks guys!  I'm sure I'll be back when I hit the next step... I'm going to try and struggle through it on my own 1st!

sas-innovate-white.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1172 views
  • 6 likes
  • 4 in conversation