1 / 38

EPIB 698E Lecture 12 Introduction to SAS Macro

EPIB 698E Lecture 12 Introduction to SAS Macro. Raul Cruz-Cano Fall 2013. Announcements. Last homework due on Tuesday Not included in the Final Exam Solutions to be posted after the deadline Final Exam next Wednesday. What is SAS Macro?.

len
Download Presentation

EPIB 698E Lecture 12 Introduction to SAS Macro

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EPIB 698E Lecture 12Introduction to SAS Macro Raul Cruz-Cano Fall 2013

  2. Announcements • Last homework due on Tuesday • Not included in the Final Exam • Solutions to be posted after the deadline • Final Exam next Wednesday

  3. What is SAS Macro? • The SAS Macro language is another language that rests on top of regular SAS code. • It allows you to assign a name to groups of SAS programming statements. From that point on, you can work with the name rather than with the text itself. • Macros are particularly useful if you want to make your SAS programs more flexible and allow them to be used in different situations without having to rewrite entire programs

  4. What is SAS Macro? • When you submit a regular SAS code, SAS compiles and then immediately execute it. But for macros, there is an additional step, that is SAS will pass you macro statement to the macro processor which will generate standard SAS code. Macro statement Standard SAS statement Compile and execute Macro processor Results

  5. What is SAS Macro? • Macros consist of collections of • regular SAS program statements, • macro variables, • macro statements and • macro functions contained within a %MACROand a %MEND. • Macro statements, often similar to their regular SAS equivalents, but start with the % symbol, such as, %MACRO and %MEND, %DO, %END, %IF, %THEN, %ELSE and %LET.

  6. Part I: Macro Variables • can be defined and used anywhere in a SAS program, except data lines (i.e. raw data). • contain one value that remains constant until explicitly changed.

  7. Part I: Defining Macro Variables(%LET statement) %LET macrovar = value; • macrovar : regular SAS naming conventions • value : any string or macro expression • stored as character type • length 0-32K characters • math expressions are not evaluated • quotations not needed • leading/trailing blanks are removed

  8. Assignment statement %let name = Ed; %let name2 = ‘Ed’; %let title = “Ed’s report”; %let start = 3+4; Macro VariableValue name Ed name2 ‘Ed’ Macro VariableValue title “Ed’s report” start 3+4 Part I: %LET statementExamples

  9. Part I: Using Macro Variables To use a macro variable, precede the macro variable name with an ampersand (&). Example: &macrovar

  10. %let var_list = RBC WBC cholesterol; title"Using a Macro Variable List"; procmeansdata=blood nmeanminmax ; var &var_list; run; Part I: Using Macro Variables--Example1

  11. %let n = 3; data generate; do Subj = 1to &n; x = int(100*ranuni(0) + 1); output; end; run; Part I: Using Macro Variables—Example2

  12. Part I: Combining Macro Variables with Text • Macro variables can be appended to text or variable names: varname&macrovar • Or prepended: &macrovar.text you need to insert a . between the macro variable and the text so SAS knows where the text begins. • Or connected to other macro variables: &macvar1&macvar2

  13. Part I: Combining Macro Variables with Text (Examples) %let graphics = g; %let file=blood; proc &graphics.plot data=&file; plot RBC*WBC; run; proc gplot data=blood; plot RBC * WBC; run;

  14. When concatenating a dataset to a macro variable containing the libname, you need to use double decimal points instead of one. %let lib = d; data data1; set &lib..clinic; run; data data1;set d.clinic; run; Part I: Combining Macro Variables with Text (Examples)

  15. Part I: Macro QuotingExamples • macro variables can not resolve single quotes--you must use double quotes. • %let sitename = Maryland; title1 “site: &sitename”; title2 ‘site: &sitename’; title1 “site: Maryland”; title2 ‘site: &sitename’;

  16. Part I: Using SAS automatic Macro Variables—Example5 title"The Date is &sysdate9 - the Time is &systime"; procprintdata=blood (obs=5) ; run; title'The Date is &sysdate9 - the Time is &systime'; procprintdata=blood (obs=5) ; run;

  17. Part II: Macros “A macro is stored text identified by a name.” Uses: • generating repetitive pieces of SAS code • conditionally executing code

  18. Part II: Defining a Macro Begin with a %MACRO statement and end with a %MEND statement. Coding beginning with % signs is evaluated by the macro processor Execute the macro with a macro call statement. %MACROmacro-name; macro text; %MENDmacro-name; %macro-name Define a macro Execute a macro

  19. Part II: Defining a Macro • %MACRO macro-name; • begins the macro definition and assigns a name to the macro • macro text • any text • regular SAS statements or steps • macro variables, functions or statements • combination of the above • %MEND macro-name; • ends the macro definition • macro-name is optional

  20. Part II: Calling a Macro • %macro-name • not a SAS statement, therefore doesn’t require a semi-colon • can be placed anywhere in a program except in data lines • Submitting a macro definition complies the macro. • If the macro compiles successfully, SAS will run the generated SAS code.

  21. Part II: Example 6 -- Defining a Macro %let a=blood; %let x=sex; %MACROsortx; proc sort data=&a; by &x; run; proc means data=&a; by &x; run; %MEND sortx; %sortx;

  22. Part III: Macros with Parameters We can use %let statement to define a macro variable. Another way to define macro variable is to use parameters. Parameters pass variable values to macros in the form of macro variables. There are 2 types of parameters: positional keyword

  23. Part III: Positional Parameters %MACRO macro-name (p1, …, pn); text %MEND macro-name; %macro-name(v1, …, vn) Parameters p1 up to pn. Values for parameters p1 up to pn.

  24. Part III: Positional Parameters The parameter list is defined in the %MACRO statement. This list contains names of macro variables referenced only within the macro. To call this macro and provide values for the macro parameters you list the values you want to substitute for each parameter in the macro call statement. Values are substituted for the parameter variables using a one-to-one correspondence.

  25. Part III: Positional Parameters Macro parameters: %MACRO macro-name(p1, …, pn); • enclosed in parentheses • separated with commas • Following SAS naming conventions • referenced as a macro variable within the macro (&p1, &p2, etc )

  26. Part III: Positional Parameters Macro call values: %macro-name(v1, …, vn) • enclosed in parentheses • separated with commas • are substituted for the parameters using a one-to-one correspondencev1 ==> p1 • use commas as placeholders to substitute a null value for positional parameters.

  27. %MACRO sortvar (file, byvar); proc sort data=&file; by &byvar; run; %MEND sortvar; %sortvar (blood, sex) proc sort data=blood; by sex; run; Part III: Positional ParametersExample

  28. Part III: Keyword Parameters %MACRO macro-name (KEY1=value, ...,KEYn=value); text %MEND macro-name; %macro-name (KEY1=value, ...,KEYn=value)

  29. Part III: Keyword Parameters The keyword parameters are defined in the %MACRO statement. KEYn is the name of the macro variable followed by an =. VALUE is the default value assigned to the macro variable. To call this macro and substitute different values you must indicate the macro variable (KEYn) followed by an = and the value you want to substitute. You can specify keyword parameters in any order. Parameters not defined are assigned the default value.

  30. Part III: Keyword Parameters Macro parameters: %MACRO macro-name(KEY1=value, ..., KEYn=value); • enclosed in parentheses, separated by commas • assigned a default value (null is allowed) • referred to as a macro variable within the macro (&KEYn) • keyword complies with SAS naming conventions

  31. Part III: Keyword Parameters Macro call values: %macro-name (KEY1=value, …, KEYn=value) • enclosed in parentheses, separated by commas • can be null values, text, macro variable references • can be listed in any order • can be omitted from the call (default used)

  32. %MACRO sortvar (file=mylib.clinic, byvar=gender); proc sort data=&file; by &byvar; run; %MEND sortvar; %sortvar (file=blood, byvar=sex) %sortvar proc sort data=blood; by sex; run; proc sort data=mylib.clinic; by gender; run; Part III: Keyword ParametersExample

  33. Part III: Mixed Parameter List %MACRO macro-name (p1, …, pn, key=value, …,key=value); text %MEND macro-name; %macro-name (v1, …, vn, key=value, …, key=value) • all positional parameters must be listed in order before any keyword parameters

  34. %MACRO sortx4 (LIB, DATANAME, file=&LIB..&dataname, byvar=gender); proc sort data=&file; by &byvar; run; TITLE "MEANS PROCEDURE OF &DATANAME DATA"; proc means data=&file; by &byvar; run; %MEND sortx4; %sortx4 (WORK, blood, byvar=gender); %sortx4 (d, clinic);

  35. Part IV writing Macros with conditioning logic • Combining macro and macro variables give you a lot of flexibility, but you can increase that flexibility by adding macro statements • Here are the general forms of the macro IF-THEN, DO groups statement: %IF condition %THEN action; %ELSE %IF condition %THEN action; %ELSE action; %IF condition %THEN %DO; SAS statements; %END;

  36. %MACROdailyreports; %IF &SYSDAY =Monday %THEN%DO; PROC PRINT DATA =mylib.blood (obs=5); TITLE 'Monday Report: blood sample data'; run; %END; %ELSE%DO; PROC PRINT DATA =mylib.clinic (obs=5); TITLE 'Tuesday Report: clinic data'; run; %END; %MEND dailyreports; %dailyreports;

  37. Part V: Using a macro variable to transfer value between data steps • CALL SYMPUT (‘Macrovar’, value) • Macrovar: is the name of the macro variable you want to create • Value: is the value you want to assign to the macro variable

  38. procmeansdata=blood noprint; var RBC WBC; outputout=means mean= M_RBC M_WBC; run; data_null_; set means; call symput('AveRBC',M_RBC); call symput('AveWBC',M_WBC); run; data new; set blood(obs=5 keep=Subject RBC WBC); Per_RBC = RBC / &AveRBC; Per_WBC = WBC / &AveWBC; format Per_RBC Per_WBC percent8.; run;

More Related