top of page
Search

TLF Programming Explained: Tables, Listings and Figures in Clinical Trials

nehaeduvercity
8 hours ago
3 min read

By Neha Jain, Principal Consultant and SAS trainer · 17+ years training in SAS · 5,000+ learners trained · Updated 7 November 2026


Tables, listings and figures — TLFs — are what reviewers actually read. Every dataset a clinical programmer builds eventually feeds them. This guide explains what TLFs are, how they are produced, the most common ones, and how they are programmed and validated in SAS and R.


The short answer

TLFs are the formatted results of a clinical trial: tables summarise data, listings show individual records, and figures show results visually. Programmers build them from ADaM datasets, following the statistical analysis plan and table shells, and every output is independently checked.


How TLFs are produced: SAP and table shells, ADaM datasets, programming, independent QC, review and clinical study report

Tables, listings and figures

Type

What it shows

Examples

Tables

Summary statistics by treatment group

Demographics, disposition, adverse event summary, lab shifts

Listings

Individual subject records

Adverse events by subject, deaths, protocol deviations

Figures

Results as graphs

Kaplan-Meier curves, mean change over time, forest plots

Many companies number outputs following the ICH E3 structure for clinical study reports — for example, section 14 for tables and figures and section 16.2 for subject data listings.


How TLFs are produced

  1. Statistical analysis plan (SAP). Defines populations, endpoints and statistical methods.

  2. Table shells. Mock-ups showing the exact layout, titles, columns and footnotes of every output.

  3. ADaM datasets. ADSL, ADAE, ADLB and other datasets provide analysis-ready data — see SDTM vs ADaM explained.

  4. Programming. Production programmers write the code that creates each output.

  5. Independent QC. A second programmer reproduces each output, and results are compared.

  6. Review. Statisticians and medical writers review outputs before they go into the clinical study report.


The most common TLFs

  • Subject disposition and analysis populations

  • Demographics and baseline characteristics

  • Exposure to study treatment

  • Adverse events by system organ class and preferred term

  • Laboratory results and shift tables

  • Vital signs and change from baseline

  • Efficacy analyses, such as time-to-event with Kaplan-Meier figures


Programming a table in SAS

A simplified sex-by-treatment summary from ADSL, written to RTF:

ods rtf file="t_demog_sex.rtf" style=journal;

proc freq data=adam.adsl(where=(saffl="Y")) noprint;
  tables trt01a*sex / out=sex_counts outpct;
run;

proc report data=sex_counts nowd;
  column sex trt01a, (count pct_col);
  define sex     / group "Sex";
  define trt01a  / across "Treatment";
  define count   / analysis sum "n";
  define pct_col / analysis sum format=5.1 "%";
run;

ods rtf close;

Production tables add denominators, decimal alignment, titles, footnotes and page breaks — usually through standard company macros.


Programming TLFs in R

In R, teams use packages such as rtables, Tplyr and gtsummary to build tables, ggplot2 for figures, and r2rtf to write RTF output. The logic mirrors SAS: summarise ADaM data by treatment, format it to the shell, and export. See SAS vs R in clinical trials.


Validating TLFs

Most teams validate by independent double programming: the QC programmer creates the same numbers from ADaM and compares them with the production output, often by comparing datasets with PROC COMPARE. Any difference is investigated and resolved before the output is final.


Common TLF mistakes

  • Using the wrong population or denominator.

  • Counting events instead of subjects in AE tables.

  • Rounding differences between production and QC.

  • Footnotes or titles that don't match the shell or SAP.

  • Hard-coding values that should come from data.


Frequently asked questions

What does TLF stand for? Tables, listings and figures — the formatted results of a clinical trial.

What is a table shell? A mock-up of an output showing its layout, titles, columns and footnotes, created before programming starts.

Which SAS procedures are used for TLFs? Mainly PROC REPORT with ODS RTF or PDF for tables and listings, and PROC SGPLOT and PROC LIFETEST for figures.

Are TLFs built from SDTM or ADaM? From ADaM, which is designed to make analyses traceable back to SDTM.

Preparing for interviews? See Clinical SAS interview questions.


Learn TLF programming with Eduvercity

Eduvercity's live online Clinical SAS and Clinical R courses, taught by Neha Jain, include a hands-on TLF project with demographic, adverse event and laboratory outputs in SAS and R.




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