create a parameter of a date value within Macro variable

Accepted Solution Solved
Reply
New Contributor
Posts: 2
Accepted Solution

create a parameter of a date value within Macro variable

I've been through the forums and can't quite find anything that fits what I'm having an issue with, so apologies if this is a repost.

 

I need to push a date into a global variable so I can call it within my program. Currently I get the date from:

 

PROC SQL noprint;
SELECT INTNX('MONTH',MDY(quarter*3,1,year),0,'E') format=date9. INTO :livd
FROM HPIindex
WHERE year = (SELECT MAX(year) FROM HPIindex)
HAVING quarter = MAX(quarter);
RUN;

 

When I try to apply this as a date it is coming out as a character string so throwing an error:

 

DATA dates;
SET date_table;
WHERE DATEPART(the_date) = &livd;
RUN;

 

NOTE: Line generated by the macro variable "LIVD".
28 30JUN2018
_______
22
76
ERROR: Syntax error while parsing WHERE clause.
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=, <>, =, >, >=, AND, EQ, GE, GT, LE, LT,
NE, OR, ^=, |, ||, ~=.

ERROR 76-322: Syntax error, statement will be ignored.

 

Is there any way to create the &livd variable as a date instead of a string? So basically producing '30JUN2018'd instead of 30JUN2018?

 

Thanks, any help appreciated.


Accepted Solutions
Solution
2 weeks ago
Super User
Posts: 10,534

Re: create a parameter of a date value within Macro variable

[ Edited ]
Posted in reply to Seb_A_Sanders

Do not use a format for your macro variable:

SELECT INTNX('MONTH',MDY(quarter*3,1,year),0,'E') INTO :livd

or use your macro variable as a date literal if it is formatted:

WHERE DATEPART(the_date) = "&livd"d;

Personally, I prefer the first option, as it makes writing subsequent code easier.

 

PS This is covered in Maxim 28.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code

View solution in original post


All Replies
Solution
2 weeks ago
Super User
Posts: 10,534

Re: create a parameter of a date value within Macro variable

[ Edited ]
Posted in reply to Seb_A_Sanders

Do not use a format for your macro variable:

SELECT INTNX('MONTH',MDY(quarter*3,1,year),0,'E') INTO :livd

or use your macro variable as a date literal if it is formatted:

WHERE DATEPART(the_date) = "&livd"d;

Personally, I prefer the first option, as it makes writing subsequent code easier.

 

PS This is covered in Maxim 28.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 61 views
  • 0 likes
  • 2 in conversation