Tutorials › Biostatistics › Creating ADTTE: Time-to-Event Analysis Datasets

ADaM Analysis Datasets

Creating ADTTE: Time-to-Event Analysis Datasets

A practical guide to building ADTTE datasets for clinical trials, including time-to-event endpoint definitions, event and censoring logic, PARAM and PARAMCD, STARTDT and ADT, AVAL and CNSR, derivation strategies, analysis populations, Kaplan-Meier preparation, SAS and R implementation, and rigorous programming quality control.

Intermediate 24 min read

What You'll Learn

  • What ADTTE is and why time-to-event analyses require a specialized structure
  • How PARAM, PARAMCD, AVAL, CNSR, STARTDT, ADT and event variables work together
  • How event dates and censoring dates are derived
  • How AVAL represents time and CNSR identifies events versus censored observations
  • How to construct ADTTE for PFS, OS, DOR and other time-to-event endpoints
  • How to program, validate and analyze ADTTE using SAS and R

Introduction

Many important clinical-trial endpoints are not simply measurements collected at a fixed visit. Instead, the endpoint depends on when an event occurs or how long a patient remains event-free.

Examples include:

  • Overall survival
  • Progression-free survival
  • Time to progression
  • Duration of response
  • Time to treatment failure
  • Time to discontinuation
  • Time to first subsequent therapy
  • Time to deterioration

These endpoints require more than a simple analysis value.

For each patient, the analysis must establish a starting point, identify whether the event occurred, determine the relevant event or censoring date, and calculate the elapsed time.

The resulting analysis structure is commonly represented using an ADTTE dataset.

Key idea: ADTTE is not simply a list of event dates. It is an analysis-ready representation of one or more time-to-event endpoints in which each patient/parameter record identifies the analysis start, the analysis endpoint, whether the endpoint was an event or censoring, and the resulting analysis time.

What Is ADTTE?

ADTTE stands for an ADaM Time-to-Event analysis dataset.

Unlike a typical BDS dataset in which each record might represent a laboratory measurement or efficacy assessment, an ADTTE record generally represents a patient's result for a particular time-to-event parameter.

For example, a patient might have:

USUBJID PARAMCD PARAM AVAL CNSR
01-001 OS Overall Survival 742 0
01-001 PFS Progression-Free Survival 418 1
01-001 DOR Duration of Response 301 0

The exact variables and parameter definitions depend on the study, but the fundamental structure is similar.

The Fundamental ADTTE Concept

A time-to-event observation can be thought of as:

$$ \text{Start} \longrightarrow \text{Event or Censoring} $$

The elapsed time between these two points becomes the primary analysis value.

$$ \text{Time-to-Event} = \text{End Date} - \text{Start Date} + \text{Analysis-Day Adjustment} $$

The exact day-count convention must be defined by the study's analysis specification.

For many analyses, if the start date is Day 1, the calculation is:

$$ AVAL = ADT - STARTDT + 1 $$

If the start date is represented as Study Day 0, a different convention may be appropriate.

Critical point: There is no universal rule that every ADTTE AVAL must use exactly the same day-count formula. The start-date convention, endpoint definition and SAP determine the derivation. The programmer must never assume that subtracting two dates automatically produces the correct clinical-trial time variable.

Why Time-to-Event Analysis Is Different

Suppose two patients enter a study on the same date.

Patient A dies after 300 days. Patient B is still alive after 600 days when the study data cutoff is reached.

Their records are fundamentally different:

Patient Time Event Interpretation
A 300 days Yes Observed death
B 600 days No Censored while alive

Patient B has not experienced an observed death at 600 days.

The 600-day observation therefore does not mean:

$$ OS = 600\text{ days} \quad\text{with an observed death} $$

Instead, it means:

$$ OS \ge 600\text{ days} \quad\text{with censoring at 600 days} $$

That distinction is one of the most important concepts in time-to-event programming.

Event Versus Censoring

ADTTE commonly distinguishes an observed event from a censored observation through a variable such as CNSR.

A common convention is:

CNSR Meaning
0 Event occurred
1 Observation is censored
Remember: Under this common convention, CNSR=0 means the event was observed and CNSR=1 means the patient was censored. This is easy to reverse accidentally because "1" can intuitively feel like "event occurred." Always follow the study's defined convention.

The Basic ADTTE Variables

A typical ADTTE dataset may contain variables from several conceptual groups.

Variable Purpose
STUDYID Study identifier
USUBJID Unique subject identifier
PARAMCD Short code identifying the time-to-event endpoint
PARAM Descriptive name of the endpoint
AVAL Analysis time, usually in days or another specified unit
STARTDT Analysis start date
ADT Analysis event/censoring date
CNSR Event/censoring indicator
EVNTDESC Description of the event or censoring reason
TRT01P Planned treatment, when required for analysis
SAFFL Safety population flag, when relevant
ANL01FL Analysis inclusion flag, when specified

Additional variables may be required to support traceability, stratification, subgroup analysis, treatment periods, censoring categories, or endpoint-specific analysis.

ADTTE Is Usually a Parameterized Dataset

One of the defining features of ADTTE is the use of PARAM and PARAMCD.

Instead of creating a completely separate dataset for overall survival, progression-free survival, duration of response and other endpoints, multiple time-to-event parameters can often be represented in a common structure.

For example:

PARAMCD PARAM
OS Overall Survival
PFS Progression-Free Survival
TTR Time to Response
DOR Duration of Response
TTF Time to Treatment Failure

The exact codes should be defined consistently within the study and should follow the study's ADaM implementation conventions.

One Patient Can Have Multiple ADTTE Records

Suppose patient 001 contributes three time-to-event endpoints.

USUBJID PARAMCD AVAL CNSR
001 OS 742 0
001 PFS 418 1
001 DOR 301 0

This does not represent three repeated measurements of the same endpoint.

It represents three different time-to-event parameters.

Think of PARAMCD as defining the question. The patient identifier tells you who the record belongs to. PARAMCD tells you which time-to-event question the record answers.

The Start Date Is Endpoint-Specific

The start date is one of the most important ADTTE derivations.

Different endpoints can have different time origins.

Endpoint Potential Start
Overall survival Randomization or first treatment, according to the SAP
Progression-free survival Randomization or first treatment, according to the SAP
Time to response Randomization or first treatment, according to the SAP
Duration of response Date of first qualifying response
Time to treatment discontinuation Randomization or first treatment, according to the SAP

These are examples rather than universal definitions.

The protocol, statistical analysis plan and endpoint-specific analysis specification determine the actual time origin.

Why the Start Date Matters So Much

Consider a patient who is randomized on January 1 and receives first dose on January 8.

Suppose the patient dies on July 1.

If overall survival begins at randomization, the time is measured from January 1.

If an endpoint instead begins at first dose, the time is measured from January 8.

The resulting AVAL values are therefore different.

$$ AVAL_{\text{randomization}} \neq AVAL_{\text{first dose}} $$

This is why the start-date derivation should be documented explicitly rather than buried inside programming code.

Visualizing the ADTTE Timeline

The following interactive illustration shows how a single patient's time-to-event record can be constructed.

Figure 1. Constructing a Time-to-Event Observation
A simplified example showing the analysis start, intermediate clinical events, the final event/censoring date and the resulting analysis time.
Observation timeline
Clinical event
Censoring

Illustrative data only. The endpoint definitions and censoring rules shown are simplified examples and must be replaced by the protocol/SAP-defined rules in an actual study.

Overall Survival

Overall survival is one of the clearest examples of a time-to-event endpoint.

A simplified definition might be:

Overall Survival: Time from the prespecified analysis start date to death from any cause. Patients who are alive at the analysis cutoff are censored at the last date on which they are known to be alive, according to the prespecified censoring rules.

Suppose:

Variable Value
STARTDT 2025-01-01
ADT 2026-01-01
CNSR 0
EVNTDESC Death

The patient experienced the event.

If the day-count convention is inclusive:

$$ AVAL = ADT-STARTDT+1 $$

For this example:

$$ AVAL = 365+1 = 366\text{ days} $$

The exact numerical result should always be checked against the study's defined date convention.

Overall Survival With Censoring

Now suppose another patient is alive at the database cutoff.

Variable Value
STARTDT 2025-01-01
ADT 2026-06-30
CNSR 1
EVNTDESC Alive at cutoff

The patient contributes follow-up information but no observed death.

$$ CNSR=1 \quad\Rightarrow\quad \text{censored observation} $$

The resulting ADTTE record allows the survival procedure to treat the patient as being event-free through the censoring time.

Progression-Free Survival

Progression-free survival is more complicated because the event can often be triggered by more than one type of occurrence.

A simplified PFS event may be:

  • Objective disease progression
  • Death from any cause

The precise definition, assessment source, handling of new anticancer therapy, missing assessments and censoring conventions must be specified in the protocol and SAP.

For a patient who progresses before death:

Variable Example
STARTDT 2025-01-01
ADT 2025-10-15
CNSR 0
EVNTDESC Progressive Disease

The event date is the qualifying progression date.

If the patient dies before documented progression, the event date may instead be the date of death, depending on the endpoint definition.

PFS Requires Event Prioritization

Consider a patient who has both:

  • Progressive disease on Day 180
  • Death on Day 240

For a conventional PFS endpoint in which the first qualifying event defines the endpoint:

$$ ADT=180 $$

not Day 240.

The death occurred later, after the patient had already experienced the PFS event.

Programming principle: When an endpoint is defined as the time to the first qualifying event, the programmer must identify the earliest date satisfying the event definition. Later events should not replace an earlier qualifying event.

Illustrative PFS Timeline

Figure 2. Progression-Free Survival Event Selection
The first qualifying PFS event determines the endpoint even when additional clinical events occur later.

Illustrative example. The first qualifying endpoint event is selected according to the endpoint definition; later events do not replace it.

Duration of Response

Duration of response presents a different derivation problem.

The patient must first have a qualifying response.

The duration is then measured from the prespecified response start date to the date of progression or death, depending on the endpoint definition.

$$ DOR = \text{End Date} - \text{Response Start Date} + \text{Day Adjustment} $$

The start date is therefore not necessarily randomization or first treatment.

This distinction is critical.

Common mistake: Do not derive duration of response from treatment start simply because the patient's other time-to-event endpoints use treatment start. DOR is generally conditional on achieving a response and therefore has a response-specific time origin.

Time to Response

Time to response is conceptually different from duration of response.

Time to response measures:

$$ \text{Start} \longrightarrow \text{First Qualifying Response} $$

Duration of response measures:

$$ \text{First Qualifying Response} \longrightarrow \text{Progression or Death} $$

These endpoints therefore use different start dates and different event definitions.

The Core ADTTE Variables

USUBJID

USUBJID identifies the subject.

ADTTE should generally be traceable back to the subject-level analysis dataset and ultimately to the clinical data.

PARAMCD

PARAMCD identifies the time-to-event parameter.

Examples include:

PARAMCD    PARAM
-------    ---------------------------
OS         Overall Survival
PFS        Progression-Free Survival
DOR        Duration of Response
TTR        Time to Response

PARAM

PARAM provides the human-readable description.

It should be consistent with the analysis specification and parameter controlled terminology used by the study.

STARTDT

STARTDT represents the date from which elapsed time is measured.

This is often the most important derivation variable in ADTTE.

ADT

ADT represents the analysis endpoint date.

Depending on CNSR, this may be:

  • An observed event date
  • A censoring date

AVAL

AVAL represents the analysis time.

For a days-based endpoint, this is usually a numeric number of days.

CNSR

CNSR identifies whether the record represents an event or a censored observation.

A common convention is:

$$ CNSR= \begin{cases} 0,&\text{event observed}\\ 1,&\text{censored} \end{cases} $$

EVNTDESC

EVNTDESC can provide additional explanation of what happened.

Examples include:

EVNTDESC Meaning
Death Death event
Progressive Disease Progression event
Alive at Cutoff Censored because patient remained alive
No Progression at Last Assessment Censored using last evaluable assessment
New Anticancer Therapy Potential censoring or endpoint-specific event context

The precise categories should be study-defined.

Event Date Versus Censoring Date

The same ADT variable can represent either an event date or a censoring date.

That is why CNSR is essential.

ADT CNSR Interpretation
Death date 0 Event occurred on ADT
Progression date 0 Event occurred on ADT
Last known alive date 1 Censored on ADT
Last adequate tumor assessment 1 Censored on ADT
Think of ADT as the endpoint date, not necessarily the event date. For censored records, ADT is a censoring date. Calling the variable simply "event date" can lead to incorrect programming assumptions.

Building ADTTE From Source Data

ADTTE rarely comes from a single source domain.

Depending on the endpoint, the programmer may need information from:

  • ADSL
  • ADRS
  • SDTM DS
  • SDTM RS
  • SDTM AE
  • SDTM MH
  • Survival follow-up data
  • Vital status data
  • Exposure data
  • Other study-specific sources

The exact source structure depends on the study.

Typical ADTTE Derivation Flow

1
Identify the time-to-event endpoint and read its exact SAP definition.
2
Identify the analysis population and treatment assignment.
3
Determine the endpoint-specific start date.
4
Identify all candidate event dates.
5
Identify all candidate censoring dates.
6
Apply the prespecified event hierarchy.
7
Select the final event or censoring date.
8
Derive CNSR and EVNTDESC.
9
Calculate AVAL using the defined time convention.
10
Perform subject-level and aggregate-level quality control.

Candidate Dates and the Event Hierarchy

Time-to-event programming frequently requires the programmer to collect multiple candidate dates before deciding which date becomes ADT.

For example, a PFS endpoint could potentially involve:

Candidate Date Potential Role
Progression assessment Day 180 Event
Death Day 240 Event
Last adequate assessment Day 150 Censoring candidate
Study cutoff Day 300 Censoring candidate

The endpoint specification determines which candidate wins.

For a conventional time-to-first-event endpoint:

$$ ADT = \min \left( \text{qualifying event dates} \right) $$

if a qualifying event exists before the applicable censoring condition.

Event Hierarchy Is Not the Same as Date Sorting

Simply sorting all dates and selecting the earliest date can be wrong.

Suppose the dataset contains:

  • A routine clinic visit on Day 30
  • A progression event on Day 180
  • A death on Day 240

The earliest date is Day 30, but it is not an endpoint event.

The programmer must first classify candidate records according to whether they satisfy the endpoint definition.

Correct logic: First identify whether a record is a qualifying event or censoring candidate. Only then compare the applicable dates.

Example: PFS Derivation

Suppose a patient has:

Patient Event Day
Baseline 0
Stable disease assessment 56
Partial response 112
Progressive disease 196
Death 270

The PFS event is progression on Day 196.

Therefore:

$$ AVAL=196 $$

and:

$$ CNSR=0 $$

The later death does not change the PFS event date.

Example: Censored PFS

Now suppose another patient has:

Patient Event Day
Baseline 0
Stable disease assessment 56
Partial response 112
Stable disease assessment 168
Last adequate assessment 224
Study cutoff 365

If no progression or death occurs and the SAP specifies censoring at the last adequate tumor assessment, then:

$$ ADT=224 $$

and:

$$ CNSR=1 $$

The patient contributes 224 days of event-free follow-up under that censoring rule.

Censoring Is Not "Missing"

A censored observation is not equivalent to missing data.

This distinction is fundamental.

Situation Interpretation
Event observed at Day 300 Known event time
No event through Day 300, then censored Known event-free follow-up through Day 300
No usable start date Potentially missing analysis record
No information about follow-up Potentially incomplete data

A censored patient contributes information to the survival analysis.

Key distinction: Censoring means the event time is unknown beyond a known follow-up point. Missingness may mean that the required information needed to establish follow-up is unavailable. These are not interchangeable concepts.

Kaplan-Meier Analysis and ADTTE

ADTTE is designed to provide the data needed by time-to-event statistical procedures such as the Kaplan-Meier estimator.

The analysis essentially uses:

  • Time: AVAL
  • Event indicator: derived from CNSR
  • Treatment group: typically from ADSL or carried into ADTTE
  • Parameter: PARAMCD

Under the common CNSR convention:

$$ EVENT=1-CNSR $$

so that:

$$ CNSR=0\Rightarrow EVENT=1 $$

and:

$$ CNSR=1\Rightarrow EVENT=0 $$

Interactive Kaplan-Meier Illustration

Figure 3. Illustrative Kaplan-Meier Curves Derived From Time-to-Event Data
The curves illustrate how observed events cause downward steps while censored patients contribute follow-up information without causing an event step.
Treatment A
Treatment B
Censoring

Illustrative curves only. They demonstrate the relationship between ADTTE event/censoring records and a Kaplan-Meier analysis; they are not estimates from an actual clinical trial.

ADTTE Does Not Contain a Kaplan-Meier Curve

An important conceptual distinction is that ADTTE contains the patient-level input to the survival analysis.

The Kaplan-Meier estimator is calculated later.

$$ ADTTE \longrightarrow \text{Survival Procedure} \longrightarrow \widehat{S}(t) $$

where \(\widehat{S}(t)\) is the estimated survival function.

The Survival Function

The Kaplan-Meier estimator estimates the probability of remaining event-free through time \(t\).

Conceptually:

$$ \widehat{S}(t) = \prod_{t_i\leq t} \left( 1-\frac{d_i}{n_i} \right) $$

where:

  • \(t_i\) = an event time
  • \(d_i\) = number of events at that time
  • \(n_i\) = number at risk immediately before the event time

ADTTE supplies the patient-level event and censoring information required to construct this analysis.

Why Censoring Must Be Correct

Suppose 100 patients are followed.

If the programmer accidentally classifies 20 censored patients as events, the estimated survival curve can change dramatically.

Likewise, if genuine events are incorrectly censored, the survival estimate can be artificially inflated.

ADTTE errors can propagate directly into major clinical-trial conclusions. An incorrect event/censoring flag is not a cosmetic programming issue. It can change the Kaplan-Meier curve, median survival, hazard ratio analyses, landmark estimates and other time-to-event results.

ADTTE and ADSL

ADTTE generally depends heavily on ADSL.

ADSL commonly provides:

  • USUBJID
  • Treatment assignment
  • Randomization information
  • First treatment date
  • Analysis population flags
  • Stratification variables
  • Other subject-level covariates

ADTTE then adds endpoint-specific information.

ADSL ADTTE
Who is the patient? What endpoint is being analyzed?
What treatment did they receive? When did the endpoint clock start?
Are they in the analysis population? When did the event/censoring occur?
What are their subject-level characteristics? What was the resulting time?

ADTTE and ADRS

For oncology trials, ADTTE and ADRS often work closely together.

ADRS may contain response assessments such as:

  • Complete response
  • Partial response
  • Stable disease
  • Progressive disease
  • Not evaluable

ADTTE may use those assessments to derive:

  • Time to response
  • Duration of response
  • Progression-free survival
Important: ADTTE should generally not independently reinvent response definitions that already belong to the response-analysis derivation. The endpoint should use the prespecified response results and traceable source logic.

Time to Event Versus Event Date

These are related but different variables.

Concept Example
Start date 2025-01-01
Event date 2025-09-15
Elapsed time 257 days under the selected convention
CNSR 0

The date is useful for traceability and derivation.

The elapsed time is what the survival procedure generally analyzes.

Why Keep Both Dates?

A programmer could theoretically store only the resulting AVAL.

But retaining STARTDT and ADT provides valuable traceability.

For example:

$$ STARTDT \rightarrow ADT \rightarrow AVAL $$

allows a reviewer to reconstruct the time calculation.

This is especially useful during:

  • Programming QC
  • Clinical review
  • Data review
  • Regulatory submission review
  • Issue investigation

Analysis Day Versus Calendar Difference

One of the most common ADTTE programming errors involves misunderstanding the difference between calendar-date subtraction and the study's analysis-day convention.

Suppose:

$$ STARTDT=01JAN2025 $$

and:

$$ ADT=10JAN2025 $$

Simple date subtraction gives:

$$ 10-1=9 $$

But an inclusive Day 1 convention could produce:

$$ 9+1=10 $$

Therefore, the programmer must know whether the endpoint uses:

  • Elapsed calendar days
  • Inclusive study days
  • Analysis day relative to treatment
  • Another protocol-defined convention
Do not hard-code +1 merely because it appears in another ADTTE program. The correct time calculation comes from the endpoint definition and study specification.

Handling Partial Dates

Time-to-event endpoints can encounter partial dates.

For example, a source record might contain:

01JAN2025
15FEB2025
2025-03
2025-04-XX

Whether a partial date can be used depends on the endpoint and the rules specified in the SAP or data derivation specifications.

A programmer should not automatically impute a missing day.

Partial-date principle: Date imputation can change the derived event time and therefore potentially change an event classification, censoring status or analysis result. Any imputation must be explicitly supported by the study's prespecified rules.

Data Cutoff Dates

Time-to-event analyses frequently use a data cutoff date.

For overall survival, for example, patients without an observed death may be censored based on the last known survival information available by the cutoff.

The cutoff therefore influences which observations are available for deriving the endpoint.

The Difference Between Cutoff and Last Contact

These dates should not automatically be treated as identical.

Date Meaning
Data cutoff date Administrative boundary for the analysis
Last known alive date Clinical information establishing survival status
Last tumor assessment Evidence regarding disease status
Last treatment date Exposure-related date

Which date is used for censoring depends on the endpoint-specific rules.

Censoring Rules Must Be Endpoint-Specific

There is no single universal censoring rule for all ADTTE parameters.

For example, OS may use survival follow-up information, while PFS may depend on tumor-assessment history and progression rules.

DOR may have yet another censoring strategy.

Endpoint Potential Censoring Information
OS Last known alive date / cutoff-dependent follow-up
PFS Last adequate disease assessment under the specified rules
DOR Last adequate tumor assessment in responders, subject to endpoint rules
TTF Endpoint-specific treatment/follow-up information

These examples illustrate why copying censoring code from one endpoint to another can be dangerous.

Post-Progression Assessments

Post-progression information can create complex derivation scenarios.

For some endpoints, measurements after progression are no longer relevant to the primary endpoint event.

For others, post-event data may still be retained for descriptive or supporting analyses.

The programmer should therefore distinguish:

  • Data used to determine the endpoint
  • Data retained for traceability
  • Data used in supplementary analyses

Event Description Variables

A useful ADTTE implementation often records why the endpoint ended.

For example:

PARAMCD CNSR EVNTDESC
OS 0 Death
OS 1 Alive at Cutoff
PFS 0 Progressive Disease
PFS 0 Death
PFS 1 No Progression at Last Assessment

This information can be extremely helpful when reviewing the endpoint population.

Why EVNTDESC Matters

Suppose two treatment groups have the same number of PFS events.

The event-description distribution may nevertheless be different.

Event Type Treatment A Treatment B
Progression 35 48
Death before progression 7 12
Censored 58 40

The underlying patient experience may therefore differ even when the overall event count is similar.

Multiple Time-to-Event Parameters

A study can contain many ADTTE parameters.

For example:

PARAMCD    PARAM
-------    ---------------------------------
OS         Overall Survival
PFS        Progression-Free Survival
TTR        Time to First Response
DOR        Duration of Response
TTD        Time to Treatment Discontinuation
TTNT       Time to Next Treatment

The final dataset may therefore contain multiple records per patient.

Parameter-Level Record Counts

A basic QC check is to examine the number of records by parameter.

proc freq data=adtte;
  tables paramcd / missing;
run;

Unexpected counts can reveal:

  • Missing parameters
  • Duplicate records
  • Patients incorrectly included
  • Patients incorrectly excluded
  • Unexpected parameter generation

Expected Cardinality

If the study has 500 patients in the relevant analysis population and every patient should contribute exactly one OS record, the expected number of OS records is:

$$ N_{OS}=500 $$

If only responders contribute DOR, and 120 patients qualify as responders, then:

$$ N_{DOR}=120 $$

These simple expectations are powerful QC checks.

ADTTE Record Structure

A conceptual ADTTE record might look like this:

Variable Example
STUDYID ABC123
USUBJID ABC123-001-001
PARAMCD PFS
PARAM Progression-Free Survival
STARTDT 2025-01-01
ADT 2025-07-19
AVAL 200
CNSR 0
EVNTDESC Progressive Disease

Deriving AVAL Manually

Suppose:

$$ STARTDT=01JAN2025 $$

and:

$$ ADT=19JUL2025 $$

The calendar difference is:

$$ ADT-STARTDT=199 $$

Under an inclusive convention:

$$ AVAL=199+1=200 $$

This is the type of simple arithmetic that should always be independently checked during QC.

Negative AVAL Values

A correctly constructed time-to-event record generally should not have a negative analysis time.

If:

$$ ADT < STARTDT $$

then:

$$ AVAL<0 $$

This is usually a strong signal that something is wrong.

Potential causes include:

  • Incorrect start date
  • Incorrect event date
  • Date parsing error
  • Time-zone/date conversion issue
  • Incorrect endpoint population
  • Incorrect event hierarchy
QC rule: Investigate negative AVAL values rather than simply deleting them.

Zero-Day Events

An event occurring on the same calendar date as the start date can legitimately produce a very small analysis time, depending on the convention.

For example:

$$ ADT=STARTDT $$

could produce:

$$ AVAL=1 $$

under an inclusive convention.

Whether same-day events are possible and how they are represented should be specified and validated.

Missing Start Dates

If STARTDT cannot be established, AVAL generally cannot be derived reliably.

For example:

STARTDT = .
ADT     = 15JUL2025
AVAL    = .
CNSR    = 0

This should trigger investigation.

The correct action depends on the endpoint and prespecified data handling.

Patients With No Event and No Follow-Up

A patient who has no event and no adequate follow-up cannot automatically be treated as simply censored at an arbitrary date.

The programmer must establish whether there is sufficient information to define the censoring date.

Never manufacture follow-up. If the data do not establish that a patient remained event-free through a particular date, the programmer should not create a censoring observation merely to make the dataset complete.

Analysis Population Flags

ADTTE may contain one or more analysis flags.

For example:

ANL01FL = "Y"

could identify the records included in a particular primary analysis.

The precise flag structure should be defined by the study.

Analysis flags can be useful when:

  • Multiple versions of an endpoint are present
  • Sensitivity analyses are required
  • Different analysis populations exist
  • Alternative censoring rules are evaluated

Primary and Sensitivity Analyses

Time-to-event endpoints often have sensitivity analyses that modify censoring or event handling.

For example, one analysis may treat a particular intercurrent event as censoring while another may treat it as an event.

These should not be mixed into the primary endpoint record without clear identification.

PARAMCD Analysis Purpose
PFS Primary Primary prespecified analysis
PFS01 Sensitivity Alternative censoring rule
PFS02 Sensitivity Alternative event handling

The exact implementation should follow the analysis dataset specification.

Intercurrent Events

Time-to-event endpoints can be affected by events occurring after treatment initiation.

Examples include:

  • New anticancer therapy
  • Treatment discontinuation
  • Protocol deviation
  • Withdrawal of consent
  • Loss to follow-up
  • Death

How each event is handled depends on the endpoint strategy.

The analysis may use:

  • Treatment policy
  • Composite strategy
  • Hypothetical strategy
  • While-on-treatment strategy
  • Principal-stratum strategy

The ADTTE derivation must reflect the prespecified estimand and endpoint definition.

Do not derive censoring rules from intuition alone. A seemingly reasonable censoring decision can define a different estimand and therefore answer a different clinical question.

ADTTE and the Estimand

The estimand provides the broader framework for defining the treatment effect of interest.

For time-to-event endpoints, this affects questions such as:

  • What event counts?
  • What happens after treatment discontinuation?
  • What happens after new therapy?
  • Which observations are censored?
  • What population is analyzed?

ADTTE operationalizes the endpoint definition at the patient-record level.

SAS Implementation: Basic AVAL Derivation

A simplified SAS derivation might look like:

adtte = source;

if not missing(startdt) and not missing(adt) then
  aval = adt - startdt + 1;

format startdt adt yymmdd10.;

This is intentionally simple.

A production ADTTE program must implement the actual endpoint-specific rules.

SAS Implementation: Event and Censoring Logic

if not missing(eventdt) then do;

  adt      = eventdt;
  cnsr     = 0;
  evntdesc = eventdesc;

end;

else if not missing(censdt) then do;

  adt      = censdt;
  cnsr     = 1;
  evntdesc = censdesc;

end;

if not missing(startdt) and not missing(adt) then
  aval = adt - startdt + 1;

The key principle is that event and censoring logic should be derived from clearly defined candidate variables rather than from a single opaque statement.

SAS Implementation: Parameter Assignment

length paramcd $8 param $100;

paramcd = "OS";
param   = "Overall Survival";

For a parameterized dataset, the program may construct different records using different endpoint-specific derivation blocks.

SAS Implementation: PFS Example

if not missing(progdt) and
   not missing(deathdt) then do;

  if progdt <= deathdt then do;
    adt      = progdt;
    cnsr     = 0;
    evntdesc = "Progressive Disease";
  end;

  else do;
    adt      = deathdt;
    cnsr     = 0;
    evntdesc = "Death";
  end;

end;

else if not missing(progdt) then do;

  adt      = progdt;
  cnsr     = 0;
  evntdesc = "Progressive Disease";

end;

else if not missing(deathdt) then do;

  adt      = deathdt;
  cnsr     = 0;
  evntdesc = "Death";

end;

else if not missing(lastassessdt) then do;

  adt      = lastassessdt;
  cnsr     = 1;
  evntdesc = "No Progression at Last Assessment";

end;

This illustrates the programming structure, not a universal PFS algorithm.

Important: Real PFS derivations can involve confirmation rules, assessment windows, missing assessments, new lesions, death dates, subsequent therapy and other study-specific considerations. The code above is deliberately simplified to illustrate ADTTE construction logic.

R Implementation

The same principles can be implemented in R.

library(dplyr)

adtte <- source_data %>%
  mutate(
    PARAMCD = "OS",
    PARAM   = "Overall Survival",
    ADT     = if_else(
      !is.na(DEATHDT),
      DEATHDT,
      CUTOFFDT
    ),
    CNSR    = if_else(
      !is.na(DEATHDT),
      0,
      1
    ),
    EVNTDESC = if_else(
      !is.na(DEATHDT),
      "Death",
      "Alive at Cutoff"
    ),
    AVAL = as.numeric(ADT - STARTDT) + 1
  )

Again, the censoring and event rules must be replaced with the actual study-specific definitions.

Creating Multiple Parameters in R

A parameterized ADTTE dataset can be constructed by generating endpoint records and combining them.

os <- derive_os(data)

pfs <- derive_pfs(data)

dor <- derive_dor(data)

adtte <- bind_rows(
  os,
  pfs,
  dor
) %>%
  arrange(
    USUBJID,
    PARAMCD
  )

This structure can make the derivation logic easier to maintain and test.

R Survival Analysis

Once ADTTE is constructed, a Kaplan-Meier analysis can be performed using packages such as survival.

library(survival)

pfs_data <- adtte %>%
  filter(PARAMCD == "PFS")

fit <- survfit(
  Surv(
    AVAL,
    CNSR == 0
  ) ~ TRT01P,
  data = pfs_data
)

summary(fit)

Here:

$$ CNSR=0 $$

identifies the observed event under the common ADTTE convention.

SAS PROC LIFETEST Example

proc lifetest data=adtte
              plots=survival;

  where paramcd = "PFS";

  time aval * cnsr(1);

  strata trt01p;

run;

The notation:

time aval * cnsr(1);

means that CNSR=1 is treated as the censoring value, so CNSR=0 represents the event.

Median Survival

If the estimated survival curve crosses 0.50, a median time-to-event can be estimated.

Conceptually:

$$ \widehat{S}(t)=0.50 $$

The corresponding \(t\) is the estimated median.

ADTTE itself does not contain the median.

The median is a summary statistic calculated from the time-to-event analysis.

Why ADTTE Should Remain at Patient Level

ADTTE is not a summary dataset.

It should retain patient-level information so that downstream procedures can calculate:

  • Kaplan-Meier curves
  • Median survival
  • Quartiles
  • Landmark estimates
  • Event counts
  • Censoring counts
  • Hazard ratios
  • Subgroup analyses

If patient-level information were collapsed too early, much of this analysis would become impossible.

ADTTE and Hazard Ratios

A Cox proportional hazards model can use the same underlying time-to-event information.

Conceptually:

$$ h(t|X)=h_0(t)e^{\beta X} $$

where \(h(t|X)\) is the hazard at time \(t\) given covariates \(X\).

The treatment coefficient can be transformed into a hazard ratio:

$$ HR=e^\beta $$

ADTTE therefore serves as a key analysis input for both nonparametric and model-based time-to-event analyses.

Stratified Time-to-Event Analysis

Some studies stratify survival analyses by baseline factors.

Examples include:

  • Disease stage
  • Geographic region
  • Prior therapy
  • Biomarker status

The relevant stratification variables must be available in the analysis dataset or traceable to ADSL.

Subgroup Analysis

ADTTE can also support subgroup analyses.

For example:

Subgroup Potential Analysis
Age group OS by age category
Sex PFS by sex
Biomarker status OS by biomarker subgroup
Prior therapy PFS by prior-treatment category

The same patient-level ADTTE records can often support all these analyses.

ADTTE and Data Traceability

A strong ADTTE dataset should allow the programmer or reviewer to understand:

1
Where the analysis start date came from.
2
Which source record established the event.
3
Why the patient was censored if no event occurred.
4
How the endpoint date was selected.
5
How AVAL was calculated.

Traceability becomes especially important when the endpoint is based on multiple source domains.

Event Selection Example

Consider the following candidate events:

Candidate Date Qualifies?
Routine visit 01MAR2025 No
Partial response 01APR2025 No PFS event
Progression 01JUL2025 Yes
Death 01SEP2025 Yes, but later

For a time-to-first-event PFS definition, the progression date wins.

$$ ADT=01JUL2025 $$

What If Progression and Death Occur on the Same Date?

A study may encounter the situation in which progression and death share the same date.

The programmer must follow the endpoint's event-priority convention.

For example, the event description could potentially distinguish:

  • Progressive Disease
  • Death
  • Progressive Disease and Death on Same Date

The exact convention should be specified rather than invented during programming.

Duplicated Source Records

Duplicate clinical records can create duplicate event candidates.

For example:

USUBJID Event Date
001 Progression 01JUL2025
001 Progression 01JUL2025

This does not necessarily mean that the patient experienced two progression events.

The source-data structure and derivation rules must determine whether the records represent duplicates, multiple assessments, or genuinely distinct events.

One Record Per Patient Per Parameter

For many ADTTE primary endpoints, the expected structure is:

$$ \text{One patient} + \text{One parameter} = \text{One analysis record} $$

If the dataset contains multiple records for the same patient and PARAMCD, investigate whether they represent:

  • Legitimate alternative analyses
  • Multiple records incorrectly retained
  • Sensitivity parameters
  • Programming duplication

Duplicate QC

proc sort data=adtte
          out=adtte_dups
          nodupkey
          dupout=dup_records;

  by usubjid paramcd;

run;

If the intended key is more complex, include the appropriate variables.

Checking CNSR

proc freq data=adtte;

  tables paramcd * cnsr / missing;

run;

Unexpected CNSR distributions should be investigated.

For example, if nearly every patient has CNSR=0, the event derivation may have been overly permissive.

Checking AVAL

proc means data=adtte
           n nmiss min p25 median p75 max;

  class paramcd;

  var aval;

run;

This helps identify:

  • Missing analysis times
  • Negative values
  • Extremely large values
  • Unexpected parameter distributions

Checking Dates

data qc_dates;

  set adtte;

  if not missing(startdt)
     and not missing(adt)
     and adt < startdt;

run;

Any records returned by this check should be reviewed.

Independent AVAL Recalculation

One of the strongest QC techniques is to independently recalculate AVAL.

data qc_aval;

  set adtte;

  if not missing(startdt)
     and not missing(adt) then
    aval_qc = adt - startdt + 1;

  if aval ne aval_qc then
    mismatch = 1;

run;

The exact formula should match the study's specified convention.

Independent derivation is stronger than checking the same program twice. A QC program should use an independently implemented logic path where practical, rather than reproducing the original derivation line-for-line.

Event-Date QC

For every observed event, verify that ADT corresponds to an actual qualifying event source.

Check Expected Result
CNSR=0 Qualifying event exists
CNSR=1 No qualifying event before censoring date
ADT populated Event/censoring date is traceable
AVAL populated Valid start and endpoint dates exist

Event/Censoring Cross-Check

A useful conceptual check is:

$$ CNSR=0 \Rightarrow \text{Qualifying Event Exists} $$

and:

$$ CNSR=1 \Rightarrow \text{No Qualifying Event Before ADT} $$

Violations of these relationships are important QC findings.

Parameter-Specific QC

Each endpoint should have its own validation checks.

Parameter Important QC
OS Death dates, last-known-alive dates, cutoff rules
PFS Progression, death, assessment adequacy, censoring rules
TTR First qualifying response and response date
DOR Responder population, response start, progression/death endpoint

Duration of Response: Eligibility First

A patient without a qualifying response generally cannot contribute a standard DOR record.

Therefore, DOR derivation often begins with:

$$ \text{Responder?} $$

Only if the answer is yes does the program proceed to:

$$ \text{Response Start} \rightarrow \text{Progression/Death/Censoring} $$
Important: DOR is commonly a responder-only endpoint. Including nonresponders with arbitrary DOR values can fundamentally change the analysis population.

DOR Example

Suppose:

Event Day
Start of treatment 0
First qualifying response 84
Confirmed response 112
Progression 413

If the endpoint uses Day 84 as the response start date:

$$ DOR = 413-84+1 = 330\text{ days} $$

This illustrates why DOR cannot simply be calculated from first treatment to progression.

Time to Response Example

Using the same patient:

$$ TTR = 84-0+1 = 85\text{ days} $$

The same patient therefore has:

Parameter Start End Time
TTR Treatment start First response 85 days
DOR First response Progression 330 days

Competing Events

Some time-to-event endpoints can involve competing events.

For example, when studying a specific cause of death, death from another cause may prevent the event of interest from occurring.

The appropriate analysis may then require competing-risk methodology rather than a simple Kaplan-Meier analysis treating all other outcomes as ordinary censoring.

Do not automatically treat competing events as censoring. The correct treatment depends on the estimand and statistical methodology. Censoring a competing event can answer a different question from estimating a cause-specific or cumulative-incidence quantity.

Time to First Subsequent Therapy

Another possible endpoint is time to first subsequent anticancer therapy.

The endpoint might be defined as:

$$ \text{Treatment Start} \rightarrow \text{First Subsequent Therapy} $$

The event date is therefore derived from subsequent-therapy data rather than from tumor assessments.

This illustrates the flexibility of ADTTE.

Time to Treatment Discontinuation

A treatment-discontinuation endpoint might use:

  • Treatment start as the time origin
  • Permanent treatment discontinuation as the event
  • Alternative censoring rules for patients still receiving treatment

The exact definition must distinguish between temporary interruptions and permanent discontinuation where relevant.

ADTTE for Safety Time-to-Event Analyses

ADTTE is not limited to efficacy.

Time-to-event concepts can also be used for safety analyses, such as:

  • Time to first treatment-emergent adverse event
  • Time to first serious adverse event
  • Time to dose modification
  • Time to treatment discontinuation due to an adverse event

The event definitions and risk periods must be explicitly specified.

Risk Periods

Some endpoints begin only after a patient enters a particular state.

For example, DOR begins after response.

A time-to-first-adverse-event analysis may begin at first treatment.

The risk period therefore matters.

$$ \text{Risk Period} = [\text{Start Date},\text{End Date}] $$

An event outside the relevant risk period should not be incorrectly attributed to the endpoint.

ADTTE and Treatment Emergence

For safety time-to-event analyses, the programmer may need to determine whether an adverse event meets the treatment-emergent definition.

That requires rules involving:

  • Event start date
  • First treatment date
  • Pre-existing conditions
  • Severity changes
  • Study-specific treatment-emergent criteria

The event definition should come from the safety analysis specification.

Handling Unscheduled Assessments

Unscheduled assessments can affect time-to-event endpoints.

For example, an unscheduled scan may identify progression before the next planned visit.

Whether that assessment is used depends on the prespecified analysis rules.

Do not discard unscheduled assessments automatically. They may be essential to determining the first qualifying event date. Likewise, do not automatically use every unscheduled assessment without checking the endpoint definition.

Assessment Date Versus Visit Date

For time-to-event derivations, the actual assessment date may be more important than the nominal visit label.

For example:

Nominal Visit Actual Date
Week 12 Day 84
Unscheduled Day 91
Week 16 Day 112

If progression is documented at Day 91, the endpoint date may be Day 91 even though the planned Week 16 assessment occurs later.

Data Cutoff and Late Data

Clinical databases may contain information entered after the nominal cutoff, depending on database and analysis processes.

The analysis specification should define how late-arriving information is handled.

The programmer should never silently modify the cutoff rules based on whatever data happen to be present in the programming environment.

ADTTE and Submission Readiness

For regulatory submissions, reviewers may need to understand how the time-to-event endpoints were derived.

This makes the following particularly important:

  • Clear parameter definitions
  • Traceable dates
  • Transparent event indicators
  • Consistent censoring logic
  • Subject-level reproducibility
  • Controlled derivation rules

Common ADTTE Programming Mistakes

  1. Reversing CNSR. Treating 1 as event and 0 as censoring when the study uses the opposite convention.
  2. Using the wrong start date. For example, using treatment start for DOR when the endpoint begins at response.
  3. Using death instead of the earlier progression event for PFS.
  4. Choosing the earliest calendar date without determining whether it is a qualifying endpoint event.
  5. Ignoring the data cutoff. This can cause follow-up beyond the analysis boundary to enter the endpoint.
  6. Manufacturing censoring dates. A patient should not be censored at a date unsupported by the endpoint rules.
  7. Calculating AVAL with an undocumented +1 adjustment.
  8. Including nonresponders in DOR.
  9. Failing to distinguish event date from censoring date.
  10. Creating duplicate patient/parameter records.
  11. Using post-event information incorrectly.
  12. Failing to validate event descriptions.
  13. Hard-coding a censoring rule from another study.
  14. Ignoring competing events when the estimand requires special handling.
  15. Assuming every time-to-event endpoint uses the same derivation.

ADaM BDS Versus ADTTE

ADTTE is related conceptually to BDS but has important time-to-event-specific features.

Feature Typical BDS ADTTE
Primary observation Analysis measurement Time-to-event result
AVAL Measured/derived value Elapsed analysis time
ADT Analysis measurement date Event/censoring date
CNSR Not generally central Central to event/censoring interpretation
PARAM Often used Commonly central to multiple TTE endpoints
Kaplan-Meier input Not typically Yes

ADTTE Versus a Simple Event Dataset

A simple event dataset might answer:

$$ \text{Did the event happen?} $$

ADTTE answers a richer question:

$$ \text{Did the event happen, when did follow-up start, when did it end, and what was the resulting time?} $$

That makes ADTTE much more useful for survival analysis.

A Complete Illustrative ADTTE

USUBJID PARAMCD STARTDT ADT AVAL CNSR EVNTDESC
001 OS 01JAN2025 01OCT2025 274 0 Death
001 PFS 01JAN2025 15JUL2025 196 0 Progressive Disease
002 OS 01JAN2025 31DEC2025 365 1 Alive at Cutoff
002 PFS 01JAN2025 01SEP2025 244 1 No Progression at Last Assessment
003 OS 01JAN2025 15NOV2025 319 0 Death

This small table illustrates the basic parameterized nature of ADTTE.

Reading the Example

Patient 001 has two records.

For OS, the patient experienced death.

For PFS, progression occurred earlier and therefore defines the PFS event.

Patient 002 remains alive and has no documented progression through the specified censoring point.

Patient 003 contributes an observed OS event.

A Useful Mental Model

For every ADTTE record, ask five questions:

1
Who? Which patient does this record describe?
2
What? Which time-to-event parameter is being analyzed?
3
From when? What is the analysis start date?
4
Until when? What event or censoring date ends the observation?
5
Event or censoring? Does CNSR indicate an observed event or a censored observation?

If those five questions can be answered clearly, the ADTTE record is usually much easier to understand and validate.

Building ADTTE From the SAP

Before writing code, extract the endpoint definition from the statistical analysis plan.

For each endpoint, document:

Question Specification
Parameter What endpoint is being analyzed?
Population Who contributes a record?
Start When does the clock start?
Event What constitutes an event?
Censoring When and how is a patient censored?
Cutoff What is the analysis data cutoff?
Time unit Days, months or another unit?
Day convention Inclusive or elapsed-time calculation?

ADTTE Specification Example

A programmer might create an internal specification such as:

Parameter:
  PFS

Start:
  Randomization date

Event:
  First documented progression or death

Event date:
  Earliest qualifying event

Censor:
  No progression and no death

Censor date:
  Last adequate disease assessment,
  according to SAP rules

CNSR:
  0 = event
  1 = censored

AVAL:
  Analysis time in days

Time convention:
  As defined in the SAP

This specification becomes the bridge between the clinical definition and the programming implementation.

Endpoint Derivation Matrix

Endpoint Start Event Censoring
OS Defined study origin Death Alive/follow-up censoring
PFS Defined study origin Progression or death Endpoint-specific disease assessment rule
TTR Defined study origin First qualifying response Endpoint-specific rule for patients without response
DOR First qualifying response Progression or death Endpoint-specific response follow-up rule

This matrix is often one of the most useful documents a programmer can create before beginning the ADTTE program.

Programming Strategy: Separate Derivation From Assembly

A maintainable program often separates:

  1. Source-data preparation
  2. Event derivation
  3. Censoring derivation
  4. Time calculation
  5. Parameter assignment
  6. Dataset assembly
  7. QC

This is generally easier to review than putting every endpoint into a single large block of nested conditional statements.

Example Modular SAS Structure

/*-----------------------------------------
  1. Prepare subject-level information
-----------------------------------------*/

data adsl_base;
  set adsl;

  keep usubjid
       trt01p
       randdt
       trtsdt
       saffl;
run;


/*-----------------------------------------
  2. Derive OS
-----------------------------------------*/

data os;
  set adsl_base;

  length paramcd $8
         param $100
         evntdesc $100;

  paramcd = "OS";
  param   = "Overall Survival";

  /* Endpoint-specific event/censoring logic */

run;


/*-----------------------------------------
  3. Derive PFS
-----------------------------------------*/

data pfs;
  set adsl_base;

  length paramcd $8
         param $100
         evntdesc $100;

  paramcd = "PFS";
  param   = "Progression-Free Survival";

  /* Endpoint-specific event/censoring logic */

run;


/*-----------------------------------------
  4. Assemble ADTTE
-----------------------------------------*/

data adtte;
  set os pfs;

  if not missing(startdt)
     and not missing(adt) then
    aval = adt - startdt + 1;

run;

Why Modular Programming Helps

Modular derivation makes it easier to answer questions such as:

  • How was OS derived?
  • How was PFS derived?
  • Which source generated the progression date?
  • Why was this patient censored?
  • Why is DOR restricted to responders?

It also makes endpoint-specific QC easier.

Validation Against Known Patients

A strong ADTTE validation process should include hand-reviewed patients.

For example, deliberately select patients representing:

  • Observed death
  • Death without prior progression
  • Progression followed by death
  • No progression through cutoff
  • Early treatment discontinuation
  • Responder with durable response
  • Responder with progression
  • Patient with missing assessments
  • Patient with unscheduled assessment
  • Patient with unusual date relationships

Example Patient-Level Validation

Check Expected
Start date Matches SAP-defined origin
Event date Matches first qualifying event
CNSR Correct event/censor classification
AVAL Matches independent date calculation
EVNTDESC Matches endpoint-ending event

Population-Level Validation

After reviewing individual patients, examine aggregate results.

Useful summaries include:

  • Number of patients
  • Number of events
  • Number censored
  • Event percentage
  • Minimum time
  • Median time
  • Maximum follow-up
  • Event-description distribution

Event Count Reconciliation

For each parameter:

$$ N_{patients} = N_{events} + N_{censored} $$

provided every patient has exactly one record and the population is defined accordingly.

If the numbers do not reconcile, investigate the cause.

Example Reconciliation Table

Parameter Patients Events Censored
OS 500 142 358
PFS 500 287 213
DOR 164 119 45

For OS:

$$ 142+358=500 $$

For PFS:

$$ 287+213=500 $$

For DOR, only responders contribute:

$$ 119+45=164 $$

Checking for Impossible Event Descriptions

A simple consistency check can identify logically impossible combinations.

CNSR EVNTDESC Expected?
0 Death Yes
0 Progressive Disease Yes for relevant endpoints
1 Alive at Cutoff Yes
1 Death Usually no
0 Alive at Cutoff Usually no

The exact valid combinations depend on the endpoint.

Common Date QC

Check that:

  • STARTDT is not after ADT.
  • ADT does not exceed the applicable cutoff when prohibited by the analysis.
  • Event dates correspond to source events.
  • Censoring dates correspond to valid follow-up.
  • DOR start dates correspond to qualifying responses.
  • PFS event dates correspond to qualifying progression or death.

ADTTE and Reproducibility

A high-quality ADTTE dataset should be reproducible.

If the same source data and specification are processed again, the resulting ADTTE records should be consistent.

This requires:

  • Version-controlled programs
  • Stable specifications
  • Documented derivations
  • Controlled source data
  • Independent QC
  • Clear assumptions

ADTTE Documentation

Useful documentation includes:

  • Dataset metadata
  • Variable metadata
  • Parameter definitions
  • Endpoint derivation specifications
  • Censoring rules
  • Event hierarchies
  • Source-data mappings
  • Programming assumptions
  • QC results

What Makes ADTTE Different From "Just a Survival Dataset"?

The important distinction is that ADTTE is an analysis dataset designed to represent the endpoint definition in a standardized, traceable form.

It connects:

$$ \text{Clinical Events} \rightarrow \text{Endpoint Definition} \rightarrow \text{ADTTE} \rightarrow \text{Statistical Analysis} $$

The quality of the final survival analysis depends on the quality of every link in this chain.

The Three Most Important ADTTE Variables

If you are learning ADTTE for the first time, focus initially on:

Variable Question
AVAL How long was the patient observed?
CNSR Was the endpoint an event or censoring?
PARAMCD Which time-to-event endpoint does this record represent?

Then add:

  • STARTDT
  • ADT
  • EVNTDESC
  • Treatment variables
  • Population flags

The Four Dates You Should Always Understand

For many ADTTE derivations, it is useful to think explicitly about:

A
Start date: when the endpoint clock begins.
B
Candidate event dates: dates that might satisfy the event definition.
C
Censoring candidates: dates establishing the last relevant follow-up.
D
Final ADT: the event or censoring date selected by the endpoint rules.

Why the Event Hierarchy Should Be Written Down

A verbal instruction such as "use progression or death" is often insufficient for programming.

A better specification explicitly states:

  • Which events qualify
  • Which source establishes each event
  • How competing candidate events are prioritized
  • What happens when dates are equal
  • What happens when dates are missing
  • What happens after treatment discontinuation
  • What happens after subsequent therapy
  • What happens at the data cutoff

The more complicated the endpoint, the more important this becomes.

ADTTE Quality-Control Checklist

1
Confirm the SAP endpoint definition.
2
Confirm the analysis population.
3
Confirm the start-date derivation.
4
Confirm candidate event sources.
5
Confirm censoring rules.
6
Confirm the CNSR convention.
7
Independently recalculate AVAL.
8
Check duplicate patient/parameter records.
9
Reconcile event and censoring counts.
10
Validate selected patients manually.

Practical ADTTE Programming Checklist

Question Check
Is the endpoint clearly defined? Yes / No
Is PARAMCD correct? Yes / No
Is PARAM consistent with PARAMCD? Yes / No
Is STARTDT correct? Yes / No
Is ADT supported by source data? Yes / No
Is CNSR correct? Yes / No
Is EVNTDESC consistent with CNSR? Yes / No
Is AVAL independently reproducible? Yes / No
Are event counts correct? Yes / No
Are censoring counts correct? Yes / No
Are duplicate records absent or explained? Yes / No

What ADTTE Should Make Easy

A well-constructed ADTTE dataset should make it straightforward to answer:

  • How many patients experienced the event?
  • How many were censored?
  • When did events occur?
  • Why were patients censored?
  • What was the median time-to-event?
  • What was the survival probability at a specified landmark?
  • How do treatment groups compare?
  • How do subgroups compare?
  • Can the analysis be independently reproduced?

ADTTE and Kaplan-Meier: The Complete Chain

The relationship can be summarized as:

1
Clinical data identify treatment, assessments, events and follow-up.
2
The SAP defines the time-to-event endpoint.
3
ADTTE translates the endpoint definition into patient-level analysis records.
4
AVAL provides analysis time and CNSR identifies event versus censoring.
5
Kaplan-Meier, Cox or other methods analyze the resulting time-to-event data.
6
Tables and figures summarize the treatment effect.

The Most Important ADTTE Concept

The most important concept is that an ADTTE record represents a time-to-event observation, not simply an event.

A complete record answers:

$$ \boxed{ \text{Who?} \quad \text{What endpoint?} \quad \text{From when?} \quad \text{Until when?} \quad \text{Event or censoring?} } $$

From these elements, the analysis time is derived.

$$ AVAL = f(STARTDT,ADT,\text{study time convention}) $$

The statistical procedure then uses AVAL together with the event/censoring indicator.

Final Example

Suppose a patient is randomized on January 1, receives treatment on January 8, experiences progression on July 15 and dies on September 1.

For an endpoint whose start is randomization and whose event is the first of progression or death:

$$ STARTDT=01JAN $$

The first qualifying event is:

$$ ADT=15JUL $$

Therefore:

$$ CNSR=0 $$

and, using the illustrative inclusive day-count convention:

$$ AVAL=196 $$

The later September death does not replace the July progression for that time-to-first-event endpoint.

For OS, however, the same patient would have a different ADTTE record:

$$ STARTDT=01JAN \qquad ADT=01SEP \qquad CNSR=0 $$

Thus, the same patient can legitimately have different time-to-event values for different parameters.

Bottom Line

ADTTE is the bridge between clinical event information and survival analysis. A strong ADTTE dataset identifies the time-to-event parameter, establishes the correct analysis start date, identifies qualifying events and censoring conditions, selects the correct endpoint date, derives the event/censoring indicator, calculates the analysis time, and preserves sufficient information for traceability and independent validation. The most important programming principle is simple: do not start with the code; start with the endpoint definition. Once the endpoint's population, time origin, event definition, censoring rules, cutoff and time convention are explicit, the ADTTE derivation becomes a structured translation of the clinical and statistical specification into patient-level analysis records.

References

CDISC. Analysis Data Model (ADaM) Implementation Guide. Clinical Data Interchange Standards Consortium.

CDISC. Analysis Data Model (ADaM). Clinical Data Interchange Standards Consortium.

ICH. E9: Statistical Principles for Clinical Trials. International Council for Harmonisation.

ICH. E9(R1): Addendum on Estimands and Sensitivity Analysis in Clinical Trials. International Council for Harmonisation.

Collett, D. Modelling Survival Data in Medical Research. Chapman & Hall/CRC.

Klein, J.P. and Moeschberger, M.L. Survival Analysis: Techniques for Censored and Truncated Data. Springer.