<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Macro and ODS to create table in word in ODS and Base Reporting</title>
    <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236503#M14720</link>
    <description>&lt;P&gt;I have a macro that is used to create tables in microsoft word. Overall the macro is working well, however, I am getting some truncation of my output and I can't figure out why. Basically, for the percentages in two columns they are getting cut off at the decimal point and it is not printing the % sign. For continuous variables the variable label or p-value is also not printing out. I&amp;nbsp;have tried several different formats and work around but nothing seems to change. It will not let me attach the sas file so I am pasting the macro code below. I am posting the code to invoke the macro below as well as what I am getting when I run the code. As you can see the totals column runs well, but in the yes and no columns the percents are getting truncated. I am not getting the Age label or p-value for the continuous variable either. I know this is somewhat more complicated but I would apprecaite any advice, I've been trying to fix&amp;nbsp;for a while and have had no luck.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data alldata; &lt;BR /&gt; set have;&lt;BR /&gt; idnum=studyid; **insert study id from dataset;&lt;BR /&gt; if outcomea=1 then site=1; else if outcomea=0 then site=2; ***Outcome/stratification variable;&lt;BR /&gt;proc sort data=alldata;&lt;BR /&gt;by idnum;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data bydata; set alldata; &lt;BR /&gt;keep site idnum ;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%let stratvar=site;&lt;BR /&gt;data last;&lt;BR /&gt;totals=" ";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;****continuous variable;&lt;BR /&gt;%conti(site=-1,alldata=alldata, bydata=bydata,row=age,&lt;BR /&gt;rlabel="Age ",&lt;BR /&gt;col=site, source3="All data", numfmt=7.2);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;*categorical variable;&lt;/P&gt;
&lt;P&gt;%table2(site=-1,alldata=alldata, bydata=bydata, row=Sex,&lt;BR /&gt;rlabel="Sex ", &lt;BR /&gt;rowf= sex.,col=site, missnum=9999, pname=p_pchi,&lt;BR /&gt;source3="All data");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data last1; &lt;BR /&gt;set last;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;***CODE TO OUTPUT TO WORD TABLE***;&lt;BR /&gt;ods rtf file="table.doc" startpage=no bodytitle;&lt;BR /&gt;proc print data=last1 label noobs;&lt;BR /&gt;Title1 'Table 1';&lt;BR /&gt;Title2 ''; &lt;BR /&gt;var varname var1 totals arma armb p; &lt;BR /&gt;label varname="Variable" var1="Response" arma="Yes" armb="No" totals="Total";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;ods rtf close;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&lt;STRONG&gt;Variable&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;&lt;STRONG&gt;Response&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;&lt;STRONG&gt;Total&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&lt;STRONG&gt;Yes&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&lt;STRONG&gt;No&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&lt;STRONG&gt;p&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;n&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;34495.0&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;10473.0&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;24022.0&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;mean&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;34.02&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;31.82&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;34.97&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;std&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;9.60&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;9.17&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;9.63&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;max&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;66.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;61.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;66.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;q3&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;40.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;38.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;41.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;median&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;34.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;31.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;35.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;q1&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;26.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;24.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;27.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;min&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;17.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;17.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;17.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;Sex&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;(n=34495)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;(n=10473)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;(n=24022)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;lt;.001&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;Male&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;22045(63.9%)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;7140(68.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;14905(62.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;Female&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;12450(36.1%)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;3333(31.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;9117(38.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;*****MACRO CODE IS EVERYTHING BELOW HERE**************;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti4mediqr(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=12.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;/P&gt;
&lt;P&gt;data out2;&lt;BR /&gt;set out2;&lt;BR /&gt;MedianIQR=put(median, 4.1)||'('||put(q1, 4.1)||',' || put(q3, 4.1)||')';&lt;BR /&gt;MeanSTD=put(mean, 6.1)||'('||put(std, 6.1)||')';&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;/P&gt;
&lt;P&gt;data out5; set out5;&lt;BR /&gt;MedianIQR=put(median, 4.1)||'('||put(q1, 4.1)||',' || put(q3, 4.1)||')'; &lt;BR /&gt;MeanSTD=put(mean, 6.1)||'('||put(std, 6.1)||')';&lt;BR /&gt;&amp;amp;col=100;&lt;/P&gt;
&lt;P&gt;data out2; &lt;BR /&gt;set out2 out5;&lt;BR /&gt; &lt;BR /&gt;proc print data=out5;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt;id &amp;amp;col;&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); armd=put(_4, &amp;amp;numfmt); &lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data miqr;&lt;BR /&gt;set out2;&lt;BR /&gt;keep MedianIQR;&lt;/P&gt;
&lt;P&gt;proc transpose data=miqr out=test1;&lt;BR /&gt;var MedianIQR;&lt;/P&gt;
&lt;P&gt;data newtest1;&lt;BR /&gt;set test1;&lt;BR /&gt;arma=col1; armb=col2;&lt;BR /&gt;armc=col3; armd=col4; &lt;BR /&gt;totals=col5;&lt;BR /&gt;drop col1 col2 col3 col4 col5;&lt;/P&gt;
&lt;P&gt;data mstd;&lt;BR /&gt;set out2;&lt;BR /&gt;keep MeanSTD;&lt;/P&gt;
&lt;P&gt;proc transpose data=mstd out=test2;&lt;BR /&gt;var MeanSTD;&lt;/P&gt;
&lt;P&gt;data newtest2;&lt;BR /&gt;set test2;&lt;BR /&gt;arma=col1; armb=col2;&lt;BR /&gt;armc=col3; armd=col4; &lt;BR /&gt;totals=col5;&lt;BR /&gt;drop col1 col2 col3 col4 col5;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data out3;&lt;BR /&gt;set newtest1 newtest2 out3;&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(pvalue, 6.4);&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt; if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if pvalue&amp;lt;0.001 then p='&amp;lt;.001'; &lt;BR /&gt; else if pvalue&amp;gt;=0.050001 then p= put(pvalue, 4.3); &lt;BR /&gt; else if pvalue&amp;gt;=0.001 then p= put(pvalue, 4.3); &lt;BR /&gt;varname=&amp;amp;rlabel;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd totals p;&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table2(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ", &lt;BR /&gt;pctfmt=4.3);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col=0 then &amp;amp;col=2; *** change 0 to 2 as no****;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; &lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb pcta pctb arma armb;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all trend;&lt;BR /&gt;output out=pvalue pchi fisher trend cmh n nmiss;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb));&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; set ntotal; arma="(n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")";&lt;BR /&gt; *drop na nb;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 4.3);&lt;BR /&gt;/*&lt;BR /&gt; if &amp;amp;pname&amp;lt;=0.01 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.01";&lt;BR /&gt; else p=put(&amp;amp;pname, 6.3);&lt;BR /&gt;*/&lt;BR /&gt;totals="(n="||put(na+nb, 5.)||")"; allnmiss=put(nmiss, 5.);&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=total; &lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;run;&lt;BR /&gt;proc print data=four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data last(keep=varname datasource var1 arma armb totals p);&lt;BR /&gt; set last four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb totals p;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table2(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", &lt;BR /&gt;source2=" ", &lt;BR /&gt;source3=" ", &lt;BR /&gt;pctfmt=4.3);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col=0 then &amp;amp;col=2; *** change 0 to 2 as no****;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; &lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb pcta pctb arma armb;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all trend;&lt;BR /&gt;output out=pvalue pchi fisher trend cmh n nmiss;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" &lt;BR /&gt; ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb));&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; set ntotal; arma="(n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")";&lt;BR /&gt; *drop na nb;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 4.3);&lt;BR /&gt;/*&lt;BR /&gt; if &amp;amp;pname&amp;lt;=0.01 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.01";&lt;BR /&gt; else p=put(&amp;amp;pname, 6.3);&lt;BR /&gt;*/&lt;BR /&gt; totals=" (n="||put(na+nb, 5.)||")"; allnmiss=put(nmiss, 5.);&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=total; &lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;run;&lt;BR /&gt;proc print data=four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data last(keep=varname datasource var1 arma armb totals p);&lt;BR /&gt; set last four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb totals p;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table3(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ", pctfmt=3.0);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;data col3;&lt;BR /&gt; set counts; if &amp;amp;col=3;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)) col3(rename=(count=colc percent=pctc)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colc=. then colc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctc=. then pctc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb colc pcta pctb pctc arma armb armc;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armc=put(colc, 5.)||'('||put(pctc, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; &lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;proc print;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all;&lt;BR /&gt;output out=pvalue pchi fisher cmh n nmiss;&lt;BR /&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;data nc;set ntotal; if &amp;amp;col=3 and _type_=1;&lt;BR /&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb)) nc(rename=(n=nc));&lt;BR /&gt; if na=. then na=0;&lt;BR /&gt; if nb=. then nb=0;&lt;BR /&gt; if nc=. then nc=0;&lt;/P&gt;
&lt;P&gt;data ntotal; set ntotal; arma=" (n="||put(na, 5.)||")";&lt;BR /&gt;armb=" (n="||put(nb, 5.)||") "; armc="(n="||put(nc, 5.)||")";&lt;BR /&gt; *drop na nb;&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 4.3);&lt;BR /&gt; &lt;BR /&gt; totals="(n="||put(na+nb+nc, 5.)||")"; allnmiss=put(nmiss, 4.);&lt;BR /&gt;proc print data=total; &lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb armc totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;proc print data=four;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc totals p);&lt;BR /&gt; set last four;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc totals p;&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table4(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ");&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;data col3;&lt;BR /&gt; set counts; if &amp;amp;col=3;&lt;BR /&gt;data col4; &lt;BR /&gt; set counts; if &amp;amp;col=4;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)) col3(rename=(count=colc percent=pctc)) col4(rename=(count=cold percent=pctd)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colc=. then colc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cold=. then cold=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctc=. then pctc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctd=. then pctd=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb colc colcd pcta pctb pctc pctd arma armb armc armd;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armc=put(colc, 5.)||'('||put(pctc, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armd=put(cold, 5.)||'('||put(pctd, &amp;amp;pctfmt)||'%)';&lt;/P&gt;
&lt;P&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;proc print;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all;&lt;BR /&gt;output out=pvalue pchi fisher cmh n nmiss;&lt;BR /&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;data nc;set ntotal; if &amp;amp;col=3 and _type_=1;&lt;BR /&gt;data nd;set ntotal; if &amp;amp;col=4 and _type_=1;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb)) nc(rename=(n=nc)) nd(rename=(n=nd));&lt;BR /&gt;data ntotal; set ntotal; arma=" (n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")"; armc=" (n="||put(nc, 5.)||")";&lt;BR /&gt; armd="(n="||put(nd, 5.)||")";&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; *if &amp;amp;pname&amp;lt;=0.0001 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.0001";&lt;BR /&gt; *else p=put(&amp;amp;pname, 6.4);&lt;BR /&gt; *totals=" (n="||put(na+nb+nc+nd, 4.)||")"; allnmiss=put(nmiss, 4.);&lt;BR /&gt;*proc print data=total; &lt;BR /&gt; &lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; totals="(n="||put(sum(na, nb, nc, nd), 5.)||")"; allnmiss=put(nmiss, 4.);&lt;BR /&gt;proc print data=total;&lt;/P&gt;
&lt;P&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb armc armd totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;proc print data=four;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd totals p);&lt;BR /&gt; set last four;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd totals p;&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table5(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ", pctfmt=3.0);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;BR /&gt;run;&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;run;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;run;&lt;BR /&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;run;&lt;BR /&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;run;&lt;BR /&gt;data col3;&lt;BR /&gt; set counts; if &amp;amp;col=3;run;&lt;BR /&gt;data col4; &lt;BR /&gt; set counts; if &amp;amp;col=4;run;&lt;BR /&gt;data col5;&lt;BR /&gt; set counts; if &amp;amp;col=5;run;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******; ***Changed the 4.1s&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;BR /&gt;run;&lt;BR /&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; run;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)) col3(rename=(count=colc percent=pctc)) col4(rename=(count=cold percent=pctd))&lt;BR /&gt; col5(rename=(count=cole percent=pcte)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colc=. then colc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cold=. then cold=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cole=. then cole=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctc=. then pctc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctd=. then pctd=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcte=. then pcte=0;&lt;/P&gt;
&lt;P&gt;if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb colc colcd colce pcta pctb pctc pctd pcte arma armb armc armd arme;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armc=put(colc, 5.)||'('||put(pctc, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armd=put(cold, 5.)||'('||put(pctd, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; arme=put(cole, 5.)||'('||put(pcte, &amp;amp;pctfmt)||'%)';&lt;BR /&gt;run;&lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; run;&lt;BR /&gt;proc print;run;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all;&lt;BR /&gt;output out=pvalue pchi fisher cmh n nmiss;run;&lt;BR /&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";run;&lt;BR /&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n; run;&lt;BR /&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;run;&lt;BR /&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;run;&lt;BR /&gt;data nc;set ntotal; if &amp;amp;col=3 and _type_=1;run;&lt;BR /&gt;data nd;set ntotal; if &amp;amp;col=4 and _type_=1;run;&lt;BR /&gt;data ne;set ntotal; if &amp;amp;col=5 and _type_=1; run;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb)) nc(rename=(n=nc)) nd(rename=(n=nd)) ne(rename=(n=ne));run;&lt;BR /&gt;data ntotal; set ntotal;&lt;BR /&gt; if na=. then na=0;&lt;BR /&gt; if nb=. then nb=0;&lt;BR /&gt; if nc=. then nc=0;&lt;BR /&gt; if nd=. then nd=0;&lt;BR /&gt;if ne=. then ne=0;&lt;BR /&gt;arma="(n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")"; armc=" (n="||put(nc, 5.)||")";&lt;BR /&gt; armd="(n="||put(nd, 5.)||")"; arme=" (n="||put(ne, 5.)||")";&lt;BR /&gt;run;&lt;BR /&gt;proc print;run;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;run;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;=0.0001 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(&amp;amp;pname, 6.4);&lt;BR /&gt; totals="(n="||put(sum(na,nb,nc,nd,ne), 5.)||")"; allnmiss=put(nmiss, 4.);run;&lt;BR /&gt;proc print data=total; run;&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb armc armd arme totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);run;&lt;BR /&gt;proc print data=four;run;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd arme totals p);&lt;BR /&gt; set last four;&lt;BR /&gt;run;&lt;BR /&gt;proc contents;run;&lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd arme totals p;run;&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;data last;&lt;BR /&gt; totals=" ";&lt;BR /&gt; &lt;BR /&gt;%macro conti(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt; if &amp;amp;col=0 then &amp;amp;col=2; *** change 0 to 2 as no****;&lt;BR /&gt;run;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;run;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data out5; set out5; &amp;amp;col=100;&lt;BR /&gt;run;&lt;BR /&gt;data out2; set out2 out5;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;proc print data=out5;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;&lt;BR /&gt;run;&lt;BR /&gt;/*&lt;BR /&gt;data null;&lt;BR /&gt; set out3; if _NAME_="n";&lt;BR /&gt; %if (_1=0 or _2=0) %then %goto endmacro;&lt;BR /&gt; */&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;run;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; else if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt;/*&lt;BR /&gt; if pvalue&amp;lt;=0.01 then p="&amp;lt;0.01";&lt;BR /&gt; else p=put(pvalue, 6.3);&lt;BR /&gt;*/&lt;/P&gt;
&lt;P&gt;if pvalue&amp;lt;0.001 then p='&amp;lt;.001'; &lt;BR /&gt; else if pvalue&amp;gt;=0.050001 then p= put(pvalue, 3.2); &lt;BR /&gt; else if pvalue&amp;gt;=0.001 then p= put(pvalue, 4.3);&lt;/P&gt;
&lt;P&gt;varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;run; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data last(keep=varname datasource var1 arma armb totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb totals p;&lt;BR /&gt;; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%endmacro:&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti4(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;/P&gt;
&lt;P&gt;data out5; set out5; &amp;amp;col=100;&lt;BR /&gt;data out2; set out2 out5;&lt;/P&gt;
&lt;P&gt;proc print data=out5;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); armd=put(_4, &amp;amp;numfmt); &lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; /*if p2_wil^=. then pvalue=p2_wil;*/&lt;BR /&gt; if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; *if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; *else p=put(pvalue, 6.4);&lt;BR /&gt; *varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if pvalue&amp;lt;0.001 then p='&amp;lt;.001'; &lt;BR /&gt; else if pvalue&amp;gt;=0.050001 then p= put(pvalue, 4.3); &lt;BR /&gt; else if pvalue&amp;gt;=0.001 then p= put(pvalue, 4.3); &lt;BR /&gt;varname=&amp;amp;rlabel;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd totals p;&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti5(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;run;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;run;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;run;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;run;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;BR /&gt;run;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;BR /&gt;run;&lt;BR /&gt;data out5; set out5; &amp;amp;col=100;run;&lt;BR /&gt;data out2; set out2 out5;run;&lt;/P&gt;
&lt;P&gt;proc print data=out5;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;run;&lt;BR /&gt;proc print data=out3;run;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); armd=put(_4, &amp;amp;numfmt); arme=put(_4, &amp;amp;numfmt);&lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;BR /&gt;run;&lt;BR /&gt; proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; else if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(pvalue, 6.4);&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; run;&lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;run;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd arme totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));run;&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd arme totals p;&lt;BR /&gt;; run;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti3(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;/P&gt;
&lt;P&gt;data out5; set out5; &amp;amp;col=100;&lt;BR /&gt;data out2; set out2 out5;&lt;/P&gt;
&lt;P&gt;proc print data=out5;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); &lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; else if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(pvalue, 6.4);&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc totals p;&lt;BR /&gt;; &lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;data last; &lt;BR /&gt; alln=" ";&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%table2(site=-1,alldata=alldata, bydata=idu, row=&amp;amp;var, &lt;BR /&gt;rlabel=" ",&lt;BR /&gt;rowf=&amp;amp;varfmt,col=idu, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%macro bar(var=, varlabel=, varfmt=, testname=xp2_fish, missnum=900);&lt;/P&gt;
&lt;P&gt;%table2(site=-1,alldata=alldata, bydata=bar, row=&amp;amp;var,&lt;BR /&gt;rlabel=" ",&lt;BR /&gt;rowf=&amp;amp;varfmt,col=bar, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;******Continuous variables***********;&lt;BR /&gt;%macro cbar(var=, varlabel=, missnum=9000, numbfmt=6.0);&lt;BR /&gt; &lt;BR /&gt;%conti(site=-1,alldata=alldata, bydata=bar,row=&amp;amp;var,&lt;BR /&gt; rlabel=" ",col=bar, source3="All data", numfmt=&amp;amp;numbfmt);&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro site(var=, varlabel=, varfmt=, testname=xp2_fish, missnum=900);&lt;BR /&gt;%table2(site=-1,alldata=alldata, bydata=bydata, row=&amp;amp;var,&lt;BR /&gt;rlabel=&amp;amp;varlabel,&lt;BR /&gt;rowf=&amp;amp;varfmt,col=site, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;%macro csite(var=, varlabel=, missnum=9000, numbfmt=6.0); &lt;BR /&gt;%conti(site=-1,alldata=alldata, bydata=bydata,row=&amp;amp;var,&lt;BR /&gt; rlabel=&amp;amp;varlabel,col=site, source3="All data", numfmt=&amp;amp;numbfmt);&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;*****generalized macros*******;&lt;/P&gt;
&lt;P&gt;%macro categ(var=, varlabel=, varfmt=, testname=xp2_fish, missnum=900);&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%table2(site=-1,alldata=&amp;amp;alldata, bydata=&amp;amp;bydata, row=&amp;amp;var, &lt;BR /&gt;rlabel=" ",&lt;BR /&gt;rowf=&amp;amp;varfmt,col=&amp;amp;cvar, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;******Continuous variables***********;&lt;BR /&gt;%macro cont(var=, varlabel=, missnum=9000, numbfmt=6.0);&lt;BR /&gt; &lt;BR /&gt;%conti(site=1,alldata=&amp;amp;alldata, bydata=&amp;amp;bydata,row=&amp;amp;var,&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%conti(site=-1,alldata=&amp;amp;alldata, bydata=&amp;amp;bydata,row=&amp;amp;var,&lt;BR /&gt; rlabel=" ",col=&amp;amp;cvar, source3="All data", numfmt=&amp;amp;numbfmt);&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro logistic(var=, varlabel=);&lt;/P&gt;
&lt;P&gt;proc logistic descending data=alldata;&lt;BR /&gt; model &amp;amp;yvar=&amp;amp;var /risklimits lackfit;&lt;BR /&gt; ODS output ParameterEstimates=uni CLOddsWald=ci;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data uni;&lt;BR /&gt; set uni(keep=variable Estimate ProbChisq); if variable^="Intercept";&lt;BR /&gt;data uni; set uni; obs=_N_;&lt;BR /&gt;data ci; set ci (keep=OddsRatioEst LowerCL UpperCL); obs=_N_;&lt;BR /&gt;data unici; merge uni ci; by obs; drop obs;&lt;BR /&gt; varlabel=&amp;amp;varlabel;&lt;/P&gt;
&lt;P&gt;data unilogistic;&lt;BR /&gt; set unilogistic unici;&lt;/P&gt;
&lt;P&gt;%mend;&lt;BR /&gt;data unilogistic;&lt;BR /&gt; variable=" ";&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 25 Nov 2015 22:15:13 GMT</pubDate>
    <dc:creator>rfarmenta</dc:creator>
    <dc:date>2015-11-25T22:15:13Z</dc:date>
    <item>
      <title>Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236503#M14720</link>
      <description>&lt;P&gt;I have a macro that is used to create tables in microsoft word. Overall the macro is working well, however, I am getting some truncation of my output and I can't figure out why. Basically, for the percentages in two columns they are getting cut off at the decimal point and it is not printing the % sign. For continuous variables the variable label or p-value is also not printing out. I&amp;nbsp;have tried several different formats and work around but nothing seems to change. It will not let me attach the sas file so I am pasting the macro code below. I am posting the code to invoke the macro below as well as what I am getting when I run the code. As you can see the totals column runs well, but in the yes and no columns the percents are getting truncated. I am not getting the Age label or p-value for the continuous variable either. I know this is somewhat more complicated but I would apprecaite any advice, I've been trying to fix&amp;nbsp;for a while and have had no luck.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data alldata; &lt;BR /&gt; set have;&lt;BR /&gt; idnum=studyid; **insert study id from dataset;&lt;BR /&gt; if outcomea=1 then site=1; else if outcomea=0 then site=2; ***Outcome/stratification variable;&lt;BR /&gt;proc sort data=alldata;&lt;BR /&gt;by idnum;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data bydata; set alldata; &lt;BR /&gt;keep site idnum ;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%let stratvar=site;&lt;BR /&gt;data last;&lt;BR /&gt;totals=" ";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;****continuous variable;&lt;BR /&gt;%conti(site=-1,alldata=alldata, bydata=bydata,row=age,&lt;BR /&gt;rlabel="Age ",&lt;BR /&gt;col=site, source3="All data", numfmt=7.2);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;*categorical variable;&lt;/P&gt;
&lt;P&gt;%table2(site=-1,alldata=alldata, bydata=bydata, row=Sex,&lt;BR /&gt;rlabel="Sex ", &lt;BR /&gt;rowf= sex.,col=site, missnum=9999, pname=p_pchi,&lt;BR /&gt;source3="All data");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data last1; &lt;BR /&gt;set last;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;***CODE TO OUTPUT TO WORD TABLE***;&lt;BR /&gt;ods rtf file="table.doc" startpage=no bodytitle;&lt;BR /&gt;proc print data=last1 label noobs;&lt;BR /&gt;Title1 'Table 1';&lt;BR /&gt;Title2 ''; &lt;BR /&gt;var varname var1 totals arma armb p; &lt;BR /&gt;label varname="Variable" var1="Response" arma="Yes" armb="No" totals="Total";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;ods rtf close;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&lt;STRONG&gt;Variable&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;&lt;STRONG&gt;Response&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;&lt;STRONG&gt;Total&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&lt;STRONG&gt;Yes&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&lt;STRONG&gt;No&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&lt;STRONG&gt;p&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;n&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;34495.0&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;10473.0&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;24022.0&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;mean&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;34.02&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;31.82&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;34.97&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;std&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;9.60&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;9.17&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;9.63&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;max&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;66.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;61.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;66.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;q3&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;40.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;38.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;41.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;median&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;34.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;31.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;35.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;q1&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;26.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;24.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;27.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;min&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;17.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;17.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;17.00&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;Sex&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;(n=34495)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;(n=10473)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;(n=24022)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;lt;.001&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;Male&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;22045(63.9%)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;7140(68.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;14905(62.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="114"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="68"&gt;
&lt;P&gt;Female&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="87"&gt;
&lt;P&gt;12450(36.1%)&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;3333(31.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="66"&gt;
&lt;P&gt;9117(38.&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="41"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;*****MACRO CODE IS EVERYTHING BELOW HERE**************;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti4mediqr(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=12.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;/P&gt;
&lt;P&gt;data out2;&lt;BR /&gt;set out2;&lt;BR /&gt;MedianIQR=put(median, 4.1)||'('||put(q1, 4.1)||',' || put(q3, 4.1)||')';&lt;BR /&gt;MeanSTD=put(mean, 6.1)||'('||put(std, 6.1)||')';&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;/P&gt;
&lt;P&gt;data out5; set out5;&lt;BR /&gt;MedianIQR=put(median, 4.1)||'('||put(q1, 4.1)||',' || put(q3, 4.1)||')'; &lt;BR /&gt;MeanSTD=put(mean, 6.1)||'('||put(std, 6.1)||')';&lt;BR /&gt;&amp;amp;col=100;&lt;/P&gt;
&lt;P&gt;data out2; &lt;BR /&gt;set out2 out5;&lt;BR /&gt; &lt;BR /&gt;proc print data=out5;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt;id &amp;amp;col;&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); armd=put(_4, &amp;amp;numfmt); &lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data miqr;&lt;BR /&gt;set out2;&lt;BR /&gt;keep MedianIQR;&lt;/P&gt;
&lt;P&gt;proc transpose data=miqr out=test1;&lt;BR /&gt;var MedianIQR;&lt;/P&gt;
&lt;P&gt;data newtest1;&lt;BR /&gt;set test1;&lt;BR /&gt;arma=col1; armb=col2;&lt;BR /&gt;armc=col3; armd=col4; &lt;BR /&gt;totals=col5;&lt;BR /&gt;drop col1 col2 col3 col4 col5;&lt;/P&gt;
&lt;P&gt;data mstd;&lt;BR /&gt;set out2;&lt;BR /&gt;keep MeanSTD;&lt;/P&gt;
&lt;P&gt;proc transpose data=mstd out=test2;&lt;BR /&gt;var MeanSTD;&lt;/P&gt;
&lt;P&gt;data newtest2;&lt;BR /&gt;set test2;&lt;BR /&gt;arma=col1; armb=col2;&lt;BR /&gt;armc=col3; armd=col4; &lt;BR /&gt;totals=col5;&lt;BR /&gt;drop col1 col2 col3 col4 col5;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data out3;&lt;BR /&gt;set newtest1 newtest2 out3;&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(pvalue, 6.4);&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt; if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if pvalue&amp;lt;0.001 then p='&amp;lt;.001'; &lt;BR /&gt; else if pvalue&amp;gt;=0.050001 then p= put(pvalue, 4.3); &lt;BR /&gt; else if pvalue&amp;gt;=0.001 then p= put(pvalue, 4.3); &lt;BR /&gt;varname=&amp;amp;rlabel;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd totals p;&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table2(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ", &lt;BR /&gt;pctfmt=4.3);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col=0 then &amp;amp;col=2; *** change 0 to 2 as no****;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; &lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb pcta pctb arma armb;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all trend;&lt;BR /&gt;output out=pvalue pchi fisher trend cmh n nmiss;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb));&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; set ntotal; arma="(n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")";&lt;BR /&gt; *drop na nb;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 4.3);&lt;BR /&gt;/*&lt;BR /&gt; if &amp;amp;pname&amp;lt;=0.01 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.01";&lt;BR /&gt; else p=put(&amp;amp;pname, 6.3);&lt;BR /&gt;*/&lt;BR /&gt;totals="(n="||put(na+nb, 5.)||")"; allnmiss=put(nmiss, 5.);&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=total; &lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;run;&lt;BR /&gt;proc print data=four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data last(keep=varname datasource var1 arma armb totals p);&lt;BR /&gt; set last four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb totals p;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table2(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", &lt;BR /&gt;source2=" ", &lt;BR /&gt;source3=" ", &lt;BR /&gt;pctfmt=4.3);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col=0 then &amp;amp;col=2; *** change 0 to 2 as no****;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; &lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb pcta pctb arma armb;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all trend;&lt;BR /&gt;output out=pvalue pchi fisher trend cmh n nmiss;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" &lt;BR /&gt; ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb));&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data ntotal; set ntotal; arma="(n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")";&lt;BR /&gt; *drop na nb;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 4.3);&lt;BR /&gt;/*&lt;BR /&gt; if &amp;amp;pname&amp;lt;=0.01 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.01";&lt;BR /&gt; else p=put(&amp;amp;pname, 6.3);&lt;BR /&gt;*/&lt;BR /&gt; totals=" (n="||put(na+nb, 5.)||")"; allnmiss=put(nmiss, 5.);&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=total; &lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;run;&lt;BR /&gt;proc print data=four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data last(keep=varname datasource var1 arma armb totals p);&lt;BR /&gt; set last four;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb totals p;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table3(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ", pctfmt=3.0);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;data col3;&lt;BR /&gt; set counts; if &amp;amp;col=3;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)) col3(rename=(count=colc percent=pctc)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colc=. then colc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctc=. then pctc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb colc pcta pctb pctc arma armb armc;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armc=put(colc, 5.)||'('||put(pctc, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; &lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;proc print;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all;&lt;BR /&gt;output out=pvalue pchi fisher cmh n nmiss;&lt;BR /&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;data nc;set ntotal; if &amp;amp;col=3 and _type_=1;&lt;BR /&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb)) nc(rename=(n=nc));&lt;BR /&gt; if na=. then na=0;&lt;BR /&gt; if nb=. then nb=0;&lt;BR /&gt; if nc=. then nc=0;&lt;/P&gt;
&lt;P&gt;data ntotal; set ntotal; arma=" (n="||put(na, 5.)||")";&lt;BR /&gt;armb=" (n="||put(nb, 5.)||") "; armc="(n="||put(nc, 5.)||")";&lt;BR /&gt; *drop na nb;&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 4.3);&lt;BR /&gt; &lt;BR /&gt; totals="(n="||put(na+nb+nc, 5.)||")"; allnmiss=put(nmiss, 4.);&lt;BR /&gt;proc print data=total; &lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb armc totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;proc print data=four;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc totals p);&lt;BR /&gt; set last four;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc totals p;&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table4(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ");&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;/P&gt;
&lt;P&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;&lt;BR /&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;&lt;BR /&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;&lt;BR /&gt;data col3;&lt;BR /&gt; set counts; if &amp;amp;col=3;&lt;BR /&gt;data col4; &lt;BR /&gt; set counts; if &amp;amp;col=4;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;/P&gt;
&lt;P&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)) col3(rename=(count=colc percent=pctc)) col4(rename=(count=cold percent=pctd)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colc=. then colc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cold=. then cold=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctc=. then pctc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctd=. then pctd=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb colc colcd pcta pctb pctc pctd arma armb armc armd;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armc=put(colc, 5.)||'('||put(pctc, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armd=put(cold, 5.)||'('||put(pctd, &amp;amp;pctfmt)||'%)';&lt;/P&gt;
&lt;P&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; &lt;BR /&gt;proc print;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all;&lt;BR /&gt;output out=pvalue pchi fisher cmh n nmiss;&lt;BR /&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n;&lt;BR /&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;&lt;BR /&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;&lt;BR /&gt;data nc;set ntotal; if &amp;amp;col=3 and _type_=1;&lt;BR /&gt;data nd;set ntotal; if &amp;amp;col=4 and _type_=1;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb)) nc(rename=(n=nc)) nd(rename=(n=nd));&lt;BR /&gt;data ntotal; set ntotal; arma=" (n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")"; armc=" (n="||put(nc, 5.)||")";&lt;BR /&gt; armd="(n="||put(nd, 5.)||")";&lt;BR /&gt;proc print;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; *if &amp;amp;pname&amp;lt;=0.0001 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.0001";&lt;BR /&gt; *else p=put(&amp;amp;pname, 6.4);&lt;BR /&gt; *totals=" (n="||put(na+nb+nc+nd, 4.)||")"; allnmiss=put(nmiss, 4.);&lt;BR /&gt;*proc print data=total; &lt;BR /&gt; &lt;BR /&gt; if &amp;amp;pname&amp;lt;0.001 then p='&amp;lt;.001';&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.01 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; else if &amp;amp;pname&amp;gt;=0.001 then p= put(&amp;amp;pname, 3.2);&lt;BR /&gt; totals="(n="||put(sum(na, nb, nc, nd), 5.)||")"; allnmiss=put(nmiss, 4.);&lt;BR /&gt;proc print data=total;&lt;/P&gt;
&lt;P&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb armc armd totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);&lt;BR /&gt;proc print data=four;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd totals p);&lt;BR /&gt; set last four;&lt;/P&gt;
&lt;P&gt;proc contents;&lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd totals p;&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro table5(site=,alldata=, bydata=, row=, rlabel=, rowf=, col=,&lt;BR /&gt;pname=,missnum=, source1=" ", source2=" ", source3=" ", pctfmt=3.0);&lt;BR /&gt;data temp;&lt;BR /&gt; merge &amp;amp;alldata &amp;amp;bydata;&lt;BR /&gt; by idnum;&lt;BR /&gt; col=&amp;amp;col;&lt;BR /&gt; row=&amp;amp;row;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep idnum &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data temp;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc sort data=temp; by &amp;amp;col &amp;amp;row;&lt;BR /&gt;run;&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;run;&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; tables &amp;amp;row/ out=counts noprint;run;&lt;BR /&gt;data col1;&lt;BR /&gt; set counts; if &amp;amp;col=1;run;&lt;BR /&gt;data col2;&lt;BR /&gt; set counts; if &amp;amp;col=2;run;&lt;BR /&gt;data col3;&lt;BR /&gt; set counts; if &amp;amp;col=3;run;&lt;BR /&gt;data col4; &lt;BR /&gt; set counts; if &amp;amp;col=4;run;&lt;BR /&gt;data col5;&lt;BR /&gt; set counts; if &amp;amp;col=5;run;&lt;/P&gt;
&lt;P&gt;***** calculating combined rows******; ***Changed the 4.1s&lt;BR /&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row/ out=totals noprint;&lt;BR /&gt;run;&lt;BR /&gt;data tot;&lt;BR /&gt; set totals;&lt;BR /&gt; totals=put(count, 5.)||'('||put(percent, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; keep &amp;amp;row totals;&lt;BR /&gt; if &amp;amp;row&amp;gt;.;&lt;BR /&gt; run;&lt;BR /&gt;data both;&lt;BR /&gt; merge col1(rename=(count=cola percent=pcta)) col2(rename=(count=colb&lt;BR /&gt;percent=pctb)) col3(rename=(count=colc percent=pctc)) col4(rename=(count=cold percent=pctd))&lt;BR /&gt; col5(rename=(count=cole percent=pcte)); by &amp;amp;row;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cola=. then cola=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colb=. then colb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and colc=. then colc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cold=. then cold=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and cole=. then cole=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcta=. then pcta=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctb=. then pctb=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctc=. then pctc=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pctd=. then pctd=0;&lt;BR /&gt; if &amp;amp;row&amp;gt;. and pcte=. then pcte=0;&lt;/P&gt;
&lt;P&gt;if &amp;amp;row&amp;gt;.;&lt;BR /&gt; keep &amp;amp;row cola colb colc colcd colce pcta pctb pctc pctd pcte arma armb armc armd arme;&lt;BR /&gt; arma=put(cola, 5.)||'('||put(pcta, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armb=put(colb, 5.)||'('||put(pctb, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armc=put(colc, 5.)||'('||put(pctc, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; armd=put(cold, 5.)||'('||put(pctd, &amp;amp;pctfmt)||'%)';&lt;BR /&gt; arme=put(cole, 5.)||'('||put(pcte, &amp;amp;pctfmt)||'%)';&lt;BR /&gt;run;&lt;BR /&gt;data both; &lt;BR /&gt; merge both tot;&lt;BR /&gt; by &amp;amp;row; run;&lt;BR /&gt;proc print;run;&lt;BR /&gt;/*&lt;BR /&gt;data temp; set temp; if &amp;amp;row&amp;gt;=&amp;amp;missnum then &amp;amp;row=.;&lt;BR /&gt;*/&lt;BR /&gt;data pvalue; &amp;amp;pname=99999;run;&lt;/P&gt;
&lt;P&gt;proc freq data= temp;&lt;BR /&gt; tables &amp;amp;row*&amp;amp;col/all;&lt;BR /&gt;output out=pvalue pchi fisher cmh n nmiss;run;&lt;BR /&gt;data pvalue;&lt;BR /&gt; set pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;gt;.;&lt;BR /&gt; varname=" ";&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;BR /&gt;if &amp;amp;site=-1 then datasource="All Data";run;&lt;BR /&gt;proc print;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc means data=temp n;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt;output out=ntotal n=n; run;&lt;BR /&gt;data na; set ntotal; if &amp;amp;col=1 and _type_=1;run;&lt;BR /&gt;data nb;set ntotal; if &amp;amp;col=2 and _type_=1;run;&lt;BR /&gt;data nc;set ntotal; if &amp;amp;col=3 and _type_=1;run;&lt;BR /&gt;data nd;set ntotal; if &amp;amp;col=4 and _type_=1;run;&lt;BR /&gt;data ne;set ntotal; if &amp;amp;col=5 and _type_=1; run;&lt;/P&gt;
&lt;P&gt;data ntotal; merge na(rename=(n=na)) nb(rename=(n=nb)) nc(rename=(n=nc)) nd(rename=(n=nd)) ne(rename=(n=ne));run;&lt;BR /&gt;data ntotal; set ntotal;&lt;BR /&gt; if na=. then na=0;&lt;BR /&gt; if nb=. then nb=0;&lt;BR /&gt; if nc=. then nc=0;&lt;BR /&gt; if nd=. then nd=0;&lt;BR /&gt;if ne=. then ne=0;&lt;BR /&gt;arma="(n="||put(na, 5.)||")";&lt;BR /&gt;armb="(n="||put(nb, 5.)||")"; armc=" (n="||put(nc, 5.)||")";&lt;BR /&gt; armd="(n="||put(nd, 5.)||")"; arme=" (n="||put(ne, 5.)||")";&lt;BR /&gt;run;&lt;BR /&gt;proc print;run;&lt;/P&gt;
&lt;P&gt;proc print data=pvalue;run;&lt;BR /&gt; &lt;BR /&gt;data total;&lt;BR /&gt; merge ntotal pvalue;&lt;BR /&gt; if &amp;amp;pname&amp;lt;=0.0001 and &amp;amp;pname&amp;gt;. then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(&amp;amp;pname, 6.4);&lt;BR /&gt; totals="(n="||put(sum(na,nb,nc,nd,ne), 5.)||")"; allnmiss=put(nmiss, 4.);run;&lt;BR /&gt;proc print data=total; run;&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set total both;&lt;BR /&gt; keep datasource varname var1 totals allnmiss arma armb armc armd arme totals p;&lt;BR /&gt; if &amp;amp;row=. then var1=" ";&lt;BR /&gt; else var1=put(&amp;amp;row, &amp;amp;rowf);run;&lt;BR /&gt;proc print data=four;run;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd arme totals p);&lt;BR /&gt; set last four;&lt;BR /&gt;run;&lt;BR /&gt;proc contents;run;&lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd arme totals p;run;&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;data last;&lt;BR /&gt; totals=" ";&lt;BR /&gt; &lt;BR /&gt;%macro conti(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt; if &amp;amp;col=0 then &amp;amp;col=2; *** change 0 to 2 as no****;&lt;BR /&gt;run;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;run;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;run;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data out5; set out5; &amp;amp;col=100;&lt;BR /&gt;run;&lt;BR /&gt;data out2; set out2 out5;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;proc print data=out5;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;&lt;BR /&gt;run;&lt;BR /&gt;/*&lt;BR /&gt;data null;&lt;BR /&gt; set out3; if _NAME_="n";&lt;BR /&gt; %if (_1=0 or _2=0) %then %goto endmacro;&lt;BR /&gt; */&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;run;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; else if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt;/*&lt;BR /&gt; if pvalue&amp;lt;=0.01 then p="&amp;lt;0.01";&lt;BR /&gt; else p=put(pvalue, 6.3);&lt;BR /&gt;*/&lt;/P&gt;
&lt;P&gt;if pvalue&amp;lt;0.001 then p='&amp;lt;.001'; &lt;BR /&gt; else if pvalue&amp;gt;=0.050001 then p= put(pvalue, 3.2); &lt;BR /&gt; else if pvalue&amp;gt;=0.001 then p= put(pvalue, 4.3);&lt;/P&gt;
&lt;P&gt;varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;BR /&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt;run; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data last(keep=varname datasource var1 arma armb totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb totals p;&lt;BR /&gt;; &lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%endmacro:&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti4(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;/P&gt;
&lt;P&gt;data out5; set out5; &amp;amp;col=100;&lt;BR /&gt;data out2; set out2 out5;&lt;/P&gt;
&lt;P&gt;proc print data=out5;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); armd=put(_4, &amp;amp;numfmt); &lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; /*if p2_wil^=. then pvalue=p2_wil;*/&lt;BR /&gt; if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; *if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; *else p=put(pvalue, 6.4);&lt;BR /&gt; *varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if pvalue&amp;lt;0.001 then p='&amp;lt;.001'; &lt;BR /&gt; else if pvalue&amp;gt;=0.050001 then p= put(pvalue, 4.3); &lt;BR /&gt; else if pvalue&amp;gt;=0.001 then p= put(pvalue, 4.3); &lt;BR /&gt;varname=&amp;amp;rlabel;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd totals p;&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti5(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;run;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;run;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;run;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;run;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;BR /&gt;run;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;BR /&gt;run;&lt;BR /&gt;data out5; set out5; &amp;amp;col=100;run;&lt;BR /&gt;data out2; set out2 out5;run;&lt;/P&gt;
&lt;P&gt;proc print data=out5;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;run;&lt;BR /&gt;proc print data=out3;run;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); armd=put(_4, &amp;amp;numfmt); arme=put(_4, &amp;amp;numfmt);&lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;BR /&gt;run;&lt;BR /&gt; proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; else if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(pvalue, 6.4);&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; run;&lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;run;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc armd arme totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));run;&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc armd arme totals p;&lt;BR /&gt;; run;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro conti3(site=,alldata=, bydata=, row=, rlabel=, col=,&lt;BR /&gt;numfmt=6.0, source1=" ", source2=" ", source3=" ");&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;merge &amp;amp;alldata &amp;amp;bydata(in=idu1);&lt;BR /&gt; by idnum;&lt;BR /&gt; if idu1;&lt;BR /&gt; if &amp;amp;col&amp;gt;. ;&lt;BR /&gt; keep &amp;amp;row &amp;amp;col &amp;amp;stratvar;&lt;BR /&gt;%if &amp;amp;site&amp;gt;-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; if &amp;amp;stratvar=&amp;amp;site; %end;&lt;BR /&gt;%if &amp;amp;site=-1 %then %do;&lt;BR /&gt; data one;&lt;BR /&gt; set temp; %end;&lt;/P&gt;
&lt;P&gt;proc sort data=one; by &amp;amp;col;&lt;BR /&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; by &amp;amp;col;&lt;BR /&gt; output out=out2 median=median min=min max=max q1=q1 q3=q3 mean=mean std=std&lt;BR /&gt;n=n;&lt;/P&gt;
&lt;P&gt;proc univariate data= one noprint;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=out5 median=median min=min max=max q1=q1 q3=q3 mean=mean&lt;BR /&gt;std=std n=n;&lt;/P&gt;
&lt;P&gt;data out5; set out5; &amp;amp;col=100;&lt;BR /&gt;data out2; set out2 out5;&lt;/P&gt;
&lt;P&gt;proc print data=out5;&lt;/P&gt;
&lt;P&gt;proc transpose data=out2 out=out3 ( drop=_label_);&lt;BR /&gt; id &amp;amp;col;&lt;BR /&gt;proc print data=out3;&lt;BR /&gt;data out3; set out3;&lt;BR /&gt; arma=put(_1, &amp;amp;numfmt); armb=put(_2, &amp;amp;numfmt);&lt;BR /&gt; armc=put(_3, &amp;amp;numfmt); &lt;BR /&gt; totals=put(_100, &amp;amp;numfmt);&lt;/P&gt;
&lt;P&gt;proc npar1way data=one wilcoxon;&lt;BR /&gt; class &amp;amp;col;&lt;BR /&gt; var &amp;amp;row;&lt;BR /&gt; output out=pvals wilcoxon;&lt;BR /&gt; data pvals(keep=variable pvalue); &lt;BR /&gt; set pvals;&lt;BR /&gt; rename _var_= variable;&lt;BR /&gt; if p2_wil^=. then pvalue=p2_wil;&lt;BR /&gt; else if p_kw^=. then pvalue=p_kw;&lt;BR /&gt; else pvalue=.;&lt;BR /&gt; run;&lt;/P&gt;
&lt;P&gt;data ntotal; set pvals;&lt;BR /&gt; arma=" "; armb=" ";&lt;BR /&gt; if pvalue&amp;lt;=0.0001 then p="&amp;lt;0.0001";&lt;BR /&gt; else p=put(pvalue, 6.4);&lt;BR /&gt; varname=&amp;amp;rlabel;&lt;BR /&gt; *if varname="" then varname=variable;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=1 then datasource= &amp;amp;source1;&lt;BR /&gt;if &amp;amp;site=2 then datasource= &amp;amp;source2;&lt;BR /&gt;if &amp;amp;site=3 then datasource= &amp;amp;source3;&lt;/P&gt;
&lt;P&gt;if &amp;amp;site=-1 then datasource="All Data";&lt;BR /&gt; &lt;BR /&gt;data four;&lt;BR /&gt; set ntotal out3;&lt;BR /&gt;data last(keep=varname datasource var1 arma armb armc totals p);&lt;BR /&gt; set last four(rename=(_name_=var1));&lt;BR /&gt; &lt;BR /&gt;proc print data=last noobs label;&lt;BR /&gt; var varname datasource var1 arma armb armc totals p;&lt;BR /&gt;; &lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;data last; &lt;BR /&gt; alln=" ";&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%table2(site=-1,alldata=alldata, bydata=idu, row=&amp;amp;var, &lt;BR /&gt;rlabel=" ",&lt;BR /&gt;rowf=&amp;amp;varfmt,col=idu, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%macro bar(var=, varlabel=, varfmt=, testname=xp2_fish, missnum=900);&lt;/P&gt;
&lt;P&gt;%table2(site=-1,alldata=alldata, bydata=bar, row=&amp;amp;var,&lt;BR /&gt;rlabel=" ",&lt;BR /&gt;rowf=&amp;amp;varfmt,col=bar, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;******Continuous variables***********;&lt;BR /&gt;%macro cbar(var=, varlabel=, missnum=9000, numbfmt=6.0);&lt;BR /&gt; &lt;BR /&gt;%conti(site=-1,alldata=alldata, bydata=bar,row=&amp;amp;var,&lt;BR /&gt; rlabel=" ",col=bar, source3="All data", numfmt=&amp;amp;numbfmt);&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro site(var=, varlabel=, varfmt=, testname=xp2_fish, missnum=900);&lt;BR /&gt;%table2(site=-1,alldata=alldata, bydata=bydata, row=&amp;amp;var,&lt;BR /&gt;rlabel=&amp;amp;varlabel,&lt;BR /&gt;rowf=&amp;amp;varfmt,col=site, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;%macro csite(var=, varlabel=, missnum=9000, numbfmt=6.0); &lt;BR /&gt;%conti(site=-1,alldata=alldata, bydata=bydata,row=&amp;amp;var,&lt;BR /&gt; rlabel=&amp;amp;varlabel,col=site, source3="All data", numfmt=&amp;amp;numbfmt);&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;*****generalized macros*******;&lt;/P&gt;
&lt;P&gt;%macro categ(var=, varlabel=, varfmt=, testname=xp2_fish, missnum=900);&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%table2(site=-1,alldata=&amp;amp;alldata, bydata=&amp;amp;bydata, row=&amp;amp;var, &lt;BR /&gt;rlabel=" ",&lt;BR /&gt;rowf=&amp;amp;varfmt,col=&amp;amp;cvar, missnum=&amp;amp;missnum, pname=&amp;amp;testname,&lt;BR /&gt;source3="All data");&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;******Continuous variables***********;&lt;BR /&gt;%macro cont(var=, varlabel=, missnum=9000, numbfmt=6.0);&lt;BR /&gt; &lt;BR /&gt;%conti(site=1,alldata=&amp;amp;alldata, bydata=&amp;amp;bydata,row=&amp;amp;var,&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%conti(site=-1,alldata=&amp;amp;alldata, bydata=&amp;amp;bydata,row=&amp;amp;var,&lt;BR /&gt; rlabel=" ",col=&amp;amp;cvar, source3="All data", numfmt=&amp;amp;numbfmt);&lt;BR /&gt;%mend;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;%macro logistic(var=, varlabel=);&lt;/P&gt;
&lt;P&gt;proc logistic descending data=alldata;&lt;BR /&gt; model &amp;amp;yvar=&amp;amp;var /risklimits lackfit;&lt;BR /&gt; ODS output ParameterEstimates=uni CLOddsWald=ci;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data uni;&lt;BR /&gt; set uni(keep=variable Estimate ProbChisq); if variable^="Intercept";&lt;BR /&gt;data uni; set uni; obs=_N_;&lt;BR /&gt;data ci; set ci (keep=OddsRatioEst LowerCL UpperCL); obs=_N_;&lt;BR /&gt;data unici; merge uni ci; by obs; drop obs;&lt;BR /&gt; varlabel=&amp;amp;varlabel;&lt;/P&gt;
&lt;P&gt;data unilogistic;&lt;BR /&gt; set unilogistic unici;&lt;/P&gt;
&lt;P&gt;%mend;&lt;BR /&gt;data unilogistic;&lt;BR /&gt; variable=" ";&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Nov 2015 22:15:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236503#M14720</guid>
      <dc:creator>rfarmenta</dc:creator>
      <dc:date>2015-11-25T22:15:13Z</dc:date>
    </item>
    <item>
      <title>Re: Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236504#M14721</link>
      <description>Your column isn't wide enough to hold the values. Make sure your template specifies a width large enough for the column. Also, make sure that the SAS variable created was large enough to hold the value.</description>
      <pubDate>Wed, 25 Nov 2015 22:28:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236504#M14721</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2015-11-25T22:28:25Z</dc:date>
    </item>
    <item>
      <title>Re: Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236505#M14722</link>
      <description>&lt;P&gt;So do I have to widen the column in my proc print statement or in the macro code? Also, how do I check to make sure the SAS variable created is large enough to hold the value? I assume it should be since it is created the same as the values in the total column. Thank you for your reply.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Nov 2015 22:33:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236505#M14722</guid>
      <dc:creator>rfarmenta</dc:creator>
      <dc:date>2015-11-25T22:33:26Z</dc:date>
    </item>
    <item>
      <title>Re: Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236506#M14723</link>
      <description>1. Check that your data set has the correct values before proc print. &lt;BR /&gt;2. I typically use proc report for these and they support a width definition, but I'm not sure how proc print handles the same.</description>
      <pubDate>Wed, 25 Nov 2015 22:51:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236506#M14723</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2015-11-25T22:51:49Z</dc:date>
    </item>
    <item>
      <title>Re: Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236507#M14724</link>
      <description>&lt;P&gt;I cannot find a single LENGTH statement in your code. This being the case, it would be surprising if truncation of character strings did &lt;EM&gt;not&lt;/EM&gt; occur somewhere, in some situation.&lt;/P&gt;</description>
      <pubDate>Wed, 25 Nov 2015 22:59:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236507#M14724</guid>
      <dc:creator>FreelanceReinh</dc:creator>
      <dc:date>2015-11-25T22:59:01Z</dc:date>
    </item>
    <item>
      <title>Re: Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236508#M14725</link>
      <description>&lt;P&gt;I checked the values in the dataset and they are correct.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I can try proc report to run this but what I am most confused by is that proc print doesn't have any issues displaying the column for totals correctly so I am not sure why the other columns aren't displaying correctly. The widths for all of those columns should be the same.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you again.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Nov 2015 22:59:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236508#M14725</guid>
      <dc:creator>rfarmenta</dc:creator>
      <dc:date>2015-11-25T22:59:18Z</dc:date>
    </item>
    <item>
      <title>Re: Macro and ODS to create table in word</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236549#M14726</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Whilst I am not going to spend the time looking through that mass of code I would firstly support Reeza in saying move to proc report, it has far more functionality. &amp;nbsp;You may also want to go through that code, as I don't see a reason for a wall of code to do what is relatively a simple output table. &amp;nbsp;Not to mention the code is very difficult to read, no indentations, code blocks unfinished, mixes of macro and datastep, muerous repeats of code etc.&lt;/P&gt;</description>
      <pubDate>Thu, 26 Nov 2015 09:26:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Macro-and-ODS-to-create-table-in-word/m-p/236549#M14726</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2015-11-26T09:26:59Z</dc:date>
    </item>
  </channel>
</rss>

