Hello,
I have the following piece of code, where I want the macro variable &ultimo to have a date value at the end. However, after running the code once, the value of &ulitmo is still missing, but after a second run, the value appears. My question is, what am I doing wrong with respect to making the code work doing its first run? Kind regards.
%let year = 2012;
%let month = 06;
%macro ultimodato;
%if %eval(&month) < 9 %then %do;
%let ultimo = 01/0%eval(&month.+1)/&year.;
%end;
%else %if &month = 9 %then %do;
%let ultimo = 01/10/&year.;
%end;
%else %if 9 < &month and &month < 12 %then %do;
%let ultimo = 01/%eval(&month.+1)/&year.;
%end;
%else %if &month = 12 %then %do;
%let ultimo = 01/01/%eval(&year+1);
%end;
%mend ultimodato;
%ultimodato;
data _null_;
call symput('ultimo',put(input("&ultimo",DDMMYY10.),date9.));
run;
%put &ultimo;
Hi,
This is because your 'ultimo' macro-variable isn't declared as global, and it is created within the macro 'ultimodato'. By declaring it as global (%global ultimo;), you will make it available to your call symput.
Kind regards,
Florent
Hi,
This is because your 'ultimo' macro-variable isn't declared as global, and it is created within the macro 'ultimodato'. By declaring it as global (%global ultimo;), you will make it available to your call symput.
Kind regards,
Florent
Thank you. It works. ![]()
That's the right answer to your original question. But you should also consider whether or not you want to write a macro for this purpose. The DATA step already has functions that will do the work for you. For example:
data _null_;
call symput('ultimo', put( intnx('month', mdy(&month, 1, &year), +1), date9.));
run;
Good luck.
Astounding, I didn't know you could do that! Thanks. ![]()
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.