DATA Step, Macro, Functions and more

Increment months by macros do loop

Reply
Occasional Contributor
Posts: 13

Increment months by macros do loop

Hi, I need to create a dataset for each month for each branch with all d transactions. So I need to create automatically increment the months up to 12 months in one macro . Please provide your suggestions. I tried creating do loop but not able to calculate character value in evaluating function. Thanks in advance. Waiting for your tips
Super User
Posts: 19,770

Re: Increment months by macros do loop

Posted in reply to NagendraBS

Use the INTNX function. It's not exactly clear what you want, but maybe this will help you get started.

 

%macro loop;

%do i=1 %to 12;

%let date=%sysfunc(intnx(month, %sysfunc(today()), &i.), date9.);

%put &date.;

%end;

%mend;

%loop;
Super User
Posts: 5,497

Re: Increment months by macros do loop

Posted in reply to NagendraBS

My best tip:  write a program with no macro language, that works for a single month.  Then we can worry about how to make it loop over a set of months.

Super User
Posts: 11,343

Re: Increment months by macros do loop

Posted in reply to NagendraBS

My first thing involving any time, date or datetime related issue: Make sure the values are SAS time, date or datetime valued variables.

 

You don't say what you are going to do with multiple datasets but I bet it compounds doing more looping, macro or otherwise. Formats for the date variables can create very useable groups. Here's a very simple example. The first data step is just to create some dummy data for the proc tabulate to demonstrate creating a report with separate sections for the branch and totals by month.

data example;
   length account $ 15;
   do branch = 'A','B','C';
      do num = 1001 to 1005;
         account= cats(branch,num);
         do date = '01jan2015'd to '15jul2015'd by 20;
            deposit = round(1000*ranuni(456),.01);
            output;
         end;
      end;
   end;
run;

proc tabulate data=example;
   class branch date;
   format date monyy7.;
   var deposit;
   tables branch,
          date='Month',
          Deposit*sum*f=dollar10.2
          ;
run;
         

You can get similar results from proc means, freq, summary and report using formats on a single date varible. Also most of the modeling procedures will honor the format for creating levels of modeled variables.

 

Ask a Question
Discussion stats
  • 3 replies
  • 1522 views
  • 1 like
  • 4 in conversation