Chapter 9: Introducing Macro Variables
1
©Spring 2012 Imelda Go, John Grego, JenniferLaseckiand the University of South Carolina
Outline
Automatic Macro VariablesUser-defined Macro VariablesProcessing Macro VariablesDisplaying Macro VariablesMasking Special CharactersManipulating Character StringsSAS Functions and Macro Variables
2
Macro Variables
Macro variables allow the userto substitute text—particularly repetitive textto obtain session informationto obtain information on text strings
3
Macro Variables-%LET
SAS programs often include a single variable used and defined in multiple locations%LET allows the user to define a macro variable, often at the start of the program, and substitute the macro variable throughout the program
4
Macro Variables-%LET
Original codetitle"E Coli Data for 2010";data perm.ecoli2010;set ecoli2010;if year(collection_date)=2010;run;
5
Modified code%let year=2010;title"E Coli Data for &year";dataperm.ecoli&year;setecoli&year;if year(collection_date)=&year;
Macro Variables
SAS’smacro facilityallows text to be saved as macro variablesMacro variables are independent of SAS data setsTwo types of macro variablesautomaticuser-defined
Macro Variables
The value of a macro variable is stored in asymbol tableAutomatic macro variables are always available in the global symbol tableAs you saw from the earlier example, macro variables arereferencedby preceding their name with a &
Macro Variables
The macro processor searches symbol tables for a referenced macro variableA reference cannot be identified if it is placed within single quotes; double quotesmustbe used insteadA message will be printed in the SAS log when macro variable references cannot be resolved
Macro Variables
%let year=2010;title “E Coli Data for &year”;data perm.ecoli&year;set ecoli&year;if year(collection_date)=&year;proc print data=perm.ecoli&year (obs=10);run;
Automatic Macro Variables
Automatic Macro Variables are created when a new SAS session startsAs mentioned before, they are global and typically assigned values by SASUsers may be able to re-assign values in some cases
Automatic Macro Variables
The most common automatic variables reference the current date, day, or time, the current version of SAS or the current SAS data set
Automatic Macro Variables
title “Yacht Rentals”;title2 “Data from &SYSLAST”;footnote “Created &systime&sysday, &sysdate9”;footnote2 “on &sysscpsystem using Release &sysver”;footnote3 “by User &sysuserid”;
Automatic Macro Variables
proc tabulate data=boats format=dollar9.2;class locomotion type;var price;table type,mean=type*price;run;
User-defined macro variables
%LET is the most common method to assign avalue(right side of statement) to your own macrovariable(left side of statement)Values are stored as character stringsQuotation marks are stored as part of the value
User-defined macro variables
%let month=JAN;title "E Coli Data for &month 2009";data perm.ecoli&month;set perm.ecoli;cdate=put(collection_date,date9.);cmonth=substr(cdate,3,3);if cmonth="&month";proc print data=perm.ecoli&month (obs=10);run;
Processing Macro Variables
Processing macro variables takes place within SAS’s general text processing:Program is sent to theinput stackCode is sent to compiler until the end of a stepCompiler executes the code
Processing Macro Variables
SASparses(or tokenizes) the code in the input stack and passes the tokens to the compiler a statement at a timeUseful in understanding difficulties that arise in resolving macro references
Processing Macro Variables
Tokens areQuoted stringsNumbersNames (SAS commands, infiles, variables, ..)Special characters (*, &, ;, ..)
Processing Macro Variables
Example:sx=sum(of x1-x4);The 10 tokens are:sx = sum ( of x1 – x4 ) ;
Processing Macro Variables
Code is sent to the macro processor when particular token sequences occurThemacro triggersare what you would expect% immediately followed by a name token& immediately followed by a name tokenMacro variables are created/updated in the symbol table then sent to the input stack and tokenized
Displaying Macro Variables
You can display macro variables in the Log window using eitheroptions symbolgen;or%put%putallows you to print text to the log, as well as macro variables
Masking Special Characters
SAS has several characters that can make complex macro variables difficult to printThere are a couple different ways to handle these difficulties%STR and %NRSTR%BQUOTE
Masking Special Characters
Two methods to print a macro variable that is a sequence of SAS steps
optionssymbolgen;%let demo=%str(data a; set b; run;);%let demo=dataa%str(;) setb%str(;)run%str(;);
Masking Special Characters
The % sign can be used within the %strargument to print single quotes embedded in a title.%optionssymbolgen;%let text=%str(Today%’sWeather);
Masking Special Characters
%nrstr()works in the same way as%str(), but can also mask macro characters % and &options symbolgen;%let cite=%nrstr( (Grego, Li, Lynch & Sethuraman, 2012));%put cite is interpreted as &cite;
Masking Special Characters
%bquote()ignores special characters during macro compilation and resolves them during executionIt’s more user-friendly than%str
Manipulating Character Strings
Macro character functions are obvious analogs to SAS character functions, but designed to work with macro variables as character stringsSome of these work with%upcase, %substr, %index, %scan, %cmpres%qupcase, etc works similarly to %bquote
SAS Functions and Macro Variables
%SYSFUNC is a powerful command that allows you to introduce standard SAS functions in the macro environmentOnly a limited number of SAS functions are unavailable for use
Macro Variables and text
We have already seen several instances of macro variables combined with textE.g:data ecoli&month&year;SAS may have difficulty resolving some references, but these can be resolved by adding a delimiter to the end of a macro variable name
0
Embed
Upload