BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
ajulio4
Obsidian | Level 7

Hello,

i have a macro variable  in numeric. like &jour = 23040,

In CAS i try to find line where dateColumn > &jour bu i have the error :

ERROR: Operator is not unique: DATE > INTEGER

 

Can someone help me plz.

 

1 ACCEPTED SOLUTION

Accepted Solutions
SASJedi
Ammonite | Level 13

FedSQL is pretty strictly ANSI compliant. Expressions require date constants to be written in ANSI-standard format -  DATE'YYYY-MM-D'. The raw SAS date number must be formatted properly and surrounded by single quotes. You can use PUTN to format the value, but the dashes will be misinterpreted as a minus sign if you use  %SYSFUNC to execute the PUTN function, and macro code won't execute if surrounded by single quotes. 

  1. Use QSYSFUNC to mask the dashes in the formatted text.
  2. Use the %TSLIT macro to allow the macro code to resolve before adding the necessary single quotes.

Example:

 

data jours;
  input jour;
datalines;
23038
23039
23040
23041
23042
;

%let Aujourdhui=23040;
proc FedSQL;
select * 
	from jours
	where jour>=date%tslit(%qsysfunc(putn(&Aujourdhui,yymmddd10.)));
;
quit;

Hope this helps.

 

Check out my Jedi SAS Tricks for SAS Users

View solution in original post

2 REPLIES 2
SASJedi
Ammonite | Level 13

FedSQL is pretty strictly ANSI compliant. Expressions require date constants to be written in ANSI-standard format -  DATE'YYYY-MM-D'. The raw SAS date number must be formatted properly and surrounded by single quotes. You can use PUTN to format the value, but the dashes will be misinterpreted as a minus sign if you use  %SYSFUNC to execute the PUTN function, and macro code won't execute if surrounded by single quotes. 

  1. Use QSYSFUNC to mask the dashes in the formatted text.
  2. Use the %TSLIT macro to allow the macro code to resolve before adding the necessary single quotes.

Example:

 

data jours;
  input jour;
datalines;
23038
23039
23040
23041
23042
;

%let Aujourdhui=23040;
proc FedSQL;
select * 
	from jours
	where jour>=date%tslit(%qsysfunc(putn(&Aujourdhui,yymmddd10.)));
;
quit;

Hope this helps.

 

Check out my Jedi SAS Tricks for SAS Users
ajulio4
Obsidian | Level 7

Hello. thks you so much. It helps and it works

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

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
  • 2 replies
  • 1256 views
  • 5 likes
  • 2 in conversation