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.
The RECIST-to-ADaM Mental Model
A useful way to think about the analysis is as a series of layers.
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
Best Overall Response
The best RECIST response category observed over the prespecified assessment period, subject to the protocol/SAP rules.
Objective Response Rate
The proportion of the analysis population achieving the prespecified response definition, commonly CR or PR.
Duration of Response
Time from the qualifying response to progression or death, with endpoint-specific censoring rules.
Time to Response
Time from the defined origin, commonly first dose or randomization, to the first qualifying response.
Progression-Free Survival
Time from the protocol-defined origin to progression or death, with censoring based on the SAP.
Disease Control Rate
A derived response endpoint commonly defined using CR, PR, and SD under a prespecified minimum-duration rule where applicable.
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.
| Layer | Example information | Typical role |
|---|---|---|
| Assessment | CR, PR, SD, PD, NE at Week 8 | Represents the response at a particular assessment |
| Tumor burden | SLD = 72 mm; PCHG = −28% | Supports quantitative response interpretation |
| Best response | BOR = PR | Summarizes the longitudinal assessment history |
| Responder flag | RESPFL = Y | Supports ORR numerator derivation |
| Response date | ADT = 15-MAR-2026 | Supports TTR and DOR |
| Event endpoint | ADT = 01-JUN-2026, CNSR = 0 | Supports 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.
| Variable | RECIST use | Example |
|---|---|---|
USUBJID | Subject identifier | 01-001-001 |
PARAMCD | Analysis parameter | SLD, PCHG, OVRESP |
PARAM | Parameter description | Sum of Diameters of Target Lesions |
ADT | Analysis assessment date | 2026-03-15 |
ADY | Analysis day | 57 |
AVISITN | Numeric analysis visit | 8 |
AVISIT | Analysis visit label | Week 8 |
AVAL | Numeric analysis result | 72 |
AVALC | Character result | PR |
BASE | Baseline numeric value | 100 |
CHG | Change from baseline | −28 |
PCHG | Percent change from baseline | −28% |
ABLFL | Baseline record flag where appropriate | Y |
ANL01FL | Analysis inclusion flag | Y |
CRIT1FL | Criterion/result flag where specified | Y |
Recommended Parameter Separation
One robust approach is to separate the quantitative tumor-burden parameters from the categorical response parameter.
| PARAMCD | Meaning | AVAL | AVALC |
|---|---|---|---|
SLD | Sum of target-lesion diameters | 72 | — |
PCHG | Percent change from baseline in SLD | −28 | — |
OVRESP | Overall RECIST response | — | PR |
BOR | Best 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:
At Week 8, the corresponding measurements are:
The analysis value is therefore:
and percent change from baseline is:
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:
| Visit | SLD | PCHG from baseline |
|---|---|---|
| Baseline | 100 mm | 0% |
| Week 8 | 72 mm | −28% |
| Week 12 | 60 mm | −40% |
| Week 16 | 62 mm | −38% |
| Week 20 | 76 mm | −24% |
The nadir is 60 mm. At Week 20, the increase from nadir is:
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:
which exceeds 5 mm.
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.
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:
| USUBJID | ADT | SLD | PCHG | OVRESP |
|---|---|---|---|---|
| 001 | 01-JAN | 100 | 0 | SD |
| 001 | 29-JAN | 84 | −16 | SD |
| 001 | 26-FEB | 68 | −32 | PR |
| 001 | 26-MAR | 64 | −36 | PR |
| 001 | 23-APR | 82 | −18 | PD |
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:
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.
The numerator is patient-level. The denominator is population-level. This distinction matters when designing ADaM.
| USUBJID | BOR | RESPFL | ORR contribution |
|---|---|---|---|
| 001 | PR | Y | Numerator |
| 002 | SD | N | Not numerator |
| 003 | CR | Y | Numerator |
| 004 | PD | N | Not numerator |
| 005 | NE | N | Not numerator |
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:
The exact inclusion of the +1, date precision,
event hierarchy, and censoring convention should follow the SAP.
DOR Start Date Is Not Necessarily the Date of the Best Response
Consider:
| Assessment | Date | Response |
|---|---|---|
| Baseline | 01-Jan | SD |
| Week 4 | 29-Jan | PR |
| Week 8 | 26-Feb | CR |
| Week 12 | 26-Mar | CR |
| Week 16 | 23-Apr | PD |
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.
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:
| Variable | Purpose | Example |
|---|---|---|
USUBJID | Subject | 001 |
PARAMCD | Endpoint | DOR |
PARAM | Endpoint description | Duration of Response |
STARTDT | Time origin | 29-Jan |
ADT | Event/censor date | 23-Apr |
AVAL | Duration | 85 |
CNSR | Event/censor indicator | 0 |
EVNTDESC | Event description | Progressive Disease |
ANL01FL | Analysis inclusion | Y |
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:
| Subject | BOR | Responder? | DOR analysis? |
|---|---|---|---|
| 001 | PR | Yes | Yes |
| 002 | SD | No | No |
| 003 | CR | Yes | Yes |
| 004 | PD | No | No |
| 005 | PR | Yes | Yes |
The DOR analysis population contains subjects 001, 003, and 005, assuming the SAP defines DOR among responders.
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.
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:
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
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 variable | Potential RECIST use |
|---|---|
TRT01P | Treatment-arm summaries |
TRTSDT | Potential origin for treatment-based time endpoints |
RANDDT | Potential origin for randomized time-to-event endpoints |
| Safety/efficacy population flags | Analysis denominator selection |
| Stratification variables | Stratified 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.
RESPFL=Y.BOR.This is much stronger than having a single derived value with no visible intermediate logic.
Example Traceability Chain
| Layer | Example | Purpose |
|---|---|---|
| SDTM measurement | TR 32 mm, 22 mm, 12 mm, 6 mm | Observed lesion measurements |
| Derived SLD | 72 mm | Quantitative tumor burden |
| PCHG | −28% | Change from baseline |
| Assessment response | SD | RECIST interpretation at visit |
| Later response | PR | Qualifying response |
| BOR | PR | Best overall response |
| RESPFL | Y | ORR numerator |
| TTR | 57 days | Time 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.
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:
| Variable | Example | Why it matters |
|---|---|---|
ADT | 15-Mar-2026 | Actual assessment date |
ADY | 57 | Elapsed analysis time |
AVISITN | 8 | Nominal visit ordering |
AVISIT | Week 8 | Human-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.
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:
| Visit | Response | SLD |
|---|---|---|
| Week 8 | PR | 68 mm |
| Week 12 | PD | 84 mm |
| Week 16 | PD | 110 mm |
| Week 24 | PR-like shrinkage | 70 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:
BOR answers:
Those are not equivalent.
Why the Difference Matters
Suppose:
| Assessment | PCHG | Target status | Non-target | New lesion | Overall |
|---|---|---|---|---|---|
| Week 4 | −12% | SD | Non-PD | No | SD |
| Week 8 | −35% | PR | Non-PD | No | PR |
| Week 12 | −45% | PR | Progression | No | PD |
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.
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
| Category | Meaning | ADaM implication |
|---|---|---|
| CR | Complete response under the full RECIST assessment | Categorical endpoint value |
| PR | Partial response under the full RECIST assessment | Categorical endpoint value |
| SD | Neither response nor progression | Important for BOR and DCR |
| PD | Progression according to applicable RECIST rules | Drives PFS/DOR events where specified |
| NE | Not evaluable | Important 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:
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";
Response Endpoint Metadata
One of the most useful programming practices is to make parameter metadata explicit.
| PARAMCD | PARAM | Value type | Example |
|---|---|---|---|
| SLD | Sum of Diameters of Target Lesions | Numeric | 72 |
| PCHG | Percent Change from Baseline in SLD | Numeric | −28 |
| OVRESP | Overall RECIST 1.1 Response | Character | PR |
| BOR | Best Overall RECIST 1.1 Response | Character | PR |
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.
| Concept | Question answered |
|---|---|
| Criterion flag | Did this quantitative observation meet the specified numeric criterion? |
| Target response | What was the RECIST target-lesion response? |
| Overall response | What was the full RECIST assessment? |
| Responder flag | Does 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\):
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.
| Situation | Potential representation | Programming concern |
|---|---|---|
| No assessment | No response record / missing assessment | Does subject remain in denominator? |
| Assessment not evaluable | OVRESP = NE | How does SAP treat NE? |
| Valid PD | OVRESP = PD | Not a missing response |
| Valid SD | OVRESP = SD | Not 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.
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=0represents an event.CNSR=1represents censoring.STARTDTis the response-origin date.ADTis the event/censor date.AVALis 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
| Endpoint | Origin | Event / result | Illustrative value |
|---|---|---|---|
| BOR | Assessment history | Best category = PR | PR |
| ORR | Patient response | CR/PR responder | Y |
| TTR | Protocol origin | First qualifying response | 57 days |
| DOR | First qualifying response | PD/death/censor | 85 days |
| PFS | Protocol origin | PD/death/censor | 180 days |
The endpoints are related, but none should be derived by simply copying another endpoint.
Example End-to-End Patient History
| Day | SLD | PCHG | Overall Response | Endpoint implication |
|---|---|---|---|---|
| 1 | 100 | 0% | SD | Baseline |
| 29 | 82 | −18% | SD | No response yet |
| 57 | 68 | −32% | PR | First qualifying response |
| 85 | 61 | −39% | PR | Response continues |
| 113 | 63 | −37% | PR | Response continues |
| 141 | 80 | −20% | PD | Progression 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
Separate Derivation Programs by Concept
A maintainable oncology programming environment generally benefits from modular derivations rather than one enormous program.
| Module | Output |
|---|---|
| Baseline derivation | Baseline SLD and baseline flags |
| Tumor burden | SLD, CHG, PCHG, nadir |
| Assessment response | Target/non-target/new-lesion/overall response |
| Best response | BOR and response date |
| Responder endpoint | RESPFL / endpoint-specific inclusion |
| Time-to-event | ADTTE records |
| Reporting | Tables, 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")
)
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.
| Check | Question |
|---|---|
| Baseline | Is the correct pre-treatment assessment selected? |
| SLD | Are the correct target lesions included? |
| PCHG | Does the formula reproduce the plotted value? |
| Nadir | Is the smallest eligible on-study SLD correctly identified? |
| PD | Are both relative and absolute target-lesion criteria evaluated? |
| New lesions | Can a new lesion correctly trigger PD? |
| Non-target disease | Can unequivocal progression affect overall response? |
| BOR | Does the longitudinal algorithm produce the expected best response? |
| Response date | Is the first qualifying response date correct? |
| DOR | Are responders and event/censor dates correct? |
| PFS | Is the earliest qualifying progression/death event selected? |
| ORR | Does the numerator equal the validated responder set? |
Edge Cases Worth Building Into Test Data
A serious RECIST validation suite should deliberately contain difficult patients.
- No post-baseline assessment.
- Only one post-baseline assessment.
- Exact −30% shrinkage.
- Just above −30%.
- Exact 20% increase from nadir.
- 20% increase from nadir but less than 5 mm absolute increase.
- 20% increase plus at least 5 mm absolute increase.
- New lesion with substantial target-lesion shrinkage.
- Non-target progression with target-lesion response.
- CR followed by PR.
- PR followed by PD.
- Response followed by missing assessment.
- Responder who starts new anticancer therapy.
- Responder who dies without documented progression.
- 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:
The increase is only 4 mm:
Therefore, the relative increase alone does not satisfy the target-lesion 5 mm absolute increase requirement.
Now consider 25 mm:
and:
Both conditions are satisfied.
Exact Threshold Tests
| Nadir | Current SLD | % Increase | Absolute Increase | Target-lesion PD? |
|---|---|---|---|---|
| 20 | 24 | 20% | 4 mm | No |
| 20 | 25 | 25% | 5 mm | Yes |
| 50 | 60 | 20% | 10 mm | Yes |
| 100 | 119 | 19% | 19 mm | No |
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:
but the increase from nadir is:
The two percentages answer different questions.
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.
| PARAMCD | PARAM | Origin | Event |
|---|---|---|---|
| PFS | Progression-Free Survival | Randomization | PD or death |
| TTR | Time to Response | Randomization / first dose | First qualifying CR/PR |
| DOR | Duration of Response | First qualifying CR/PR | PD or death |
| TTP | Time to Progression | Protocol origin | PD |
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
| Assessment | Date | Before DCO? | Potential analysis status |
|---|---|---|---|
| Week 8 | 01-Mar | Yes | Eligible |
| Week 12 | 29-Mar | Yes | Eligible |
| Week 16 | 26-Apr | No | Excluded 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.
Programming Specification Example
| Item | Specification |
|---|---|
| Population | Prespecified efficacy analysis population |
| RECIST version | RECIST 1.1 |
| Baseline | Last adequate assessment before first dose, subject to SAP |
| Target burden | Sum of target-lesion diameters |
| Response | Overall RECIST assessment |
| BOR | Best overall response under prespecified rules |
| ORR | CR or PR among specified analysis population |
| TTR | Origin to first qualifying response |
| DOR | First qualifying response to PD/death/censor |
| PFS | Origin to PD/death/censor |
| Cutoff | Protocol/SAP-defined DCO |
Common ADaM Programming Mistakes
- Deriving BOR from minimum PCHG. Tumor shrinkage is not the same as overall RECIST response.
- Using baseline instead of nadir for PD. Target-lesion PD uses the smallest on-study sum as the reference.
- Ignoring the 5 mm absolute increase. The 20% relative increase is not sufficient by itself for target-lesion PD.
- Ignoring new lesions. New lesions can drive progression even when target lesions are shrinking.
- Ignoring non-target progression. Overall response is not determined solely from target-lesion PCHG.
- Using the best response date as the DOR origin. DOR commonly begins at the first qualifying response, not necessarily the best later category.
- Including non-responders in DOR without an explicit rule. DOR is generally conditional on response.
- Using the same event definition for PFS and DOR. Endpoint definitions differ.
- Dropping NE without documentation. NE and missing assessment are not automatically interchangeable.
- Hard-coding nominal visits. Actual dates and assessment windows can matter.
- Ignoring the data cutoff. Post-cutoff observations can contaminate the analysis.
- Building independent RECIST logic in every table program. This creates inconsistent endpoints.
- 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:
Do not validate the number only by rerunning the final statistical procedure. Instead:
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.
CNSRis correct.AVALequals 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
| Dataset | Program/specification |
|---|---|
| SLD | Rules for selecting target lesions |
| PCHG | Formula and baseline selection logic |
| OVRESP | RECIST decision algorithm |
| BOR | Longitudinal best-response algorithm |
| RESPFL | Responder definition |
| ADTTE event date | Endpoint-specific event hierarchy |
| CNSR | Endpoint-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
| Endpoint | Requires assessment history? | Requires dates? | Requires censoring? | Typical ADaM layer |
|---|---|---|---|---|
| SLD | Yes | Yes | No | BDS-style |
| PCHG | Yes | Yes | No | BDS-style |
| OVRESP | Yes | Yes | No | BDS-style |
| BOR | Yes | Yes | No | BDS-style / subject-level summary |
| ORR | Through BOR | Not necessarily | No | Categorical summary |
| TTR | Yes | Yes | Usually | ADTTE |
| DOR | Yes | Yes | Yes | ADTTE |
| PFS | Yes | Yes | Yes | ADTTE |
Practical Workflow for Statistical Programmers
When receiving a new oncology study, use the following sequence.
Recommended Minimum Variable Set for a Response BDS
The following is a conceptual starting point, not a universal required list.
| Domain | Variables |
|---|---|
| Identifiers | STUDYID, USUBJID |
| Treatment | TRT01P, TRT01PN or study-specific treatment variables |
| Parameter | PARAM, PARAMCD, PARAMN |
| Timing | ADT, ADY, AVISIT, AVISITN |
| Value | AVAL, AVALC |
| Baseline | ABLFL, BASE |
| Change | CHG, PCHG |
| Analysis flags | ANL01FL and other endpoint-specific flags |
| Response | Target/non-target/new-lesion/overall response variables as specified |
| Traceability | Source sequence variables where appropriate |
Recommended Minimum Variable Set for ADTTE
| Variable | Purpose |
|---|---|
| STUDYID | Study identifier |
| USUBJID | Subject identifier |
| PARAMCD / PARAM | Endpoint identity |
| STARTDT | Endpoint origin |
| ADT | Event or censor date |
| AVAL | Derived duration |
| CNSR | Event/censor indicator |
| EVNTDESC | Event/censor reason |
| ANL01FL | Analysis 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:
| Assessment | SLD | PCHG | Target | Non-target | New lesion | Overall |
|---|---|---|---|---|---|---|
| Baseline | 100 | 0% | NE | Non-PD | No | SD |
| Week 4 | 82 | −18% | SD | Non-PD | No | SD |
| Week 8 | 68 | −32% | PR | Non-PD | No | PR |
| Week 12 | 63 | −37% | PR | Non-PD | No | PR |
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:
| Assessment | SLD | PCHG | Nadir | Overall |
|---|---|---|---|---|
| Week 16 | 70 | −30% | 63 | PR |
| Week 20 | 82 | −18% | 63 | PD |
The increase from nadir is:
and the absolute increase is:
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
Key Takeaways
The most important lesson is that RECIST 1.1 endpoints are not one variable.
They are a connected family of analysis concepts:
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.