In the following code, I pass in a string "1990" and build another string "01jan1990". I now need to convert this string to a date. The first two LET statements work fine:
%LET yyyy=&sysparm;
%PUT &yyyy;
%LET lwrs = 01jan&yyyy;
%PUT &lwrs;
%LET lwrd = %INPUT(&lwrs, date9.);
%PUT &lwrd;
but the final LET statement gives rise to "ERROR: Open code statement recursion detected." How can this conversion be correctly performed? Thank you!
P.S. I examined
https://communities.sas.com/t5/SAS-Procedures/intnx-macro-variable/td-p/217078
but still cannot find a workaround. Apologies if this is an FAQ.
The %input is not the same as the datastep input function.
And the macro language doesn't like "input" it wants the specific INPUTN or INPUTC
Try:
%LET lwrd = %sysfunc(INPUTn(&lwrs,date9.));
You will have the numeric value for the date such as 10958 result for 01Jan1990.
the %INPUT statement is for textual input.
To convert characters and numeric within a macro function I always tend to use %sysfunc() around a SAS function. You can either use PUTN or INPUTN like below depending on the outcome you wish.
%LET lwrd = %sysfunc(putn("&lwrs."d, date9.));
The %input is not the same as the datastep input function.
And the macro language doesn't like "input" it wants the specific INPUTN or INPUTC
Try:
%LET lwrd = %sysfunc(INPUTn(&lwrs,date9.));
You will have the numeric value for the date such as 10958 result for 01Jan1990.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.