Post on 30-Nov-2014
description
Test Your Macro
Ray
Summary
A. Intro to macro
1. Why macro?
2. Components of macro language (macro variables, programs, facility interfaces, storage techniques)
3. Macro variable
User defined/Automatic
Global/Local)
4. Syntax
B. Method to create macro variable1. Open code using %let2. Inside a macro program3. Select into: in proc sql4. Call symput in data step
C. Macro processing1. Macro Compiling2. Macro Expression & Quoting Types: Text/Logic/Arithmetic %eval and %sysevalf %compfl and %compchar 3. Storing & Reusing Macros Saving macros in an autocall library Calling an autocall macro Saving macros using the stored compiled macro facility
Calling a stored compiled macro
1. How do professionals pronounce ampersand(&) for the macro variable?
1. How do professionals pronounce ampersand(&) for the macro variable?
"amper", not "ampersand"
2. Where does SAS store macro variables?
2. Where does SAS store macro variables?
PDV, program data vector
Second memory area
3. What is the title on the report in the following?
%let dwarfs = 7;
proc print data = awards;
title 'There are were &dwarfs small statues awarded in 1939';
run;
A. There are were &dwarfs small statues awarded in 1939
B. There are were 7 small statues awarded in 1939
3. What is the title on the report in the following?
%let dwarfs = 7;
proc print data = awards;
title 'There are were &dwarfs small statues awarded in 1939';
run;
A. There are were &dwarfs small statues awarded in 1939
B. There are were 7 small statues awarded in 1939
The macro facility does not "peak inside" code with single quotes to resolve macro variables.
4. How to replace with macro variables?
%let year = 2007;
%let month = MAR;
%let type = revenue;
%let libinfo = company;
Target:
Libname company 'C:\m data''
proc print data = company.MAR2007;
var revenuecanada revenueus;
run;
4. How to replace with macro variables?
%let year = 2007;
%let month = MAR;
%let type = revenue;
%let libinfo = company;
Answer:
Libname &libinfo 'C:\m data''
proc print data = &libinfo..&month&year;
var &type.canada &type.us;
run;
Whenever SAS encounters a period after a macro variable reference, the period is treated as a way to end the macro variable and then the period is thrown away.
5. What is the ???? in the following?
%let mouse1 = Mickey;
%let mouse2 = Minnie;
%let mouse3 = Miss Bianca;
%let num=2;
%let type = mouse;
proc print data = work.all_movies;
where star = "????";
title "???? is my favorite character";
run;
5. What is the ???? in the following?
%let mouse1 = Mickey;
%let mouse2 = Minnie;
%let mouse3 = Miss Bianca;
%let num=2;
%let type = mouse;
proc print data = work.all_movies;
where star = "&&mouse&num";
title "&&mouse&num is my favorite character";
run;
&&mouse&num
&mouse2
Minnie
6. How to assign singleq with O'neill ?
We have
%let singleq = O'neill;
%put &singleq; Is this the result?
Warning
6. How to assign singleq with O'neill ?
We have
%let singleq = %str(O%'neill);
%put &singleq;
Umatched quotation marks('): %STR
Percent sign(%) : %NRSTR
Comma(,): %BQUOTE
Ampersand(&): %SUPERQ