/*
/ Program : unicat2word.sas
/ Version : 1.1
/ Author : Roland Rashleigh-Berry
/ Date : 12-Oct-2008
/ Purpose : Clinical reporting macro to produce a Word-style cell table
/ from the dataset output from the %unistats macro of treatment-
/ transposed categories counts and statistics.
/ SubMacros : %varnum %words (assumed %popfmt and %unistats already run)
/ Notes : You can call this macro directly from %unistats by setting the
/ wordtabdest= parameter.
/ Usage : %unicat2word(dsin=_unitran,dest=print,dlim=';')
/
/===============================================================================
/ PARAMETERS:
/-------name------- -------------------------description------------------------
/ dsin Input dataset
/ dest Destination to place the table cells values such as log,
/ print, fileref or filename.
/ dlim=';' Delimiter character to use for cells (must be quoted)
/ total=yes By default, print the total for all treatment groups if it
/ exists in the input dataset.
/ pvalues=yes By default, print the pvalues as a treatment column if it
/ exists in the input dataset.
/===============================================================================
/ AMENDMENT HISTORY:
/ init --date-- mod-id ----------------------description------------------------
/ rrb 12Oct08 _tempstr2 length increased to 256 for v1.1
/===============================================================================
/ This is public domain software. No guarantee as to suitability or accuracy is
/ given or implied. User uses this code entirely at their own risk.
/=============================================================================*/
%put MACRO CALLED: unicat2word v1.1;
%macro unicat2word(dsin=_unitran,
dest=print,
dlim=';',
pvalues=yes,
total=yes);
%local i totvar pvalvar numvars allvars;
%if not %length(&dsin) %then %let dsin=_unitran;
%if not %length(&dest) %then %let dest=print;
%if not %length(&dlim) %then %let dlim=';';
%if not %length(&pvalues) %then %let pvalues=yes;
%if not %length(&total) %then %let total=yes;
%let total=%upcase(%substr(&total,1,1));
%let pvalues=%upcase(%substr(&pvalues,1,1));
%let totvar=;
%if "&total" EQ "Y" %then %do;
%if %varnum(&dsin,&_trttotvar_) %then %let totvar=&_trttotvar_;
%end;
%let pvalvar=;
%if "&pvalues" EQ "Y" %then %do;
%if %varnum(&dsin,&_trtpvalvar_) %then %let pvalvar=&_trtpvalvar_;
%end;
%let allvars=&_trtvarlist_ &totvar &pvalvar;
%let numvars=%words(&allvars);
data _null_;
length _tempstr $ 30 _tempstr2 $ 256;
file &dest notitles;
set &dsin;
by _page _varord;
if first._page then do;
if _page GT 1 then put / / ;
_tempstr2=vlabel(_varlabel);
if _tempstr2="_varlabel" then _tempstr2=" ";
put _tempstr2 @;
_tempstr2=vlabel(_statlabel);
if _tempstr2="_statlabel" then _tempstr2=" ";
put &dlim _tempstr2 @;
%do i=1 %to &numvars;
_tempstr2=vlabel(%scan(&allvars,&i,%str( )));
put &dlim _tempstr2 @;
%end;
put;
end;
if first._varord then do;
put " " &dlim " " @;
%do i=1 %to &numvars;
put &dlim " " @;
%end;
put;
_tempstr2=translate(_varlabel,' ',"A0"x);
put _tempstr2 @;
end;
else put " " @;
put &dlim _statlabel @;
%do i=1 %to &numvars;
_tempstr=translate(%scan(&allvars,&i,%str( )),' ',"A0"x);
put &dlim _tempstr @;
%end;
put;
run;
%mend;