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

Hello everyone

I am just getting started with macros and have been using %let for a while now. Put simply, in my program I want to have a %let command to invoke further %let commands. I want to be able to enter a relatively simple variable (i.e. year) and call other variables that are harder to remember (ID's), but which are always related. So that every year has a specific ID. Currently I am using it like this and it works:

 

%let year = 2020;

 

%let ID = 1234;
%let ID_TM1 = 5678;

%let ID_LIST = (9012, 3456, 7890);

 

But this requires me to look up the IDs every time I want to run another year. So, I want to look it something like this:

 

%let year = 2020;

 

%if &year = 2020 %then
   %let ID = 1234
   %let ID_TM1 = 5678
   %let ID_LIST = (9012, 3456, 7890);

 

This however produces the error 49, which I do not understand since there are no opening brackets.

 

Thank you very much!

1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

Each %LET must be terminated properly. To combine several macro statements, use the same technique used in data step programming (DO-END):

%if &year = 2020 %then %do;
   %let ID = 1234;
   %let ID_TM1 = 5678;
   %let ID_LIST = (9012, 3456, 7890);
%end;

View solution in original post

2 REPLIES 2
Kurt_Bremser
Super User

Each %LET must be terminated properly. To combine several macro statements, use the same technique used in data step programming (DO-END):

%if &year = 2020 %then %do;
   %let ID = 1234;
   %let ID_TM1 = 5678;
   %let ID_LIST = (9012, 3456, 7890);
%end;
skgel
Calcite | Level 5
Thank you very much!