BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Cugel
Obsidian | Level 7
I want to create a variable that I can then use in any where statement. Something like this
DATA CREATE_JOB_SPECIFIC_VARS;
%let year_filter_1 = 2019;
%let year_filter_2 = extract(year from sysdate)-5;
RUN;
The intention is to create the variable in a "sql execute" or "user written" statement.
When I create the variable as mentioned in the example, the variable seems to have no content over time.
TEST_JOB EXAMPLE.JPG
1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

You do not need that data step around the macro statements; macro code is resolved before any other code is handed off to the data step compiler or any procedures.

This creates and shows your macro variables:

%let year_filter_1 = 2019;
%let year_filter_2 = %eval(%sysfunc(year(%sysfunc(today())))-5);
%put &=year_filter_1;
%put &=year_filter_2;

Log:

 73         %let year_filter_1 = 2019;
 74         %let year_filter_2 = %eval(%sysfunc(year(%sysfunc(today())))-5);
 75         %put &=year_filter_1;
 YEAR_FILTER_1=2019
 76         %put &=year_filter_2;
 YEAR_FILTER_2=2016

 

View solution in original post

5 REPLIES 5
Kurt_Bremser
Super User

You do not need that data step around the macro statements; macro code is resolved before any other code is handed off to the data step compiler or any procedures.

This creates and shows your macro variables:

%let year_filter_1 = 2019;
%let year_filter_2 = %eval(%sysfunc(year(%sysfunc(today())))-5);
%put &=year_filter_1;
%put &=year_filter_2;

Log:

 73         %let year_filter_1 = 2019;
 74         %let year_filter_2 = %eval(%sysfunc(year(%sysfunc(today())))-5);
 75         %put &=year_filter_1;
 YEAR_FILTER_1=2019
 76         %put &=year_filter_2;
 YEAR_FILTER_2=2016

 

Cugel
Obsidian | Level 7
Hi Kurt, Thanks for your help.
I am a SAS novice and it is not entirely clear to me where I can best include the code lines in the job. In the "sql execute" or in the "user written" statement.
Or somewhere else in the job ?. I am not yet very familiar with the structure of SAS macros.




Cugel
Obsidian | Level 7
I have included Kurt's solution in "SQL execute" transformation. 
In the job, this transformation is performed first. This solution works.
However, if the job crashes, the variable is no longer available and the first step must be performed again.
SAS DIS execute.PNG
Tom
Super User Tom
Super User

What tool are you using to build that work flow?  Is it Enterprise Guide?  SAS/Studio? Something else?

Cugel
Obsidian | Level 7
Hi Tom



Thanks for your help, we are using SAS Data Integration Studio 4.903.


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
  • 684 views
  • 0 likes
  • 3 in conversation