Presentation is loading. Please wait.

Presentation is loading. Please wait.

Macro Project: Automatic Reporting System

Similar presentations


Presentation on theme: "Macro Project: Automatic Reporting System"— Presentation transcript:

1 Macro Project: Automatic Reporting System
We want to create the report at Dataset (Florida Birth Vital Statistics ) is available at (flbvs.mdb, 56M)

2

3 Descriptive Table two variable: outcome – LBW, predictor – Education
Birth years: Statistics: number of births with LBW by education corresponding percentage. Statewide numbers and rates

4 Define macro parameters
Data Outcome Predictor startYear, endYear %macro dostats(data, outcome, predictor, startYear, endYear) %let outcome=LBW; %let predictor=edu; %let startYear=1992; %let endYear=2001;

5 What is dataset design?

6 SAS program – output statistics
libname fl access "Y:\public_html\STA511\flbvs.mdb"; %let outcome=lbw; %let predictor=edu; %let year=1992; proc sql; select &predictor, sum(total) as totn, sum(&outcome) as outn from fl.s&year group by &predictor; select "Statewide" as &predictor, sum(total) as totn, sum(&outcome) as outn from fl.s&year; select put(&predictor,5.0), sum(total) as totn, sum(&outcome) as outn from fl.s&year group by &predictor union

7 SAS program – output statistics
proc sql; create table sta&year as select put(&predictor,5.0), sum(total) as totn, sum(&outcome) as outn from fl.s&year group by &predictor union select "Statewide" as &predictor, sum(total) as totn, sum(&outcome) as outn from fl.s&year; select *, outn/totn*100 as rate from sta&year; Data sta&year; set sta&year; stats&year=totn; output; stats&year=outn; output; stats&year=rate; output; keep &predictor stats&year; Run; edu totn outn Statewide

8 SAS program – output statistics
%macro dostats(outcome, predictor, startYear, endYear); %let allyeardata=; %do year=&startYear %to &endYear; proc sql; create table sta&year as select put(&predictor,5.0), sum(total) as totn, sum(&outcome) as outn from fl.s&year group by &predictor union select "Statewide" as &predictor, sum(total) as totn, sum(&outcome) as outn from fl.s&year; create table sta&year as select *, outn/totn*100 as rate from sta&year; Data sta&year; set sta&year; sta&year=totn; output; sta&year=outn; output; sta&year=rate; output; keep &predictor sta&year; Run; %let allyeardata=&allyeardata sta&year; %end; %put &allyeardata; Data allstas; merge &allyeardata; by &predictor; run; %mend; %dostats(lbw, edu, 1992, 2001);;

9 Graph - Matlab x=rand(10,3) bar(x) bar([1992:2001], x)

10 data to latex %MACRO data2latex (data, varlist, outputfile, caption);
%let vartab=; %let vartabhead=; %let i=1; %let thisvar=%scan(&varlist, &i); %let cccs=c; %do %until (AA&thisvar=AA); %let vartab=&vartab &thisvar tab; %let vartabhead = &vartabhead "&thisvar" tab; %let i=%eval(&i+1); %let cccs=&cccs c; %end; data _NULL_; set &data end=final; file "&outputfile..tex" MOD; tab="&"; /* this is the KEY - byte(9) for excel*/ if _N_=1 then do; put "\begin{table}"; put "\centering \caption{&caption \label{tab1}}"; put "\begin{tabular}{&cccs}\hline"; put &vartabhead "\\\hline"; put; end; put &vartab "\\"; if final then do; put "\hline\end{tabular}"; put "\end{table}"; run; %MEND data2latex;

11 data to Matlab graph program
%MACRO barchart (data, varlist, outputfile, caption); data _NULL_; set &data end=final; file "&outputfile..m" MOD; tab=" "; if _N_=1 then do; put "x=["; end; put &varlist; if final then do; put "];"; put "y=x';f1=bar(y(:,[3:3:size(y,2)]));"; run; %MEND barchart;

12 libname fl access "C:\Inetpub\wwwroot\STA571\flbvs.mdb";
%MACRO data2latex (data, varlist, outputfile, caption); %let vartab=; %let vartabhead=; %let i=1; %let thisvar=%scan(&varlist, &i); %let cccs=c; %do %until (AA&thisvar=AA); %let vartab=&vartab &thisvar tab; %let vartabhead = &vartabhead "&thisvar" tab; %let i=%eval(&i+1); %let cccs=&cccs c; %end; data _NULL_; set &data end=final; file "&outputfile..tex" MOD; tab="&"; if _N_=1 then do; put "\begin{table}"; put "\centering \caption{&caption \label{tab1}}"; put "\begin{tabular}{&cccs}\hline"; put &vartabhead "\\\hline"; put; end; put &vartab "\\"; if final then do; put "\hline\end{tabular}"; put "\end{table}"; run; %MEND data2latex; %macro dostats(outcome, predictor, startYear, endYear, outputfile); %let allyeardata=; %do year=&startYear %to &endYear; proc sql; create table sta&year as select put(&predictor,5.0), sum(total) as totn, sum(&outcome) as outn from fl.s&year group by &predictor union select "Statewide" as &predictor, sum(total) as totn, sum(&outcome) as outn from fl.s&year; create table sta&year as select *, outn/totn*100 as rate from sta&year; Data sta&year; set sta&year; sta&year=totn; output; sta&year=outn; output; sta&year=rate; output; keep &predictor sta&year; Run; %let allyeardata=&allyeardata sta&year; %put &allyeardata; Data allstas; merge &allyeardata; by &predictor; data _NULL_; file "&outputfile..tex" MOD; put "\newpage"; put; run; %data2latex (allstas, &allyeardata, &outputfile, &outcome by &predictor); data _NULL_; file "&outputfile..tex" MOD; put; put "\includegraphics*{fig&outcome.&predictor..eps}"; run; set allstas end=final; file "&outputfile..m" MOD; tab=" "; put "x=["; put &allyeardata; put "];";put; put "draw_one(x, 'fig&outcome.&predictor..eps');"; put; %mend; %macro processall(outputfile); data _NULL_; file "&outputfile..tex"; /*Overwrite old file (no option mod)*/ put "\documentclass{amsart}\usepackage{graphicx}\begin{document}"; put; data _NULL_; file "&outputfile..m"; /*Overwrite old file (no option mod)*/ put "function main"; put; put "draw_all;"; put; put "function draw_one(x, figfilename)"; put; put "%boxplot here"; put "y=x';f1=bar(y(:,[3:3:size(y,2)]));"; put "print(gcf, '-deps', figfilename);close(gcf)"; put "function draw_all"; put; %dostats(lbw, edu, 1992, 2001, &outputfile); data _NULL_; file "&outputfile..tex" MOD; put "\end{document}"; put; run; %mend processall;; %processall(c:\a); Automatic Reporting Macro

13 Call the macro %macro processall(outputfile);
data _NULL_; file "&outputfile..tex"; /*Overwrite old file (no option mod)*/ put "\documentclass{amsart}\usepackage{graphicx}\begin{document}"; put; run; data _NULL_; file "&outputfile..m"; /*Overwrite old file (no option mod)*/ put "function main"; put; put "draw_all;"; put; put "function draw_one(x, figfilename)"; put; put "%boxplot here"; put "y=x';f1=bar(y(:,[3:3:size(y,2)]));"; put "print(gcf, '-deps', figfilename);"; put; put "function draw_all"; put; %dostats(lbw, edu, 1992, 2001, &outputfile); %dostats(ideath, edu, 1992, 2001, &outputfile); data _NULL_; file "&outputfile..tex" MOD; put "\end{document}"; put; run; %mend processall;

14 Call the macro Any error ? %macro processall(outputfile);
data _NULL_; file "&outputfile..tex"; /*Overwrite old file (no option mod)*/ put "\documentclass{amsart}\usepackage{graphicx}\begin{document}"; put; run; data _NULL_; file "&outputfile..m"; /*Overwrite old file (no option mod)*/ put "function main"; put; put "draw_all;"; put; put "function draw_one(x, figfilename)"; put; put "%boxplot here"; put "y=x';f1=bar(y(:,[3:3:size(y,2)]));"; put "print(gcf, '-deps', figfilename);close(gcf)"; put; put "function draw_all"; put; %let outcomelst=lbw vlbw ideath; %let predlst=edu mrace; %do i=1 %to 3; %let outcome=%scan(&outcomelst, &i); %do j=1 %to 2; %let predictor=%scan(&predlst, &j); %dostats(&outcome, &predictor, 1992, 2001, &outputfile); %end; data _NULL_; file "&outputfile..tex" MOD; put "\end{document}"; put; run; %mend processall; Any error ?

15 Modify the Macro Put legend of the figure
Change the figure screen size Format the rate with 2 decimal Refine title of table and figure by the caption of variable (not the variable name, such as edu) Change the x-axis to real years Flexible on generating any years report


Download ppt "Macro Project: Automatic Reporting System"

Similar presentations


Ads by Google