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;
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.
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.
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
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.