BookmarkSubscribeRSS Feed
Thalitacosta
Obsidian | Level 7
%let date_start = 201910;
%let date_end = 202003;

%macro dt;
%do aa = &date_start. %to &date_end.;

After that I create tables with the name of each year/month, using the variable "aa". How do i stop at month 12? Because it is creating tables 201913, 201914 etc.

1 REPLY 1
Tom
Super User Tom
Super User

If you want to count by months then use DATE values and not digit strings.

%macro dt(start,end);
%local date_start date_end offset date;
%let date_start=%sysfunc(inputn(&start,yymmn6.));
%let date_end=%sysfunc(inputn(&end,yymmn6.));
%do offset = 0 %to %sysfunc(intck(month,&date_start,&date_end));
  %let date=%sysfunc(intnx(month,&date_start,&offset),yymmn6.);
  %put &=offset &=date ;
%end;
%mend ;

%dt(start=201910,end=202003);

Results:

OFFSET=0 DATE=201910
OFFSET=1 DATE=201911
OFFSET=2 DATE=201912
OFFSET=3 DATE=202001
OFFSET=4 DATE=202002
OFFSET=5 DATE=202003
How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 516 views
  • 1 like
  • 2 in conversation