DATA Step, Macro, Functions and more

Macro variable is assigned a value only after second run

Accepted Solution Solved
Reply
Contributor
Posts: 24
Accepted Solution

Macro variable is assigned a value only after second run

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;


Accepted Solutions
Solution
‎07-05-2012 10:36 AM
Frequent Contributor
Posts: 127

Re: Macro variable is assigned a value only after second run

Posted in reply to Hedegaard

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 ultimoSmiley Wink, you will make it available to your call symput.

Kind regards,

Florent

View solution in original post


All Replies
Solution
‎07-05-2012 10:36 AM
Frequent Contributor
Posts: 127

Re: Macro variable is assigned a value only after second run

Posted in reply to Hedegaard

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 ultimoSmiley Wink, you will make it available to your call symput.

Kind regards,

Florent

Contributor
Posts: 24

Re: Macro variable is assigned a value only after second run

Thank you. It works. Smiley Happy

Super User
Posts: 5,498

Re: Macro variable is assigned a value only after second run

Posted in reply to Hedegaard

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.

Contributor
Posts: 24

Re: Macro variable is assigned a value only after second run

Posted in reply to Astounding

Astounding, I didn't know you could do that! Thanks. Smiley Happy

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 4 replies
  • 276 views
  • 2 likes
  • 3 in conversation