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
Every datastep function needs a separate %sysfunc.
%let yearnow = %sysfunc(year(%sysfunc(today()))); %put &yearnow;
%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.
It's a question of what you want as the final result. You will get:
The added complications that I included will get:
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);
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
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.