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);
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.