How to Prepare SDTM Domains for Regulatory Submission: A Hands-On Clinical SAS Tutorial
  • by Handson
  • August 9, 2026
How to Prepare SDTM Domains for Regulatory Submission: A Hands-On Clinical SAS Tutorial

How to Prepare SDTM Domains for Regulatory Submission: A Hands-On Clinical SAS Tutorial

Preparing SDTM domains for regulatory submission is one of the most important skills for a Clinical SAS Programmer. Pharmaceutical companies and CROs need programmers who can transform raw clinical trial data into standardized datasets that can be reviewed consistently by regulatory authorities.

This process involves much more than renaming variables. A professional SDTM programmer must understand clinical trial data, CDISC standards, SDTM domains, controlled terminology, ISO 8601 dates, data mapping, SAS programming, validation, metadata, ADaM and ultimately how standardized data supports Tables, Listings and Figures (TLF).

This tutorial explains the complete workflow using a fictional clinical trial and practical SAS examples.

What Is SDTM?

SDTM, or Study Data Tabulation Model, is a CDISC standard for organizing and formatting clinical study data.

The Clinical Data Interchange Standards Consortium (CDISC) develops standards that help clinical research organizations represent, exchange and analyze clinical data consistently.

CDISC states that SDTM supports data organization for clinical research and helps improve regulatory review and approval processes. SDTM is also a required standard for certain FDA submissions. (CDISC)

A typical clinical data flow looks like this:

Clinical Trial Data
       ↓
Raw Data
       ↓
SDTM
       ↓
ADaM
       ↓
TLF
       ↓
Clinical Study Report
       ↓
Regulatory Submission

Understanding this complete flow is essential for anyone pursuing a career in Clinical SAS programming.


Why Is SDTM Important for Regulatory Submission?

Clinical trials generate large amounts of data from:

  • Electronic Data Capture (EDC)

  • Laboratory systems

  • Randomization systems

  • Safety databases

  • ECG systems

  • Imaging systems

  • External vendors

  • Patient questionnaires

  • Other clinical data sources

Without standardization, two studies could represent the same clinical information in completely different ways.

SDTM provides a common framework for representing this information.

For example, one database might call an adverse-event variable:

EVENT_NAME

while another might use:

AE_TERM

SDTM provides standardized structures such as:

AETERM
AEDECOD
AESEV
AESTDTC
AEENDTC

This makes the data easier for programmers, statisticians and regulatory reviewers to understand.

Current CDISC and Regulatory Standards

A Clinical SAS programmer should never assume that an old project specification is automatically suitable for a new study.

CDISC currently publishes SDTM v2.1. (CDISC)

The published SDTMIG v3.4 provides implementation guidance for human clinical-trial tabulation datasets and is intended to be used with SDTM v2.0. It includes domain-specific assumptions, business rules and examples. (CDISC)

CDISC also notes that SDTM v3.0 and SDTMIG v4.0 are in development, so standards continue to evolve. (CDISC)

For FDA submissions, the applicable version should be determined from the FDA Data Standards Catalog and current technical requirements. FDA's current Study Data Technical Conformance Guide was issued in June 2026. (U.S. Food and Drug Administration)

Therefore, the first rule of regulatory SDTM programming is:

Always confirm the applicable CDISC and regulatory standards before programming.

SDTM Regulatory Submission Workflow

A practical SDTM workflow can be represented as:

Raw Clinical Data
        ↓
Data Review
        ↓
Study Data Standards Plan
        ↓
Mapping Specification
        ↓
SDTM Programming
        ↓
SDTM Domains
        ↓
QC & Validation
        ↓
Define-XML / Metadata
        ↓
ADaM
        ↓
TLF
        ↓
Regulatory Submission

Let's walk through this process using a fictional study.

Step 1: Understand the Clinical Trial

Consider a fictional Phase III study.

Study ID: ABC001

Treatment: Drug A vs Placebo

Population: Adult patients

The study collects:

  • Demographics

  • Treatment exposure

  • Adverse events

  • Laboratory tests

  • Vital signs

  • Medical history

  • Concomitant medications

  • Disposition

  • Subject visits

For our tutorial, we will create:

DM
EX
AE
LB
VS
MH
CM
DS
SV

These are some of the most commonly encountered SDTM domains in clinical SAS programming.

Step 2: Review the Raw Clinical Data

Suppose the raw demographic dataset contains:

SUBJECT SITE TREATMENT SEX AGE
001 101 Drug A F 45
002 101 Placebo M 52
003 102 Drug A F 38
004 102 Placebo M 61

Raw adverse-event data:

SUBJECT EVENT START_DATE END_DATE SEVERITY
001 Headache 15-Jan-2026 17-Jan-2026 Mild
002 Nausea 20-Jan-2026 21-Jan-2026 Moderate
003 Headache 18-Jan-2026 20-Jan-2026 Mild

Raw laboratory data:

SUBJECT TEST RESULT UNIT
001 Hemoglobin 13.5 g/dL
002 Hemoglobin 14.1 g/dL
003 Hemoglobin 12.8 g/dL

Before writing SAS code, the programmer needs to understand what each variable represents.

Step 3: Create an SDTM Mapping Specification

The mapping specification is the blueprint for SDTM programming.

Example:

Raw Variable SDTM Domain SDTM Variable Transformation
SUBJECT DM SUBJID Direct
SITE DM SITEID Direct
SEX DM SEX Standardize
AGE DM AGE Direct
TREATMENT EX EXTRT Standardize
DOSE EX EXDOSE Direct
UNIT EX EXDOSU Standardize
START_DATE EX EXSTDTC ISO 8601
END_DATE EX EXENDTC ISO 8601
EVENT AE AETERM Direct
EVENT AE AEDECOD Medical coding
SEVERITY AE AESEV Controlled terminology
START_DATE AE AESTDTC ISO 8601
END_DATE AE AEENDTC ISO 8601

A production mapping specification should additionally document derivations, origins, controlled terminology, algorithms, comments and traceability.

Step 4: Create the DM Domain

The DM (Demographics) domain contains subject-level information.

Typical variables include:

STUDYID
DOMAIN
USUBJID
SUBJID
SITEID
SEX
AGE
AGEU
ARM
ARMCD

The most important identifier is often USUBJID, the Unique Subject Identifier.

Suppose the study specification defines:

USUBJID = STUDYID-SITEID-SUBJID

Then:

ABC001-101-001
ABC001-101-002
ABC001-102-003

can be generated.

SAS Example

data sdtm.dm;
    set raw.dm;

    length studyid $20
           domain  $2
           usubjid $40;

    studyid = "ABC001";
    domain  = "DM";

    subjid = subject;
    siteid = site;

    usubjid = catx("-", studyid, siteid, subjid);

    ageu = "YEARS";

    keep studyid domain usubjid subjid siteid
         sex age ageu;
run;

This is a simplified educational example. Production programming must follow the approved study specifications.

Step 5: Prepare the EX Domain

The EX (Exposure) domain represents exposure to study treatment.

Suppose the raw data contains:

SUBJECT TREATMENT DOSE UNIT START_DATE END_DATE
001 Drug A 100 mg 10-Jan-2026 09-Feb-2026
002 Placebo 0 mg 10-Jan-2026 09-Feb-2026
003 Drug A 100 mg 12-Jan-2026 11-Feb-2026

The mapping might be:

TREATMENT  → EXTRT
DOSE       → EXDOSE
UNIT       → EXDOSU
START_DATE → EXSTDTC
END_DATE   → EXENDTC

SAS Example

data sdtm.ex;
    set raw.exposure;

    studyid = "ABC001";
    domain  = "EX";

    usubjid = catx("-", studyid, siteid, subject);

    extrt  = treatment;
    exdose = dose;
    exdosu = unit;

    exstdtc = put(start_date, yymmdd10.);
    exendtc = put(end_date, yymmdd10.);

    keep studyid domain usubjid
         extrt exdose exdosu
         exstdtc exendtc;
run;

Step 6: Prepare the AE Domain

The AE (Adverse Events) domain is one of the most important SDTM domains for clinical trial safety data.

Typical variables include:

STUDYID
DOMAIN
USUBJID
AESEQ
AETERM
AEDECOD
AESTDTC
AEENDTC
AESEV
AEOUT

Consider:

Subject: 001
Event: Headache
Severity: Mild

The collected event can be represented as:

AETERM = Headache

The coded medical dictionary term could be:

AEDECOD = HEADACHE

AETERM and AEDECOD should not automatically be treated as identical.

Step 7: Generate AESEQ

If a subject experiences multiple adverse events, sequence numbers can distinguish individual records.

Example:

USUBJID AESEQ AETERM
ABC001-101-001 1 Headache
ABC001-101-001 2 Nausea
ABC001-101-001 3 Dizziness

A simplified SAS approach is:

proc sort data=raw.ae out=ae_sorted;
    by subject start_date;
run;

data sdtm.ae;
    set ae_sorted;

    by subject;

    if first.subject then aeseq = 0;
    aeseq + 1;

    studyid = "ABC001";
    domain = "AE";

    usubjid = catx("-", studyid, siteid, subject);

    aeterm = event;

    aestdtc = put(start_date, yymmdd10.);
    aeendtc = put(end_date, yymmdd10.);

    aesev = upcase(severity);

    keep studyid domain usubjid aeseq
         aeterm aestdtc aeendtc aesev;
run;

In a production environment, medical coding and controlled terminology should come from the approved study processes.

Step 8: Understand Findings Domains

Findings domains are particularly important in clinical SAS programming.

Examples include:

  • LB — Laboratory Tests

  • VS — Vital Signs

  • EG — ECG

  • QS — Questionnaires

  • PE — Physical Examination

For example, laboratory data might be represented using:

LBTESTCD
LBTEST
LBORRES
LBORRESU
LBSTRESC
LBSTRESN
LBSTRESU

Step 9: Understand ORRES and STRES

Suppose the raw hemoglobin result is:

13.5 g/dL

The original result can be represented using:

LBORRES  = 13.5
LBORRESU = g/dL

A standardized numerical result can be represented using:

LBSTRESN = 13.5
LBSTRESU = g/dL

If unit conversion is necessary, the standardized result may differ from the original result.

The programmer must document the conversion algorithm and ensure that it is clinically appropriate.

Step 10: Apply Controlled Terminology

Controlled terminology is an essential component of CDISC SDTM implementation.

For example, values such as:

Male
MALE
M
Man

should not simply be mixed together.

The applicable CDISC terminology and study standards should determine the appropriate representation.

Controlled terminology can apply to:

  • Sex

  • Race

  • Ethnicity

  • Severity

  • Outcome

  • Relationship

  • Units

  • Findings tests

  • Other standardized variables

Always confirm the terminology release applicable to the study.

Step 11: Handle ISO 8601 Dates

SDTM commonly uses ISO 8601 representations for dates and times.

For example:

15-Jan-2026

becomes:

2026-01-15

In SAS:

aestdtc = put(start_date, yymmdd10.);

For datetime:

datetimec = put(datetime, e8601dt.);

Never invent missing clinical information simply to create a complete date.

For example:

2026-01

should not automatically become:

2026-01-15

unless an approved study-specific rule supports the derivation.


Step 12: Prepare the LB Domain

Suppose the raw laboratory dataset contains:

Subject Test Result Unit
001 Hemoglobin 13.5 g/dL
002 Hemoglobin 14.1 g/dL
003 Hemoglobin 12.8 g/dL
001 ALT 25 U/L
002 ALT 31 U/L

The SDTM mapping could include:

TEST        → LBTEST
TEST CODE   → LBTESTCD
RESULT      → LBORRES
UNIT        → LBORRESU
RESULT      → LBSTRESN

A simplified SAS program:

data sdtm.lb;
    set raw.lab;

    studyid = "ABC001";
    domain = "LB";

    usubjid = catx("-", studyid, siteid, subject);

    lbtest = test;
    lborres = strip(result);
    lborresu = unit;

    lbstresc = strip(result);
    lbstresn = input(result, best32.);
    lbstresu = unit;

    keep studyid domain usubjid
         lbtest lborres lborresu
         lbstresc lbstresn lbstresu;
run;

The real implementation should account for data types, units, reference ranges, qualifiers and study-specific requirements.

Step 13: Select the Correct SDTM Domain

Domain selection is one of the most important skills for an SDTM programmer.

The programmer should first determine the appropriate SDTM observation class and then the appropriate domain.

The major classes include:

Interventions
Events
Findings
Findings About

CDISC emphasizes determining the SDTM class before selecting the specific domain. (CDISC)

This becomes particularly important with specialized clinical data.

For example, SDTMIG v3.4 includes domains and structures covering areas such as genomics, cell phenotype and biospecimen data. (CDISC)

Therefore, an experienced SDTM programmer should not simply rely on memorized lists of domains.

Step 14: Perform SDTM Validation

Creating the dataset is only part of the job.

The SDTM programmer must perform quality control and conformance checks.

Important checks include:

Dataset Checks

  • Correct dataset name

  • Correct domain

  • Correct variables

  • Correct labels

  • Correct types

  • Correct lengths

  • Correct structure

Data Checks

  • Missing USUBJID

  • Duplicate records

  • Invalid dates

  • Invalid terminology

  • Unexpected values

  • Incorrect sequence numbers

  • Incorrect units

Cross-Domain Checks

For example:

DM
 ↓
AE
 ↓
EX
 ↓
LB
 ↓
VS
 ↓
CM

Subject identifiers and other relationships should be reviewed for consistency.

CDISC publishes SDTM and SDTMIG conformance rules, while FDA maintains its own regulatory technical requirements and validation resources. (CDISC)

Step 15: Perform SAS Quality Control

A simple duplicate check:

proc sort data=sdtm.ae
          out=ae_check
          nodupkey
          dupout=ae_duplicates;
    by studyid usubjid aeseq;
run;

Check missing identifiers:

proc sql;
    select *
    from sdtm.ae
    where missing(studyid)
       or missing(usubjid)
       or missing(domain);
quit;

Check adverse-event severity:

proc freq data=sdtm.ae;
    tables aesev / missing;
run;

These checks are useful for development, but they do not represent a complete regulatory validation program.


Step 16: Understand Define-XML

A regulatory submission is not simply a collection of datasets.

Metadata is also important.

Define-XML provides metadata describing datasets, variables, controlled terminology and other submission information.

FDA identifies Define-XML as the metadata standard accompanying SDTM and ADaM datasets for applicable submissions. (U.S. Food and Drug Administration)

A simplified relationship is:

SDTM Dataset
      +
Variable Metadata
      +
Dataset Metadata
      +
Controlled Terminology
      ↓
Define-XML

The metadata should accurately describe the datasets that are actually being submitted.

Step 17: Understand ADaM

After SDTM, clinical trial data may be transformed into ADaM (Analysis Data Model) datasets for statistical analysis.

A simplified flow is:

RAW DATA
   ↓
SDTM
   ↓
ADaM
   ↓
TLF

Examples of analysis datasets include:

ADSL
ADAE
ADLB
ADVS

For example:

SDTM.AE
    ↓
ADAE
    ↓
Adverse Event Tables

SDTM primarily standardizes the representation of clinical trial observations, while ADaM supports analysis-ready datasets and traceability for statistical analysis.


Step 18: Where Does TLF Fit?

TLF stands for:

Tables, Listings and Figures

TLF programming is an important part of clinical SAS programming because the final statistical outputs used in clinical study reporting are generated from analysis datasets.

A typical workflow is:

Raw Data
   ↓
SDTM
   ↓
ADaM
   ↓
SAS TLF Programs
   ↓
Tables
Listings
Figures
   ↓
Clinical Study Report

Tables

Tables summarize important clinical results.

Examples include:

  • Demographic summary

  • Treatment exposure

  • Adverse events

  • Serious adverse events

  • Laboratory summaries

  • Vital-sign summaries

  • Efficacy endpoints

Example:

Treatment N Mean Age SD
Drug A 50 54.2 8.1
Placebo 50 53.7 7.9

Step 19: TLF Listings

Listings generally provide detailed subject-level information.

For example, an adverse-event listing might contain:

Subject Treatment AE Term Severity Start Date
001 Drug A Headache Mild 15-Jan-2026
002 Placebo Nausea Moderate 20-Jan-2026

Listings are useful for reviewing individual patient data.

Step 20: TLF Figures

Figures visually communicate clinical trial results.

Common examples include:

  • Kaplan-Meier curves

  • Forest plots

  • Mean change over time

  • Laboratory trends

  • Treatment response

  • Patient disposition diagrams

SAS procedures such as PROC SGPLOT, PROC LIFETEST and other statistical procedures can be used depending on the analysis requirement.

Step 21: Simple TLF SAS Example

Suppose we have an ADaM dataset called ADSL.

A demographic summary could begin with:

proc means data=adam.adsl n mean std min max;
    class trt01a;
    var age;
run;

For a categorical summary:

proc freq data=adam.adsl;
    tables trt01a*sex / norow nocol nopercent;
run;

A figure could be created using:

proc sgplot data=adam.adlb;
    series x=visitnum y=aval / group=trt01a;
    xaxis label="Visit";
    yaxis label="Mean Laboratory Value";
run;

These are simplified educational examples. Production TLF programming requires approved statistical analysis specifications, shells, programming specifications, formatting standards and QC.

Step 22: Why SDTM and TLF Skills Should Be Learned Together

A Clinical SAS professional who understands only SDTM may be limited to the data-standardization side of the clinical programming workflow.

A programmer who understands:

SAS
+
SDTM
+
ADaM
+
TLF

has a much broader understanding of the clinical data lifecycle.

For example:

Raw AE
 ↓
SDTM AE
 ↓
ADAE
 ↓
AE Table
 ↓
Clinical Study Report

Understanding this complete chain helps the programmer understand why data needs to be structured correctly at every stage.


Step 23: Build a Hands-On Clinical SAS Project

To practice SDTM programming and TLF programming, create a fictional Phase III clinical trial with 100 subjects.

Create these raw datasets:

RAW_DM
RAW_EX
RAW_AE
RAW_LB
RAW_VS
RAW_CM
RAW_MH
RAW_DS

Transform them into:

SDTM_DM
SDTM_EX
SDTM_AE
SDTM_LB
SDTM_VS
SDTM_CM
SDTM_MH
SDTM_DS

Then create analysis datasets:

ADSL
ADAE
ADLB
ADVS

Finally, generate:

Demographic Tables
Adverse Event Tables
Laboratory Tables
Vital Sign Tables
Subject Listings
Laboratory Figures
Efficacy Figures

This creates a complete raw data → SDTM → ADaM → TLF training project.

Step 24: Create a Regulatory Submission Checklist

Before submission, review:

CDISC Standards

  • Applicable SDTM version confirmed

  • Applicable SDTMIG confirmed

  • Controlled Terminology release confirmed

  • Therapeutic Area guidance reviewed where applicable

SDTM Programming

  • Domains correctly selected

  • Mapping specifications completed

  • Derivations documented

  • ISO 8601 dates checked

  • Controlled terminology checked

  • USUBJID consistency checked

  • Sequence variables checked

Validation

  • SAS QC completed

  • Duplicate checks completed

  • Cross-domain checks completed

  • CDISC conformance checks completed

  • Regulatory validation findings reviewed

Metadata

  • Dataset metadata reviewed

  • Variable metadata reviewed

  • Define-XML prepared

  • Traceability reviewed

TLF

  • ADaM datasets validated

  • TLF shells approved

  • Tables programmed

  • Listings programmed

  • Figures programmed

  • Independent QC completed

  • Output reviewed against specifications

For FDA submissions, always verify the current technical requirements rather than relying on an old checklist. FDA's current Study Data Technical Conformance Guide was issued in June 2026, and FDA directs sponsors to its Data Standards Catalog for applicable supported standards and deadlines. (U.S. Food and Drug Administration)

Common Mistakes in SDTM Programming

Mistake 1: Treating SDTM as Variable Renaming

SDTM involves:

Mapping
+
Derivation
+
Standardization
+
Controlled Terminology
+
Validation

It is not simply a rename exercise.

Mistake 2: Ignoring the Clinical Meaning

A programmer must understand what the collected data represents before mapping it.

Mistake 3: Using Outdated Standards

CDISC and regulatory requirements evolve. Always verify the applicable version.

Mistake 4: Creating Incorrect Dates

Do not invent missing clinical information.

Mistake 5: Ignoring TLF Requirements

The structure of SDTM and ADaM ultimately supports downstream clinical analysis and reporting.

Mistake 6: Focusing Only on SAS Syntax

A strong Clinical SAS Programmer needs both programming and clinical data-standard knowledge.

Skills Needed for a Clinical SAS Programmer

A job-ready Clinical SAS professional should ideally develop skills in:

SAS Programming

  • Base SAS

  • Advanced SAS

  • PROC SQL

  • SAS Macro

  • Data manipulation

  • Statistical procedures

  • Reporting procedures

Clinical Data Standards

  • CDISC

  • SDTM

  • SDTMIG

  • Controlled Terminology

  • ADaM

  • Define-XML

Clinical Programming

  • Raw-to-SDTM mapping

  • SDTM domain programming

  • ADaM programming

  • TLF programming

  • QC and validation

  • Regulatory submission concepts

Clinical Research

  • Clinical trial phases

  • Randomization

  • Treatment arms

  • Adverse events

  • Laboratory data

  • Vital signs

  • Efficacy endpoints

  • Safety analysis

Career Opportunities in Clinical SAS

These skills can support career paths such as:

  • Clinical SAS Programmer

  • SDTM Programmer

  • ADaM Programmer

  • Statistical Programmer

  • Clinical Data Programmer

  • CDISC Programmer

  • Clinical Reporting Programmer

  • TLF Programmer

  • Senior Statistical Programmer

  • Clinical Programming Lead

For candidates entering the pharmaceutical, biotechnology and CRO industries, a combination of SAS + SDTM + ADaM + TLF provides a much stronger practical foundation than learning SAS syntax alone.


A Complete Clinical SAS Learning Roadmap

A practical learning sequence is:

Base SAS
   ↓
Advanced SAS
   ↓
Clinical Trial Concepts
   ↓
CDISC Fundamentals
   ↓
SDTM
   ↓
SDTM Programming
   ↓
Validation
   ↓
ADaM
   ↓
TLF Programming
   ↓
Regulatory Submission Concepts

The most effective learning method is to work with realistic clinical trial datasets rather than only memorizing SDTM variables.

 

Preparing SDTM domains for regulatory submission requires a combination of clinical knowledge, CDISC standards, SAS programming, data mapping, controlled terminology, validation and regulatory awareness.

The complete clinical programming lifecycle can be understood as:

RAW DATA
   ↓
SDTM
   ↓
ADaM
   ↓
TLF
   ↓
Clinical Study Report
   ↓
Regulatory Submission

SDTM provides the standardized foundation for clinical trial data, ADaM prepares data for statistical analysis, and TLF programming transforms analysis results into tables, listings and figures used for clinical reporting.

For anyone planning a career as a Clinical SAS Programmer, learning SDTM, ADaM and TLF programming together provides a practical understanding of how clinical trial data moves from raw collection through standardized datasets to final statistical reporting.

The key principle is:

Understand the clinical data → map it correctly → program SDTM → validate it → build ADaM → generate TLF → document and trace everything.

That is the foundation of professional Clinical SAS programming for clinical trials and regulatory submissions.