/* Example of a Macro with Several Parameters */ data nflplayers; FILENAME webpage URL 'http://people.stat.sc.edu/hitchcock/nfl_season_data.txt'; infile webpage DLM=',' DSD; INPUT idcode $ lastname :$20. firstname :$20. year team $ position $ G GS COMP ATT PassYD PassTD INT rush rushYD rushTD rec recYD recTD; run; /* Get rid of some variables */ /* In particular: */ /* Keeps: PassYD, PassTD, rushYD, rushTD, recYD, recTD */ data selectedstats; set nflplayers (DROP=idcode G GS COMP ATT INT rush rec); run; Proc sort; by team; RUN; data selectedstats; set selectedstats; retain preteam curteam; retain i 0; curteam=team; if preteam ~= curteam then do; i=i+1; preteam=curteam; CALL SYMPUT("nteams", i); end; *drop preteam curteam; Run; /* Defining a macro to pick out and print the top few players for a variety of stats, years, positions, or teams */ %let NN=1; /* %MACRO topfew(beginyear=, endyear=, stat=, pos=, numberlisted=); %Do %while (&NN<= &nteams); PROC SORT DATA = selectedstats OUT=statssorted; BY descending &stat; WHERE position = "&pos" AND i = &NN AND &beginyear <= year <= &endyear; PROC PRINT data=statssorted (OBS=&numberlisted); VAR firstname lastname team year &stat; TITLE "Top &numberlisted in &stat"; * Note Double Quotes needed; RUN; %let NN=1+&NN; %end; %MEND topfew; */ /* Picking Top Two Wide Receivers on Buffalo Bills in Receiving Yards from 1997 */ *%topfew(beginyear=1997, endyear=1997, stat=RecYD, pos=wr, numberlisted=2) ; %MACRO topfew2(beginyear=, endyear=,ind=, stat=, pos=, numberlisted=); PROC SORT DATA = selectedstats OUT=statssorted; BY descending &stat; WHERE position = "&pos" AND i = &ind AND &beginyear <= year <= &endyear; PROC PRINT data=statssorted (OBS=&numberlisted); VAR firstname lastname team year &stat; TITLE "Top &numberlisted in &stat"; * Note Double Quotes needed; RUN; %MEND topfew2; %MACRO topfew3; %Do %while (&NN<= &nteams); %topfew2(beginyear=1997, endyear=1997,ind=&NN, stat=RecYD, pos=wr, numberlisted=2) %let NN=1+&NN; %end; %MEND topfew3; %topfew3