Real-World Overall Survival
Time from a defined real-world index to death from any cause, requiring a documented mortality source and observation/censoring rules rather than equating the last clinical encounter with survival.
On this page
Time from a defined real-world index to death from any cause, requiring a documented mortality source and observation/censoring rules rather than equating the last clinical encounter with survival. Use for prognosis, disease course, comparative effectiveness, and economic-model survival inputs when mortality capture and the index are fit for purpose.
Definition and scope
Time from a defined real-world index to death from any cause, requiring a documented mortality source and observation/censoring rules rather than equating the last clinical encounter with survival. The target population, use, and analysis remain protocol decisions; this card explains the choices and their consequences rather than approving a study.
Operational specification
Define eligibility and time zero, all-cause death date and source hierarchy, linkage/version, reporting lag, date precision, administrative cut, enrollment or clinical-observation end, and delayed entry. Distinguish evidence of life, absence of death in a source, and known complete death capture. A disease diagnosis date reconstructed after enrollment can introduce survivor selection if used as an unqualified origin.
Analysis and diagnostics
Reconcile conflicting death dates under a prespecified rule and assess source completeness against an appropriate reference where possible. Estimate survival under defensible censoring assumptions and report numbers at risk, uncertainty, and follow-up support. Comparative treatment analyses need their own causal design and estimand; all-cause death has no competing cause of death for overall survival.
When NOT to use and common errors
Do not interpret an absent mortality flag as proof of being alive, censor all EHR patients at their last encounter without considering the observation mechanism, or compare trial OS and real-world OS without aligning population, index, and endpoint capture.
Worked example and implementation boundary
A synthetic patient enters at day zero and has a verified all-cause death on day 365, before an administrative cut at day 730. Calculate observed survival time in days. Observed survival time is 365 days with an event indicator of one. This single record is not a group survival estimate. The code performs that explicitly stated calculation with synthetic inputs. It is not a complete fitted analysis and does not demonstrate the identification assumptions, estimate sampling uncertainty, or certify application in another population.
Data-source and reporting requirements
Preserve the provenance, dates, units, and observation rule for each input. Claims capture services and transactions under observable benefits; absence of a record is not proof that an event or resource use did not occur. EHR and registry measurements depend on the collection process and may miss care outside the system. Linked sources add reconciliation and selection questions. Primary collection can improve a missing domain but still requires valid measurement and follow-up. Report which of these limitations affects the stated use, which evidence supports the chosen inputs, and what remains uncertain.
Worked example
Scenario
A synthetic patient enters at day zero and has a verified all-cause death on day 365, before an administrative cut at day 730. Calculate observed survival time in days.
Dataset
Synthetic inputs with units defined in the scenario; no patient data.
| input | value |
|---|---|
| death_day | 365 |
| index_day | 0 |
Steps
Result
Observed survival time is 365 days with an event indicator of one. This single record is not a group survival estimate.
Trade-offs
Code example
Executed example · Python 3.11.15 · 2026-11-01T02:04:28+00:00
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study.
death_day = 365
index_day = 0
result = death_day-index_day
assert abs(result - 365) < 1e-9
print(result)
Executed example · Rscript (R) version 4.6.1 (2026-06-24) · 2026-11-01T02:04:28+00:00
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study.
death_day <- 365
index_day <- 0
result <- death_day-index_day
stopifnot(abs(result - 365) < 1e-9)
print(result)
Illustrative example · execution not verified
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study. SAS source is illustrative until executed in a compatible SAS runtime.
data worked_example;
death_day = 365;
index_day = 0;
result = death_day-index_day;
put result=;
run;
Citations
- [1]Hernán MA, Robins JM. Using big data to emulate a target trial when a randomized trial is not available. American Journal of Epidemiology. 2016;183(8):758-764.
- [2]Eisenhauer E, et al. New response evaluation criteria in solid tumours: Revised RECIST guideline (version 1.1). European Journal of Cancer. 2009.