Help using Base SAS procedures

trying to extract a year value from today() using sysfunc

Reply
Frequent Contributor
Posts: 84

trying to extract a year value from today() using sysfunc

 

 

 

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

Super User
Posts: 19,869

Re: trying to extract a year value from today() using sysfunc

You have two functions, Year() and today(). Each requires its own %SYSFUNC. 

 

%let year = %sysfunc(today(), year4.);

 

%let year = %sysfunc(year(%sysfunc(today()));

PROC Star
Posts: 307

Re: trying to extract a year value from today() using sysfunc

%let yearnow = %sysfunc(year(%sysfunc(today())));
%put &yearNow;
Super User
Posts: 5,516

Re: trying to extract a year value from today() using sysfunc

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.

Super User
Posts: 11,343

Re: trying to extract a year value from today() using sysfunc

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.

Super User
Posts: 5,516

Re: trying to extract a year value from today() using sysfunc

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);

 

Ask a Question
Discussion stats
  • 5 replies
  • 148 views
  • 0 likes
  • 5 in conversation