SlideShare a Scribd company logo
1 of 15
Download to read offline
PharmaSUG 2013 – PO05
ADaM Datasets for Graphs
Kevin Lee, Cytel, Inc., Chesterbrook, PA
Chris Holland, Amgen, Rockville, MD
ABSTRACT
The paper is intended for clinical trial SAS® programmers who create graphs using ADaM (Analysis Data Model)
datasets. ADaM datasets are analysis-ready, so programmers need to apply CDISC principles and guidelines to
create them, while at the same time being mindful of their intent as plotting datasets. The paper will discuss the basic
principles of graph creation using ADaM datasets.
We propose the use of PARAM, AVAL, AVISIT and AVISITN for plotting. The paper will show in an example how to
use AVAL for the y-axis and AVISITN for the x-axis for simple plotting. We will discuss the role of AVISITN as a
numeric representation of AVISIT and propose the use of AVISITN for plotting purposes.
We will also discuss some of the graphs created by features of SAS/STAT, ODS GRAPH and Graph Template
Language (GTL). This will eliminate some of the intermediate SAS datasets that SAS programmers need to create
for graph creations, which means that the graphs can be created directly from ADaM without the intermediate
datasets. Examples using SAS/STAT, ODS GRAPH and GTL will be provided.

INTRODUCTION
The
CDER
Common
Data
Standards
Common
Issues
document
(http://www.fda.gov/downloads/Drugs/DevelopmentApprovalProcess/FormsSubmissionRequirements/ElectronicSub
missions/UCM254113.pdf) states the following with regard to ADaM data:
One of the goals of standardizing analysis datasets using ADaM is to simplify the programming steps
necessary for performing an analysis. Analysis datasets with repeated measures data should include a
numeric time variable (adequately documented in the define file) that measures time from randomization in
real time (e.g. Week 8 would be represented as an 8). The reason for this request is related to a common
analysis, the portrayal of data over the duration of a study. This data is often shown as means or medians by
treatment group by time on study. This time on study is defined by windowed visits which may be
represented in ADaM datasets as AVISIT, a character variable. AVISIT is adequate for subsetting the data
but this variable is not a measure of time in calendar time so it is not sufficient for plotting data where the xaxis measures real time.
In addition to this CDER-specific requirement, the FDA Study Data Specifications document
(http://www.fda.gov/downloads/ForIndustry/DataStandards/StudyDataStandards/UCM312964.pdf)
includes
the
following similar piece of guidance:
When a dataset contains multiple records per subject, a variable for relative day of measurement or event
and variables for visit should be included. In addition to a protocol-scheduled visit variable, include at least
two timing variables; a character variable describing the visit (e.g. WEEK 8) and a corresponding numeric
variable (e.g. 8). These two variables are measures of time from randomization.
A logical ADaM variable that can be used to address this common data issue is AVISITN, which is a numeric
representation of AVISIT. The ADaM Implementation Guide v1.0 provides the following notes regarding AVISITN:
A numeric representation of AVISIT. This may be a protocol visit number, a week or cycle number, an
analysis visit number, or any other number logically related to AVISIT or useful for sorting that is needed for
analysis. Within a parameter, there is a one-to-one mapping between AVISITN and AVISIT so that AVISITN
has the same value for each distinct AVISIT. In the event that a record does not fall within any predefined
analysis timepoint window, AVISITN can be populated in any way that the sponsor chooses to indicate this
fact (e.g., may be null). Values of AVISITN are sponsor-defined.
As a means of addressing this need of reviewers, statistical programmers, and study statisticians alike, we propose
the use of AVISITN to represent a unit of time associated with the planned corresponding visit. In addition to
representing a unit of time that can be used for plotting, the values can be used for sorting and have the added
benefit of an intuitive meaning without the need for a protocol, a corresponding AVISIT value, or some other
documentation that would be needed to interpret the meaning of coded values. Using an existing ADaM variable for
this purpose obviates the need for a new, non-standard variable that would require additional documentation,
programming, and quality control. Note however that although the use of AVISITN for plotting purposes may work for
a number of clinical trial settings, it may not work for all situations.

1
It should be pointed out that the use of ADY is appropriate for patient-level plots only, such as scatter plots. The
current “unmet need” with the ADaM standard is a time variable that can be used for grouping records from the same
analysis visit from which descriptive statistics for each treatment group, cohort, subgroup, etc. can be calculated.

EXAMPLE USING AVISITN AS A PLOTTING VARIALBE
The following example is partially based on a real-life Phase 3 study that can be read about at:
http://www.macrogenics.com/content/file/Lancet28JUN2011F.pdf
Consider a randomized study with daily dosing of an experimental therapy and placebo for 14 days followed by an
observation period out to one year after randomization. The visit schedule includes assessments for safety on Study
Days 1-7, 10, 14, 28, 91, 182, 273, and 365. There is also a Screening visit that should occur 2-3 weeks before the
randomization visit and an End of Study visit where safety data are recorded. Efficacy data are also captured at
some of these visits. The values for VISIT and VISITNUM from the raw (SDTM) data for this study are displayed in
Table 1.
Table 1: VISITNUM and VISIT values
VISITNUM
VISIT
-1
SCREENING
1
DAY 1
2
DAY 2
3
DAY 3
4
DAY 4
5
DAY 5
6
DAY 6
7
DAY 7
8
DAY 10
9
DAY 14
10
MONTH 1
11
MONTH 3
12
MONTH 6
13
MONTH 9
14
YEAR 1
99
END OF STUDY
In order to make the visit number usable for plotting purposes, AVISITN should be assigned to represent the study
day. The values of AVISIT should be assigned to represent whatever is preferred for display purposes. In this case
we will assume that it is preferred to have AVISIT display both the target study day (if applicable) and the month
and/or year. Table 2 displays the same information as Table 1 plus values for AVISITN and AVISIT:
Table 2: VISITNUM, VISIT, AVISITN, and AVISIT values
VISITNUM
VISIT
-1
SCREENING
1
DAY 1
2
DAY 2
3
DAY 3
4
DAY 4
5
DAY 5
6
DAY 6
7
DAY 7
8
DAY 10
9
DAY 14
10
MONTH 1
11
MONTH 3
12
MONTH 6
13
MONTH 9
14
YEAR 1
99
END OF STUDY

AVISITN
-21
1
2
3
4
5
6
7
10
14
28
91
182
273
365
999

AVISIT
Screening
Day 1
Day 2
Day 3
Day 4
Day 5
Day 6
Day 7
Day 10
Day 14
Day 28
Day 91/Month 3
Day 182/Month 6
Day 273/Month 9
Day 365/Month 12
End of Study

The value of -21 was chosen for AVISITN and the Screening visit because this represents the expected mode (most
common value) for the timing of the screening visit and was considered logical for plotting purposes.

2
The value of 999 was chosen for the End of Study visit so that the value would not be confused with a study day.
Plotting this value might require a re-assignment of the value if it is desired to have it appear immediately after the
last displayed visit on a time scale. Since the last displayed visit can depend on what is being plotted, there is no
universal value that would work for all plots on a time scale.
Examples of some actual plots from the study that this example is based on are presented in Figure 1 and Figure 2
below.
Figure 1: Sample Plot of Safety Data Using AVISITN for the x-axis of time

Figure 2: Sample Plot of Efficacy Data Using AVISITN for the x-axis of time

3
ADVANTAGES AND DISADVANTAGES
Advantages and disadvantages to this approach relative to one where a new variable is instead applied at all times
are provided in the table below:
Using AVISITN Whenever Feasible
Advantages
Disadvantages
May not work for all
Works for the vast
studies or situations, in
majority of situations
which case an additional
variable is needed
Meets resistance with
Applies an intuitive value
those who use AVISITN
to AVISITN rather than a
according to certain
coded value that can be
company-specific
hard to remember or
standards (e.g. equal to
interpret
VISITNUM)
Reduces the need to
add additional variables
to a data set
Creates a standard for
the use of AVISITN

Using a New Variable for all Situations
Advantages
Disadvantages
Can be used for all
situations where the
concept is relevant

Creates additional work
and documentation

Allows continued use of
AVISITN in a nonstandard way
Adds additional nonstandard variables to a
data set

Despite the many advantages of using AVISITN as a plotting variable, the fact that this will not work for all situations
does warrant consideration of a new set of ADaM variables that are specifically designed for plotting purposes. To
this end, there is currently an ADaM sub-team working on a solution to this. It remains to be seen whether AVISITN
will be considered an acceptable option for plotting on a time scale after this new set of variables have been
proposed

4
HOW TO USE ADaM DATASET FOR GRAPH USING SAS ODS AND SAS/STAT
The below Time to Event ADaM dataset can create a Kaplan Meier Curve without the intermediate datasets. The table 3 and 4 are the metadata of ADaM dataset of
ADTTEOS. Table 5 is the final ADaM dataset of ADTTEOS.
Table 3: Analysis Dataset Metadata for ADTTEOS
Dataset
Dataset
Dataset
Name
Description
Location
ADTTEOS

Overall Survival
Analysis Dataset

adtteos.xpt

Dataset Structure

Class of
Dataset

Key Variables of Dataset

one record per subject per
parameter per analysis visit

USUBJID, PARAMCD,
AVISITN

BDS

Documentation
c-adtteos.txt

Table 4: Analysis Variable Metadata including Analysis Parameter Value-Level Metadata for ADTTEOS
Dataset
Parameter
Variable
Variable
Display
Variable Label
Codelist / Controlled Terms
Name
Identifier
Name
Type
Format

Source / Derivation

ADTTEOS

*ALL*

USUBJID

Unique Subject Identifier

text

$20

ADSL.USUBJID

ADTTEOS

*ALL*

SITEID

Site ID

text

$20

ADSL.SITEID

ADTTEOS

*ALL*

SEX

Sex

text

$20

M, F

ADSL.SEX

ADTTEOS

*ALL*

ITTFL

Intent-to-Treat Population
Flag

text

$1

Y, N

ADSL.ITTFL

ADTTEOS

*ALL*

TRTPN

Planned Treatment (N)

integer

1.0

1 = Placebo, 2 = Study Drug

ADSL.TRTPN

ADTTEOS

*ALL*

TRTP

Planned Treatment

text

$20

Placebo, Study Drug

ADSL.TRTP

ADTTEOS

PARAMCD

PARAMCD

Parameter Code

text

$8

DEATH

ADTTEOS

*ALL*

PARAM

Parameter

text

$50

Days to Death

ADTTEOS

*ALL*

PARAMTYP

Parameter Type

text

$50

DERIVED

ADTTEOS

*ALL*

AVISITN

Analysis Visit (N)

integer

3.0

1 = Treatment Period

ADTTEOS

*ALL*

AVISIT

Analysis Visit

text

$20

Treatment Period

ADTTEOS

*ALL*

AVAL

Analysis Value

float

8.2

ADT – STARDT + 1

ADTTEOS

*ALL*

STARTDT

Time to Event Origin Date
for Subject

integer

DDMONYY

SAS Numeric version of
DM.RFSTDTC

ADTTEOS

*ALL*

ADT

Analysis Date

integer

DDMONYY

SAS numeric version of DS.DSDTC,
last event or finding date

ADTTEOS

*ALL*

CNSR

Censor

integer

8.0

5
Dataset
Name
ADTTEOS

Parameter
Identifier

Variable
Name

*ALL*

EVNTDESC

Variable Label
Event or Censoring
Description

Variable
Type

Display
Format

text

$40

PARAM

AVAL

Codelist / Controlled Terms

Source / Derivation
DS.DSDECOD

Table 5: Final ADaM dataset of ADTTEOS
USUBJID
SITEID
ITTFL
TRTP

PARAMCD

001-01-001

01

Y

Study Drug

DEATH

Days to Death

157

2011-01-04

2011-06-10

1

COMPLETED
STUDY

001-01-002

01

Y

Placebo

DEATH

Days to Death

116

2011-02-01

2011-05-28

1

LOST TO
FOLLOW- UP

001-01-003

01

Y

Placebo

DEATH

Days to Death

88

2011-02-25

2011-05-04

0

DEATH

001-01-004

01

Y

Study Drug

DEATH

Days to Death

102

2011-03-20

2011-06-03

1

ONGOING

001-01-005

01

Y

Study Drug

DEATH

Days to Death

101

2011-03-26

2011-07-05

1

ONGOING

STARTDT

ADT

……

In the normal setting, a programmer creates the intermediate SAS datasets of _SURV like below SAS codes.
proc lifetest data=param out=_surv;
time aval*cnsr(1);
strata trtp;

run;

**** Title & footnote;
title1 "Survival Plot";

6

CNSR

EVNTDESC
Table 6: The Intermediate dataset of _SURV for a Kaplan Meier Curve
TRP
AVAL
_CENSOR_
SURVIVAL
SDF_LCL

SDF_UCL

STRATUM

Placebo

0

.

1

1

1

1

Placebo

1

0

0.939189

0.886397

0.967887

1

Placebo

3

0

0.898649

0.837527

0.937622

1

Study Drug

0

.

1

1

1

2

Study Drug

2

0

0.960526

0.914251

0.98207

2

Study Drug

3

1

0.960526

.

.

2

…..

……

A programmer can create a Kaplan Meier Curve using this intermediate temporary dataset using stepwise function in
SAS/GRAPH. But, the new ODS function can help the programmer to create a Kaplan Meier Curve directly from
ADaM dataset. The following SAS codes will provide a simple way to create a Kaplan Meier Curve.

SAS CODES AND LOG
A programmer can write below SAS codes for a simple Kaplan Meier Curve utilizing ODS GRAPH and SAS/STAT.
**** Prepare Graph Environment;
options orientation=landscape missing="" nonumber nodate;
**** ODS Option;
ods trace on;
ods listing close;
ods path sashelp.tmplmst(read);
ods graphics on ;
ods rtf file="C:zotherpaper13 ADaM datasets for GraphsSASprogramSurvival Graph.rtf"
bodytitle ;
ods noptitle;
ods select survivalplot;
**** Graph;
proc lifetest data=param ;
time aval*cnsr(1);
strata trt01p;

run;

**** Title & footnote;
title1 "Survival Plot";

**** Closing ODS;
options orientation=landscape ;
ods path sashelp.tmplmst(read);
ods rtf close;
ods graphics off;
ods listing;
ods trace off;

A programmer selects ODS SELECT SURVIVALPLOT as highlighted.
SURVIVALPLOT was added to the ODS rtf output.
It
Stat.Lifetest.Graphics.ProductLimitSurvival.

7

The below SAS log shows that
also shows that template is
Output Added:
------------Name:
SurvivalPlot
Label:
Survival Curves
Template:
Stat.Lifetest.Graphics.ProductLimitSurvival
Path:
Lifetest.SurvivalPlot
-------------

OUTPUT
The above SAS codes create a simple Kaplan Meier Curve as seen in Figure 3. Figure 3 is a default Kaplan Meier
Curve from the template of ProductLimitSurvival. If a programmer wants to create more customized graphs, the
programmer needs to create the new template, which will be discussed in next sections.
Figure 3: The Kaplan Meier Curve using ProductLimitSurvival from Sashelp.tmplmst

GRAPH TEMPLATE LANGUAGE IN RESULTS AREA
In the yellow-highlighted, a programmer can find the location of template of ProductLimitSurvival template.
First, go to “Results” Window, right-click on “Results” and select “Template”.
“Sashelp.Tmplmst”, “Stat”, “Lifetest”, “Graphics” and “ProductLimitSurvival”.

8

Then, as shown below, go to
Figure 4: The location of default template of ProductLimitSurvival in Results Window

Left-click on “ProductLimitSurvival”, a programmer can find the GTL(Graph Template Language) for the template
(Please see the Appendix 1). The programmer is able to modify this default template for more customized graphs.
The programmer can create the new template using GTL. Below template is created by modifying GTL from the
default template.
**** Prepare Graph Environment;
options orientation=landscape missing="" nonumber nodate;
** Set margins for RTF destination ;
proc template;
**** New Survival Plot Template;
define statgraph Stat.Lifetest.Graphics.ProductLimitSurvival;
dynamic NStrata xName plotAtRisk plotCensored plotCL plotHW plotEP
labelCL labelHW labelEP maxTime method StratumID classAtRisk plotBand
plotTest GroupName yMin Transparency SecondTitle TestName pValue;
BeginGraph;
entrytitle "" ; ** missing titles;
layout overlay /
xaxisopts=(label="Time(Days) on Study" shortlabel=XNAME offsetmin=.05
linearopts=(viewmax=MAXTIME))
yaxisopts=(label="Probability of Number of Events"
linearopts=(viewmin=0 viewmax=1
tickvaluelist=(0.0 0.2 0.4 0.5 0.6 0.8 1.0))); ** New tickets and label;
** Add the new lines;
lineparm x=0 y =0.5 slope=0 / extend = true lineattrs=(color=gray thickness=0.5px);

9
** New title in the legend;
DiscreteLegend "Survival" / title="Treatment Group" location=outside;
stepplot y=SURVIVAL x=TIME / group=STRATUM index=STRATUMNUM name=
"Survival" rolename=(_tip1=ATRISK _tip2=EVENT) tip=(y x Time _tip1 _tip2);
if (PLOTCENSORED)
scatterplot y=CENSORED x=TIME / group=STRATUM index=STRATUMNUM
markerattrs=(symbol=circle); ** circle symbol;
if (PLOTTEST)
else
layout gridded / rows=1 autoalign=(TOPRIGHT BOTTOMLEFT TOP
BOTTOM) border=false BackgroundColor=GraphWalls:Color Opaque=
true; ** No border;
entry "o Censored"; ** change legend ;
endlayout;
endif;
endif;
endlayout;
EndGraph;
end;
run;
**** ODS Option;
ods trace on;
ods listing close;
ods path sasuser.templat(read) sashelp.tmplmst(read);
ods graphics on ;
ods rtf file="C:zotherpaper13 ADaM datasets for GraphsSASprogramSurvival Graph.rtf"
bodytitle ;
ods noptitle;
ods select survivalplot;

**** Graph;
proc lifetest data=param ;
time aval*cnsr(1);
strata trt01p;
**** Title & footnote;
title1 h=&height f=&font "Survival Plot";
run;
**** Closing ODS;
options orientation=landscape ;
ods path sashelp.tmplmst(read);
ods rtf close;
ods graphics off;
ods listing;
ods trace off;

The new template is created in proc template step as shown in SAS LOG (below yellow-highlighted) and in Figure 5.
NOTE: STATGRAPH 'Stat.Lifetest.Graphics.ProductLimitSurvival' has been saved to: SASUSER.TEMPLAT

10
Figure 5: The location of the new template of ProductLimitSurvival in Sasuser.templat

ODS PATH(green-highlighted) calls the new template in Sasuser.Templat first before the default template in
Sashelp.Tmplmst. Figure 6 is the customized Kaplan Meier Curve that the new template creates.
Figure 6: Kaplan Meier Curve from modified Graph Template Language
Survival Plot

11
CONCLUSION
The programmer can use AVISITN as a plotting variable in the graphs, but as discussed in the section of
ADVANTAGES AND DISADVANTAGES, there might be a need to create new variables that can work for all
situations. An ADaM Graph sub-team is looking at other variables that can help the programmers prepare more
graph-ready ADaM datasets.
For certain plotting, the programmers need to create the intermediate SAS datasets from ADaM datasets.
Using
ODS GRAPH and GTL, the programmer can create some graphs directly from ADaM datasets without creating the
intermediate SAS datasets.

REFERENCES
The ADaM Implementation Guide, Version V 1.0 (ADaMIG v1.0)
The Analysis Data Model, Version 2.1 (ADaM 2.1)
The ADaM Basic Data Structure for Time-to-Event Analyses
CDER Common Data Standards Issues Document (Version 1.1/December 2011)
Study Data Specifications (July 18, 2012/Version 2.0)
Teplizumab for treatment of type 1 diabetes (Protégé study): 1‐year results from a randomised, placebo‐controlled
trial

ACKNOWLEDGEMENT
We would like to acknowledge and extend my heartfelt gratitude to ADaM Graph subteam – Kent Letoureau, Mario
Widel, Elizabeth Li and Behrang Vali.

CONTACT INFORMATION
Your comments and questions are valued and welcomed. Please contact the author at
Kevin Lee
Cytel, Inc.
Chesterbrook, PA
(610) 994 - 9840
Email:Kevin.lee@cytel.com
Chris Holland
Amgen Inc.
Email:cholland@amgen.com

TRADEMARKS
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS
Institute Inc. in the USA and other countries.
® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their
respective companies.

12
APPENDIX 1. GTL of Stat.Lifetest.Graphics.ProductLimitSurvival in SASUSER.TMPLMST
proc template;
define statgraph Stat.Lifetest.Graphics.ProductLimitSurvival;
dynamic NStrata xName plotAtRisk plotCensored plotCL plotHW plotEP
labelCL labelHW labelEP maxTime method StratumID classAtRisk plotBand
plotTest GroupName yMin Transparency SecondTitle TestName pValue;
BeginGraph;
if (NSTRATA=1)
if (EXISTS(STRATUMID))
entrytitle METHOD " " "Survival Estimate" " for " STRATUMID;
else
entrytitle METHOD " " "Survival Estimate";
endif;
if (PLOTATRISK)
entrytitle "with Number of Subjects at Risk" / textattrs=
GRAPHVALUETEXT;
endif;
layout overlay / xaxisopts=(shortlabel=XNAME offsetmin=.05 linearopts
=(viewmax=MAXTIME)) yaxisopts=(label="Survival Probability"
shortlabel="Survival" linearopts=(viewmin=0 viewmax=1
tickvaluelist=(0 .2 .4 .6 .8 1.0)));
if (PLOTHW=1 AND PLOTEP=0)
bandplot LimitUpper=HW_UCL LimitLower=HW_LCL x=TIME / modelname
="Survival" fillattrs=GRAPHCONFIDENCE name="HW" legendlabel=
LABELHW;
endif;
if (PLOTHW=0 AND PLOTEP=1)
bandplot LimitUpper=EP_UCL LimitLower=EP_LCL x=TIME / modelname
="Survival" fillattrs=GRAPHCONFIDENCE name="EP" legendlabel=
LABELEP;
endif;
if (PLOTHW=1 AND PLOTEP=1)
bandplot LimitUpper=HW_UCL LimitLower=HW_LCL x=TIME / modelname
="Survival" fillattrs=GRAPHDATA1 datatransparency=.55 name="HW"
legendlabel=LABELHW;
bandplot LimitUpper=EP_UCL LimitLower=EP_LCL x=TIME / modelname=
"Survival" fillattrs=GRAPHDATA2 datatransparency=.55 name="EP"
legendlabel=LABELEP;
endif;
if (PLOTCL=1)
if (PLOTHW=1 OR PLOTEP=1)
bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME /
modelname="Survival" display=(outline) outlineattrs=
GRAPHPREDICTIONLIMITS name="CL" legendlabel=LABELCL;
else
bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME /
modelname="Survival" fillattrs=GRAPHCONFIDENCE name="CL"
legendlabel=LABELCL;
endif;
endif;
stepplot y=SURVIVAL x=TIME / name="Survival" rolename=(_tip1=
ATRISK _tip2=EVENT) tip=(y x Time _tip1 _tip2) legendlabel=
"Survival";
if (PLOTCENSORED=1)
scatterplot y=CENSORED x=TIME / markerattrs=(symbol=plus) name=
"Censored" legendlabel="Censored";
endif;
if (PLOTCL=1 OR PLOTHW=1 OR PLOTEP=1)
discretelegend "Censored" "CL" "HW" "EP" / location=outside
halign=center;

13
else
if (PLOTCENSORED=1)
discretelegend "Censored" / location=inside autoalign=(topright
bottomleft);
endif;
endif;
if (PLOTATRISK=1)
innermargin / align=bottom;
blockplot x=TATRISK block=ATRISK / repeatedvalues=true display=
(values) valuehalign=start valuefitpolicy=truncate
labelposition=left labelattrs=GRAPHVALUETEXT valueattrs=
GRAPHDATATEXT (size=7pt) includemissingclass=false;
endinnermargin;
endif;
endlayout;
else
entrytitle METHOD " " "Survival Estimates";
if (EXISTS(SECONDTITLE))
entrytitle SECONDTITLE / textattrs=GRAPHVALUETEXT;
endif;
layout overlay / xaxisopts=(shortlabel=XNAME offsetmin=.05 linearopts
=(viewmax=MAXTIME)) yaxisopts=(label="Survival Probability"
shortlabel="Survival" linearopts=(viewmin=0 viewmax=1
tickvaluelist=(0 .2 .4 .6 .8 1.0)));
if (PLOTHW)
bandplot LimitUpper=HW_UCL LimitLower=HW_LCL x=TIME / group=
STRATUM index=STRATUMNUM modelname="Survival" datatransparency=
Transparency;
endif;
if (PLOTEP)
bandplot LimitUpper=EP_UCL LimitLower=EP_LCL x=TIME / group=
STRATUM index=STRATUMNUM modelname="Survival" datatransparency=
Transparency;
endif;
if (PLOTCL)
if (PLOTBAND)
bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME / group=
STRATUM index=STRATUMNUM modelname="Survival" display=(outline)
;
else
bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME / group=
STRATUM index=STRATUMNUM modelname="Survival" datatransparency=
Transparency;
endif;
endif;
stepplot y=SURVIVAL x=TIME / group=STRATUM index=STRATUMNUM name=
"Survival" rolename=(_tip1=ATRISK _tip2=EVENT) tip=(y x Time
_tip1 _tip2);
if (PLOTCENSORED)
scatterplot y=CENSORED x=TIME / group=STRATUM index=STRATUMNUM
markerattrs=(symbol=plus);
endif;
if (PLOTATRISK)
innermargin / align=bottom;
blockplot x=TATRISK block=ATRISK / class=CLASSATRISK
repeatedvalues=true display=(label values) valuehalign=start
valuefitpolicy=truncate labelposition=left labelattrs=
GRAPHVALUETEXT valueattrs=GRAPHDATATEXT (size=7pt)
includemissingclass=false;
endinnermargin;
endif;

14
DiscreteLegend "Survival" / title=GROUPNAME location=outside;
if (PLOTCENSORED)
if (PLOTTEST)
layout gridded / rows=2 autoalign=(TOPRIGHT BOTTOMLEFT TOP
BOTTOM) border=true BackgroundColor=GraphWalls:Color Opaque=
true;
entry "+ Censored";
if (PVALUE < .0001)
entry TESTNAME " p " eval (PUT(PVALUE, PVALUE6.4));
else
entry TESTNAME " p=" eval (PUT(PVALUE, PVALUE6.4));
endif;
endlayout;
else
layout gridded / rows=1 autoalign=(TOPRIGHT BOTTOMLEFT TOP
BOTTOM) border=true BackgroundColor=GraphWalls:Color Opaque=
true;
entry "+ Censored";
endlayout;
endif;
else
if (PLOTTEST)
layout gridded / rows=1 autoalign=(TOPRIGHT BOTTOMLEFT TOP
BOTTOM) border=true BackgroundColor=GraphWalls:Color Opaque=
true;
if (PVALUE < .0001)
entry TESTNAME " p " eval (PUT(PVALUE, PVALUE6.4));
else
entry TESTNAME " p=" eval (PUT(PVALUE, PVALUE6.4));
endif;
endlayout;
endif;
endif;
endlayout;
endif;
EndGraph;
end;
run;

15

More Related Content

What's hot

Basics Of SAS Programming Language
Basics Of SAS Programming LanguageBasics Of SAS Programming Language
Basics Of SAS Programming Languageguest2160992
 
Guideline for high-quality diagnostic and prognostic applications of AI in he...
Guideline for high-quality diagnostic and prognostic applications of AI in he...Guideline for high-quality diagnostic and prognostic applications of AI in he...
Guideline for high-quality diagnostic and prognostic applications of AI in he...Maarten van Smeden
 
Biological Database Systems
Biological Database SystemsBiological Database Systems
Biological Database SystemsDenis Shestakov
 
2.4 Scatterplots, correlation, and regression
2.4 Scatterplots, correlation, and regression2.4 Scatterplots, correlation, and regression
2.4 Scatterplots, correlation, and regressionLong Beach City College
 
Simple understanding of biostatistics
Simple understanding of biostatisticsSimple understanding of biostatistics
Simple understanding of biostatisticsHamdi Alhakimi
 
Introduction to Computational Vaccinology and iVAX by EpiVax
Introduction to Computational Vaccinology and iVAX by EpiVaxIntroduction to Computational Vaccinology and iVAX by EpiVax
Introduction to Computational Vaccinology and iVAX by EpiVaxAnnie De Groot
 
Time Series Analysis and Mining with R
Time Series Analysis and Mining with RTime Series Analysis and Mining with R
Time Series Analysis and Mining with RYanchang Zhao
 
mRNA-1273 (Moderna COVID vaccine)
mRNA-1273 (Moderna COVID vaccine)mRNA-1273 (Moderna COVID vaccine)
mRNA-1273 (Moderna COVID vaccine)Serena Hijazeen
 
STRING/STITCH tutorial
STRING/STITCH tutorialSTRING/STITCH tutorial
STRING/STITCH tutorialbiocs
 
multiple sequence alignment
multiple sequence alignmentmultiple sequence alignment
multiple sequence alignmentharshita agarwal
 
Confidence interval & probability statements
Confidence interval & probability statements Confidence interval & probability statements
Confidence interval & probability statements DrZahid Khan
 
Odds ratios (Basic concepts)
Odds ratios (Basic concepts)Odds ratios (Basic concepts)
Odds ratios (Basic concepts)Tarekk Alazabee
 

What's hot (20)

SAS Functions
SAS FunctionsSAS Functions
SAS Functions
 
Basics Of SAS Programming Language
Basics Of SAS Programming LanguageBasics Of SAS Programming Language
Basics Of SAS Programming Language
 
Biostatistics
BiostatisticsBiostatistics
Biostatistics
 
Blast
BlastBlast
Blast
 
Guideline for high-quality diagnostic and prognostic applications of AI in he...
Guideline for high-quality diagnostic and prognostic applications of AI in he...Guideline for high-quality diagnostic and prognostic applications of AI in he...
Guideline for high-quality diagnostic and prognostic applications of AI in he...
 
Biological Database Systems
Biological Database SystemsBiological Database Systems
Biological Database Systems
 
Cambridge structural database
Cambridge structural databaseCambridge structural database
Cambridge structural database
 
Biological Databases
Biological DatabasesBiological Databases
Biological Databases
 
2.4 Scatterplots, correlation, and regression
2.4 Scatterplots, correlation, and regression2.4 Scatterplots, correlation, and regression
2.4 Scatterplots, correlation, and regression
 
Simple understanding of biostatistics
Simple understanding of biostatisticsSimple understanding of biostatistics
Simple understanding of biostatistics
 
Introduction to Computational Vaccinology and iVAX by EpiVax
Introduction to Computational Vaccinology and iVAX by EpiVaxIntroduction to Computational Vaccinology and iVAX by EpiVax
Introduction to Computational Vaccinology and iVAX by EpiVax
 
Time Series Analysis and Mining with R
Time Series Analysis and Mining with RTime Series Analysis and Mining with R
Time Series Analysis and Mining with R
 
mRNA-1273 (Moderna COVID vaccine)
mRNA-1273 (Moderna COVID vaccine)mRNA-1273 (Moderna COVID vaccine)
mRNA-1273 (Moderna COVID vaccine)
 
Crispr
CrisprCrispr
Crispr
 
STRING/STITCH tutorial
STRING/STITCH tutorialSTRING/STITCH tutorial
STRING/STITCH tutorial
 
multiple sequence alignment
multiple sequence alignmentmultiple sequence alignment
multiple sequence alignment
 
Confidence interval & probability statements
Confidence interval & probability statements Confidence interval & probability statements
Confidence interval & probability statements
 
Odds ratios (Basic concepts)
Odds ratios (Basic concepts)Odds ratios (Basic concepts)
Odds ratios (Basic concepts)
 
BIOSTATISTICS
BIOSTATISTICSBIOSTATISTICS
BIOSTATISTICS
 
P value
P valueP value
P value
 

Similar to ADaM datasets for graphs (paper)

Introducing SAS Forecast Studio (2005)
Introducing SAS Forecast Studio (2005)Introducing SAS Forecast Studio (2005)
Introducing SAS Forecast Studio (2005)Brenda Wolfe
 
A Comparative Study for Anomaly Detection in Data Mining
A Comparative Study for Anomaly Detection in Data MiningA Comparative Study for Anomaly Detection in Data Mining
A Comparative Study for Anomaly Detection in Data MiningIRJET Journal
 
Smart E-Logistics for SCM Spend Analysis
Smart E-Logistics for SCM Spend AnalysisSmart E-Logistics for SCM Spend Analysis
Smart E-Logistics for SCM Spend AnalysisIRJET Journal
 
Forecasting Capacity Issues in Stateful Systems: A Proactive Approach
Forecasting Capacity Issues in Stateful Systems: A Proactive ApproachForecasting Capacity Issues in Stateful Systems: A Proactive Approach
Forecasting Capacity Issues in Stateful Systems: A Proactive ApproachIRJET Journal
 
Large Scale Automatic Forecasting for Millions of Forecasts
Large Scale Automatic Forecasting for Millions of ForecastsLarge Scale Automatic Forecasting for Millions of Forecasts
Large Scale Automatic Forecasting for Millions of ForecastsAjay Ohri
 
News article classification using Naive Bayes Algorithm
News article classification using Naive Bayes AlgorithmNews article classification using Naive Bayes Algorithm
News article classification using Naive Bayes AlgorithmIRJET Journal
 
A Systematic Review of ADaM IG Interpretation
A Systematic Review of ADaM IG InterpretationA Systematic Review of ADaM IG Interpretation
A Systematic Review of ADaM IG InterpretationAngelo Tinazzi
 
Industrial Examples - Process Capability in Total Quality Management
Industrial Examples - Process Capability in Total Quality ManagementIndustrial Examples - Process Capability in Total Quality Management
Industrial Examples - Process Capability in Total Quality ManagementDr.Raja R
 
IRJET- Overview of Forecasting Techniques
IRJET- Overview of Forecasting TechniquesIRJET- Overview of Forecasting Techniques
IRJET- Overview of Forecasting TechniquesIRJET Journal
 
A Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, Cytel
A Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, CytelA Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, Cytel
A Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, CytelCytel
 
Time Series Weather Forecasting Techniques: Literature Survey
Time Series Weather Forecasting Techniques: Literature SurveyTime Series Weather Forecasting Techniques: Literature Survey
Time Series Weather Forecasting Techniques: Literature SurveyIRJET Journal
 
Time Series Anomaly Detection with .net and Azure
Time Series Anomaly Detection with .net and AzureTime Series Anomaly Detection with .net and Azure
Time Series Anomaly Detection with .net and AzureMarco Parenzan
 
A statistical approach to predict flight delay
A statistical approach to predict flight delayA statistical approach to predict flight delay
A statistical approach to predict flight delayiDTechTechnologies
 
Stock Market Prediction using Long Short-Term Memory
Stock Market Prediction using Long Short-Term MemoryStock Market Prediction using Long Short-Term Memory
Stock Market Prediction using Long Short-Term MemoryIRJET Journal
 
Svm Classifier Algorithm for Data Stream Mining Using Hive and R
Svm Classifier Algorithm for Data Stream Mining Using Hive and RSvm Classifier Algorithm for Data Stream Mining Using Hive and R
Svm Classifier Algorithm for Data Stream Mining Using Hive and RIRJET Journal
 
ESM Best Practices: Trends
ESM Best Practices: TrendsESM Best Practices: Trends
ESM Best Practices: TrendsProtect724
 
Software Effort Measurement Using Abstraction Techniques
Software Effort Measurement Using Abstraction TechniquesSoftware Effort Measurement Using Abstraction Techniques
Software Effort Measurement Using Abstraction Techniquesaliraza786
 
Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...
Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...
Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...IRJET Journal
 

Similar to ADaM datasets for graphs (paper) (20)

Introducing SAS Forecast Studio (2005)
Introducing SAS Forecast Studio (2005)Introducing SAS Forecast Studio (2005)
Introducing SAS Forecast Studio (2005)
 
A Comparative Study for Anomaly Detection in Data Mining
A Comparative Study for Anomaly Detection in Data MiningA Comparative Study for Anomaly Detection in Data Mining
A Comparative Study for Anomaly Detection in Data Mining
 
Smart E-Logistics for SCM Spend Analysis
Smart E-Logistics for SCM Spend AnalysisSmart E-Logistics for SCM Spend Analysis
Smart E-Logistics for SCM Spend Analysis
 
Forecasting Capacity Issues in Stateful Systems: A Proactive Approach
Forecasting Capacity Issues in Stateful Systems: A Proactive ApproachForecasting Capacity Issues in Stateful Systems: A Proactive Approach
Forecasting Capacity Issues in Stateful Systems: A Proactive Approach
 
Large Scale Automatic Forecasting for Millions of Forecasts
Large Scale Automatic Forecasting for Millions of ForecastsLarge Scale Automatic Forecasting for Millions of Forecasts
Large Scale Automatic Forecasting for Millions of Forecasts
 
Time_Series_Assignment
Time_Series_AssignmentTime_Series_Assignment
Time_Series_Assignment
 
News article classification using Naive Bayes Algorithm
News article classification using Naive Bayes AlgorithmNews article classification using Naive Bayes Algorithm
News article classification using Naive Bayes Algorithm
 
A Systematic Review of ADaM IG Interpretation
A Systematic Review of ADaM IG InterpretationA Systematic Review of ADaM IG Interpretation
A Systematic Review of ADaM IG Interpretation
 
Industrial Examples - Process Capability in Total Quality Management
Industrial Examples - Process Capability in Total Quality ManagementIndustrial Examples - Process Capability in Total Quality Management
Industrial Examples - Process Capability in Total Quality Management
 
IRJET- Overview of Forecasting Techniques
IRJET- Overview of Forecasting TechniquesIRJET- Overview of Forecasting Techniques
IRJET- Overview of Forecasting Techniques
 
A Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, Cytel
A Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, CytelA Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, Cytel
A Systematic Review of ADaM IG Interpretation presented by Angelo Tinazzi, Cytel
 
rscript_paper-1
rscript_paper-1rscript_paper-1
rscript_paper-1
 
Time Series Weather Forecasting Techniques: Literature Survey
Time Series Weather Forecasting Techniques: Literature SurveyTime Series Weather Forecasting Techniques: Literature Survey
Time Series Weather Forecasting Techniques: Literature Survey
 
Time Series Anomaly Detection with .net and Azure
Time Series Anomaly Detection with .net and AzureTime Series Anomaly Detection with .net and Azure
Time Series Anomaly Detection with .net and Azure
 
A statistical approach to predict flight delay
A statistical approach to predict flight delayA statistical approach to predict flight delay
A statistical approach to predict flight delay
 
Stock Market Prediction using Long Short-Term Memory
Stock Market Prediction using Long Short-Term MemoryStock Market Prediction using Long Short-Term Memory
Stock Market Prediction using Long Short-Term Memory
 
Svm Classifier Algorithm for Data Stream Mining Using Hive and R
Svm Classifier Algorithm for Data Stream Mining Using Hive and RSvm Classifier Algorithm for Data Stream Mining Using Hive and R
Svm Classifier Algorithm for Data Stream Mining Using Hive and R
 
ESM Best Practices: Trends
ESM Best Practices: TrendsESM Best Practices: Trends
ESM Best Practices: Trends
 
Software Effort Measurement Using Abstraction Techniques
Software Effort Measurement Using Abstraction TechniquesSoftware Effort Measurement Using Abstraction Techniques
Software Effort Measurement Using Abstraction Techniques
 
Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...
Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...
Comparative Study on the Prediction of Remaining Useful Life of an Aircraft E...
 

More from Kevin Lee

Leading into the Unknown? Yes, we need Change Management Leadership
Leading into the Unknown? Yes, we need Change Management LeadershipLeading into the Unknown? Yes, we need Change Management Leadership
Leading into the Unknown? Yes, we need Change Management LeadershipKevin Lee
 
How to create SDTM DM.xpt using Python v1.1
How to create SDTM DM.xpt using Python v1.1How to create SDTM DM.xpt using Python v1.1
How to create SDTM DM.xpt using Python v1.1Kevin Lee
 
Enterprise-level Transition from SAS to Open-source Programming for the whole...
Enterprise-level Transition from SAS to Open-source Programming for the whole...Enterprise-level Transition from SAS to Open-source Programming for the whole...
Enterprise-level Transition from SAS to Open-source Programming for the whole...Kevin Lee
 
How I became ML Engineer
How I became ML Engineer How I became ML Engineer
How I became ML Engineer Kevin Lee
 
Artificial Intelligence in Pharmaceutical Industry
Artificial Intelligence in Pharmaceutical IndustryArtificial Intelligence in Pharmaceutical Industry
Artificial Intelligence in Pharmaceutical IndustryKevin Lee
 
Tell stories with jupyter notebook
Tell stories with jupyter notebookTell stories with jupyter notebook
Tell stories with jupyter notebookKevin Lee
 
Perfect partnership - machine learning and CDISC standard data
Perfect partnership - machine learning and CDISC standard dataPerfect partnership - machine learning and CDISC standard data
Perfect partnership - machine learning and CDISC standard dataKevin Lee
 
Machine Learning : why we should know and how it works
Machine Learning : why we should know and how it worksMachine Learning : why we should know and how it works
Machine Learning : why we should know and how it worksKevin Lee
 
Big data for SAS programmers
Big data for SAS programmersBig data for SAS programmers
Big data for SAS programmersKevin Lee
 
Big data in pharmaceutical industry
Big data in pharmaceutical industryBig data in pharmaceutical industry
Big data in pharmaceutical industryKevin Lee
 
How FDA will reject non compliant electronic submission
How FDA will reject non compliant electronic submissionHow FDA will reject non compliant electronic submission
How FDA will reject non compliant electronic submissionKevin Lee
 
End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...
End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...
End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...Kevin Lee
 
Are you ready for Dec 17, 2016 - CDISC compliant data?
Are you ready for Dec 17, 2016 - CDISC compliant data?Are you ready for Dec 17, 2016 - CDISC compliant data?
Are you ready for Dec 17, 2016 - CDISC compliant data?Kevin Lee
 
SAS integration with NoSQL data
SAS integration with NoSQL dataSAS integration with NoSQL data
SAS integration with NoSQL dataKevin Lee
 
Introduction of semantic technology for SAS programmers
Introduction of semantic technology for SAS programmersIntroduction of semantic technology for SAS programmers
Introduction of semantic technology for SAS programmersKevin Lee
 
Standards Metadata Management (system)
Standards Metadata Management (system)Standards Metadata Management (system)
Standards Metadata Management (system)Kevin Lee
 
Data centric SDLC for automated clinical data development
Data centric SDLC for automated clinical data developmentData centric SDLC for automated clinical data development
Data centric SDLC for automated clinical data developmentKevin Lee
 
Beyond regulatory submission - standards metadata management
Beyond regulatory submission  - standards metadata managementBeyond regulatory submission  - standards metadata management
Beyond regulatory submission - standards metadata managementKevin Lee
 
Two different use cases to obtain best response using recist 11 sdtm and a ...
Two different use cases to obtain best response using recist 11   sdtm and a ...Two different use cases to obtain best response using recist 11   sdtm and a ...
Two different use cases to obtain best response using recist 11 sdtm and a ...Kevin Lee
 
Metadata becomes alive via a web service between MDR and SAS
Metadata becomes alive via a web service between MDR and SASMetadata becomes alive via a web service between MDR and SAS
Metadata becomes alive via a web service between MDR and SASKevin Lee
 

More from Kevin Lee (20)

Leading into the Unknown? Yes, we need Change Management Leadership
Leading into the Unknown? Yes, we need Change Management LeadershipLeading into the Unknown? Yes, we need Change Management Leadership
Leading into the Unknown? Yes, we need Change Management Leadership
 
How to create SDTM DM.xpt using Python v1.1
How to create SDTM DM.xpt using Python v1.1How to create SDTM DM.xpt using Python v1.1
How to create SDTM DM.xpt using Python v1.1
 
Enterprise-level Transition from SAS to Open-source Programming for the whole...
Enterprise-level Transition from SAS to Open-source Programming for the whole...Enterprise-level Transition from SAS to Open-source Programming for the whole...
Enterprise-level Transition from SAS to Open-source Programming for the whole...
 
How I became ML Engineer
How I became ML Engineer How I became ML Engineer
How I became ML Engineer
 
Artificial Intelligence in Pharmaceutical Industry
Artificial Intelligence in Pharmaceutical IndustryArtificial Intelligence in Pharmaceutical Industry
Artificial Intelligence in Pharmaceutical Industry
 
Tell stories with jupyter notebook
Tell stories with jupyter notebookTell stories with jupyter notebook
Tell stories with jupyter notebook
 
Perfect partnership - machine learning and CDISC standard data
Perfect partnership - machine learning and CDISC standard dataPerfect partnership - machine learning and CDISC standard data
Perfect partnership - machine learning and CDISC standard data
 
Machine Learning : why we should know and how it works
Machine Learning : why we should know and how it worksMachine Learning : why we should know and how it works
Machine Learning : why we should know and how it works
 
Big data for SAS programmers
Big data for SAS programmersBig data for SAS programmers
Big data for SAS programmers
 
Big data in pharmaceutical industry
Big data in pharmaceutical industryBig data in pharmaceutical industry
Big data in pharmaceutical industry
 
How FDA will reject non compliant electronic submission
How FDA will reject non compliant electronic submissionHow FDA will reject non compliant electronic submission
How FDA will reject non compliant electronic submission
 
End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...
End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...
End to end standards driven oncology study (solid tumor, Immunotherapy, Leuke...
 
Are you ready for Dec 17, 2016 - CDISC compliant data?
Are you ready for Dec 17, 2016 - CDISC compliant data?Are you ready for Dec 17, 2016 - CDISC compliant data?
Are you ready for Dec 17, 2016 - CDISC compliant data?
 
SAS integration with NoSQL data
SAS integration with NoSQL dataSAS integration with NoSQL data
SAS integration with NoSQL data
 
Introduction of semantic technology for SAS programmers
Introduction of semantic technology for SAS programmersIntroduction of semantic technology for SAS programmers
Introduction of semantic technology for SAS programmers
 
Standards Metadata Management (system)
Standards Metadata Management (system)Standards Metadata Management (system)
Standards Metadata Management (system)
 
Data centric SDLC for automated clinical data development
Data centric SDLC for automated clinical data developmentData centric SDLC for automated clinical data development
Data centric SDLC for automated clinical data development
 
Beyond regulatory submission - standards metadata management
Beyond regulatory submission  - standards metadata managementBeyond regulatory submission  - standards metadata management
Beyond regulatory submission - standards metadata management
 
Two different use cases to obtain best response using recist 11 sdtm and a ...
Two different use cases to obtain best response using recist 11   sdtm and a ...Two different use cases to obtain best response using recist 11   sdtm and a ...
Two different use cases to obtain best response using recist 11 sdtm and a ...
 
Metadata becomes alive via a web service between MDR and SAS
Metadata becomes alive via a web service between MDR and SASMetadata becomes alive via a web service between MDR and SAS
Metadata becomes alive via a web service between MDR and SAS
 

Recently uploaded

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 

Recently uploaded (20)

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 

ADaM datasets for graphs (paper)

  • 1. PharmaSUG 2013 – PO05 ADaM Datasets for Graphs Kevin Lee, Cytel, Inc., Chesterbrook, PA Chris Holland, Amgen, Rockville, MD ABSTRACT The paper is intended for clinical trial SAS® programmers who create graphs using ADaM (Analysis Data Model) datasets. ADaM datasets are analysis-ready, so programmers need to apply CDISC principles and guidelines to create them, while at the same time being mindful of their intent as plotting datasets. The paper will discuss the basic principles of graph creation using ADaM datasets. We propose the use of PARAM, AVAL, AVISIT and AVISITN for plotting. The paper will show in an example how to use AVAL for the y-axis and AVISITN for the x-axis for simple plotting. We will discuss the role of AVISITN as a numeric representation of AVISIT and propose the use of AVISITN for plotting purposes. We will also discuss some of the graphs created by features of SAS/STAT, ODS GRAPH and Graph Template Language (GTL). This will eliminate some of the intermediate SAS datasets that SAS programmers need to create for graph creations, which means that the graphs can be created directly from ADaM without the intermediate datasets. Examples using SAS/STAT, ODS GRAPH and GTL will be provided. INTRODUCTION The CDER Common Data Standards Common Issues document (http://www.fda.gov/downloads/Drugs/DevelopmentApprovalProcess/FormsSubmissionRequirements/ElectronicSub missions/UCM254113.pdf) states the following with regard to ADaM data: One of the goals of standardizing analysis datasets using ADaM is to simplify the programming steps necessary for performing an analysis. Analysis datasets with repeated measures data should include a numeric time variable (adequately documented in the define file) that measures time from randomization in real time (e.g. Week 8 would be represented as an 8). The reason for this request is related to a common analysis, the portrayal of data over the duration of a study. This data is often shown as means or medians by treatment group by time on study. This time on study is defined by windowed visits which may be represented in ADaM datasets as AVISIT, a character variable. AVISIT is adequate for subsetting the data but this variable is not a measure of time in calendar time so it is not sufficient for plotting data where the xaxis measures real time. In addition to this CDER-specific requirement, the FDA Study Data Specifications document (http://www.fda.gov/downloads/ForIndustry/DataStandards/StudyDataStandards/UCM312964.pdf) includes the following similar piece of guidance: When a dataset contains multiple records per subject, a variable for relative day of measurement or event and variables for visit should be included. In addition to a protocol-scheduled visit variable, include at least two timing variables; a character variable describing the visit (e.g. WEEK 8) and a corresponding numeric variable (e.g. 8). These two variables are measures of time from randomization. A logical ADaM variable that can be used to address this common data issue is AVISITN, which is a numeric representation of AVISIT. The ADaM Implementation Guide v1.0 provides the following notes regarding AVISITN: A numeric representation of AVISIT. This may be a protocol visit number, a week or cycle number, an analysis visit number, or any other number logically related to AVISIT or useful for sorting that is needed for analysis. Within a parameter, there is a one-to-one mapping between AVISITN and AVISIT so that AVISITN has the same value for each distinct AVISIT. In the event that a record does not fall within any predefined analysis timepoint window, AVISITN can be populated in any way that the sponsor chooses to indicate this fact (e.g., may be null). Values of AVISITN are sponsor-defined. As a means of addressing this need of reviewers, statistical programmers, and study statisticians alike, we propose the use of AVISITN to represent a unit of time associated with the planned corresponding visit. In addition to representing a unit of time that can be used for plotting, the values can be used for sorting and have the added benefit of an intuitive meaning without the need for a protocol, a corresponding AVISIT value, or some other documentation that would be needed to interpret the meaning of coded values. Using an existing ADaM variable for this purpose obviates the need for a new, non-standard variable that would require additional documentation, programming, and quality control. Note however that although the use of AVISITN for plotting purposes may work for a number of clinical trial settings, it may not work for all situations. 1
  • 2. It should be pointed out that the use of ADY is appropriate for patient-level plots only, such as scatter plots. The current “unmet need” with the ADaM standard is a time variable that can be used for grouping records from the same analysis visit from which descriptive statistics for each treatment group, cohort, subgroup, etc. can be calculated. EXAMPLE USING AVISITN AS A PLOTTING VARIALBE The following example is partially based on a real-life Phase 3 study that can be read about at: http://www.macrogenics.com/content/file/Lancet28JUN2011F.pdf Consider a randomized study with daily dosing of an experimental therapy and placebo for 14 days followed by an observation period out to one year after randomization. The visit schedule includes assessments for safety on Study Days 1-7, 10, 14, 28, 91, 182, 273, and 365. There is also a Screening visit that should occur 2-3 weeks before the randomization visit and an End of Study visit where safety data are recorded. Efficacy data are also captured at some of these visits. The values for VISIT and VISITNUM from the raw (SDTM) data for this study are displayed in Table 1. Table 1: VISITNUM and VISIT values VISITNUM VISIT -1 SCREENING 1 DAY 1 2 DAY 2 3 DAY 3 4 DAY 4 5 DAY 5 6 DAY 6 7 DAY 7 8 DAY 10 9 DAY 14 10 MONTH 1 11 MONTH 3 12 MONTH 6 13 MONTH 9 14 YEAR 1 99 END OF STUDY In order to make the visit number usable for plotting purposes, AVISITN should be assigned to represent the study day. The values of AVISIT should be assigned to represent whatever is preferred for display purposes. In this case we will assume that it is preferred to have AVISIT display both the target study day (if applicable) and the month and/or year. Table 2 displays the same information as Table 1 plus values for AVISITN and AVISIT: Table 2: VISITNUM, VISIT, AVISITN, and AVISIT values VISITNUM VISIT -1 SCREENING 1 DAY 1 2 DAY 2 3 DAY 3 4 DAY 4 5 DAY 5 6 DAY 6 7 DAY 7 8 DAY 10 9 DAY 14 10 MONTH 1 11 MONTH 3 12 MONTH 6 13 MONTH 9 14 YEAR 1 99 END OF STUDY AVISITN -21 1 2 3 4 5 6 7 10 14 28 91 182 273 365 999 AVISIT Screening Day 1 Day 2 Day 3 Day 4 Day 5 Day 6 Day 7 Day 10 Day 14 Day 28 Day 91/Month 3 Day 182/Month 6 Day 273/Month 9 Day 365/Month 12 End of Study The value of -21 was chosen for AVISITN and the Screening visit because this represents the expected mode (most common value) for the timing of the screening visit and was considered logical for plotting purposes. 2
  • 3. The value of 999 was chosen for the End of Study visit so that the value would not be confused with a study day. Plotting this value might require a re-assignment of the value if it is desired to have it appear immediately after the last displayed visit on a time scale. Since the last displayed visit can depend on what is being plotted, there is no universal value that would work for all plots on a time scale. Examples of some actual plots from the study that this example is based on are presented in Figure 1 and Figure 2 below. Figure 1: Sample Plot of Safety Data Using AVISITN for the x-axis of time Figure 2: Sample Plot of Efficacy Data Using AVISITN for the x-axis of time 3
  • 4. ADVANTAGES AND DISADVANTAGES Advantages and disadvantages to this approach relative to one where a new variable is instead applied at all times are provided in the table below: Using AVISITN Whenever Feasible Advantages Disadvantages May not work for all Works for the vast studies or situations, in majority of situations which case an additional variable is needed Meets resistance with Applies an intuitive value those who use AVISITN to AVISITN rather than a according to certain coded value that can be company-specific hard to remember or standards (e.g. equal to interpret VISITNUM) Reduces the need to add additional variables to a data set Creates a standard for the use of AVISITN Using a New Variable for all Situations Advantages Disadvantages Can be used for all situations where the concept is relevant Creates additional work and documentation Allows continued use of AVISITN in a nonstandard way Adds additional nonstandard variables to a data set Despite the many advantages of using AVISITN as a plotting variable, the fact that this will not work for all situations does warrant consideration of a new set of ADaM variables that are specifically designed for plotting purposes. To this end, there is currently an ADaM sub-team working on a solution to this. It remains to be seen whether AVISITN will be considered an acceptable option for plotting on a time scale after this new set of variables have been proposed 4
  • 5. HOW TO USE ADaM DATASET FOR GRAPH USING SAS ODS AND SAS/STAT The below Time to Event ADaM dataset can create a Kaplan Meier Curve without the intermediate datasets. The table 3 and 4 are the metadata of ADaM dataset of ADTTEOS. Table 5 is the final ADaM dataset of ADTTEOS. Table 3: Analysis Dataset Metadata for ADTTEOS Dataset Dataset Dataset Name Description Location ADTTEOS Overall Survival Analysis Dataset adtteos.xpt Dataset Structure Class of Dataset Key Variables of Dataset one record per subject per parameter per analysis visit USUBJID, PARAMCD, AVISITN BDS Documentation c-adtteos.txt Table 4: Analysis Variable Metadata including Analysis Parameter Value-Level Metadata for ADTTEOS Dataset Parameter Variable Variable Display Variable Label Codelist / Controlled Terms Name Identifier Name Type Format Source / Derivation ADTTEOS *ALL* USUBJID Unique Subject Identifier text $20 ADSL.USUBJID ADTTEOS *ALL* SITEID Site ID text $20 ADSL.SITEID ADTTEOS *ALL* SEX Sex text $20 M, F ADSL.SEX ADTTEOS *ALL* ITTFL Intent-to-Treat Population Flag text $1 Y, N ADSL.ITTFL ADTTEOS *ALL* TRTPN Planned Treatment (N) integer 1.0 1 = Placebo, 2 = Study Drug ADSL.TRTPN ADTTEOS *ALL* TRTP Planned Treatment text $20 Placebo, Study Drug ADSL.TRTP ADTTEOS PARAMCD PARAMCD Parameter Code text $8 DEATH ADTTEOS *ALL* PARAM Parameter text $50 Days to Death ADTTEOS *ALL* PARAMTYP Parameter Type text $50 DERIVED ADTTEOS *ALL* AVISITN Analysis Visit (N) integer 3.0 1 = Treatment Period ADTTEOS *ALL* AVISIT Analysis Visit text $20 Treatment Period ADTTEOS *ALL* AVAL Analysis Value float 8.2 ADT – STARDT + 1 ADTTEOS *ALL* STARTDT Time to Event Origin Date for Subject integer DDMONYY SAS Numeric version of DM.RFSTDTC ADTTEOS *ALL* ADT Analysis Date integer DDMONYY SAS numeric version of DS.DSDTC, last event or finding date ADTTEOS *ALL* CNSR Censor integer 8.0 5
  • 6. Dataset Name ADTTEOS Parameter Identifier Variable Name *ALL* EVNTDESC Variable Label Event or Censoring Description Variable Type Display Format text $40 PARAM AVAL Codelist / Controlled Terms Source / Derivation DS.DSDECOD Table 5: Final ADaM dataset of ADTTEOS USUBJID SITEID ITTFL TRTP PARAMCD 001-01-001 01 Y Study Drug DEATH Days to Death 157 2011-01-04 2011-06-10 1 COMPLETED STUDY 001-01-002 01 Y Placebo DEATH Days to Death 116 2011-02-01 2011-05-28 1 LOST TO FOLLOW- UP 001-01-003 01 Y Placebo DEATH Days to Death 88 2011-02-25 2011-05-04 0 DEATH 001-01-004 01 Y Study Drug DEATH Days to Death 102 2011-03-20 2011-06-03 1 ONGOING 001-01-005 01 Y Study Drug DEATH Days to Death 101 2011-03-26 2011-07-05 1 ONGOING STARTDT ADT …… In the normal setting, a programmer creates the intermediate SAS datasets of _SURV like below SAS codes. proc lifetest data=param out=_surv; time aval*cnsr(1); strata trtp; run; **** Title & footnote; title1 "Survival Plot"; 6 CNSR EVNTDESC
  • 7. Table 6: The Intermediate dataset of _SURV for a Kaplan Meier Curve TRP AVAL _CENSOR_ SURVIVAL SDF_LCL SDF_UCL STRATUM Placebo 0 . 1 1 1 1 Placebo 1 0 0.939189 0.886397 0.967887 1 Placebo 3 0 0.898649 0.837527 0.937622 1 Study Drug 0 . 1 1 1 2 Study Drug 2 0 0.960526 0.914251 0.98207 2 Study Drug 3 1 0.960526 . . 2 ….. …… A programmer can create a Kaplan Meier Curve using this intermediate temporary dataset using stepwise function in SAS/GRAPH. But, the new ODS function can help the programmer to create a Kaplan Meier Curve directly from ADaM dataset. The following SAS codes will provide a simple way to create a Kaplan Meier Curve. SAS CODES AND LOG A programmer can write below SAS codes for a simple Kaplan Meier Curve utilizing ODS GRAPH and SAS/STAT. **** Prepare Graph Environment; options orientation=landscape missing="" nonumber nodate; **** ODS Option; ods trace on; ods listing close; ods path sashelp.tmplmst(read); ods graphics on ; ods rtf file="C:zotherpaper13 ADaM datasets for GraphsSASprogramSurvival Graph.rtf" bodytitle ; ods noptitle; ods select survivalplot; **** Graph; proc lifetest data=param ; time aval*cnsr(1); strata trt01p; run; **** Title & footnote; title1 "Survival Plot"; **** Closing ODS; options orientation=landscape ; ods path sashelp.tmplmst(read); ods rtf close; ods graphics off; ods listing; ods trace off; A programmer selects ODS SELECT SURVIVALPLOT as highlighted. SURVIVALPLOT was added to the ODS rtf output. It Stat.Lifetest.Graphics.ProductLimitSurvival. 7 The below SAS log shows that also shows that template is
  • 8. Output Added: ------------Name: SurvivalPlot Label: Survival Curves Template: Stat.Lifetest.Graphics.ProductLimitSurvival Path: Lifetest.SurvivalPlot ------------- OUTPUT The above SAS codes create a simple Kaplan Meier Curve as seen in Figure 3. Figure 3 is a default Kaplan Meier Curve from the template of ProductLimitSurvival. If a programmer wants to create more customized graphs, the programmer needs to create the new template, which will be discussed in next sections. Figure 3: The Kaplan Meier Curve using ProductLimitSurvival from Sashelp.tmplmst GRAPH TEMPLATE LANGUAGE IN RESULTS AREA In the yellow-highlighted, a programmer can find the location of template of ProductLimitSurvival template. First, go to “Results” Window, right-click on “Results” and select “Template”. “Sashelp.Tmplmst”, “Stat”, “Lifetest”, “Graphics” and “ProductLimitSurvival”. 8 Then, as shown below, go to
  • 9. Figure 4: The location of default template of ProductLimitSurvival in Results Window Left-click on “ProductLimitSurvival”, a programmer can find the GTL(Graph Template Language) for the template (Please see the Appendix 1). The programmer is able to modify this default template for more customized graphs. The programmer can create the new template using GTL. Below template is created by modifying GTL from the default template. **** Prepare Graph Environment; options orientation=landscape missing="" nonumber nodate; ** Set margins for RTF destination ; proc template; **** New Survival Plot Template; define statgraph Stat.Lifetest.Graphics.ProductLimitSurvival; dynamic NStrata xName plotAtRisk plotCensored plotCL plotHW plotEP labelCL labelHW labelEP maxTime method StratumID classAtRisk plotBand plotTest GroupName yMin Transparency SecondTitle TestName pValue; BeginGraph; entrytitle "" ; ** missing titles; layout overlay / xaxisopts=(label="Time(Days) on Study" shortlabel=XNAME offsetmin=.05 linearopts=(viewmax=MAXTIME)) yaxisopts=(label="Probability of Number of Events" linearopts=(viewmin=0 viewmax=1 tickvaluelist=(0.0 0.2 0.4 0.5 0.6 0.8 1.0))); ** New tickets and label; ** Add the new lines; lineparm x=0 y =0.5 slope=0 / extend = true lineattrs=(color=gray thickness=0.5px); 9
  • 10. ** New title in the legend; DiscreteLegend "Survival" / title="Treatment Group" location=outside; stepplot y=SURVIVAL x=TIME / group=STRATUM index=STRATUMNUM name= "Survival" rolename=(_tip1=ATRISK _tip2=EVENT) tip=(y x Time _tip1 _tip2); if (PLOTCENSORED) scatterplot y=CENSORED x=TIME / group=STRATUM index=STRATUMNUM markerattrs=(symbol=circle); ** circle symbol; if (PLOTTEST) else layout gridded / rows=1 autoalign=(TOPRIGHT BOTTOMLEFT TOP BOTTOM) border=false BackgroundColor=GraphWalls:Color Opaque= true; ** No border; entry "o Censored"; ** change legend ; endlayout; endif; endif; endlayout; EndGraph; end; run; **** ODS Option; ods trace on; ods listing close; ods path sasuser.templat(read) sashelp.tmplmst(read); ods graphics on ; ods rtf file="C:zotherpaper13 ADaM datasets for GraphsSASprogramSurvival Graph.rtf" bodytitle ; ods noptitle; ods select survivalplot; **** Graph; proc lifetest data=param ; time aval*cnsr(1); strata trt01p; **** Title & footnote; title1 h=&height f=&font "Survival Plot"; run; **** Closing ODS; options orientation=landscape ; ods path sashelp.tmplmst(read); ods rtf close; ods graphics off; ods listing; ods trace off; The new template is created in proc template step as shown in SAS LOG (below yellow-highlighted) and in Figure 5. NOTE: STATGRAPH 'Stat.Lifetest.Graphics.ProductLimitSurvival' has been saved to: SASUSER.TEMPLAT 10
  • 11. Figure 5: The location of the new template of ProductLimitSurvival in Sasuser.templat ODS PATH(green-highlighted) calls the new template in Sasuser.Templat first before the default template in Sashelp.Tmplmst. Figure 6 is the customized Kaplan Meier Curve that the new template creates. Figure 6: Kaplan Meier Curve from modified Graph Template Language Survival Plot 11
  • 12. CONCLUSION The programmer can use AVISITN as a plotting variable in the graphs, but as discussed in the section of ADVANTAGES AND DISADVANTAGES, there might be a need to create new variables that can work for all situations. An ADaM Graph sub-team is looking at other variables that can help the programmers prepare more graph-ready ADaM datasets. For certain plotting, the programmers need to create the intermediate SAS datasets from ADaM datasets. Using ODS GRAPH and GTL, the programmer can create some graphs directly from ADaM datasets without creating the intermediate SAS datasets. REFERENCES The ADaM Implementation Guide, Version V 1.0 (ADaMIG v1.0) The Analysis Data Model, Version 2.1 (ADaM 2.1) The ADaM Basic Data Structure for Time-to-Event Analyses CDER Common Data Standards Issues Document (Version 1.1/December 2011) Study Data Specifications (July 18, 2012/Version 2.0) Teplizumab for treatment of type 1 diabetes (Protégé study): 1‐year results from a randomised, placebo‐controlled trial ACKNOWLEDGEMENT We would like to acknowledge and extend my heartfelt gratitude to ADaM Graph subteam – Kent Letoureau, Mario Widel, Elizabeth Li and Behrang Vali. CONTACT INFORMATION Your comments and questions are valued and welcomed. Please contact the author at Kevin Lee Cytel, Inc. Chesterbrook, PA (610) 994 - 9840 Email:Kevin.lee@cytel.com Chris Holland Amgen Inc. Email:cholland@amgen.com TRADEMARKS SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their respective companies. 12
  • 13. APPENDIX 1. GTL of Stat.Lifetest.Graphics.ProductLimitSurvival in SASUSER.TMPLMST proc template; define statgraph Stat.Lifetest.Graphics.ProductLimitSurvival; dynamic NStrata xName plotAtRisk plotCensored plotCL plotHW plotEP labelCL labelHW labelEP maxTime method StratumID classAtRisk plotBand plotTest GroupName yMin Transparency SecondTitle TestName pValue; BeginGraph; if (NSTRATA=1) if (EXISTS(STRATUMID)) entrytitle METHOD " " "Survival Estimate" " for " STRATUMID; else entrytitle METHOD " " "Survival Estimate"; endif; if (PLOTATRISK) entrytitle "with Number of Subjects at Risk" / textattrs= GRAPHVALUETEXT; endif; layout overlay / xaxisopts=(shortlabel=XNAME offsetmin=.05 linearopts =(viewmax=MAXTIME)) yaxisopts=(label="Survival Probability" shortlabel="Survival" linearopts=(viewmin=0 viewmax=1 tickvaluelist=(0 .2 .4 .6 .8 1.0))); if (PLOTHW=1 AND PLOTEP=0) bandplot LimitUpper=HW_UCL LimitLower=HW_LCL x=TIME / modelname ="Survival" fillattrs=GRAPHCONFIDENCE name="HW" legendlabel= LABELHW; endif; if (PLOTHW=0 AND PLOTEP=1) bandplot LimitUpper=EP_UCL LimitLower=EP_LCL x=TIME / modelname ="Survival" fillattrs=GRAPHCONFIDENCE name="EP" legendlabel= LABELEP; endif; if (PLOTHW=1 AND PLOTEP=1) bandplot LimitUpper=HW_UCL LimitLower=HW_LCL x=TIME / modelname ="Survival" fillattrs=GRAPHDATA1 datatransparency=.55 name="HW" legendlabel=LABELHW; bandplot LimitUpper=EP_UCL LimitLower=EP_LCL x=TIME / modelname= "Survival" fillattrs=GRAPHDATA2 datatransparency=.55 name="EP" legendlabel=LABELEP; endif; if (PLOTCL=1) if (PLOTHW=1 OR PLOTEP=1) bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME / modelname="Survival" display=(outline) outlineattrs= GRAPHPREDICTIONLIMITS name="CL" legendlabel=LABELCL; else bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME / modelname="Survival" fillattrs=GRAPHCONFIDENCE name="CL" legendlabel=LABELCL; endif; endif; stepplot y=SURVIVAL x=TIME / name="Survival" rolename=(_tip1= ATRISK _tip2=EVENT) tip=(y x Time _tip1 _tip2) legendlabel= "Survival"; if (PLOTCENSORED=1) scatterplot y=CENSORED x=TIME / markerattrs=(symbol=plus) name= "Censored" legendlabel="Censored"; endif; if (PLOTCL=1 OR PLOTHW=1 OR PLOTEP=1) discretelegend "Censored" "CL" "HW" "EP" / location=outside halign=center; 13
  • 14. else if (PLOTCENSORED=1) discretelegend "Censored" / location=inside autoalign=(topright bottomleft); endif; endif; if (PLOTATRISK=1) innermargin / align=bottom; blockplot x=TATRISK block=ATRISK / repeatedvalues=true display= (values) valuehalign=start valuefitpolicy=truncate labelposition=left labelattrs=GRAPHVALUETEXT valueattrs= GRAPHDATATEXT (size=7pt) includemissingclass=false; endinnermargin; endif; endlayout; else entrytitle METHOD " " "Survival Estimates"; if (EXISTS(SECONDTITLE)) entrytitle SECONDTITLE / textattrs=GRAPHVALUETEXT; endif; layout overlay / xaxisopts=(shortlabel=XNAME offsetmin=.05 linearopts =(viewmax=MAXTIME)) yaxisopts=(label="Survival Probability" shortlabel="Survival" linearopts=(viewmin=0 viewmax=1 tickvaluelist=(0 .2 .4 .6 .8 1.0))); if (PLOTHW) bandplot LimitUpper=HW_UCL LimitLower=HW_LCL x=TIME / group= STRATUM index=STRATUMNUM modelname="Survival" datatransparency= Transparency; endif; if (PLOTEP) bandplot LimitUpper=EP_UCL LimitLower=EP_LCL x=TIME / group= STRATUM index=STRATUMNUM modelname="Survival" datatransparency= Transparency; endif; if (PLOTCL) if (PLOTBAND) bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME / group= STRATUM index=STRATUMNUM modelname="Survival" display=(outline) ; else bandplot LimitUpper=SDF_UCL LimitLower=SDF_LCL x=TIME / group= STRATUM index=STRATUMNUM modelname="Survival" datatransparency= Transparency; endif; endif; stepplot y=SURVIVAL x=TIME / group=STRATUM index=STRATUMNUM name= "Survival" rolename=(_tip1=ATRISK _tip2=EVENT) tip=(y x Time _tip1 _tip2); if (PLOTCENSORED) scatterplot y=CENSORED x=TIME / group=STRATUM index=STRATUMNUM markerattrs=(symbol=plus); endif; if (PLOTATRISK) innermargin / align=bottom; blockplot x=TATRISK block=ATRISK / class=CLASSATRISK repeatedvalues=true display=(label values) valuehalign=start valuefitpolicy=truncate labelposition=left labelattrs= GRAPHVALUETEXT valueattrs=GRAPHDATATEXT (size=7pt) includemissingclass=false; endinnermargin; endif; 14
  • 15. DiscreteLegend "Survival" / title=GROUPNAME location=outside; if (PLOTCENSORED) if (PLOTTEST) layout gridded / rows=2 autoalign=(TOPRIGHT BOTTOMLEFT TOP BOTTOM) border=true BackgroundColor=GraphWalls:Color Opaque= true; entry "+ Censored"; if (PVALUE < .0001) entry TESTNAME " p " eval (PUT(PVALUE, PVALUE6.4)); else entry TESTNAME " p=" eval (PUT(PVALUE, PVALUE6.4)); endif; endlayout; else layout gridded / rows=1 autoalign=(TOPRIGHT BOTTOMLEFT TOP BOTTOM) border=true BackgroundColor=GraphWalls:Color Opaque= true; entry "+ Censored"; endlayout; endif; else if (PLOTTEST) layout gridded / rows=1 autoalign=(TOPRIGHT BOTTOMLEFT TOP BOTTOM) border=true BackgroundColor=GraphWalls:Color Opaque= true; if (PVALUE < .0001) entry TESTNAME " p " eval (PUT(PVALUE, PVALUE6.4)); else entry TESTNAME " p=" eval (PUT(PVALUE, PVALUE6.4)); endif; endlayout; endif; endif; endlayout; endif; EndGraph; end; run; 15