top of page
Search

SDTM vs ADaM: The Key Differences Every Clinical Programmer Should Know

nehaeduvercity
12 hours ago
7 min read

By Neha Jain, SAS trainer with 17+ years of teaching experience · Updated 7 November 2026


If you are starting a career in clinical SAS or clinical R programming, two words will follow you into every interview: SDTM and ADaM. Both are CDISC data standards, both end up in a regulatory submission, and both are built by clinical programmers. But they do very different jobs. This guide explains the difference in plain language, with examples, code and the questions interviewers actually ask.


The short answer

SDTM organises what was collected. ADaM prepares it for analysis.

SDTM (Study Data Tabulation Model) takes the data collected during a clinical trial — from case report forms, labs and devices — and arranges it into standard tables called domains. ADaM (Analysis Data Model) is built from SDTM and adds the derivations, flags and structures that statisticians need to produce tables, listings and figures (TLFs).


Clinical trial data flow: raw data to CDISC SDTM, ADaM, TLFs and regulatory submission with define.xml

Watch: SDTM vs ADaM in 60 seconds



Where SDTM and ADaM fit in CDISC

CDISC (the Clinical Data Interchange Standards Consortium) publishes a family of standards that follow the data through a study:

  • CDASH — how data is collected on case report forms

  • SDTM — how collected clinical data is organised for submission

  • SEND — the SDTM-based equivalent for nonclinical (animal) studies

  • ADaM — how analysis-ready datasets are built from SDTM

  • Define-XML — the metadata that describes every submitted dataset and variable

The typical flow in a study is: raw data → SDTM → ADaM → TLFs → clinical study report.


Why regulators require both

Regulators review hundreds of studies from many sponsors. If every company structured its data differently, every review would start with a puzzle. The US FDA has required standardised study data for NDA, BLA and ANDA submissions for studies starting after 17 December 2016, and Japan's PMDA also requires CDISC data. That is why pharma companies and CROs worldwide hire programmers who know both standards.

SDTM alone is not enough for analysis: it shows the data as collected, not as analysed. So sponsors submit ADaM datasets alongside SDTM to show exactly how each result was derived. Check the FDA Data Standards Catalog for the SDTMIG and ADaMIG versions currently accepted.


What is SDTM? Domains and classes

SDTM groups data into domains, each identified by a two-letter code, and each domain belongs to a class:

Class

What it holds

Example domains

Special-purpose

Subject-level information

DM, CO, SE, SV

Interventions

Treatments given or taken

EX, EC, CM, PR, SU

Events

Things that happen to the subject

AE, MH, DS, DV, CE

Findings

Measurements and test results

VS, LB, EG, PE, QS, IE

Findings About

Findings about an event or intervention

FA

Trial design

How the study is planned

TA, TE, TV, TI, TS


A few SDTM concepts come up again and again:

  • USUBJID — the unique subject identifier that links a patient across every domain.

  • ISO 8601 dates — dates and times are stored as text in --DTC variables, such as 2026-03-14T09:30.

  • Controlled terminology — many variables must use CDISC's published code lists, so the same concept is always coded the same way.

  • SUPPQUAL — supplemental qualifier datasets (SUPP--) hold collected values that have no standard variable in the parent domain.

  • RELREC — records relationships between rows in different domains, such as an adverse event and the medication given to treat it.


What is ADaM? The main dataset structures

ADaM defines a small number of structures that cover most analyses:

  • ADSL (Subject-Level Analysis Dataset) — one row per subject with treatment groups (such as TRT01P and TRT01A), key dates (TRTSDT, TRTEDT), demographics and population flags (SAFFL, ITTFL).

  • BDS (Basic Data Structure) — one or more rows per subject, per parameter, per analysis timepoint. Used for labs, vital signs and efficacy data. Key variables include PARAMCD, AVAL, BASE, CHG, ABLFL, AVISIT and ADT.

  • OCCDS (Occurrence Data Structure) — for counting events and interventions, such as ADAE and ADCM, often with a treatment-emergent flag (TRTEMFL).

  • Time-to-event (ADTTE) — a BDS variant for survival-type analyses, with a censoring variable (CNSR).


SDTM vs ADaM at a glance


SDTM

ADaM

Purpose

Tabulate the data collected in the trial

Make data ready for statistical analysis

Built from

Raw data (CRFs, labs, devices)

SDTM datasets

Typical datasets

DM, AE, VS, LB, EX, CM

ADSL, ADAE, ADVS, ADLB, ADTTE

Derived values

Kept to a minimum

Central: flags, baselines, changes, analysis periods

Main user

Reviewers checking what was collected

Statisticians and reviewers reproducing results

Key rule

One fact, in one standard place

Every derivation traceable back to SDTM


A worked example: change from baseline in blood pressure

Imagine a patient whose systolic blood pressure is recorded at screening, Day 1 and Week 4. In SDTM, these readings sit in the VS (Vital Signs) domain: one row per measurement, with the test, result, unit and visit. Nothing is calculated.

In ADaM, the same readings move into ADVS, where the programmer adds what the analysis needs: the baseline value, the change from baseline, analysis visits and population flags. Here is a simplified version of that derivation in SAS:

/* VS sorted by USUBJID; baseline = last non-missing value on or before first dose */
data advs;
  merge sdtm.vs (in=invs) adam.adsl (keep=usubjid trtsdt saffl);
  by usubjid;
  if invs;
  adt  = input(substr(vsdtc, 1, 10), yymmdd10.);
  aval = vsstresn;
  format adt date9.;
run;

proc sort data=advs;
  by usubjid vstestcd adt;
run;

data base (keep=usubjid vstestcd base);
  set advs (where=(not missing(aval) and adt <= trtsdt));
  by usubjid vstestcd adt;
  if last.vstestcd;
  base = aval;
run;

data advs;
  merge advs base;
  by usubjid vstestcd;
  if not missing(aval) and not missing(base) then chg = aval - base;
run;

And the same idea in R with the pharmaverse package admiral:

library(admiral)
library(dplyr)

advs <- vs %>%
  derive_vars_merged(dataset_add = adsl, by_vars = exprs(STUDYID, USUBJID),
                     new_vars = exprs(TRTSDT)) %>%
  derive_vars_dt(new_vars_prefix = "A", dtc = VSDTC) %>%
  mutate(PARAMCD = VSTESTCD, AVAL = VSSTRESN) %>%
  restrict_derivation(
    derivation = derive_var_extreme_flag,
    args = params(by_vars = exprs(STUDYID, USUBJID, PARAMCD),
                  order = exprs(ADT), new_var = ABLFL, mode = "last"),
    filter = (!is.na(AVAL) & ADT <= TRTSDT)
  ) %>%
  derive_var_base(by_vars = exprs(STUDYID, USUBJID, PARAMCD),
                  source_var = AVAL, new_var = BASE) %>%
  derive_var_chg()

Real studies add analysis windows, unscheduled visits and sponsor-specific rules, but the principle is the same: every derived value can be traced back to the SDTM rows it came from.


Traceability, define.xml and validation

The most important principle in ADaM is traceability: a reviewer must be able to follow any number in a results table back to the ADaM dataset, and from there back to SDTM. Programmers keep source variables, document derivations in specifications, and describe every dataset and variable in define.xml. Submissions are usually accompanied by reviewer's guides — a clinical study data reviewer's guide for SDTM and an analysis data reviewer's guide (ADRG) for ADaM.

Before submission, datasets are checked for conformance to the standards with validation tools such as Pinnacle 21, and issues are fixed or explained in the reviewer's guides.


Common beginner mistakes

  • Deriving analysis values inside SDTM instead of ADaM.

  • Choosing the wrong baseline record, for example ignoring the first-dose date or missing values.

  • Losing traceability by dropping source variables or overwriting values.

  • Ignoring controlled terminology, so the same term is coded different ways.

  • Forgetting SUPPQUAL for collected data that has no standard variable.


SAS or R — which tools build SDTM and ADaM?

SAS has long been the main tool for building SDTM and ADaM datasets, using the DATA step, PROC SQL and macros. R is now growing fast in clinical programming through the pharmaverse, a set of open-source packages that includes admiral for ADaM derivations. Many teams expect programmers to read both, and some use double programming — producing the same output in SAS and R to check each other.


Interview questions on SDTM and ADaM

  1. What is the difference between SDTM and ADaM, and why are both submitted?

  2. Which SDTM class does the AE domain belong to? And LB?

  3. When would you use a SUPPQUAL dataset?

  4. What is ADSL, and which variables would you expect in it?

  5. How do you derive a baseline flag, and what problems can occur?

  6. What is the difference between BDS and OCCDS?

  7. What does traceability mean in ADaM, and how does define.xml support it?


Frequently asked questions

Is ADaM created from SDTM? Yes. ADaM datasets are derived from SDTM, which is what makes results traceable.

Which should I learn first? Start with SDTM. Understanding how collected data is organised makes ADaM derivations much easier.

Is SDTM required by the FDA? For NDA, BLA and ANDA submissions of studies that started after 17 December 2016, the FDA requires standardised study data, which in practice means SDTM and ADaM.

What does a clinical SAS programmer do with SDTM and ADaM? They map raw data to SDTM, derive ADaM datasets, program TLFs and validate each other's outputs.

Do I need SAS for SDTM and ADaM jobs? SAS remains widely used, and R skills are increasingly valued. Knowing both makes you more employable.

How long does it take to learn SDTM and ADaM? With solid Base SAS or R skills, most learners can build their first SDTM domains and ADSL within a few weeks of guided practice.


Learn SDTM and ADaM with Eduvercity

Eduvercity's live online Clinical SAS and Clinical R courses, taught by Neha Jain, take you from SDTM domains to ADSL, ADaM datasets and TLFs on realistic, simulated trial data. Preparing for a SAS exam first? Read our SAS Base certification exam guide. Batches are timed for learners in India, the UAE, the UK, the USA and Canada.




About the author

Neha Jain is a Principal Consultant and Trainer at Eduvercity and works independently as a freelance SAS consultant and trainer. She has trained professionals in SAS for more than 17 years and has more than 20 years of experience as a global consultant across programming, data and project leadership, and has trained more than 5,000 students and professionals, as well as teams at companies worldwide. She teaches Base and Advanced SAS, Clinical SAS (CDISC SDTM, ADaM and TLFs), clinical R and Python to learners in India, the UAE, the UK, the USA and Canada, and advises teams moving clinical programming work from SAS to R. The views in this article are her own. More about Neha and Eduvercity.

 
 
 

Comments


Frequently Asked Questions

Q: Are classes live or recorded?
A: Classes are live and online, with the trainer teaching each session.

​

Q: Can I join from outside India?
A: Yes. Batches are timed for learners in India, the UAE, the UK, the USA and Canada.

​

Q: Do I need a programming background?
A: Not for Base SAS, Clinical SAS or the beginner R and Python courses.

​

Q: Do I get a certificate?
A: Yes, an Eduvercity course-completion certificate. For SAS certification, we train you for the SAS exams, clear your doubts and guide your preparation; you book and take the exam directly with SAS.

​

Q: Is Eduvercity an official SAS or R partner?
A: No. Eduvercity is an independent training provider that teaches SAS and R tools and concepts.

​

Q: How do I enrol and pay?
A: WhatsApp us on +91 80509 22145 for fees and the next batch. Payment is by UPI or bank transfer.

+91 80509 22145

  • Facebook
  • YouTube

© 2026 Eduvercity. All rights reserved

SAS is a registered trademark of SAS Institute Inc. R is a project of the R Foundation. Eduvercity is an independent training provider and is not affiliated with or endorsed by either.

bottom of page