Tutorials › Biostatistics › RECIST 1.1 Endpoints in ADaM Datasets

Oncology ADaM Programming

RECIST 1.1 Endpoints in ADaM Datasets

An advanced guide to turning RECIST 1.1 assessments into analysis-ready endpoints, including best overall response, objective response rate, duration of response, time to response, progression-free survival, tumor-burden analysis, BDS structures, ADTTE datasets, traceability, programming logic, and validation.

Advanced 24 min read

What You'll Learn

  • How RECIST 1.1 becomes an analysis-endpoint problem rather than merely an imaging problem
  • How to structure response data in a BDS-style ADaM dataset
  • How BOR, ORR, DOR, TTR, PFS, and related endpoints differ
  • How baseline, nadir, confirmation, and progression rules affect derivations
  • How time-to-event endpoints are represented in ADTTE
  • How to build traceable, validation-ready RECIST programming
  • How to avoid common mistakes in oncology ADaM derivations
  • How to validate endpoints against patient-level RECIST assessments

Introduction

In an oncology clinical trial, the phrase “RECIST endpoint” sounds like a single concept. In an ADaM programming environment, it is not. A RECIST-based efficacy analysis usually requires a chain of related derivations: lesion measurements, target-lesion sums, percent change, assessment-level response, best overall response, responder flags, response dates, censoring rules, and sometimes time-to-event endpoints.

The statistical programmer therefore has to solve two related problems: what did RECIST say about the patient? and how should that conclusion be represented so that a statistical procedure can reproduce the endpoint?

That distinction is central to good ADaM design. ADaM is intended to support efficient generation, replication, and review of analyses, with dataset structure and metadata communicating the content, inputs, and purpose of the analysis data.

Core principle: Do not design the RECIST ADaM dataset around the table you happen to need today. Design it around the reusable analysis concepts: the assessment, parameter, analysis value, response category, analysis population, dates, derivation flags, and endpoint-specific rules. Then derive the requested tables, listings, figures, and statistical analyses from that structure.

The RECIST-to-ADaM Mental Model

A useful way to think about the analysis is as a series of layers.

Figure 1. From Imaging Assessment to Statistical Endpoint
The endpoint is the final layer of a much larger derivation chain.
Imaging Lesions Measurements SDTM RS / TU / TR Study observations Analysis SLD / PCHG Response state Endpoint BOR / ORR DOR / PFS / TTR Each layer should remain traceable to the layer before it.

What RECIST 1.1 Actually Defines

RECIST 1.1 is a response-assessment framework. It is not an ADaM standard and it does not prescribe your final SAS dataset names, parameter codes, or analysis flags.

For target lesions, RECIST 1.1 uses the sum of lesion diameters as the quantitative tumor-burden measure. Partial response is based on at least a 30% decrease from the baseline sum. Progressive disease based on target lesions requires at least a 20% increase from the smallest sum on study, together with at least a 5 mm absolute increase. New lesions and unequivocal progression of non-target disease can also drive progression.

This creates an important programming distinction:

  • Quantitative tumor burden is something you can calculate.
  • RECIST response is a rule-based clinical classification.
  • Best overall response is a longitudinal derivation over multiple assessments.
  • ORR is a population-level endpoint derived from a patient-level response classification.
  • DOR, TTR, and PFS introduce dates, event definitions, and censoring rules.

The Core RECIST Endpoint Family

BOR

Best Overall Response

The best RECIST response category observed over the prespecified assessment period, subject to the protocol/SAP rules.

ORR

Objective Response Rate

The proportion of the analysis population achieving the prespecified response definition, commonly CR or PR.

DOR

Duration of Response

Time from the qualifying response to progression or death, with endpoint-specific censoring rules.

TTR

Time to Response

Time from the defined origin, commonly first dose or randomization, to the first qualifying response.

PFS

Progression-Free Survival

Time from the protocol-defined origin to progression or death, with censoring based on the SAP.

DCR

Disease Control Rate

A derived response endpoint commonly defined using CR, PR, and SD under a prespecified minimum-duration rule where applicable.

Important: These endpoint names are conceptual. A study's actual PARAMCD, dataset names, response rules, cutoff dates, and censoring conventions must come from the protocol, SAP, programming specifications, and applicable standards. Do not assume that a particular dataset name such as ADRS is universally mandated merely because it is common in oncology programming.

The Most Important Design Decision: Separate Assessment From Endpoint

A common programming mistake is to collapse every RECIST concept into one subject-level row. That makes a simple ORR table possible, but it destroys information needed for DOR, TTR, sensitivity analyses, listings, figures, and traceability.

Instead, retain the longitudinal assessment layer.

LayerExample informationTypical role
AssessmentCR, PR, SD, PD, NE at Week 8Represents the response at a particular assessment
Tumor burdenSLD = 72 mm; PCHG = −28%Supports quantitative response interpretation
Best responseBOR = PRSummarizes the longitudinal assessment history
Responder flagRESPFL = YSupports ORR numerator derivation
Response dateADT = 15-MAR-2026Supports TTR and DOR
Event endpointADT = 01-JUN-2026, CNSR = 0Supports time-to-event analysis

A Practical BDS Architecture

A BDS-style response dataset is often a natural home for assessment-level parameters. The exact implementation should follow the study specification and the applicable ADaM Implementation Guide rather than copying a variable set mechanically.

The basic BDS pattern is particularly useful because PARAMCD allows multiple analysis concepts to coexist while retaining a consistent subject/time structure. CDISC's published BDS examples illustrate the use of PARAMCD, AVAL, baseline variables, analysis dates, and related derivation variables.

VariableRECIST useExample
USUBJIDSubject identifier01-001-001
PARAMCDAnalysis parameterSLD, PCHG, OVRESP
PARAMParameter descriptionSum of Diameters of Target Lesions
ADTAnalysis assessment date2026-03-15
ADYAnalysis day57
AVISITNNumeric analysis visit8
AVISITAnalysis visit labelWeek 8
AVALNumeric analysis result72
AVALCCharacter resultPR
BASEBaseline numeric value100
CHGChange from baseline−28
PCHGPercent change from baseline−28%
ABLFLBaseline record flag where appropriateY
ANL01FLAnalysis inclusion flagY
CRIT1FLCriterion/result flag where specifiedY
Do not over-standardize from memory. The exact variable set depends on the ADaM structure, the study's analysis requirements, and the implementation guide/version being used. ADaM is explicitly designed around analysis needs and traceability rather than a one-size-fits-all oncology dataset.

Recommended Parameter Separation

One robust approach is to separate the quantitative tumor-burden parameters from the categorical response parameter.

PARAMCDMeaningAVALAVALC
SLDSum of target-lesion diameters72—
PCHGPercent change from baseline in SLD−28—
OVRESPOverall RECIST response—PR
BORBest overall response—PR

The exact parameter codes should be defined by the study's metadata and standards strategy. The important concept is that a numeric tumor-burden measure should not be confused with a categorical response classification.

Deriving Sum of Target-Lesion Diameters

Suppose a patient has four target lesions at baseline:

$$ 42 + 28 + 19 + 11 = 100\text{ mm} $$

At Week 8, the corresponding measurements are:

$$ 32 + 22 + 12 + 6 = 72\text{ mm} $$

The analysis value is therefore:

$$ SLD_{8}=72\text{ mm} $$

and percent change from baseline is:

$$ PCHG = \frac{72-100}{100}\times100 = -28\% $$

The −28% result is not itself a RECIST response category. It is one quantitative input into the response assessment.

Deriving the Nadir

For target-lesion progression, the relevant reference is the smallest on-study SLD, commonly called the nadir.

Suppose a patient's SLD history is:

VisitSLDPCHG from baseline
Baseline100 mm0%
Week 872 mm−28%
Week 1260 mm−40%
Week 1662 mm−38%
Week 2076 mm−24%

The nadir is 60 mm. At Week 20, the increase from nadir is:

$$ \frac{76-60}{60}\times100 = 26.7\% $$

The patient has therefore exceeded the 20% relative-growth component. Because RECIST 1.1 also requires at least a 5 mm absolute increase in SLD for target-lesion PD, the absolute increase is:

$$ 76-60=16\text{ mm} $$

which exceeds 5 mm.

Programming implication: A simple PCHG >= 20 rule is wrong for target-lesion PD. The denominator is the nadir SLD, not necessarily baseline, and the absolute increase criterion must also be evaluated. In addition, new lesions and non-target disease can independently affect the overall response.

Why Overall Response Cannot Be Derived From PCHG Alone

This is one of the most important concepts in oncology ADaM programming.

A patient can have a 35% decrease in target-lesion SLD and still fail to have an overall response of PR if the complete RECIST assessment contains another reason to prevent that classification, such as unequivocal progression of non-target disease or a new lesion.

Likewise, a patient can have target-lesion PD without the analyst manually classifying the patient based solely on the plotted percent change if another response rule or assessment condition controls the overall classification.

Rule hierarchy: Use the formal RECIST assessment logic to derive the categorical response. Use tumor-burden calculations to support and explain that derivation. Do not reverse the relationship and infer RECIST categories from one numeric variable.

Assessment-Level Response

At each scheduled response assessment, the analysis dataset should preserve the result needed to reproduce the patient's longitudinal response history. A simplified example is:

USUBJIDADTSLDPCHGOVRESP
00101-JAN1000SD
00129-JAN84−16SD
00126-FEB68−32PR
00126-MAR64−36PR
00123-APR82−18PD

This longitudinal structure is much more useful than retaining only BOR=PR.

Best Overall Response

Best overall response is a longitudinal endpoint. It is derived after considering the sequence of overall response assessments and the study's prespecified requirements.

A simplified response hierarchy is:

1
CR: highest response category when the complete RECIST assessment supports complete response.
2
PR: next-best category when the patient meets the complete RECIST requirements for partial response.
3
SD: neither PR/CR nor PD, subject to the applicable duration rules.
4
PD: progression according to the applicable RECIST target, non-target, or new-lesion criteria.
5
NE: not evaluable when the required assessment cannot establish a response category.

The actual best-response algorithm should follow the protocol/SAP and the applicable RECIST version. In particular, response confirmation rules differ between certain trial designs. RECIST 1.1 no longer universally requires confirmation of CR/PR in randomized trials, whereas confirmation remains relevant in trials where response is the primary endpoint under the original RECIST 1.1 framework.

Objective Response Rate

ORR is typically defined as the proportion of subjects with a qualifying objective response, commonly CR or PR.

$$ ORR = \frac{N(\text{CR or PR})} {N(\text{analysis population})} \times100\% $$

The numerator is patient-level. The denominator is population-level. This distinction matters when designing ADaM.

USUBJIDBORRESPFLORR contribution
001PRYNumerator
002SDNNot numerator
003CRYNumerator
004PDNNot numerator
005NENNot numerator
ADaM design insight: A responder flag is often more reusable than embedding the phrase "CR or PR" inside every downstream statistical program. The flag should, however, be derived transparently from the formal response variable and documented in metadata.

Example ORR Programming Logic

/* Illustrative SAS-style logic */

if BOR in ("CR","PR") then RESPFL = "Y";
else if not missing(BOR) then RESPFL = "N";

if RESPFL = "Y" then ORRFL = "Y";

The code is intentionally simple. The complexity belongs upstream in the correct derivation of BOR. A one-line ORR program cannot repair an incorrect best-response derivation.

Duration of Response

DOR introduces a second layer of complexity because a response endpoint needs both a qualifying response start date and an end event or censoring date.

A common conceptual definition is:

$$ DOR = \text{Date of progression or death} - \text{Date of first qualifying response} + 1 $$

The exact inclusion of the +1, date precision, event hierarchy, and censoring convention should follow the SAP.

Critical: DOR is generally defined only among responders. Therefore, a DOR dataset cannot simply assign zero to every non-responder. Non-responders are usually outside the DOR analysis population, while responders who have not experienced the event may be censored according to the SAP.

DOR Start Date Is Not Necessarily the Date of the Best Response

Consider:

AssessmentDateResponse
Baseline01-JanSD
Week 429-JanPR
Week 826-FebCR
Week 1226-MarCR
Week 1623-AprPD

If the SAP defines DOR from the first documented response, the DOR origin is 29-Jan, not 26-Feb.

That distinction is easy to lose if the programmer stores only BOR=CR.

Time to Response

TTR is also a date-derived endpoint.

$$ TTR = \text{Date of first qualifying response} - \text{Endpoint origin date} + 1 $$

The origin might be randomization, first dose, or another protocol-defined date. Therefore, TTR cannot be derived correctly unless the response dataset and the subject-level treatment/date variables are joined consistently.

ADTTE for Time-to-Event Endpoints

DOR, TTR, PFS, overall survival, and similar endpoints are naturally represented using an ADTTE-style structure when the analysis requires time-to-event methods.

A conceptual ADTTE record contains:

VariablePurposeExample
USUBJIDSubject001
PARAMCDEndpointDOR
PARAMEndpoint descriptionDuration of Response
STARTDTTime origin29-Jan
ADTEvent/censor date23-Apr
AVALDuration85
CNSREvent/censor indicator0
EVNTDESCEvent descriptionProgressive Disease
ANL01FLAnalysis inclusionY

The precise variable set and derivation should follow the applicable ADaM structure and study specification. The conceptual point is that the event date, censoring status, endpoint origin, and duration need to be retained together.

The DOR Dataset Is Usually a Selected Population

Suppose five subjects have the following BOR:

SubjectBORResponder?DOR analysis?
001PRYesYes
002SDNoNo
003CRYesYes
004PDNoNo
005PRYesYes

The DOR analysis population contains subjects 001, 003, and 005, assuming the SAP defines DOR among responders.

Do not confuse DOR with PFS. PFS is typically evaluated in the broader efficacy population, while DOR is usually conditional on achieving a qualifying response. Their origins, events, and censoring rules are therefore different.

PFS Is Related to RECIST but Is a Different Endpoint

PFS is generally defined as the time from a protocol-specified origin to the earliest of progression or death.

$$ PFS = \min(\text{Date of PD},\text{Date of Death}) - \text{Origin Date} + 1 $$

The important programming question is not the arithmetic. It is determining the correct event date and censoring date according to the SAP.

For example, if a patient has PD on Day 180 and dies on Day 220:

$$ PFS=180 $$

if the origin is Day 0 and the SAP's date convention produces that duration. The death does not replace the earlier progression event.

Endpoint Architecture

Figure 2. One Patient, Multiple RECIST Endpoints
The same assessment history can feed several distinct endpoints.
Longitudinal RECIST assessment history Dates • SLD • PCHG • target response • non-target response • new lesions • overall response BOR Best category ORR Responder flag TTR / DOR Response dates PFS PD / death Do not derive these endpoints independently from raw SDTM in separate programs. Build reusable analysis concepts and document their dependencies.

ADSL Still Matters

RECIST endpoints rarely stand alone. ADSL commonly supplies subject-level information such as treatment assignment, analysis populations, treatment dates, randomization dates, stratification variables, and other covariates needed for analysis.

For example:

ADSL variablePotential RECIST use
TRT01PTreatment-arm summaries
TRTSDTPotential origin for treatment-based time endpoints
RANDDTPotential origin for randomized time-to-event endpoints
Safety/efficacy population flagsAnalysis denominator selection
Stratification variablesStratified efficacy analyses

The exact variable names depend on the study's ADSL specification.

Traceability: The Feature That Makes the Dataset Defensible

For a regulatory-quality oncology analysis, it should be possible to start with a reported result and work backward.

1
Table result: ORR = 42.1%.
2
Patient numerator: identify subjects with RESPFL=Y.
3
Subject response: inspect BOR.
4
Assessment history: inspect the qualifying CR/PR assessment.
5
RECIST inputs: inspect SLD, non-target response, and new-lesion status.
6
Source: trace the analysis records back to the underlying SDTM observations.

This is much stronger than having a single derived value with no visible intermediate logic.

Example Traceability Chain

LayerExamplePurpose
SDTM measurementTR 32 mm, 22 mm, 12 mm, 6 mmObserved lesion measurements
Derived SLD72 mmQuantitative tumor burden
PCHG−28%Change from baseline
Assessment responseSDRECIST interpretation at visit
Later responsePRQualifying response
BORPRBest overall response
RESPFLYORR numerator
TTR57 daysTime to first qualifying response

Programming the Quantitative Layer in SAS

A simplified derivation of percent change might look like:

if not missing(AVAL) and not missing(BASE) and BASE ne 0 then do;
    CHG  = AVAL - BASE;
    PCHG = 100 * CHG / BASE;
end;

This is mathematically straightforward. The difficult questions are:

  • Which record is baseline?
  • Which target lesions contribute to SLD?
  • How are lesions that disappear handled?
  • How are too-small-to-measure lesions represented?
  • Which assessments are valid for the analysis?
  • Are post-progression assessments included?
  • How are unscheduled assessments handled?

Those questions belong in the specification, not as undocumented assumptions hidden in the SAS code.

Baseline Selection

A RECIST analysis requires a clearly defined baseline. In many studies this will be the last adequate assessment before treatment, but the actual rule must be specified.

A robust derivation often identifies the baseline record explicitly:

/ * Illustrative only: study-specific baseline rule required * /

if ADT <= TRTSDT and not missing(AVAL) then
    baseline_candidate = 1;

Then a separate selection step determines which eligible assessment becomes the baseline.

Do not use "first record" as a proxy for baseline. Sorting data by date and taking the first nonmissing observation can produce the wrong baseline when screening, rescreening, unscheduled imaging, or multiple pre-treatment assessments exist.

Assessment Dates vs. Visit Labels

RECIST endpoints are fundamentally time-dependent. A nominal visit such as "Week 8" is not necessarily equivalent to Day 56.

Therefore, retain both where useful:

VariableExampleWhy it matters
ADT15-Mar-2026Actual assessment date
ADY57Elapsed analysis time
AVISITN8Nominal visit ordering
AVISITWeek 8Human-readable visit label

CDISC BDS examples demonstrate this general pattern of retaining analysis dates, timepoints, and visit variables to support analysis and display.

Unscheduled Assessments

An unscheduled scan can create a difficult programming question: should it contribute to the formal response assessment?

There is no universal answer independent of the protocol and SAP.

A study might:

  • Use all valid assessments for tumor-burden plots.
  • Use only scheduled assessments for a primary endpoint.
  • Use unscheduled assessments if they document suspected progression.
  • Use the assessment for some endpoints but not others.
Best practice: Do not delete unscheduled assessments merely because the nominal visit is missing. Preserve them and explicitly derive the analysis inclusion flag.

Post-Progression Assessments

Post-progression imaging can be valuable for descriptive analyses but can be incorrect to include in a specific endpoint if the SAP defines a cutoff.

For example, a patient may have:

VisitResponseSLD
Week 8PR68 mm
Week 12PD84 mm
Week 16PD110 mm
Week 24PR-like shrinkage70 mm

The Week 24 tumor measurement does not automatically erase the Week 12 progression event. How later observations are handled depends on the endpoint, protocol, and prespecified rules.

Best Overall Response Is Not Simply MIN(PCHG)

This shortcut is tempting:

BOR = minimum(PCHG)

but it is conceptually wrong.

The minimum percent change answers:

$$ \text{What was the greatest observed target-lesion shrinkage?} $$

BOR answers:

$$ \text{What was the patient's best formal RECIST overall response?} $$

Those are not equivalent.

Why the Difference Matters

Suppose:

AssessmentPCHGTarget statusNon-targetNew lesionOverall
Week 4−12%SDNon-PDNoSD
Week 8−35%PRNon-PDNoPR
Week 12−45%PRProgressionNoPD

The minimum PCHG is −45%, but the patient's formal BOR may remain PR rather than becoming some new "better" category based on the numeric nadir. The categorical response is determined by the complete assessment history.

Response Confirmation

Confirmation is one of the most study-sensitive parts of RECIST endpoint programming.

If a response endpoint requires confirmation, the programmer needs more than a response flag. The program must establish that a subsequent assessment supports the required confirmation according to the protocol/SAP.

1
Identify the first assessment meeting the response criterion.
2
Identify the required confirmation window.
3
Determine whether a subsequent adequate assessment confirms response.
4
Apply the protocol/SAP rule for missed, delayed, or unevaluable confirmation.
5
Only then derive the responder status used for the endpoint.

RECIST 1.1 changed the historical confirmation requirement: confirmation of response is required for trials with response as a primary endpoint in the relevant non-randomized setting, but is not universally required in randomized trials.

CR, PR, SD, PD, and NE

CategoryMeaningADaM implication
CRComplete response under the full RECIST assessmentCategorical endpoint value
PRPartial response under the full RECIST assessmentCategorical endpoint value
SDNeither response nor progressionImportant for BOR and DCR
PDProgression according to applicable RECIST rulesDrives PFS/DOR events where specified
NENot evaluableImportant denominator and missingness consideration

CR should not be represented as "PCHG = −100%" because the formal CR definition includes lesion disappearance and lymph-node considerations rather than a generic numeric threshold.

New Lesions

New lesions are especially important because they demonstrate why the RECIST response dataset cannot be reduced to target-lesion percent change.

A patient may have:

$$ PCHG=-45\% $$

and still be classified as progressive disease if an unequivocal new lesion meets the RECIST requirements.

The new-lesion information therefore needs to remain accessible to the response derivation.

Non-Target Lesions

Non-target disease also needs to be retained because unequivocal progression of non-target lesions can contribute to overall PD.

This means a robust oncology analysis architecture typically carries at least three conceptual disease components:

  • Target-lesion quantitative response.
  • Non-target-lesion qualitative response.
  • New-lesion status.

The overall response is then derived from these components according to the RECIST rules and study-specific implementation.

A Simplified Overall Response Decision Engine

The following pseudocode is intentionally simplified. It illustrates the architecture, not a replacement for a validated RECIST derivation engine.

if NEW_LESION = "Y" then
    OVRESP = "PD";

else if NONTARGET = "PD" then
    OVRESP = "PD";

else if TARGET = "CR" and NONTARGET in ("CR","NON-CR/NON-PD") then
    OVRESP = "CR";

else if TARGET = "PR" and NONTARGET in ("CR","NON-CR/NON-PD") then
    OVRESP = "PR";

else if TARGET in ("SD","PR") then
    OVRESP = "SD";

else
    OVRESP = "NE";
Do not copy this pseudocode into production. The actual RECIST decision matrix is more nuanced than this abbreviated illustration, particularly for patients without measurable disease, non-target progression, new lesions, missing assessments, and longitudinal best-response rules.

Response Endpoint Metadata

One of the most useful programming practices is to make parameter metadata explicit.

PARAMCDPARAMValue typeExample
SLDSum of Diameters of Target LesionsNumeric72
PCHGPercent Change from Baseline in SLDNumeric−28
OVRESPOverall RECIST 1.1 ResponseCharacterPR
BORBest Overall RECIST 1.1 ResponseCharacterPR

This metadata makes downstream programming easier because every parameter has a defined meaning, source, derivation, and analysis role.

CRIT Variables and Responder Flags

ADaM BDS can use criterion-related variables when an analysis needs to represent whether a numeric value meets a defined threshold. CDISC examples show BDS implementations using criterion variables and criterion flags.

For RECIST, a study could use criterion variables to support quantitative interpretation, but a criterion flag should not be mistaken for the formal RECIST response category.

ConceptQuestion answered
Criterion flagDid this quantitative observation meet the specified numeric criterion?
Target responseWhat was the RECIST target-lesion response?
Overall responseWhat was the full RECIST assessment?
Responder flagDoes the patient qualify for the endpoint's responder definition?

ORR Statistical Analysis

Once patient-level responder status is correct, ORR becomes a relatively simple categorical endpoint.

For treatment arm \(j\):

$$ \widehat{p}_j = \frac{r_j}{n_j} $$

where \(r_j\) is the number of responders and \(n_j\) is the prespecified analysis population.

Confidence intervals, treatment comparisons, stratification, and missing-data handling should be specified independently in the SAP.

Do Not Hard-Code the ORR Denominator

A common error is to use the number of subjects in the entire ADSL dataset as the denominator.

Instead, the denominator should come from the analysis population defined for the endpoint.

/* Illustrative */

if EFFFL = "Y" then do;
    if RESPFL = "Y" then numerator = 1;
    denominator = 1;
end;

The statistical procedure can then use the appropriate population rather than implicitly treating every randomized or treated subject as evaluable.

Handling NE and Missing Assessments

NE is not necessarily the same thing as a missing value.

A subject can have an actual response assessment that is explicitly not evaluable. Another subject may have no post-baseline assessment at all. Those situations can affect endpoint denominators differently depending on the analysis specification.

SituationPotential representationProgramming concern
No assessmentNo response record / missing assessmentDoes subject remain in denominator?
Assessment not evaluableOVRESP = NEHow does SAP treat NE?
Valid PDOVRESP = PDNot a missing response
Valid SDOVRESP = SDNot a missing response

Duration of Response Censoring

DOR censoring is one of the areas where two competent programmers can produce different results if the SAP is not explicit.

Suppose a responder has:

  • First response: Day 60
  • Last adequate assessment without PD: Day 240
  • No subsequent progression or death

The endpoint may be censored at Day 240 under a conventional rule. But if the subject starts a new anticancer therapy before a later assessment, the censoring convention may change.

Programming rule: The event/censoring hierarchy belongs in the SAP and programming specification. Do not infer it from generic Kaplan-Meier conventions.

ADTTE Example for DOR

USUBJID  PARAMCD  STARTDT    ADT        AVAL  CNSR  EVNTDESC
001      DOR      29JAN2026  23APR2026  85    0     Progressive Disease
002      DOR      12FEB2026  30JUN2026  139   1     Last Adequate Assessment
003      DOR      05MAR2026  18MAY2026  75    0     Death

Here:

  • CNSR=0 represents an event.
  • CNSR=1 represents censoring.
  • STARTDT is the response-origin date.
  • ADT is the event/censor date.
  • AVAL is the derived duration.

The actual censoring reason should be represented according to the study's ADTTE specification, often with an event/censor description variable.

Time-to-Event Derivation in SAS

AVAL = ADT - STARTDT + 1;

if EVENTFL = "Y" then CNSR = 0;
else CNSR = 1;

Again, the arithmetic is the easy part. The difficult part is selecting ADT and STARTDT correctly.

One Patient, Five Endpoints

EndpointOriginEvent / resultIllustrative value
BORAssessment historyBest category = PRPR
ORRPatient responseCR/PR responderY
TTRProtocol originFirst qualifying response57 days
DORFirst qualifying responsePD/death/censor85 days
PFSProtocol originPD/death/censor180 days

The endpoints are related, but none should be derived by simply copying another endpoint.

Example End-to-End Patient History

DaySLDPCHGOverall ResponseEndpoint implication
11000%SDBaseline
2982−18%SDNo response yet
5768−32%PRFirst qualifying response
8561−39%PRResponse continues
11363−37%PRResponse continues
14180−20%PDProgression event

From this one history, several endpoints can be derived:

  • First response: Day 57.
  • TTR: based on the prespecified origin and Day 57.
  • DOR: based on Day 57 through the applicable PD/event/censoring rule.
  • BOR: PR.
  • ORR contribution: responder.
  • PFS: based on the protocol-defined origin through the Day 141 PD event.

Programming Architecture for a Production Study

1
Read the SAP first. Extract endpoint definitions, populations, response windows, confirmation rules, and censoring rules.
2
Build SDTM inputs. Confirm the response/imaging domains and their relationships.
3
Create quantitative analysis data. Derive target-lesion sums, baseline, change, and percent change.
4
Create assessment-level response. Combine target, non-target, and new-lesion information.
5
Create longitudinal best-response logic. Derive BOR and response dates.
6
Create responder variables. Derive the endpoint-specific numerator flag.
7
Create ADTTE endpoints. Derive TTR, DOR, PFS, and related time-to-event parameters.
8
Validate against patient histories. Review edge cases, not just aggregate counts.

Separate Derivation Programs by Concept

A maintainable oncology programming environment generally benefits from modular derivations rather than one enormous program.

ModuleOutput
Baseline derivationBaseline SLD and baseline flags
Tumor burdenSLD, CHG, PCHG, nadir
Assessment responseTarget/non-target/new-lesion/overall response
Best responseBOR and response date
Responder endpointRESPFL / endpoint-specific inclusion
Time-to-eventADTTE records
ReportingTables, listings, figures, Kaplan-Meier inputs

This architecture also makes independent QC easier because each module has a clear input and output contract.

R Example: Longitudinal Response Dataset

library(dplyr)

recist_bds <- tibble(
  USUBJID = c("001","001","001","001"),
  ADT     = as.Date(c("2026-01-01","2026-01-29",
                      "2026-02-26","2026-03-26")),
  SLD     = c(100, 82, 68, 61),
  OVRESP  = c("SD","SD","PR","PR")
) %>%
  group_by(USUBJID) %>%
  arrange(ADT, .by_group = TRUE) %>%
  mutate(
    BASE = first(SLD),
    CHG  = SLD - BASE,
    PCHG = 100 * CHG / BASE
  ) %>%
  ungroup()

This produces the quantitative layer. A production implementation would usually obtain the observations from the study's analysis datasets rather than constructing them manually.

R Example: Responder Flag

bor <- recist_bds %>%
  group_by(USUBJID) %>%
  summarise(
    BOR = case_when(
      any(OVRESP == "CR", na.rm = TRUE) ~ "CR",
      any(OVRESP == "PR", na.rm = TRUE) ~ "PR",
      any(OVRESP == "SD", na.rm = TRUE) ~ "SD",
      any(OVRESP == "PD", na.rm = TRUE) ~ "PD",
      TRUE ~ "NE"
    ),
    .groups = "drop"
  ) %>%
  mutate(
    RESPFL = if_else(BOR %in% c("CR","PR"), "Y", "N")
  )
Why this example is deliberately incomplete: A simple priority rule is useful for demonstrating the data structure, but it is not a complete RECIST 1.1 BOR algorithm. Confirmation, minimum duration, assessment adequacy, progression, and study-specific rules must be implemented before production use.

R Example: ADTTE-Like DOR Derivation

dor <- tibble(
  USUBJID = c("001","002"),
  STARTDT = as.Date(c("2026-02-26","2026-03-05")),
  ADT     = as.Date(c("2026-05-21","2026-06-18")),
  CNSR    = c(0, 1)
) %>%
  mutate(
    AVAL = as.numeric(ADT - STARTDT) + 1
  )

The example demonstrates the structure, not the full censoring algorithm.

Validation: What Should Be Tested?

RECIST endpoint validation needs more than checking that the output dataset has valid variable names.

CheckQuestion
BaselineIs the correct pre-treatment assessment selected?
SLDAre the correct target lesions included?
PCHGDoes the formula reproduce the plotted value?
NadirIs the smallest eligible on-study SLD correctly identified?
PDAre both relative and absolute target-lesion criteria evaluated?
New lesionsCan a new lesion correctly trigger PD?
Non-target diseaseCan unequivocal progression affect overall response?
BORDoes the longitudinal algorithm produce the expected best response?
Response dateIs the first qualifying response date correct?
DORAre responders and event/censor dates correct?
PFSIs the earliest qualifying progression/death event selected?
ORRDoes the numerator equal the validated responder set?

Edge Cases Worth Building Into Test Data

A serious RECIST validation suite should deliberately contain difficult patients.

  1. No post-baseline assessment.
  2. Only one post-baseline assessment.
  3. Exact −30% shrinkage.
  4. Just above −30%.
  5. Exact 20% increase from nadir.
  6. 20% increase from nadir but less than 5 mm absolute increase.
  7. 20% increase plus at least 5 mm absolute increase.
  8. New lesion with substantial target-lesion shrinkage.
  9. Non-target progression with target-lesion response.
  10. CR followed by PR.
  11. PR followed by PD.
  12. Response followed by missing assessment.
  13. Responder who starts new anticancer therapy.
  14. Responder who dies without documented progression.
  15. Assessment occurring outside the nominal visit window.

The 20% / 5 mm Boundary Test

This is one of the best unit tests for RECIST target-lesion progression.

Suppose nadir SLD is 20 mm. A 20% increase is:

$$ 20\times1.20=24\text{ mm} $$

The increase is only 4 mm:

$$ 24-20=4\text{ mm} $$

Therefore, the relative increase alone does not satisfy the target-lesion 5 mm absolute increase requirement.

Now consider 25 mm:

$$ 25-20=5\text{ mm} $$

and:

$$ \frac{25-20}{20}\times100=25\% $$

Both conditions are satisfied.

Exact Threshold Tests

NadirCurrent SLD% IncreaseAbsolute IncreaseTarget-lesion PD?
202420%4 mmNo
202525%5 mmYes
506020%10 mmYes
10011919%19 mmNo

Boundary tests like these are more valuable than testing only obvious progressors.

Do Not Confuse Percent Change With Percent Increase From Nadir

This is a frequent mathematical error.

If baseline is 100 and nadir is 60, then a later value of 72 has:

$$ PCHG_{baseline} = \frac{72-100}{100}\times100 = -28\% $$

but the increase from nadir is:

$$ \frac{72-60}{60}\times100 = 20\% $$

The two percentages answer different questions.

Programming implication: Store the baseline-relative percentage change and, when required by the analysis, derive the nadir-relative change separately. Do not attempt to recover one by interpreting the other as though they use the same denominator.

Handling Complete Response

If all target lesions disappear and lymph nodes meet the applicable requirements, target-lesion CR may be supported. But overall CR also requires the complete RECIST assessment.

Therefore:

if PCHG = -100 then CR = "Y";

is not an appropriate general RECIST derivation.

The quantitative value can support the analysis, but the categorical response must use the formal lesion-level and disease-component rules.

RECIST and ADTTE Parameterization

A single ADTTE dataset can contain multiple endpoint parameters.

PARAMCDPARAMOriginEvent
PFSProgression-Free SurvivalRandomizationPD or death
TTRTime to ResponseRandomization / first doseFirst qualifying CR/PR
DORDuration of ResponseFirst qualifying CR/PRPD or death
TTPTime to ProgressionProtocol originPD

These are distinct endpoints even though several use the same underlying RECIST assessment history.

Why DOR and PFS Need Different Event Logic

Suppose a responder dies without a documented progression.

  • For DOR, death may be an event depending on the endpoint definition.
  • For PFS, death is generally an event.
  • For TTP, death may be handled differently because the endpoint is defined around progression rather than the composite progression/death event.

Therefore, a generic "RECIST event date" should not be blindly reused for every time-to-event endpoint.

Response Assessment Cutoff Dates

Many oncology analyses have a data cutoff date.

A response observed after the cutoff cannot be allowed to enter the primary analysis merely because it exists in the raw database.

The analysis dataset should therefore make the cutoff rule explicit.

if ADT <= DCO then ANL01FL = "Y";
else ANL01FL = "N";

This is illustrative. Some endpoints require additional rules around assessments that straddle the cutoff or around event dates.

Response Data and Data Cutoff

AssessmentDateBefore DCO?Potential analysis status
Week 801-MarYesEligible
Week 1229-MarYesEligible
Week 1626-AprNoExcluded from cutoff analysis

Analysis Flags Should Be Endpoint-Specific

It is tempting to create one universal analysis flag and reuse it everywhere. That can be dangerous.

The assessment used for a tumor-burden plot may not be identical to the assessment used for the primary ORR endpoint. Similarly, the last adequate assessment used to censor DOR may be governed by rules different from those used for another endpoint.

Better pattern: Use clearly named analysis flags with documented meanings, rather than a single ambiguous flag whose interpretation changes depending on the program that reads it.

Programming Specification Example

ItemSpecification
PopulationPrespecified efficacy analysis population
RECIST versionRECIST 1.1
BaselineLast adequate assessment before first dose, subject to SAP
Target burdenSum of target-lesion diameters
ResponseOverall RECIST assessment
BORBest overall response under prespecified rules
ORRCR or PR among specified analysis population
TTROrigin to first qualifying response
DORFirst qualifying response to PD/death/censor
PFSOrigin to PD/death/censor
CutoffProtocol/SAP-defined DCO

Common ADaM Programming Mistakes

  1. Deriving BOR from minimum PCHG. Tumor shrinkage is not the same as overall RECIST response.
  2. Using baseline instead of nadir for PD. Target-lesion PD uses the smallest on-study sum as the reference.
  3. Ignoring the 5 mm absolute increase. The 20% relative increase is not sufficient by itself for target-lesion PD.
  4. Ignoring new lesions. New lesions can drive progression even when target lesions are shrinking.
  5. Ignoring non-target progression. Overall response is not determined solely from target-lesion PCHG.
  6. Using the best response date as the DOR origin. DOR commonly begins at the first qualifying response, not necessarily the best later category.
  7. Including non-responders in DOR without an explicit rule. DOR is generally conditional on response.
  8. Using the same event definition for PFS and DOR. Endpoint definitions differ.
  9. Dropping NE without documentation. NE and missing assessment are not automatically interchangeable.
  10. Hard-coding nominal visits. Actual dates and assessment windows can matter.
  11. Ignoring the data cutoff. Post-cutoff observations can contaminate the analysis.
  12. Building independent RECIST logic in every table program. This creates inconsistent endpoints.
  13. Failing to preserve intermediate derivations. Without SLD, nadir, response date, and event logic, traceability becomes difficult.

How to Validate a Reported ORR

Suppose a table reports:

$$ ORR=42.1\% $$

Do not validate the number only by rerunning the final statistical procedure. Instead:

1
Extract the subjects contributing to the denominator.
2
Extract the subjects contributing to the numerator.
3
Compare the numerator subjects against validated BOR.
4
For each responder, identify the qualifying assessment.
5
Trace the assessment to target/non-target/new-lesion inputs.
6
Recalculate the numerator and denominator independently.

This approach validates both the arithmetic and the clinical logic.

How to Validate a DOR Kaplan-Meier Input

For each ADTTE DOR record, verify:

  • The subject is a qualifying responder.
  • The response-origin date is correct.
  • The event date is correct if an event occurred.
  • The censor date is correct if no event occurred.
  • CNSR is correct.
  • AVAL equals the specified date difference.
  • The subject's last adequate assessment supports the censoring decision.
  • The record is included in the correct analysis population.

Independent Cross-Check Strategy

For high-risk oncology endpoints, a useful QC approach is to create an independent derivation that does not reuse the primary program's intermediate datasets.

For example:

Primary path:
SDTM → primary RECIST derivation → ADaM → TTE → TLF

QC path:
SDTM → independent response checks → independent endpoint checks → compare

The independent path does not need to reproduce the entire production pipeline. It should be sufficiently different to detect systematic logic errors.

ADaM Metadata and Define-XML

The dataset itself is only part of the submission story. The metadata should explain what each parameter and derived variable means and how it is obtained.

For RECIST endpoints, metadata should make it possible to understand:

  • The source of the tumor measurements.
  • The definition of baseline.
  • The derivation of SLD.
  • The derivation of PCHG.
  • The RECIST response algorithm.
  • The definition of BOR.
  • The responder definition.
  • The DOR/TTR/PFS origins and event rules.
  • The analysis population.

This is consistent with the fundamental ADaM emphasis on analysis metadata, traceability, and reproducibility.

What Belongs in the Dataset vs. the Program

DatasetProgram/specification
SLDRules for selecting target lesions
PCHGFormula and baseline selection logic
OVRESPRECIST decision algorithm
BORLongitudinal best-response algorithm
RESPFLResponder definition
ADTTE event dateEndpoint-specific event hierarchy
CNSREndpoint-specific censoring rules

The final analysis dataset should contain enough information to support reproduction of the result, while the specification and metadata explain the derivation rules.

What an Advanced RECIST ADaM Dataset Should Make Easy

A well-designed dataset should make these questions answerable without revisiting raw data unnecessarily:

  • What was the patient's baseline tumor burden?
  • What was the SLD at each analysis assessment?
  • What was the percent change from baseline?
  • What was the nadir?
  • When did the patient first meet the response criterion?
  • Was the response confirmed if confirmation was required?
  • What was the overall response at each assessment?
  • What was the best overall response?
  • Did the patient contribute to ORR?
  • What was the response start date?
  • When did progression occur?
  • Was progression based on target, non-target, or new-lesion criteria?
  • Was the subject censored for DOR or PFS?
  • What was the event/censor date?
  • Can every endpoint be traced back to the assessment history?

RECIST Endpoint Dependency Map

EndpointRequires assessment history?Requires dates?Requires censoring?Typical ADaM layer
SLDYesYesNoBDS-style
PCHGYesYesNoBDS-style
OVRESPYesYesNoBDS-style
BORYesYesNoBDS-style / subject-level summary
ORRThrough BORNot necessarilyNoCategorical summary
TTRYesYesUsuallyADTTE
DORYesYesYesADTTE
PFSYesYesYesADTTE

Practical Workflow for Statistical Programmers

When receiving a new oncology study, use the following sequence.

1
Read the endpoint definitions. Identify the exact wording for ORR, BOR, DOR, TTR, PFS, and any secondary response endpoints.
2
Identify the RECIST version. Do not assume RECIST 1.1 merely because the disease area normally uses it.
3
Map SDTM inputs. Determine where target, non-target, new-lesion, and assessment information reside.
4
Define the analysis population. Establish the exact denominator for each endpoint.
5
Build quantitative tumor burden. Derive baseline, SLD, CHG, PCHG, and nadir.
6
Build assessment response. Apply the complete RECIST logic.
7
Build longitudinal endpoints. Derive BOR, responder status, response dates, and progression dates.
8
Build ADTTE. Create DOR, TTR, PFS, and other time-to-event parameters.
9
Validate. Test boundary conditions and difficult patient histories.
10
Trace. Demonstrate that final TLF results can be traced back through ADaM to SDTM.

Recommended Minimum Variable Set for a Response BDS

The following is a conceptual starting point, not a universal required list.

DomainVariables
IdentifiersSTUDYID, USUBJID
TreatmentTRT01P, TRT01PN or study-specific treatment variables
ParameterPARAM, PARAMCD, PARAMN
TimingADT, ADY, AVISIT, AVISITN
ValueAVAL, AVALC
BaselineABLFL, BASE
ChangeCHG, PCHG
Analysis flagsANL01FL and other endpoint-specific flags
ResponseTarget/non-target/new-lesion/overall response variables as specified
TraceabilitySource sequence variables where appropriate

Recommended Minimum Variable Set for ADTTE

VariablePurpose
STUDYIDStudy identifier
USUBJIDSubject identifier
PARAMCD / PARAMEndpoint identity
STARTDTEndpoint origin
ADTEvent or censor date
AVALDerived duration
CNSREvent/censor indicator
EVNTDESCEvent/censor reason
ANL01FLAnalysis inclusion

Additional variables may be required by the study, endpoint, or ADaM implementation.

A Practical Example: From SDTM to ORR

Consider a simplified subject whose target-lesion measurements produce the following SLD values:

AssessmentSLDPCHGTargetNon-targetNew lesionOverall
Baseline1000%NENon-PDNoSD
Week 482−18%SDNon-PDNoSD
Week 868−32%PRNon-PDNoPR
Week 1263−37%PRNon-PDNoPR

The analysis engine can then derive:

BOR    = "PR"
RESPFL = "Y"

The subject contributes one observation to the ORR numerator.

A Practical Example: Response Followed by Progression

Now add:

AssessmentSLDPCHGNadirOverall
Week 1670−30%63PR
Week 2082−18%63PD

The increase from nadir is:

$$ \frac{82-63}{63}\times100 \approx30.2\% $$

and the absolute increase is:

$$ 82-63=19\text{ mm} $$

The target-lesion growth criteria are therefore satisfied, assuming the assessment is otherwise appropriate and no conflicting response rule changes the overall classification.

What Should Be Stored for DOR?

At minimum, the derivation needs access to:

  • First qualifying response date.
  • Subsequent progression dates.
  • Death date, if applicable.
  • Last adequate disease assessment.
  • New anticancer therapy date, if relevant to the SAP.
  • Data cutoff date.
  • Endpoint-specific censoring rules.

Trying to derive DOR from BOR alone is therefore insufficient.

What Should Be Stored for PFS?

PFS generally requires:

  • Protocol-defined origin date.
  • Progression date.
  • Death date.
  • Last adequate assessment for censoring.
  • Relevant intercurrent-event information.
  • Data cutoff date.

The exact censoring rules must come from the SAP.

Response Data Are Often the Most Clinically Complex ADaM Domain

The mathematics of PCHG is trivial. The clinical logic is not.

The complexity comes from:

  • Multiple lesion types.
  • Multiple assessments.
  • Baseline selection.
  • Nadir tracking.
  • New lesions.
  • Non-target disease.
  • Missing assessments.
  • Unscheduled assessments.
  • Confirmation rules.
  • Intercurrent treatment.
  • Death.
  • Data cutoff.
  • Endpoint-specific censoring.

This is why oncology response programming benefits from a carefully designed analysis architecture rather than isolated table-specific derivations.

Final QC Checklist

1
Confirm the RECIST version and protocol-specific modifications.
2
Confirm the exact analysis population for each endpoint.
3
Confirm baseline selection and baseline date.
4
Recalculate target-lesion SLD independently.
5
Recalculate PCHG independently.
6
Validate nadir logic.
7
Test the 20% and 5 mm progression boundary.
8
Validate new-lesion and non-target progression handling.
9
Validate BOR against complete patient histories.
10
Validate responder flags against BOR.
11
Validate response start dates.
12
Validate DOR and PFS event/censoring rules independently.
13
Validate cutoff-date handling.
14
Reconcile patient counts and endpoint numerators to the final TLFs.
15
Confirm traceability from reported result to ADaM to SDTM.

Key Takeaways

The most important lesson is that RECIST 1.1 endpoints are not one variable.

They are a connected family of analysis concepts:

A
Measurements: lesion-level observations and target-lesion sums.
B
Derived tumor burden: baseline, change, percent change, and nadir.
C
Assessment response: CR, PR, SD, PD, or NE from the complete RECIST assessment.
D
Longitudinal response: BOR, qualifying response date, and responder status.
E
Time-to-event endpoints: TTR, DOR, PFS, and related parameters in an appropriate ADTTE structure.
F
Traceability: every reported endpoint should be explainable from the patient-level analysis history.
Bottom line: A high-quality RECIST 1.1 ADaM implementation preserves the longitudinal assessment history while deriving reusable patient-level endpoint variables. Do not reduce RECIST to a single percent-change threshold. Target-lesion shrinkage, non-target disease, new lesions, nadir, confirmation, best overall response, response dates, progression, and censoring all contribute to the final analysis. The strongest oncology ADaM datasets make those dependencies explicit, traceable, and independently testable.

References

Eisenhauer, E.A., Therasse, P., Bogaerts, J., et al. (2009). New response evaluation criteria in solid tumours: Revised RECIST guideline (version 1.1). European Journal of Cancer, 45(2), 228–247. PubMed.

RECIST Working Group / EORTC. RECIST 1.1. Current RECIST 1.1 response criteria and clarifications. RECIST 1.1 resource.

CDISC. ADaM. Analysis Data Model standards, implementation guidance, examples, and conformance resources. CDISC ADaM.

CDISC. ADaM v2.1. Foundational ADaM principles, ADSL, BDS, and analysis metadata. ADaM v2.1.

References

  1. EORTC RECIST Working Group. RECIST 1.1. https://recist.eortc.org/recist-1-1/
  2. Eisenhauer EA, Therasse P, Bogaerts J, et al. New response evaluation criteria in solid tumours: Revised RECIST guideline (version 1.1). European Journal of Cancer. 2009;45(2):228–247. PubMed
  3. National Cancer Institute, Cancer Therapy Evaluation Program. RECIST Guidelines Version 1.1. RECIST 1.1 PDF
  4. CDISC. ADaM Implementation Guide and Primer. CDISC ADaM Primer
  5. CDISC. ADaM v2.1. CDISC ADaM v2.1
  6. CDISC. ADaM Theory and Application. CDISC ADaM Course
  7. CDISC. ADaM Basic Data Structure (BDS) Using CRIT. CDISC Example
  8. CDISC. ADaM BDS: Changes in Weight and/or Body Mass Index (BMI). CDISC Example
  9. RECIST Working Group. RECIST 1.1 updates and clarifications concerning assessment of new lesions and measurement rules. PMC