I have a line like this
%LET YEARNOW= %unquote(%str(%'%sysfunc(year(today()), yyyy.)%'));
That throws an error like
ERROR: Required operator not found in expression: today() ERROR: Argument 1 to function YEAR referenced by the %SYSFUNC or %QSYSFUNC macro function is not a number. ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC argument list. Execution of %SYSCALL statement or %SYSFUNC or %QSYSFUNC function reference is terminated.
What I am trying to do it get the year from a function so I copied this working one
%LET DATENOW= %unquote(%str(%'%sysfunc(today(), yymmdd10.)%'));
And tried to Dr it up
You have two functions, Year() and today(). Each requires its own %SYSFUNC.
%let year = %sysfunc(today(), year4.);
%let year = %sysfunc(year(%sysfunc(today()));
%let yearnow = %sysfunc(year(%sysfunc(today())));
%put &yearNow;
I think you're overcomplicating this a bit. Try it this way:
%LET YEARNOW= %unquote(%str(%'%sysfunc(today(), year4)%'));
%SYSFUNC lets you control the format of the value it returns.
Every datastep function needs a separate %sysfunc.
Try
%let yearnow = %sysfunc(year(%sysfunc(today()))); %put &yearnow;
and
%let datenow = %sysfunc(putn(%sysfunc(today()),yymmdd10.)); %put &datenow;
Or move to a data step as much data manipulation in macro language becomes very ugly and sometimes fragile.
I find that the need to have something like %unquote(%str is an indication that I may want to rethink things.
ballardw,
It's a question of what you want as the final result. You will get:
2017
The added complications that I included will get:
'2017'
If you want quotes around the final value, you need to jump through the extra hoops. But if you don't want the quotes, it becomes even simpler:
%let yearnow = %sysfunc(today(), year4);
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.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.