A Set of SAS Macros for Producing Customized Reports:
Documentation of Summary Statistic Macros
This document
provides documentation on how to use a set of macros that produce customized
report tables. These macros are used extensively by statisticians at the
Division of Biostatistics at the
Briefly, producing
customized reports is a high priority in both research and business settings.
SAS has several procedures that generate reports, but only the PUT statement
within a data step gives complete flexibility to placement of text and data
values. The advent of ODS, while helpful, still does not provide the
flexibility needed, leaving the data step as the only alternative. However, data step processing and writing PUT
statements is cumbersome to program. The
described macros, working behind the scenes do all the tedious work. and allow
the user to produce customized reports
that are easy to program and give complete flexibility to placement of text and
data values. Information that can be
placed on the report page include text, summary statistics (counts, means, etc)
and more complex statistics (regression coefficients, hazard ratios, etc) and
significance levels (P-values).
The user first
defines columns and column widths across the report page. Text or data values (usually summary
statistics) are then moved to these columns and specified lines using macros
MOVE or NMOVE. Items can be moved to
single columns or to combined columns with the items automatically centered. Lines to where items are moved can be listed
or a starting line can be given along with the number of lines to be printed
with optional skip patterns. Summary
statistics are accessible using one of several available macros that run SAS
procedures and output information to datasets.
Statistics are placed in array type names (e.g., M1-M20) which can be
easily moved to the report page after a SET statement. An example of a call is %nmove (M1-M20,col=2
3,line=12L10,pat=1st/1).
The enhancements to
make html table generations allow html formatting such as font type, size, and
format, and shading of cells. In addition, multiple statistics can be placed in
one column such as mean ± SD giving the final appearance a journal finished
appearance.
Report programs are
made up of the following statements:
%WREPORT statement
that indicates a new report is starting
%COLSET statement that
defines columns and column widths across the report page. This macro needs to be
called before any move statements and is called once for each report.
%MOVE statements
which move text to the report. Features
include centering, underlining, and repeating text.
SET statement(s)
that read in statistical information from a SAS dataset. These one observation datasets will have been
generated from one of the statistical generating macros described later.
%NMOVE statements
which place the statistical information to the report page.
Note: Macro WREPORT that allows creation of html tables replaces macro REPORT that produced only text tables. WREPORT can also produce text tables.
%WREPORT is
used simply as %WREPORT which indicates the start of a new report.
%COLSET is used as
follows:
%COLSET (column1
size column2 size … )
Example: %COLSET (25 9 9
2X 9 9)
This statement sets
up 5 columns. The first column is 25
positions long and the last 4 columns are 9 positions long. Two spaces are placed between column 3 and
column 4 the last 3 columns. This is
used to set off text from other text. (Note: the XX only applies to text based
tables. Also for HTML tables the size of the columns are only relative to the
total size).
%MOVE is used as
follows:
%MOVE (‘string
1’:’string 2’:…, line=, col=, center=,
under=, pat=, mfirst=)
‘string1’:’string2’:’stringN’ character strings
enclosed by single or double quotes and separate by colons.
Example:
‘Men’:’Women’:’Total’ (3 text strings)
line = line
numbers to which strings are moved. This can be given in 2 ways illustrated by
example.
line = 12 21 33 moves strings to lines 12, 21, and 33
line = 12L3 moves
strings to lines 12, 13, and 14 (12 is the starting line followed by 3
consecutive lines)
col = defined
column numbers to which strings are moved. This can be given in 3 ways
illustrated by example.
col = 3 4 8 moves strings to defined
columns 3, 4, and 8
col = 2-3 4-5 6-7 moves strings to columns formed by
combining columns 2-3, 4-5, and 6-7
col = 2.4 moves strings to columns 2
through 4 (Shortcut for col = 2 3 4)
center = set
to “Y” or “1” if centering of text is desired; set to “N” or “2” if left
justification is desired. Default is Y.
under = set
to “Y” or “1” if string is to underlined; set to “N” or “2” if string is not to
be underlined. Default is N.
pat = used
to skip lines; must be used with the second method of specifying lines
line = 10L18
pat = 6TH/1 skips 1 line after every 6th
line
mfirst= determined
whether lines or columns move fastest when placing text; set to L for lines and
C for columns. Default is L.
Note: HTML parameters
are described in the section on HTML reports.
Example: %MOVE
(‘Total Cholesterol’:’LDL-C’:’HDL-C’, col=1, line=10L6, pat=3rd/1);
This statement would
produce the following text in lines 10-12 and 13-15. Note that the text strings
are repeated until the total lines are exhausted.
Total
Cholesterol
LDL-C
HDL-C
Total
Cholesterol
LDL-C
HDL-C
%NMOVE is used as
follows:
%NMOVE (varlist,
line=, col=, pat=, mfirst=, fmt=, scaler =, specfmt=);
The line, col, pat,
and mfirst parameters are identical to those in %MOVE.
varlist= list
of variables to move to the report page; this can be specified in two formats
var 1 var 2 var 3 a list separated by spaces
var1-var(n) a
starting and ending variable with same root name; n total variables to be
moved.
fmt = used to format the
numeric values.
fmt = 6.2 values are displayed with
2 decimals.
scaler = multiplies
values by this number before printing. Useful for converting fractions to
percentages or vice versa.
scaler = 0.01 multiplies values by 0.01 before
printing
specfmt= used to apply a SAS format
other than the default.
specfmt=pvalue5.3 uses the SAS internal format to display the
numbers
Here is a summary of each macro and statistics
available to place on a report.
Macro Name |
SAS
Procedure |
Description |
Breakdn |
SUMMARY |
Stores descriptive statistics
for a list of analyses variables by levels of 1 or more class variables |
Chisqp |
FREQ |
CHISQP uses PROC
FREQ to compute Cochran-Mantel-Haenszel Chi-square tests and p-values for the
association between a list of dependent categorical variables and an
independent categorical variable,
adjusted (optionally) for a set of other categorical covariates. |
Freqdis |
FREQ |
Stores counts, percents,
cumulative counts and cumulative percents for a class variable for each level
of a second class variable |
Glmp |
GLM |
Stores statistics
from GLM for 1 or more independent variables for a list of dependent
variables Statistics include p-values
from factors in the model, least square means, contrasts and p-values from
the contrasts. |
Logistp |
LOGIST |
Stores statistics
from LOGIST for 1or more independent variables for a list of dependent
variables Statistics include
estimates, SE estimates, odds ratios and confidence intervals |
Mixedp |
MIXED |
Stores statistics
from MIXED for 1or more independent variables for a list of dependent
variables Statistics include p-values from
factors in the model, contrasts and p-values from the contrasts. |
Phregp |
PHREG |
Stores statistics
from PHREG for 1or more independent variables for a list of dependent
variables Statistics include
estimates, SE estimates, hazard ratios and confidence intervals. |
Regp |
REG |
Stores regression
coefficients, standard errors, t-statistics, and p-values for 1 or more
independent variables for a list of dependent variables |
Lifetab |
|
Macro LIFETAB reads
the dataset output in the OUTSURV option of
PROC LIFETEST and outputs the survival values for specified times
values for each strata. |
Genmodp |
GENMOD |
Stores statistics
from PROC GENMOD. |
BREAKDN uses PROC SUMMARY
to compute descriptive statistics for a list of analyses variables for each
combination of a list of class variables and outputs them to a new one
observation data set. The statistics are
contained in array like names as described below.
Statistics Available Names
on Output Dataset
N n1-n?
MEAN m1-m?
MEDIAN med1-med?
STD s1-s?
STDERR se1-se?
MIN min1-min?
MAX max1-max?
SUM sum1-sum?
25% Percentile LQ1-LQ?
75% Percentile UQ1-UQ?
where ? is the
product of the number of analyses variables and the number of combinations
defined by the class variables.
%breakdn(data=rand, class=gender 2T group 6, var=age sbp dbp,
sfirst=class, where=where clinic = ‘A’, out=c1) ;
Note: Class
factors must be sequential and start with the number 1.
Macro
with default and optional parameters listed
%breakdn(data=_LAST_, class=, var=, sfirst=VAR, where=, print=NO, out=OUT,
nzero=);
Required: class and var
Optional: all others
data SAS dataset read
class List of
class variables. Statistics on the variables listed in VAR are calculated for
each combination of class levels and optionally for subtotals and grand
totals. Each class variable is listed by
the number of levels (needs to begin with one and continue through the number
specified). A "T" appended to
the number indicates that totals are desired. Class variables must start with
the number 1 and be sequential.
Example: class=gender
2T group 6
There
are two class variables, gender and group with 2 and 6 levels, respectively.
Statistics for each level of gender (and total) by each level of group will be computed and stored in a dataset
(18=3*6 combinations in the order gender=1, group=1,2,3,4,5,6 followed by
gender=2, group=1,2,3,4,5,6 followed by combined genders ,
group=1,2,3,4,5,6. Note that the class
variable to the right moves the "fastest".
var= List of variables that
statistics are to be computed
Example:
var=age dbp sbp
sfirst= specifies the
order in which the array elements of the statistics are stored. The default is
sfirst=var which means for a fixed combination of the class variables,
statistics for each of the variables listed in VAR are stored consecutively. By
setting sfirst=class, for a fixed variable listed in VAR, statistics for all
combinations of the class variables will be stored consecutively. The following
examples illustrate the effect of SFIRST on the order the elements are stored.
Examples:
%breakdn(data=rand,class=gender
2T,var=age dbp sbp,out=t1,sfirst=var);
n's for age, dbp, sbp for gender=1 are stored in n1-n3.
n's for age, dbp, sbp for gender=2 are stored in n4-n6.
n's for age, dbp, sbp for gender=total are stored in n7-n9.
%breakdn(data=rand,class=gender
2T,var=age dbp sbp,out=t2,sfirst=class);
n's for age for gender=1,2 and total are stored in n1-n3.
n's for dbp for gender=1,2 and total are stored in n4-n6.
n's for sbp for gender=1,2 and total are stored in n7-n9.
The statistics are
stored similarly for the other statistics.
where= optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where
ondrug = 1
out= SAS dataset to which the
statistics are written.
print= If set
equal to yes, the output from PROC SUMMARY is displayed. Used to verify
results.
nzero= If set
equal to y then missing n’s get the value 0 rather than missing (displayed as a
period (.).
CHISQP uses PROC FREQ
to compute Cochran-Mantel-Haenszel Chi-square tests and p-values for the
association between a list of dependent categorical variables and an
independent variable, adjusted (optionally) for a set of other categorical
covariates. These statistics are output
to a one observation data set. The statistics are contained in array like names
as described below
Statistics Available Names
on Output Dataset
P-value p1-p?
Chi-square statistic chisq1-chisq?
where ? is the number
of analyses (number of dependent variables).
%chisqp(data=rand, dlist= fever nausea headache, group=trt, clist=site, pdata=p);
This would generate the following PROC FREQ
PROC FREQ DATA=rand;
TABLES site*trt*(fever nausea headache)/cmh
noprint;
Note: Class
factors must be sequential and start with the number 1.
Macro
with default parameters listed:
%chisqp(data=_LAST_, dlist=, group=, clist=, test=G, where=, pdata= ) ;
Required: dlist, group, pdata
Optional: all others
data= SAS dataset to read
dlist= List of categorical dependent
variables.
group= Categorical variable to be tested for
relationship with each dependent variable.
clist= List of categorical variables to
be used as covariates.
test= Type of
Chi-square test. The default is test=G,
which does the General Association test.
Set test=C for Correlation 1df or test=R for Row Means Differ.
where= Optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where
ondrug eq 1
pdata= SAS dataset to which the
statistics are written.
FREQDIS uses PROC
SUMMARY to obtain counts, percents, cumulative counts and
cumulative percents for a class variable for each level of another class
variable (if given) and outputs them to a one observation data set. This macro is useful for displaying the
distribution of a variable for each level of another variable.
Statistics Available Names
on Output Dataset
Counts n1-n?
Cumulative counts cn1-cn?
Percents p1-p?
Cumulative percents cp1-cp?
where ? is the
product of the number of levels of
the class variables.
%freqdis(data=rand, class=gender 2T agecat 5T,out=table1) ;
Call
with default and optional parameters listed
%freqdis(data=_LAST_, class=, where=, out=&class ) ;
Required: class
Optional: data where out
Note: Class
factors must be sequential and start with the number 1.
data SAS dataset to read
class List of
up to two class variables for which counts, percents, cumulative counts and cumulative percents are
to be computed. Each class variable is followed by the number of levels (need
to begin with one and continue through the number specified). A T appended to the number of levels signifies
that totals are desired. When two class variables are specified, the counts,
percents, cumulative counts and cumulative percents for the second variable are
calculated for each level of the first.
Example: class=gender
2T agecat 5T
n1-n6
contain the counts for each of the 5 age categories and the total over all ages
for gender=1.
n7-n12
contain the counts for each of the 5 age categories and the total over all ages
for gender=2.
n13-n18
contain the counts for each of the 5 age categories and the total over all ages
for both genders combined.
p1-p18 contain the percents as above.
cn1-cn18 contain the cumulative counts as above.
cp1-cp18 contain the cumulative percents as above.
where= Optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where
ondrug eq 1
out= SAS dataset to which the
statistics are written.
GLMP runs PROC GLM(s)
and stores statistics generated from the analyses into one or more SAS
datasets. Statistics include p-values
from factors in the model, least square means
(adjusted means) and contrasts and p-values from the contrasts.
Statistics Available Names
on Output Dataset(s)
For independent
variables
P-value from ANOVA p1-p?
F-statistic from
ANOVA f1-f?
If lsmean statement used
Adjusted (LSM) Means lsm1-lsm?
LSM Standard Errors lsmse1-lsmse?
If estimate statement used
Estimate e1-e?
Standard error of
estimate se1-se?
T-value for estimate t1-t?
P-value for estimate p1-p?
If contrast statement used
F-value from contrast f1-f?
DF from contrast df1-df?
P-value from contrast p1-p?
See below for value
of ? for each of the types of statistics and how they are stored.
%let listd = chold hdld ldld trigd;
%let listb = cholbl hdlbl ldlbl trigbl;
%glmp(data=rand,
class=group, dlist=&listd, ilist=group clinic, blist=&listb,
factor=group,
pdata=pvals, lsmean=yes, lsdata=lsmeans);
%glmp(data=rand,
class=trt, dlist=&listd, factor=trt, pdata=pvals,
estimate = '1 v 3' trt 1 0 -1/'2 v 3' trt 0 1 -1,
condata=con,
contrast=%str('2
df test' trt 1 0 -1, trt 0 1 -1));
Macro
with default and optional parameters listed
%glmp(data=_LAST_, class=, dlist=, ilist=, blist=, factor=,
where=, pdata=&factor, lsmean=NO, lsclass=&class,
lsdata=&lsclass, estimate=, estdata=,contrast=,condata=);
data= SAS dataset to read
class= class
variable(s) for GLM. List all variables
that are to be treated as categorical variables
dlist= dependent variable list. An analysis is run for each variable.
ilist= independent
variable list. This list will be used
for each dependent variable given in dlist.
blist= optional
list of variables where the i'th variable in the list is added as a covariate
to the i'th analysis. It is used mainly to adjust for the baseline value of the
dependent variable.
Note:
if blist is not given then only one GLM is run with multiple dependent
variables in the model statement. If
blist is given then a separate GLM is run for each dependent variable.
factor= independent variable(s) for which
p-values from the ANOVA table are obtained
pdata= SAS dataset(s) in which statistics
are stored for the variables listed in factor.
There is one dataset per factor with one observation in each
dataset. The variables on the dataset
are:
p1-p? The p-values for
the i'th analyses (? Total analyses)
f1-f? The F-statistics
for the i'th analyses.
lsmean= set to YES if least square means are desired.
lsclass= the class variable for which LS means are desired
lsdata= SAS dataset containing the LS
means. This dataset contains one
observation with the following variables:
lsm1-lsm? = the LS means
lsmse1-lsmse? = the
standard errors of the LS means
?
= the number of levels of the class variable times the number of dependent
variables. For example, if the class
variable has 5 levels and there are 2 dependent variables then ? = 10; LS1-LS5
contain the LS means for the first dependent variable and LS6-LS10 contain the
LS means for the second dependent variable.
Note:
If you have 2 or more class variables and request LS means for one of them then
PROC GLM does not give the "correct" results (the adjusted means it
computes assume a balanced design). In this case define indicator variables for
the levels of the additional class variables and add them as independent
variables in the model. The mean of the adjusted means will then be equal to
the overall unadjusted mean!
estimate= If given, an
estimate statement(s) is generated to perform 1 df contrasts. Multiple
contrasts are separated by a slash (/).
Example: estimate = '1 v
3' trt 1 0 -1/ '2 v 3' trt 0 1 -1
This
would perform two contrasts, the first contrast comparing the first and third
levels of trt; the second comparing the second and third levels of trt.
estdata= The dataset the estimates are
stored. The variables are:
e1-e? contrast (estimate) values
se1-se? standard errors of the estimates
t1-t? t-statistics
p1-p? p-values
?
is the total estimate statements times the number of dependent variables. They are stored in the order generated. If there are 2 dependent variables and 2
contrasts then
e1 = estimate for analyses 1, contrast 1
e2 = estimate for analyses 1, contrast 2
e3 = estimate for analyses 2, contrast 1
e4 = estimate for analyses 2, contrast 2
contrast= This generates the contrast statement in GLM to perform >1 df contrasts. Constasts are separted by a slash (/).
Example: Contrast =
%str('2 df test' trt 1 0 -1, trt 1 -1 0)
The %str is
required.because a comma is used in the parameter.
condata= The dataset the contrasts are stored.
The variables are:
f1-f? F-statistics
p1-p? P-values
df1-df? Degrees of freedom of the contrast
?
is the total number of contrast statements times the number of dependent
variables. They are stored in the same
order as in the estimate statements (see above).
where= Optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where ondrug eq 1
LOGISTP uses proc
LOGIST to perform logistic regression and saves results for factors of interest
into SAS datasets. Results for each factor is placed in a separate dataset.
Statistics Available Names
on Output Dataset(s)
For class variables
Wald Chi-Square
statistic chisq1-chisq?
P-value from
Chi-square test p1-p?
Likelihood Ratio
Chi-Square lrchi1-lrchi? (for
global test)
For non-class variables
Estimate (beta
coefficient) e1-e?
Standard error of
estimate se1-se?
Z-statistic (beta/SE) z1-z?
P-value for estimate p1-p?
Odds ratio o1-o?
Upper bound of 95% CI u1-u?
Lower bound of 95% CI l1-l?
For all variables the
overall likelihood ratio chi-square statistic (lrchi1-lrchi?) and associated
p-value (plr1-plr?) are placed on the dataset. Also on all datasets is the
number of events (NE1-NE?), number of non-events (NC1-NC?) and total
observations in analysis (NT1-NT?)
? is the number of
analyses (dependent variables)
%logistp(data=rand, dlist=chd cvd allcause, ilist=age dbp chol prevmi,
factor=prevmi ,out=mi, order=d, units=10 10 30 1) ;
Macro
with default and optional parameters listed
%logistp(data=_LAST_, dlist=, ilist=,class=, factor=, units=, where=, out=&factor, order=D) ;
data= SAS dataset to read
class= class
variable(s) for LOGIST. List all
variables that are to be treated as categorical variables
dlist= dependent
variable list. An analysis is run for
each variable. Each variable should have
2 values, a value for the event and a value for a non event (usually 1 for
event and 0 for non event)
ilist= independent
variable list. This list will be used
for each dependent variable given in dlist.
factor= independent variable(s) in model for which statistics are to
be obtained.
units= Used to
obtain odds ratios for more than a unit difference. Before the odds ratios are
calculated, the coefficients are multiplied by the value of this parameter. The
default is 1. This is given as a list over the factors. If there are 3 factors then there should be 3
units given in the list.
where= optional parameter which allows the
user to add a WHERE clause
Example: where=where ondrug eq 1
out= SAS
dataset(s) in which statistics are stored.
There is one dataset for each factor.
order= Set to D to
estimate the probability that the dependent variables is equal to 1 (rather
than the default which models the probability equal to 0)
MIXEDP runs proc
MIXED and stores estimates, standard errors, t-statistics and p-values for
factors of interest into SAS datasets.
Each factor is placed in a separate dataset. Results from estimate and contrast statements
can also be put in SAS datasets.
Statistics Available Names
on Output Dataset(s)
For class variables
F-statistic f1-f?
P-value from
F-statistic p1-p?
For non-class variables
Estimate (beta
coefficient) e1-e?
Standard error of
estimate se1-se?
T-statistic (beta/SE) t1-t?
P-value for estimate p1-p?
If estimate statement used
Estimate e1-e?
Standard error of
estimate se1-se?
T-value for estimate t1-t?
P-value for estimate p1-p?
If contrast statement used
F-value from contrast f1-f?
DF from contrast df1-df?
P-value from contrast p1-p?
See below for value of
? for each of the types of statistics and how they are stored.
%mixedp (data=rand, class=ptid active stratum, dlist = sbp dbp,
ilist=onmeds stratum active stratum*active,
blist=sbpbl dbpbl,
random=int/type=un sub=ptid,
factor=stratum*active,
out=interaction,
estimate= 'Stratum' stratum 1 -1/'Active' Active 1 -1,
estdata=con);
Macro
with default and optional parameters listed
%mixedp(data=_LAST_, class=, dlist=, ilist=, blist=, factor=,random=, repeated=, out=&factor,
estimate=, estdata=, contrast=,condata=, lsmeans=, where=, option=noclprint);
data= SAS dataset read
dlist= Dependent variable list. A
separate MIXED is run for each variable in dlist.
ilist= Independent
variable list. This same list will be
used for each dependent variable in the MIXED analysis.
blist= Optional
list of variables where the i'th variable in the list is added as a covariate
to the i'th analysis. It is used mainly to adjust for the baseline value of the
dependent variable.
option= Any legal option on the PROC MIXED
statement
class= List of
class variables including grouping unit
random= The entire RANDOM statement used in
MIXED
Example: random =
intercept/sub=ptid g;
repeated= The entire REPEATED statement used in
MIXED
Example: repeated =
visit/sub=ptid;
lsmeans= include factors desired. No output dataset is created.
factor= Independent
variable(s) for which statistics from PROC MIXED are to be obtained.
where= Optional parameter which allows the
user to add a WHERE clause
out= SAS
dataset(s) in which statistics are stored for the variables listed in
factor. There is one dataset per factor
with one observation in each dataset.
estimate= if given, an
estimate statement(s) is generated to perform 1 df contrasts. Multiple
contrasts are separated by a slash (/).
Example: estimate = '1 v
3' trt 1 0 -1/ '2 v 3' trt 0 1 -1
This
would perform two contrasts, the first contrast comparing the first and third
levels of trt; the second comparing the
second and third levels of trt.
estdata= The dataset the estimates are
stored. The variable are:
e1-e? contrast values
se1-se? standard errors of the estimates
t1-t? t-statistics
p1-p? p-values
?
is the total estimate statements times the number of dependent variables. They are stored in the order generated. If there are 2 dependent variables and 2
contrasts then
e1 = estimate for analyses 1, contrast 1
e2 = estimate for analyses 1, contrast 2
e3 = estimate for analyses 2, contrast 1
e4 = estimate for analyses 2, contrast 2
contrast= This generates
the contrast statement to perform >1 df contrasts. Contrasts are separates
by a slash (/).
Example: Contrast =
%str('2 df test' trt 1 0 -1, trt 1 -1 0)
The %str is required.
condata= The dataset the contrasts are stored.
The variables are:
f1-f? F-statistics
p1-p? P-values
df1-df? Degrees of freedom of the contrast
?
is the total number of contrast statements times the number of dependent
variables. They are stored in the same
order as in the estimate statements (see above).
where= optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where ondrug eq 1
PHREGP uses proc
PHREG to perform proportional hazards regression and saves results for factors
of interest into SAS datasets. Each factor is placed in a separate dataset
Statistics Available Names
on Output Dataset(s)
For class variables
Wald Chi-Square
statistic chisq1-chisq?
P-value from
F-statistic p1-p?
For non-class variables
Estimate (beta coefficient) e1-e?
Standard error of estimate se1-se?
Z-statistic (beta/SE) z1-z?
P-value for estimate p1-p?
Hazard ratio r1-r?
Upper bound of HR 95%
CI u1-u?
Lower bound of HR 95%
C l1-l?
Likelihood ratio
statistic lrchi1-lrchi?
P-value for LR
statistic plr1-plr?
If estimate statement used
Estimate e1-e?
Standard error of
estimate se1-se?
Z-value for estimate z1-z?
P-value for estimate p1-p?
Hazard Ratio r1-r?
HR lower 95% CI l1-l?
HR upper 95% CI u1-u?
If contrast statement used
Chi-square value from
contrast chisq1-chisq?
P-value from contrast p1-p?
Both class and
non-class datasets contain the number of events (NE1-NE?), number of non-events
(NC1-NC?) and total observations in analysis (NT1-NT?)
%phregp(data=rand, dlist=chd cvd allcause, ilist=age dbp chol prevmi,
tlist=t t t, strata=clinic, factor=prevmi ,out=mi) ;
Macro
with default and optional parameters listed:
%phregp(data=_LAST_, dlist=, ilist=, tlist=, factor=, skipout=
strata=, where=, units=1, ties=breslow, out=&factor) ;
data= SAS dataset to read
dlist= dependent
variable list. An analysis is run for
variable. Each variable should be coded
1 for event and 0 if censored.
class= list
of class variables. The GLM parameterization is used.
ilist= independent
variable list. This list will be used
for each dependent variable given in dlist.
tlist= time
variable list corresponding to time of event (or censoring) for each variable
in dlist
strata= strata variable(s)
factor= independent variable(s) for which statistics
from are to be obtained.
units= Used to
obtain RR (HR) for more than a unit difference. Before the risk ratios are
calculated, the coefficients are multiplied by the value of this parameter. The
default is 1. This is given as a list over the factors. If there are 3 factors then there should be 3
units given in the list.
ties= method for handling ties. Default
is Breslow
skipout= no datasets are created. Macro used
only to generate PHREG code.
where= Optional
parameter which allows the user to add a WHERE clause on any other optional
coding
Example: where=where ondrug eq 1
out= SAS
dataset(s) in which statistics are stored for the variables listed in
factor. There is one dataset per factor
with one observation in each dataset.
estimate= If given, an
estimate statement(s) is generated to perform 1 df contrasts. Multiple
contrasts are separated by a slash (/).
Example: estimate = '1 v
3' trt 1 0 -1/ '2 v 3' trt 0 1 -1
This
would perform two contrasts, the first contrast comparing the first and third
levels of trt; the second comparing the
second and third levels of trt.
estdata= The dataset the estimates are
stored.
?
is the total estimate statements times the number of dependent variables. They are stored in the order generated. If there are 2 dependent variables and 2
contrasts then
e1 = estimate for analyses 1, contrast 1
e2 = estimate for analyses 1, contrast 2
e3 = estimate for analyses 2, contrast 1
e4 = estimate for analyses 2, contrast 2
contrast= This generates
the contrast statement to perform >1 df contrasts. Contrasts are separates
by a slash (/).
Example: Contrast =
%str('2 df test' trt 1 0 -1, trt 1 -1 0)
The %str is required.
condata= The dataset the contrasts are stored.
The variables are:
chisq1-chisq? Chi-square statistics
p1-p? P-values
?
is the total number of contrast statements times the number of dependent
variables. They are stored in the same
order as in the estimate statements (see above).
REGP runs PROC REG and
stores regression coefficients, standard errors, t-statistics, and p-values of
covariates from the regression into one or more SAS datasets.
Statistics Available Names
on Output Dataset(s)
Regression
coefficient (beta) b1-b?
Standard error of
beta seb1-seb?
T-statistic (beta/SE) t1-t?
P-value for
T-statistic p1-p?
Lower 95% CI for beta l1-l?
Upper 95% CI for beta u1-u?
Where ? is the number
of dependent variables.
%let listd = chold hdld ldld trigd ;
%let listb = cholbl hdlbl ldlbl trigbl ;
%let listi = group2 clinica clinicb clinicc stratum2 ;
%regp(data=rand, dlist=&listd, ilist=&listi, blist=&listb,factor=group2, cohort=N, out=results);
Macro with default and
optional parameters listed:
%regp(data=_LAST_, dlist=, ilist=, blist=, factor=, cohort=Y, where=, out=&factor) ;
data= SAS dataset to read
dlist= dependent variable list.
ilist= independent
variable list. This list will be used
for each dependent variable given in dlist.
blist= optional list of variables where
the i'th variable in the list
is
added as a covariate to the i'th analysis. It is used mainly to adjust for the
baseline value of the dependent variable.
factor= independent variable(s) for which
statistics are obtained.
cohort= if
set to Y (default), a single PROC REG is run which excludes cases with any
dependent variable having missing data from all regressions. If cohort=N, PROC
REG is run separately for each dependent variable
where= optional parameter which allows the
user to add a WHERE clause
Example: where=where ondrug eq 1
out= dataset(s)
to which statistics are stored. There is
one dataset for each variable in factor.
LIFETAB reads the dataset
created in the OUTSURV option of PROC LIFETEST and outputs the survival values
for specified time values for each strata.
This macro is useful for displaying life tables estimates from selected
points on the graph. Unlike the other
statistical macros, the user needs to run the LIFETEST procedure before calling
the macro.
Statistics Available Names
on Output Dataset(s)
Survival estimates s1-s?
1- survival estimates f1-f?
Upper bound of 95% CI
for S u1-u?
Lower bound of 95% CI
for S l1-l?
Times t1-t?
Strata value g1-g?
Where ? is the number
of time points specified x the number of strata levels. If there were 5 time points specified and 2
levels for strata then ? would be equal to 10 (5 x 2).
Example Call:
%lifetab(data=surv, t=tmort, times = 1 2 3 4 5 6, out=surv, strata=trt);
This call outputs
survival estimates at times 1,2,3,4,5,6 for each level of the variable trt.
Macro with default and
optional parameters listed:
%lifetab(data=, t=t, times = , inter=, ninter, out= &data, print=Y, zero=)
data= SAS dataset previously output from
the OUTSURV option of proc lifetest
t= name of variable containing
event time
times= list of times to output survival
curve values for each strata
ninter= number of intervals (used with option
inter) of time to output
inter= output survival values at NINTER
intervals of this length (used with ninter)
Use
TIMES or INTER with NINTER to indicate the times you want the survival
estimates to be output. The units should
be consistent with the units used for T.
Example: TIMES = .5 1 2
3 4 5 (output at 6 months and then yearly)
Example:
NINTER = 5, INTER = 365 (output at 365,365*2, 365*3, 365*4, 365*5)
zero= if set to Y
then the survival value at t=0 is output
out= SAS
dataset to which statistics are stored.
The default is the same as the input dataset.
print= Y prints out values of survival
curve at all uncensored points
Overview
GENMODP runs proc
genmod and stores statistics from the model into one or more datasets. Default
parameters are set for Poisson regression.
Statistics Available Names
on Output Dataset(s)
For class variables
Chi-square statistic k1-k?
P-value from chi-square
statistic p1-p?
For non-class variables
Estimate (beta
coefficient) e1-e?
Standard error of
estimate se1-se?
Z-statistic (beta/SE) z1-z?
P-value for estimate p1-p?
Relative Rates r1-r?
Lower 95% CI for RR L1-L?
Upper 95% CI for RR U1-U?
If estimate statement used
Estimate e1-e?
Standard error of
estimate se1-se?
Z-value for estimate z1-z?
P-value for estimate p1-p?
Lower 95% CI for RR L1-L?
Upper 95% CI for RR U1-U?
See below for value of
? for each of the types of statistics and how they are stored.
Example Call:
%genmodp(data=temp,
class= ptid yearcat,
dlist= nhosp naids,
ilist= yearcat cd4 ,
offset = lpr,
repeated = subject=pin/type=cs corrw,
factor= yearcat ,
out=out1 ,
estimate = '2005 v 2006' yearcat 1 -1 0|'2006 v 2007' yearcat 0 1 -1,
estdata=est);
Macro with default and optional parameters listed:
%macro genmodp(data=_last_,
class=,
dlist=, ilist=, blist=,
link=log, dist=poisson, offset=,
repeated=,
factor=,out=&factor,
estimate=, estdata=,
units=,
where=,
options=);
Description of
parameters:
data= SAS dataset read
dlist= dependent variable list. A
separate GENMOD is run for each variable in dlist.
ilist= independent
variable list. This same list will be
used for each dependent variable in the analysis.
blist= optional
list of variables where the i'th variable in the list is added as a covariate
to the i'th analysis. It is used mainly to adjust for the baseline value of the
dependent variable.
link= link function (default is log)
offset= offset variable need (used for Poisson regression)
option= any legal option on the GENMOD
statement
class= list of class variables including
grouping unit
repeated= The entire
REPEATED statement used in GENMOD. If left blank then no repeated statement is
generated.
Example: repeated =
subject=pin/type=cs corrw
factor= independent variable(s) for which statistics from GENMOD are
to be obtained.
out= dataset(s)
in which statistics are stored for the variables listed in factor. There is one dataset per factor with one
observation in each dataset.
estimate= If given, an
estimate statement(s) is generated to perform 1 df contrasts. Multiple
contrasts are separated by a slash (/).
Example: estimate = '1 v
3' trt 1 0 -1/ '2 v 3' trt 0 1 -1
This
would perform two contrasts, the first contrast comparing the first and third
levels of trt; the second comparing the
second and third levels of trt.
estdata= The dataset the estimates are
stored. The variable are:
e1-e? contrast values
se1-se? standard errors of the estimates
t1-t? t-statistics
p1-p? p-values
?
is the total estimate statements times the number of dependent variables. They are stored in the order generated. If there are 2 dependent variables and 2
contrasts then
e1 = estimate for analyses 1, contrast 1
e2 = estimate for analyses 1, contrast 2
e3 = estimate for analyses 2, contrast 1
e4 = estimate for analyses 2, contrast 2
where= optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where ondrug eq 1
Overview
MEDIANP runs proc
npar1way and stores statistics from the analysis into a dataset.
Statistics Available Names
on Output Dataset(s)
Chi-square statistic chisq1-chisq?
P-value from
chi-square statistic p1-p?
Degrees of Freedom df1-df?
Example Call:
%medianp
(data=weight, class = sex, var=cholbl, test=w),
Print=y);
Macro with default and optional parameters listed:
%medianp
(data=_last_, out=out, class=, var=, test=W,
Print=noprint, where = );
Description of
parameters:
data= SAS dataset read
var= dependent variable list. A
separate NPAR1WAY is run for each variable in var.
class= class
variable to be compared for each variable in var.
test= type of test
to perform: M (Median); S(Savage); V (VW); W (Wilcoxon).
print= default is NOPRINT of results; set
to Y to print results
where= optional parameter which allows the
user to add a WHERE clause to the call.
Example: where=where ondrug eq 1
Note: When for TEST=W
the chi-square test output is the
Kruskal-Wallis which is equivalent to the Wilcoxon test.
The macros
can also be used create an HTML table. This HTML file can then be viewed using
a web browser or imported into Word.
Most of the formatting options that are available in html such as font
type, font size, font weight, and indenting and underlining text have been
incorporated as well as more general html features such as background and text
color. In addition multiple pieces of
data can be combined and placed it in a single column with various formatting,
such as mean ± SD, N (%), or HR (95% CI)
giving the report table a journal finished look. Default options have been set up so that when
the html table is inserted into Word the columns spread out proportionately to
fill the page margins, making it unnecessary to deal with margin issues.
The most simple HTML
table can be made by making the following changes to the usual report:
Add the
following bolded parameter to the report call that will contain the html file.
%wreport
(repfile = ‘report.txt’, htmlfile=’report.html’); and
Add the following 2
lines at the end of your report
stop;
%makehtml;
The stop statement is
required; without it the html file will be incorrect. The macro call to
makehtml generates the html file.
There are several
enhancements that can be made by using options on the %move and %nmove
statements.
Formatting options
for %move and %nmove are given in the following table:
Macro Parameter |
Description |
Default |
Other values |
Indent |
Used to indent text
(%move only) |
0=none; |
1=some indent;
2=more |
Fontfamily |
any usual font name
recognized by html |
Times New Roman |
Arial; Courier New |
Fontsize |
size of font
including unit of measurement |
10pt |
12pt (no space
between number and pt) |
Fontweight |
used to bold text; |
|
Bold; bolder |
Fontstyle |
used to italicize
text |
|
Italics |
Lineheight |
Size of cell in
proportion to text size |
125% |
200% (no space
between number and %) |
Textdecoration |
Used for
underlining |
None |
underline |
Background |
Used for shading or
changing backgroung color |
White (#ffffff) |
Use #d9d9d9 or #b3b3b3
for shading |
Note: Default values
are controlled through macro makehtml
%macro makehtml
This macro creates
the html file. It is not usually needed to change the default values.
Macro Parameter |
Description |
Default |
Other values |
border |
Size of width in
pixels of the frame around the table |
2 |
Any number |
frame |
Specifies which
sides of the frame surrounding the table will be visible |
Box – all 4 sides |
Above; below;
hsides; vsides; lhs; rhs (see html manual) |
Rules |
Controls the rules
(lines) separating cells |
Groups |
None; all |
cellspacing |
Amount of space
between cells in pixels |
0 |
Any value |
Cellpadding |
Amount of white
space within cell in pixels |
1 |
Any value |
Bgcolor |
Background color |
#ffffff (white) |
Any valid color |
textcolor |
Text color |
000000 |
Any valid color |
width |
Width of table as
proportion of browser width |
100% (uses all of
browser width) |
Other %s or actual
widths |
In addition, you can change
the default values for fontfamily, fontsize, fontweight, fontstyle, and
lineheight by setting those parameters in %makehtml.
New parameters for %nmove
combine = y to combine data in same cell (see
examples)
fchar = code which tells how to format combined data.
= 1 uses ±
to combines 2 numbers
= 1C uses a comma between 2 numbers
= 2 puts second number in parenthesis
= 2P as in 2 but adds percent sign at end of
second number
= 3 second and
third number are placed in parenthesis and a dash placed between second and
third number, Used for HR with CIs.
= 3B second and
third number are placed in square brackets and a dash placed between second and
third number.
= 4 second and
third number are placed in parenthesis and a comma is placed between second and
third number.
= 4B second and
third number are placed in square brackets and a comma is placed between second
and third number.
Example using fchar option:
= 1 45.2 ± 6.7
= 1C 1.18, 1.96
= 2 231 (17.1)
= 2P 231 (17.1%)
= 3 1.02 (0.88 - 1.18)
=
3B 502 [250-788]
= 4 1.02 (0.88, 1.18)
=4B 502 [250,788]
Notes: To use the
combine feature the variables to be combined must be specified in array type
notation. For example the following call puts the three variables r1, L1, and u1
together in one cell, the variables r2, L2, and u2 in a second cell, etc. The
combine option must be set to “y”, otherwise the 21 total variables are treated
as individual variables. Also, separate formats can be specified for the pair
or triplet of numbers as can separate scaler options.
%nmove(r1-r7
L1-L7 u1-u7, col=4, line=14L7, combine=y,
fmt=5.2 5.2 5.2, fchar=3);
%nmove(m1-m7
se1-se7, col=4, line=14L7, combine=y,
fmt=5.1 5.1 , fchar=1);
%nmove(sum1-sum7
m1-m7, col=4, line=14L7, combine=y, fmt=5.0 5.1 , fchar=2P,
scaler=1 100);
Some notes
on using wreport for making html files
·
The
lines numbers given in move and nmove statements are used only in a relative
sense, .i.e., the lowest line number is the first row of the table, the next
line number is the second row of the table, etc. There are no “skipped” rows.
The user can use this to their advantage. For example, a footnote text can be
moved to a high line number so the footnote text is always at the end of the
report.
·
The
column numbers in %colset are used in a relative sense. Thus, a value of 20
will take twice the space as value of 10. The table will automatically fill the
margin when inserted into Word.
·
The
report displays different grid lines depending on whether or not consecutive
line numbers are filled. For example, moving 3 character strings to consecutive
lines (e.g. line=22L3) will yield a slightly different looking report then if
the strings were moved to lines 22, 24 and 26 (e.g. line=22 24 26). Moving to
consecutive lines will give a block looking section which may be nicer to view
then having grid lines in between each row. However, this distinction is not
honored by Word; but is honored by most browsers.
·
Underlines
(u=1) on %move statements are ignored. You can include them to make the text
report look better.
·
You
may use html tags within the text strings to do formatting not controlled by
the macro formatting parameters. Use the <br> tag in the text to start a
new line within the cell. Other useful HTML tags are <sup></sup> to superscript the
text between tags and <sub></sub> to subscript the text between
tags. If you only wish to bold or italicize a portion of the text in a %move
statement, <b></b> and <i></i> may be used. If you
really want to emphasize a word, <b><i><u> important
word</u></i></b> will give you: important word .
·
If
the combine option is used more than once in a report then move the largest
width characters first (example move the HR and 95%CI before the n and %.
Otherwise some text may get truncated.
Each
table is followed by the code to generate the table.
|
||||
|
Number of Patients |
Cox Regression Analyses |
||
Endpoint |
Experimental |
Standard |
HR (95% CI) |
P-value |
Primary CVD |
364 (4.5%) |
365 (4.4%) |
1.02 (0.88, 1.18) |
0.771 |
MI (Fatal/NF) |
133 (1.6%) |
166 (2.0%) |
0.82 (0.65, 1.03) |
0.089 |
Stroke (Fatal/NF) |
133 (1.6%) |
118 (1.4%) |
1.15 (0.90, 1.48) |
0.265 |
CVD Death |
152 (1.9%) |
143 (1.7%) |
1.09 (0.87, 1.37) |
0.471 |
Any CVD
Hospitalization 1 |
793 (9.7%) |
775 (9.3%) |
1.05 (0.95, 1.16) |
0.307 |
Revascularization |
163 (2.0%) |
166 (2.0%) |
1.01 (0.82, 1.26) |
0.913 |
TIA |
89 (1.1%) |
105 (1.3%) |
0.87 (0.66, 1.15) |
0.330 |
Angina |
202 (2.5%) |
190 (2.3%) |
1.09 (0.89, 1.33) |
0.389 |
Heart Failure |
126 (1.5%) |
100 (1.2%) |
1.30 (1.00, 1.69) |
0.051 |
Hypertension |
22 (0.3%) |
18 (0.2%) |
1.26 (0.67, 2.34) |
0.474 |
Renal Failure |
27 (0.3%) |
34 (0.4%) |
0.81 (0.49, 1.35) |
0.426 |
|
libname convince '/data/convince/';
data
temp;
set convince.convince ;
if abgroup = 'A' then group = 1;
if abgroup = 'B' then group = 0;
if abgroup = 'A' then cgroup = 1 ;
if abgroup = 'B' then cgroup = 2 ;
if abgroup = 'A' then ggroup = 0 ;
if abgroup = 'B' then ggroup = 1 ;
%let
evlist = primary mi str cvddth allcvd corevas tia angina chf acchyp renalf ;
%let
tmlist = tprimary tmi tstr tcvddth tallcvd tcorevas ttia
tangina tchf tacchyp trenalf ;
keep
patno group cgroup &evlist &tmlist soc cstrata country agerand;
%breakdn(data=temp,
class= cgroup 2, var=&evlist, out=out1);
%phregp(data=temp, dlist = &evlist, strata=soc
cstrata,
tlist= &tmlist,
ilist=group, factor=group,out = out2);
%wreport(repfile='example.txt',
htmlfile='example.html');
%colset(25
14 14 21 7);
%move('Number
and Percent of Selected Cardiovascular Events by Treatment Group<br>'
'And Hazard Ratio (Experimental/Standard)
from Cox Regression Analyses',
col=1-0, line=3, fontweight=bold,
fontsize=12pt);
%move('Number
of Patients<br>With Event', col=2-3, line=9, fontweight=bold);
%move('Cox
Regression Analyses<br>Experimental/Standard', col=4-0, line=9,
fontweight=bold);
%move('Experimental':'Standard':'HR
(95% CI)':'P-value', col=2.0,line=11,
fontweight=bold);
%move('Endpoint',
col=1, center=2, line=11, u=1, fontstyle=italic, fontweight=bold);
%move('Primary
CVD ':'Any CVD Hospitalization <sup>1', col=1, center=2, line=14 19,
fontstyle=italic, fontweight=bold);
%move('MI
(Fatal/NF)':
'Stroke (Fatal/NF)':
'CVD Death':
'Revascularization':
'TIA':
'Angina':
'Heart Failure':
'Hypertension':
'Renal Failure',
col=1, center=2, line=15L3 20L6, indent=1);
%move('<br><sup>1</sup>
Includes events below plus primary events', col=1-0, line=30, center=2);
set
out2;
%nmove(r1-r11
L1-L11 u1-u11, col=4, line=14L4 19L7, combine=y, fmt=5.2 5.2 5.2, fchar=4);
%nmove(p1-p11 , col=5, fmt=6.3);
set
out1;
%nmove(sum1-sum22
m1-m22, col=2 3, scaler=1 100, combine=y, fmt=5.0 5.1, fchar=2P);
stop;
run;
%makehtml;
run;
|
||||
Variables
Contributing to Score |
Men |
Women |
Total |
P (M/W) |
Large Artery Elasticity |
18.5 ± 5.8 |
14.5 ± 5.1 |
16.9 ± 5.8 |
<.001 |
Small Artery Elasticity |
7.4 ± 3.2 |
5.2 ± 2.8 |
6.5 ± 3.3 |
<.001 |
Resting Systolic BP (mmHg) |
133.2 ± 16.8 |
130.0 ± 20.8 |
131.9 ± 18.6 |
0.009 |
Resting Diastolic BP (mmHg) |
85.3 ± 9.8 |
80.8 ± 9.7 |
83.5 ± 10.0 |
<.001 |
Exercise SBP (mmHg) |
156.3 ± 21.6 |
153.4 ± 25.1 |
155.1 ± 23.1 |
0.062 |
Exercise DBP (mmHg) |
75.1 ± 11.9 |
70.7 ± 11.1 |
73.4 ± 11.8 |
<.001 |
Change in SBP (mmHg) |
23.1 ± 15.4 |
23.6 ± 15.7 |
23.3 ± 15.5 |
0.662 |
Change in DBP (mmHg) |
-10.2 ± 9.0 |
-10.3 ± 8.7 |
-10.2 ± 8.9 |
0.955 |
LVMI (g/m2) |
94.7 ± 25.6 |
79.0 ± 22.0 |
88.3 ± 25.4 |
<.001 |
Microalbumin (mg/mmoL) |
0.8 ± 1.5 |
1.3 ± 3.2 |
1.0 ± 2.3 |
0.005 |
BNP (pg/dL) |
18.4 ± 22.9 |
30.0 ± 28.7 |
23.1 ± 26.0 |
<.001 |
Other Risk Factors
Measured |
|
|
|
|
Total Cholesterol (mg/dl) |
199.2 ± 35.0 |
210.9 ± 38.5 |
203.9 ± 36.9 |
<.001 |
LDL Cholesterol (mg/dl) |
126.6 ± 31.2 |
127.2 ± 34.4 |
126.9 ± 32.5 |
0.778 |
HDL Cholesterol (mg/dl) |
45.0 ± 11.4 |
59.2 ± 17.6 |
50.7 ± 15.8 |
<.001 |
Triglycerides (mg/dl) |
146.0 ± 115.6 |
125.0 ± 116.2 |
137.6 ± 116.2 |
0.007 |
Glucose (mg/dl) |
95.5 ± 16.2 |
91.3 ± 17.0 |
93.8 ± 16.6 |
<.001 |
CRP (mg/L) |
0.3 ± 0.4 |
0.4 ± 0.5 |
0.3 ± 0.4 |
<.001 |
Homocysteine (umol/L) |
8.9 ± 2.4 |
7.7 ± 2.2 |
8.4 ± 2.4 |
<.001 |
Age (y) |
51.0 ± 11.4 |
52.6 ± 11.1 |
51.7 ± 11.3 |
0.033 |
10-Year CHD Risk (%) |
7.1 ± 5.6 |
1.9 ± 2.0 |
5.0 ± 5.2 |
<.001 |
Body Mass Index (kg/m2) |
27.8 ± 4.4 |
26.9 ± 5.5 |
27.4 ± 4.9 |
0.008 |
Number of Patients |
565 |
379 |
944 |
|
%let
dlist = c1 c2 rest_sbp rest_dbp ex_sbp ex_dbp _sbp _dbp
lvmindx malb_ bnp total_chol ldl
hdl
trig gluc hscrp homocys age chd10;
%breakdn(data=temp,
class = gender 2T, var=&dlist bmicalc, out=out1);
%breakdn(data=temp,
class = gender 2T, var=bmicalc, out=out2);
%regp(data=temp,
dlist = &dlist bmicalc, ilist=gender, factor=gender,
cohort=N, out=out3);
%wreport
(htmlfile = 'rasmussen.html' );
%colset(35
25 25 25 10 );
%move('Mean
Levels of Measures Contributing to The Rasmussen Score<br>'
'and Other Determinations by
Gender<br>'
'for Rasmussen Population',
col=1-0, line=3, fontweight=bold,
fontsize=12pt);
%move('Men':'Women':'Total':'P
(M/W)', line=9, col=2.5, fontweight=bold);
%move('Variables
Contributing to Score':
'Other Risk Factors Measured',
col=1, center=2, line=9 24 ,
fontweight=bold, fontstyle=italic);
%move('Number
of Patients', col=1, line= 37 , center=2);
%move('Large
Artery Elasticity':
'Small Artery Elasticity':
'Resting Systolic BP (mmHg)':
'Resting Diastolic BP (mmHg)':
'Exercise SBP (mmHg)':
'Exercise DBP (mmHg)':
'Change in SBP (mmHg)':
'Change in
DBP (mmHg)':
'LVMI
(g/m2)':
'Microalbumin
(mg/mmoL)':
'BNP (pg/dL)':
'Total Cholesterol (mg/dl)':
'LDL Cholesterol (mg/dl)':
'HDL Cholesterol (mg/dl)':
'Triglycerides (mg/dl)':
'Glucose
(mg/dl)':
'CRP (mg/L)':
'Homocysteine (umol/L)':
'Age (y)':
'10-Year CHD Risk (%)':
'Body Mass Index (kg/m2)':
col=1, center=2, line=12L11 25L10 ,
indent=2);
set
out1;
%nmove(med1-med63
lq1-lq63 uq1-uq63, col=2 3 4, combine=y, fchar=4);
set
out2;
%nmove(n1-n3,
col=2 3 4, line=37, fmt=4.0);
set
out3;
%nmove(p1-p21,
col=5, line=12L11 25L10, fmt=6.0, specfmt=pvalue6.3);
stop;
run;
%makehtml;
|
|||
Baseline Variable |
Experimental |
Standard |
Total |
Age (y) |
65.6 ± 7.4 |
65.6 ± 7.4 |
65.6 ± 7.4 |
Systolic BP (mmHg) |
150.1 ± 15.8 |
150.1 ± 16.0 |
150.1 ± 15.9 |
Diastolic BP (mmHg) |
86.8 ± 9.8 |
86.8 ± 9.8 |
86.8 ± 9.8 |
Additional Risk
Factor (%) |
|
|
|
MI |
607 (7.5%) |
652 (7.9%) |
1259 (7.7%) |
Stroke |
370 (4.5%) |
393 (4.8%) |
763 (4.7%) |
Cigarette Use |
1912 (23.5%) |
1883 (22.8%) |
3795 (23.2%) |
Diabetes |
1616 (19.9%) |
1623 (19.7%) |
3239 (19.8%) |
|
1000 (12.3%) |
1019 (12.4%) |
2019 (12.3%) |
Cholesterol |
2540 (31.2%) |
2575 (31.2%) |
5115 (31.2%) |
TIA |
184 (2.3%) |
162 (2.0%) |
346 (2.1%) |
Overweight |
4150 (51.0%) |
4096 (49.6%) |
8246 (50.3%) |
Vascular Disease |
1362 (16.7%) |
1387 (16.8%) |
2749 (16.8%) |
Vascular Bruit |
403 (5.0%) |
409 (5.0%) |
812 (5.0%) |
More than 1 condition |
4060 (49.9%) |
4038 (48.9%) |
8098 (49.4%) |
Number of Patients |
8179 |
8297 |
16476 |
%let clist = agerand sbpbl dbpbl ;
%let blist = rsk001 rsk002
rsk003 rsk004 rsk005 rsk006 rsk007
rsk008 rsk009 rsk010 rskgt1 ;
%breakdn(data=temp,class=group
2T, var=&clist, out=out1);
%breakdn(data=temp,class=group
2T, var=&blist, out=out2);
%wreport(repfile='basechar.table',htmlfile='basechar.html');
%colset(28
13 13 13);
%move('Age,
Blood Pressure and Additional Risk Factors<br>'
'by Treatment Group for Patients
Randomized in CONVINCE',
col=1-0, line=3,fontweight=bold,
fontsize=12pt, background=#D9D9D9);
%move('Experimental':'Standard':'Total',
col=2.0, line=9, fontweight=bold);
%move('Baseline
Variable':'Additional Risk Factor (%)', col=1, line=9 16, center=2,
fontweight=bold, fontstyle=italic);
%move('Age
(y)':
'Systolic BP (mmHg)':
'Diastolic BP (mmHg)',
col=1, center=2, line=12 13 14);
%move('MI':'Stroke':'Cigarette
Use':'Diabetes':'LV Hypertrophy':'Cholesterol':
'TIA':'Overweight':'Vascular
Disease':'Vascular Bruit':
'More than 1 condition',
col=1, center=2, line=19L11, indent=1);
%move('Number
of Patients', col=1, center=2, line=36, fontweight=bold,
fontstyle=italic);
set
out1;
%nmove(m1-m9
s1-s9, col=2.4 , line=12L3, combine=y, fchar=1 );
%nmove(n1
n4 n7, col=2.4, line=36, fmt=5.0, fontweight=bold);
set
out2;
%nmove(sum1-sum33
m1-m33, line=19L11, col=2.4, combine=y, fchar=2P, fmt=5.0 5.1,
scaler=0.01 1);
stop;
%makehtml;
The following table gives the code to display various
mathematical and other special characters. Each starts with &# , followed
by a number, followed by a semicolon. Other codes can be found by searching the
web for special characters in html.
|
||
|
Code for Character |
Result moving to the page via %move |
Mathemetical/scientific |
|
|
Plus or minus |
± |
± |
Less than or equal to |
≤ |
≤ |
Greater than or equal to |
≥ |
≥ |
Not equal to |
≠ |
≠ |
Micro |
µ |
µ |
Greek letters |
|
|
Alpha |
α |
α |
Beta |
β |
β |
Delta |
δ |
δ |
Epsilon |
ε |
ε |
Mu |
μ |
μ |
Sigma |
σ |
σ |
Tau |
τ |
τ |
Footnote symbols |
|
|
Dagger |
† |
† |
Double dagger |
‡ |
‡ |
Section |
§ |
§ |
Paragraph |
¶ |
¶ |
Other useful
characters |
|
|
|
: |
: |
Degree |
° |
° |
Bullet |
• |
• |
Copyright |
© |
© |
Smiley face (for good pvalues) |
☺ |
☺ |
PN=specialcharacters
Rundate=07OCT2010 |
|
||
Type of text desired |
Example %move statement |
Result |
Greek letter beta, plus or minus sign |
%move('β ± SE',col=3,line=10) ; |
β ± SE |
Two lines within a cell |
%move('Mean ± SD <br>or N (%)',col=3,line=12) ; |
Mean ± SD |
Superscript |
%move('P-value<sup>1</sup>',col=3,line=14); |
P-value1 |
Subscript, bold a portion of text only |
%move('<b>Viral Load</b>
(log<sub>10</sub>)',col=3,line=16) ; |
Viral Load (log10) |
Footnotes |
%move('<b><u>Notes:</u></b>
<br> <sup>1</sup> Adjusted for clinical center', col=3,line=18,
center=n) ; |
Notes: |
PN=SCandTagExamples
Rundate= |