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-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

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