![Page 1: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/1.jpg)
SAS Macro Programming
for Beginners
Susan J. Slaughter Avocet Solutions
Lora D. Delwiche University of California, Davis
![Page 2: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/2.jpg)
What is SAS macro language?
• Programming language for string
manipulation
• Strings are characters
• Usually SAS statements or pieces of SAS
statements
• Normally considered advanced, but
concepts are not difficult
![Page 3: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/3.jpg)
Why use macros?
• Harder to write than standard code
• But can save time and effort
– Make one change, SAS echoes
– Reusable code
– Make programs data driven
![Page 4: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/4.jpg)
![Page 5: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/5.jpg)
Did you know?
There are a billion bicycles in the world,
twice as many as motorcars.
didyouknow.org/bicycles
![Page 6: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/6.jpg)
SAS Macro Processor
You are writing a program that writes a program.
macro
statements standard SAS
statements
Macro Processor
![Page 7: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/7.jpg)
Macros vs. Macro Variables
Macro variables
• Start with &
• Single character
value
Macros
• Start with %
• Piece of a program
• May use macro
statements
• Often use macro
variables
![Page 8: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/8.jpg)
Scope of macro variables
• Local macro variables
– Defined within a macro
– Can only be used in that macro
• Global macro variables
– Defined in “open code”
– Can be used anywhere
• Think globally and locally
![Page 9: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/9.jpg)
Use of Quotes
• Macro processor does not check inside
‘single quotes’
TITLE ‘Report for &Region’;
• Use “double quotes” for code containing
macro variables
TITLE “Report for &Region”;
TITLE “Report for Northwest”;
![Page 10: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/10.jpg)
UC Davis
Source: City of Davis
![Page 11: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/11.jpg)
Substituting text with %LET
• Simplest macro statement
• Assigns a value to a macro variable
%LET macro-variable-name = value;
![Page 12: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/12.jpg)
Substituting text with %LET
• Define macro variable
%LET iterations = 5;
• Use macro variable
DO i=1 TO &iterations;
• Resolves to standard SAS code
DO i=1 TO 5;
![Page 13: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/13.jpg)
Substituting text with %LET
• Define macro variable
%LET winner = Bradley Wiggins;
• Use macro variable
TITLE “First: &winner”;
• Resolves to standard SAS code
TITLE “First: Bradley Wiggins”;
![Page 14: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/14.jpg)
Models data
Model Class Price Frame
Black Bora Track 796 Aluminum
Delta Breeze Road 699 CroMoly
Jet Stream Track 1130 CroMoly
Mistral Road 1995 Carbon Comp
Nor'easter Mountain 899 Aluminum
Santa Ana Mountain 459 Aluminum
Scirocco Mountain 2256 Titanium
Trade Wind Road 759 Aluminum
![Page 15: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/15.jpg)
Substituting text with %LET
• Define and use macro variable
%LET bikeclass = Mountain;
PROC PRINT DATA = models NOOBS;
WHERE Class = "&bikeclass";
FORMAT Price DOLLAR6.;
TITLE "Current Models "
"of &bikeclass Bicycles";
RUN;
![Page 16: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/16.jpg)
Substituting text with %LET
• Resolves to standard SAS code
PROC PRINT DATA = models NOOBS;
WHERE Type = "Mountain";
FORMAT Price DOLLAR6.;
TITLE "Current Models "
"of Mountain Bicycles";
RUN;
![Page 17: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/17.jpg)
Current Models of Mountain Bicycles
Model Class Price Frame
Nor'easter Mountain $899 Aluminum
Santa Ana Mountain $459 Aluminum
Scirocco Mountain $2,256 Titanium
![Page 18: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/18.jpg)
American River Parkway
Photo by Rome Aban
![Page 19: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/19.jpg)
What is a macro?
• A group of statements with a name
• To call or invoke a macro
– Use its name
– SAS substitutes the statements for the name
![Page 20: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/20.jpg)
Creating modular code
• Define macro
%MACRO macro-name;
macro-text
%MEND macro-name;
• Call macro
%macro-name
![Page 21: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/21.jpg)
Creating modular code
• Define macro
%MACRO printit;
PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
VAR Model Class Frame Price;
FORMAT Price DOLLAR6.;
RUN;
%MEND printit;
![Page 22: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/22.jpg)
Creating modular code
• Call macro
%printit
PROC SORT DATA = models;
BY Price;
%printit
![Page 23: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/23.jpg)
Creating modular code
• Resolves to standard SAS code PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
VAR Model Class Frame Price;
FORMAT Price DOLLAR6.;
RUN;
PROC SORT DATA = models;
BY Price;
PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
VAR Model Class Frame Price;
FORMAT Price DOLLAR6.;
RUN;
![Page 24: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/24.jpg)
Current Models
Model Class Frame Price
Black Bora Track Aluminum $796
Delta Breeze Road CroMoly $699
Jet Stream Track CroMoly $1,130
Mistral Road Carbon Comp $1,995
Nor'easter Mountain Aluminum $899
Santa Ana Mountain Aluminum $459
Scirocco Mountain Titanium $2,256
Trade Wind Road Aluminum $759
![Page 25: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/25.jpg)
Current Models
Model Class Frame Price
Santa Ana Mountain Aluminum $459
Delta Breeze Road CroMoly $699
Trade Wind Road Aluminum $759
Black Bora Track Aluminum $796
Nor'easter Mountain Aluminum $899
Jet Stream Track CroMoly $1,130
Mistral Road Carbon Comp $1,995
Scirocco Mountain Titanium $2,256
![Page 26: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/26.jpg)
Photo by Eric Norris
![Page 27: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/27.jpg)
Adding parameters to macros
• Parameters are macro variables
• Defined in macro
%MACRO macro-name
(parameter-1=, parameter-n=);
macro-text
%MEND macro-name;
![Page 28: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/28.jpg)
Adding parameters to macros
• Define macro
%MACRO monthlyreport (month=, region=);
macro-text
%MEND monthlyreport;
• Call macro
%monthlyreport (month=May, region=West)
![Page 29: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/29.jpg)
Adding parameters to macros
• Define macro %MACRO sortandprint (sortseq=, sortvar=);
PROC SORT DATA = models;
BY &sortseq &sortvar;
PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
TITLE2 "Sorted by &sortseq &sortvar";
VAR Model Class Frame Price;
FORMAT Price DOLLAR6.;
RUN;
%MEND sortandprint;
![Page 30: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/30.jpg)
Adding parameters to macros
• Call macro
%sortandprint
(sortseq=Descending, sortvar=Price)
![Page 31: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/31.jpg)
Adding parameters to macros
• Resolves to standard SAS code PROC SORT DATA = models;
BY Descending Price;
PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
TITLE2 "Sorted by Descending Price";
VAR Model Class Frame Price;
FORMAT Price DOLLAR6.;
RUN;
![Page 32: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/32.jpg)
Current Models
Sorted by Descending Price
Model Class Frame Price
Scirocco Mountain Titanium $2,256
Mistral Road Carbon Comp $1,995
Jet Stream Track CroMoly $1,130
Nor'easter Mountain Aluminum $899
Black Bora Track Aluminum $796
Trade Wind Road Aluminum $759
Delta Breeze Road CroMoly $699
Santa Ana Mountain Aluminum $459
![Page 33: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/33.jpg)
Adding parameters to macros
• Call macro again
%sortandprint (sortseq=, sortvar=Class)
![Page 34: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/34.jpg)
Adding parameters to macros
• Resolves to standard SAS code
PROC SORT DATA = models;
BY Class;
PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
TITLE2 "Sorted by Class";
VAR Model Class Frame Price;
FORMAT Price DOLLAR6.;
RUN;
![Page 35: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/35.jpg)
Current Models
Sorted by Class
Model Class Frame Price
Scirocco Mountain Titanium $2,256
Nor'easter Mountain Aluminum $899
Santa Ana Mountain Aluminum $459
Mistral Road Carbon Comp $1,995
Trade Wind Road Aluminum $759
Delta Breeze Road CroMoly $699
Jet Stream Track CroMoly $1,130
Black Bora Track Aluminum $796
![Page 36: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/36.jpg)
MPRINT option
• Normally you don’t see resolved macro
statements
• To see them use MPRINT system option
OPTIONS MPRINT;
![Page 37: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/37.jpg)
MPRINT option: SAS log
16 OPTIONS MPRINT;
17 %sortandprint(sortseq=, sortvar=Class)
MPRINT(SORTANDPRINT): PROC SORT DATA=models;
MPRINT(SORTANDPRINT): BY Class;
MPRINT(SORTANDPRINT): PROC PRINT DATA=models NOOBS;
MPRINT(SORTANDPRINT): TITLE 'Current Models';
MPRINT(SORTANDPRINT): TITLE2 "Sorted by Class";
MPRINT(SORTANDPRINT): VAR Model Class Frame Price;
MPRINT(SORTANDPRINT): FORMAT Price DOLLAR6.;
MPRINT(SORTANDPRINT): RUN;
![Page 38: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/38.jpg)
Did you know?
American Major
Taylor won the
Bicycling World
Championship in
1899 in Montreal.
Source: Major Taylor by Andrew Richie
![Page 39: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/39.jpg)
Conditional Logic
• Increase flexibility of macros
• Use macro statements:
%IF %THEN %ELSE
%IF %THEN %DO %END
![Page 40: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/40.jpg)
Conditional Logic
%IF condition %THEN action;
%ELSE %IF condition %THEN action;
%ELSE action;
![Page 41: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/41.jpg)
Conditional Logic
%IF condition %THEN %DO;
action;
%END;
![Page 42: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/42.jpg)
%IF vs. IF
• Different from standard IF statement
• Can only be used inside a macro
• These statements won’t appear in
standard SAS code
• Remember you are writing a program that
writes a program
![Page 43: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/43.jpg)
Automatic Macro Variables
Variable
Name
Example
Description
&SYSDATE 01MAR13 Character value of
the date that job or
session began
&SYSDAY Friday Day of the week that
job or session
began
![Page 44: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/44.jpg)
Orders data
ID Date Model Quantity
287 15FEB13 Delta Breeze 15
287 15FEB13 Santa Ana 15
274 16FEB13 Jet Stream 1
174 17FEB13 Santa Ana 20
174 17FEB13 Nor'easter 5
174 17FEB13 Scirocco 1
347 18FEB13 Mistral 1
287 21FEB13 Delta Breeze 30
287 21FEB13 Santa Ana 25
![Page 45: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/45.jpg)
Conditional logic
• Define macro
%MACRO reports;
%IF &SYSDAY = Monday %THEN %DO;
PROC PRINT DATA = orders NOOBS;
FORMAT OrderDate DATE7.;
TITLE "&SYSDAY Report: "
"Current Orders";
%END;
![Page 46: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/46.jpg)
Conditional logic
%ELSE %IF &SYSDAY = Friday %THEN %DO;
PROC TABULATE DATA = orders;
CLASS CustomerID;
VAR Quantity;
TABLE CustomerID ALL, Quantity;
TITLE "&SYSDAY Report: Summary "
"of Orders";
%END;
RUN;
%MEND reports;
![Page 47: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/47.jpg)
Conditional logic
• Call macro
%reports
![Page 48: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/48.jpg)
Conditional logic
• On Monday resolves to
PROC PRINT DATA = orders NOOBS;
FORMAT OrderDate DATE7.;
TITLE "Monday Report: "
"Current Orders";
![Page 49: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/49.jpg)
Monday Report: Current Orders
Customer Order
ID Date Model Quantity
287 15FEB13 Delta Breeze 15
287 15FEB13 Santa Ana 15
274 16FEB13 Jet Stream 1
174 17FEB13 Santa Ana 20
174 17FEB13 Nor'easter 5
174 17FEB13 Scirocco 1
347 18FEB13 Mistral 1
287 21FEB13 Delta Breeze 30
287 21FEB13 Santa Ana 25
![Page 50: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/50.jpg)
Conditional logic
• On Friday resolves to
PROC TABULATE DATA = orders;
CLASS CustomerID;
VAR Quantity;
TABLE CustomerID ALL, Quantity;
TITLE "Friday Report: Summary "
"of Orders";
![Page 51: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/51.jpg)
Friday Report: Summary of Orders
Quantity
Sum
CustomerID
174 26.00
274 1.00
287 85.00
347 1.00
All 113.00
![Page 52: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/52.jpg)
Sacramento Valley
Photo by Eric Norris
![Page 53: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/53.jpg)
Data-Driven Programs
• Let data determine values of macro
variables
• Problem—SAS doesn’t see data until
execution phase
• Macro variables resolved before execution
• Solution—Use CALL SYMPUT in a DATA
step and pass value to a later step
![Page 54: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/54.jpg)
CALL SYMPUT routine
• Used in DATA step
• Assigns a value to a macro variable
CALL SYMPUT(“macro-variable”, value);
• Value is name of a variable
![Page 55: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/55.jpg)
CALL SYMPUT routine
• Example value as variable name
IF Place = 1 THEN
CALL SYMPUT(“WinningTime”, Time);
![Page 56: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/56.jpg)
CALL SYMPUT routine
PROC SORT DATA = orders;
BY DESCENDING Quantity;
DATA _NULL_;
SET orders;
IF _N_ = 1 THEN
CALL SYMPUT("biggest", CustomerID);
STOP;
![Page 57: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/57.jpg)
Use Macro Variable
PROC PRINT DATA = orders NOOBS;
WHERE CustomerID = "&biggest";
FORMAT OrderDate DATE7.;
TITLE "Customer &biggest Had the "
"Single Largest Order";
RUN;
![Page 58: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/58.jpg)
Data-Driven Program
• Resolves to
PROC PRINT DATA = orders NOOBS;
WHERE CustomerID = "287";
FORMAT OrderDate DATE7.;
TITLE "Customer 287 Had the "
"Single Largest Order";
RUN;
![Page 59: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/59.jpg)
Customer 287 Had the Single Largest Order
Customer Order
ID Date Model Quantity
287 21FEB13 Delta Breeze 30
287 21FEB13 Santa Ana 25
287 15FEB13 Delta Breeze 15
287 15FEB13 Santa Ana 15
![Page 60: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/60.jpg)
Sacramento Valley
Photo by Jeff Hall
![Page 61: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/61.jpg)
Avoiding problems
• Start simple and build piece by piece
• First write your program in standard SAS
code
• Then add macro features one at a time
![Page 62: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/62.jpg)
Conclusions
• Macros can be complicated
• Macros can make your work easier
• Remember you are writing a program that
writes a program
![Page 63: SAS Macro Programming For Beginners · SAS Macro Programming for Beginners Susan J. Slaughter ... Mistral Road 1995 Carbon Comp Nor'easter ... 274 16FEB13 Jet Stream 1](https://reader034.vdocuments.us/reader034/viewer/2022052300/5af3a5ee7f8b9abc78916498/html5/thumbnails/63.jpg)
Thank you!
Contact author
Download paper
www.avocetsolutions.com
The Little SAS Book: A Primer
Fifth Edition