Macro Parameters:
Names one or more local macro variables whose values you specify when you invoke the macro. A parameter list can contain any number of macro parameters separated by commas. The macro variables in the parameter list are usually referenced in the macro.
Syntax:- %MACRO MACRONAME(parameter-1><. . . ,parameter-n>);
Types of Parameters
1. Positional Parameters
2. Keyword Parameters
Positional Parameters
specifies one or more positional parameters. You can specify positional parameters in any order, but in the macro invocation, the order in which you specify the values must match the order you list them in the %MACRO statement. If you define more than one positional parameter, use a comma to separate the parameters.
Keyword Parameters
Names one or more macro parameters followed by equal signs. You can specify default values after the equal signs. If you omit a default value after an equal sign, the keyword parameter has a null value. Using default values enables you to write more flexible macro definitions and reduces the number of parameters that must be specified to invoke the macro. To override the default value, specify the macro variable name followed by an equal sign and the new value in the macro invocation.
Examples:-
Positional Parameters
Importing
%MACRO IMPORT(FILE,DNA
ME);
PROC IMPORT DATAFILE=”&FILE” OUT=&DNAME
DBMS=EXCEL REPLACE;
RUN;
%MEND;
%IMPORT(C:\DOCUMENTS AND SETTINGS\TSIPL0403\DESKTOP\KRISHNA\MACROS_EX\DATA1.XLS,STD_DATA);
%IMPORT(C:\DOCUMENTS AND SETTINGS\TSIPL0403\DESKTOP\KRISHNA\MACROS_EX\DATA2.XLS,EMP_DATA);
Exporting
%MACRO EXPORT(FILE,DNAME);
PROC EXPORT OUTFILE=”&FILE” DATA=&DNAME
DBMS=EXCEL REPLACE;
RUN;
%MEND;
%EXPORT(C:\DOCUMENTS AND SETTINGS\TSIPL0403\DESKTOP\KRISHNA\MACROS_EX\STD_DATA.XLS,WORK.STD_DATA);
%EXPORT(C:\DOCUMENTS AND SETTINGS\TSIPL0403\DESKTOP\KRISHNA\MACROS_EX\EMP_DATA.XLS,WORK.EMP_DATA);
Subsetting
%MACRO SUBSET(DSN1,DSN2);
DATA &DSN1;
SET &DSN2;
RUN;
%MEND;
%SUBSET(DS1,SASHELP.CLASS);
%SUBSET(DS2,WORK.DEMO);
%SUBSET(DS3,KRISHNA.PROD);
%MACRO SUBSET(NEW,ENAME,COND);
DATA &NEW;
SET &ENAME;
WHERE &COND;
RUN;
%MEND;
%SUBSET(DEMO1,SASHELP.CLASS,AGE>=12);
%SUBSET(DEMO2,SASHELP.CLASS,%STR(SEX=’M’));
%SUBSET(DEMO3,SASHELP.CLASS,%NRSTR(SEX=’M’ & AGE>=12));
%MACRO PRINT(DSN);
PROC PRINT DATA=&DSN;
RUN;
%MEND;
%PRINT(WORK.DEMO);
%PRINT(KRISHNA.DATASET);
%PRINT(SASHELP.CLASS);
Plots
%MACRO MAC11(DSN,VAXIS,HAXIS);
PROC GPLOT DATA=&DSN;
PLOT &VAXIS*&HAXIS;
RUN;
%MEND;
%MAC11(SASHELP.CLASS, NAME,HEIGHT);
%MAC11(SASHELP.CLASS, NAME,WEIGHT);
Data Access
%MACRO IMP(DB,CON,TSH,DNAME);
PROC SQL;
CONNECT TO &DB(&CON);
CREATE TABLE &DNAME AS
SELECT*FROM CONNECTION TO &DB
(SELECT*FROM &TSH);
DISCONNECT FROM &DB;
QUIT;
%MEND;
%IMP(EXCEL,%STR(PATH=’D:\SAS SOURCE\XLS\ALLESH.XLS’),[SAMPLE$],DS1);
%IMP(EXCEL,%STR(PATH=’D:\SAS SOURCE\XLS\DEMO.XLS’),[SHEET2$],DS2);
%IMP(ACCESS,%STR(PATH=’D:\SAS SOURCE\MS-ACCESS\DATA.MDB’),EMPLOY,DS3);
%IMP(ORACLE,(USER=SCOTT PASSWORD=TIGER),DEPT,DS4);
Keyword Parameters
%MACRO MAC11(DSN=, VAXIS=, HAXIS=);
PROC GPLOT DATA=&DSN;
PLOT &VAXIS*&HAXIS;
RUN;
%MEND;
%MAC11(VAXIS=NAME, HAXIS=HEIGHT, DSN=SASHELP.CLASS);
%MAC11(DSN=SASHELP.CLASS, VAXIS=NAME, HAXIS=WEIGHT);
%MACRO PRINT(DSN=);
PROC PRINT DATA=&DSN;
RUN;
%MEND;
%PRINT(DSN=WORK.DEMO);
%PRINT(DSN=KRISHNA.DATASET);
%PRINT(DSN=SASHELP.CLASS);
%DO Statement
DATA DS;
DO I=1 TO 10;
OUTPUT;
END;
STOP;
RUN;
Appending
%MACRO MAC15(DS);
PROC APPEND BASE=DSS DATA=&DS FORCE;
RUN;
%MEND;
%MAC15(DS1);
%MAC15(DS14);
%MAC15(DS24);
%MACRO MAC15(DS);
%DO I=1 %TO 5;
%LET VAR1=%SYSFUNC(CAT(&DS,&I));
PROC APPEND BASE=DSS DATA=&VAR1 FORCE;
RUN;
%END;
%MEND;
%MAC15(DS);