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

Issue: I keep getting this error message after I submit SQL statement

*=========> COMMANDS <=================;
%LET BEGDATE = MDY(01,31,2019);

*=========> COMMANDS <=================;

PROC SQL;
CREATE TABLE MOVCODES AS SELECT
A.*,
B.MOVCOD,
B.MOVTIM,
B.MOVDAT FORMAT=MMDDYY10.
FROM R.ORIGINALPLMPOP A LEFT JOIN OPPS.INMT4BC1 B
ON A.ID=B.ID
WHERE B.MOVDAT LE "&BEGDATE"D;
QUIT;

Error:ERROR: Invalid date/time/datetime constant "MDY(01,31,2019)"D.

1 ACCEPTED SOLUTION

Accepted Solutions
Reeza
Super User

Your generated code would be:

 

*=========> COMMANDS <=================;
%LET BEGDATE = MDY(01,31,2019);

*=========> COMMANDS <=================;

PROC SQL;
CREATE TABLE MOVCODES AS SELECT
A.*,
B.MOVCOD,
B.MOVTIM,
B.MOVDAT FORMAT=MMDDYY10.
FROM R.ORIGINALPLMPOP A LEFT JOIN OPPS.INMT4BC1 B
ON A.ID=B.ID
WHERE B.MOVDAT LE "MDY(01,31,2019)"D;
QUIT;

That isn't valid SAS syntax, you do not need the quotes or d.

WHERE B.MOVDAT LE &BEGDATE;

would become:

WHERE B.MOVDAT LE MDY(1, 31, 2019);


Or you need to define your begdate different, see example below:

%let begdate = %sysfunc(mdy(1, 31, 2019), date9.);

....

WHERE B.MOVDAT LE "&begdate"d;

which will resolve as:

WHERE B.MOVDAT LE "31Jan2019"d;

@Renee1984 wrote:

Issue: I keep getting this error message after I submit SQL statement

*=========> COMMANDS <=================;
%LET BEGDATE = MDY(01,31,2019);

*=========> COMMANDS <=================;

PROC SQL;
CREATE TABLE MOVCODES AS SELECT
A.*,
B.MOVCOD,
B.MOVTIM,
B.MOVDAT FORMAT=MMDDYY10.
FROM R.ORIGINALPLMPOP A LEFT JOIN OPPS.INMT4BC1 B
ON A.ID=B.ID
WHERE B.MOVDAT LE "&BEGDATE"D;
QUIT;

Error:ERROR: Invalid date/time/datetime constant "MDY(01,31,2019)"D.


 

View solution in original post

2 REPLIES 2
Reeza
Super User

Your generated code would be:

 

*=========> COMMANDS <=================;
%LET BEGDATE = MDY(01,31,2019);

*=========> COMMANDS <=================;

PROC SQL;
CREATE TABLE MOVCODES AS SELECT
A.*,
B.MOVCOD,
B.MOVTIM,
B.MOVDAT FORMAT=MMDDYY10.
FROM R.ORIGINALPLMPOP A LEFT JOIN OPPS.INMT4BC1 B
ON A.ID=B.ID
WHERE B.MOVDAT LE "MDY(01,31,2019)"D;
QUIT;

That isn't valid SAS syntax, you do not need the quotes or d.

WHERE B.MOVDAT LE &BEGDATE;

would become:

WHERE B.MOVDAT LE MDY(1, 31, 2019);


Or you need to define your begdate different, see example below:

%let begdate = %sysfunc(mdy(1, 31, 2019), date9.);

....

WHERE B.MOVDAT LE "&begdate"d;

which will resolve as:

WHERE B.MOVDAT LE "31Jan2019"d;

@Renee1984 wrote:

Issue: I keep getting this error message after I submit SQL statement

*=========> COMMANDS <=================;
%LET BEGDATE = MDY(01,31,2019);

*=========> COMMANDS <=================;

PROC SQL;
CREATE TABLE MOVCODES AS SELECT
A.*,
B.MOVCOD,
B.MOVTIM,
B.MOVDAT FORMAT=MMDDYY10.
FROM R.ORIGINALPLMPOP A LEFT JOIN OPPS.INMT4BC1 B
ON A.ID=B.ID
WHERE B.MOVDAT LE "&BEGDATE"D;
QUIT;

Error:ERROR: Invalid date/time/datetime constant "MDY(01,31,2019)"D.


 

Renee1984
Calcite | Level 5

worked perfect thank you for your help!!!

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
  • 2 replies
  • 1062 views
  • 0 likes
  • 2 in conversation