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.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.
Ready to level-up your skills? Choose your own adventure.