BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
niki0209
Obsidian | Level 7

Hello fellow SAS users,

 

I have a question that might be pretty simply, but I can't find out how to do it.

I have a lot of data sets, one for every year. Let's say they are called:

data1990, data1991, data1992,...,data2019, data2020

 

I want to perform the same data step on each of these without writing out 30 data steps.

I am thinking something like:

 

%macro mymacro(year);

 

data new_data_&year.;

set data_&year.;

SomedatastepthatIneed;

run;

 

%do i=1990 %to 2020 %by 1;

%mend;

 

%mymacro(i);

 

But this does not work. Can someone help me perform a macro that works?

1 ACCEPTED SOLUTION

Accepted Solutions
andreas_lds
Jade | Level 19

I would combine all datasets to one (assuming that they have the same structure), add a variable containing the year and process all in one step. But maybe that is not possible, so try something like:

%macro mymacro(year);
  data new_data_&year.;
    set data_&year.;
    SomedatastepthatIneed;
  run;
%mend;
 
%macro looper;
  %local i;
  %do i=1990 %to 2020;
    %mymacro(&i);
  %end;
%mend;

%looper;

View solution in original post

5 REPLIES 5
andreas_lds
Jade | Level 19

I would combine all datasets to one (assuming that they have the same structure), add a variable containing the year and process all in one step. But maybe that is not possible, so try something like:

%macro mymacro(year);
  data new_data_&year.;
    set data_&year.;
    SomedatastepthatIneed;
  run;
%mend;
 
%macro looper;
  %local i;
  %do i=1990 %to 2020;
    %mymacro(&i);
  %end;
%mend;

%looper;
niki0209
Obsidian | Level 7

Thank you very much. When I plug your code in to my program however, it does not actually run anything and give me data sets - it merely shows me some logs.

Do you have any idea how that can be?

andreas_lds
Jade | Level 19

Posting the log as text could help, please use the "insert code" function.

niki0209
Obsidian | Level 7
Woops, it works now. I just restarted SAS EG and ran the program again. No clue what was wrong. Thank you so much! 🙂
ballardw
Super User

@niki0209 wrote:
Woops, it works now. I just restarted SAS EG and ran the program again. No clue what was wrong. Thank you so much! 🙂

There are a number of fairly common mistakes people make when learning the macro language that can render a SAS session unstable. Sometimes they are unmatched quotes or parentheses/brackets/braces or missing %end or %mend.

What happens is the macro processor is still looking for something to "complete" an action/compilation.

In a small number of cases if you realize what you left out sometimes you can submit the proper missing code but often the practical solution is 1) save your work and 2) restart SAS.

 

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 642 views
  • 3 likes
  • 3 in conversation