TLF Programming Specifications


At a high level, the process for developing Tables, Listings and Figures (TLFs) includes the following components to produce good quality results:

  • A Statistical Analysis Plan (SAP) document which specifies the objectives, statistics, analyses, and presentation of the study data
  • Mock Table Shells which provide a template for the format and data display for each summary table and listing.
  • A Programming Plan which provides further detail to the SAP of the programming details, tracking and documentation for programming the analyses and TLFs.

This process ensures that the objectives of the study protocol are carried out appropriately in the final data presentations and statistical analyses.

This document will focus on the process and tools used to create specifications for programming the TLFs and statistical analyses.

Statistical Analysis Plan

Who is responsible: the project biostatistician

Setting up a new SAP document

Unless required to use a sponsor SAP template, use the Instat template located on the server in the Dept\Biostats\Templates folder

Often Instat has done a similar study to the type of study you are doing (e.g., 2x2 crossover study). You can copy the SAP from a previous study and start from that.

The SAP document should provide sufficient detail to clearly specify how data are to be handled, summarized, analyzed and displayed including the following (see SOP-302):

  • primary and secondary objectives of the study
  • analysis populations
  • statistical assumptions, methods, and tests
  • programming details including
    • definitions of primary and secondary efficacy/safety endpoints
    • definitions of study time points (e.g., Baseline)
    • specifications for derived analysis variables, visit windowing, subgroups, etc.
    • handling of missing data, imputation methods
    • presentation of data such as decimal places and treatment labels
  • lists of planned tables, listings and figures

Mock TLF Shells

Who is responsible: the project biostatistician or senior programmer under the direction of the project biostatistician

Setting up new Shells

Instat creates all tables shells in SAS using the specifications defined in a ToC spreadsheet, and generated by the table macros and table shell programs.

A ToC template is available that can be copied and renamed for your study.

You can copy a ToC spreadsheet and table shells from a previous study with similar data displays, especially standard safety tables.

The Mock Shells should provide sufficient detail to instruct the programmer for how the data are to be displayed, including:

  • headers and footers to be consistent across all tables
  • titles and footnotes
  • column and row headers and labels
  • data formats and decimal places

Notes to programmers can be added to mock shells. In depth details needed to fully specify the TLF should be added to the Unfuddle program ticket's description field.

Generating Mock Table Shells

Table shell programs are created in the \Programs\Tables\Shells folder for each unique table identified. A program in this folder generates the mock table shells in either PDF or Word file format, to be included as an Appendix to the SAP.

Auto-Generate Unfuddle Tickets for Unique TLFs

Once the ToC spreadsheet is completed with at least the list of unique tables identified, utilize the %pp_cr_tickets macro in SAS to create Unfuddle tickets for each unique table in the spreadsheet.


See macro reference page for details. (TODO: create macro page)

Programming Plan (Spreadsheet and Tickets)

Who is responsible: the project biostatistician or senior programmer under the direction of the project biostatistician

The Programming Plan consists of a spreadsheet (Google Sheet) and programming tracking tickets (UNFUDDLE tickets) which define the programming work to be done based on protocol, SAP and contract. The purpose is to organize and plan programming for team to complete work efficiently.

The Programming Plan Components

Task Description
Setup Google ToC Spreadsheet List all tables to be program, define study parameters (trt groups, populations, subgroups, etc.)
Setup Unfuddle Tickets Create a ticket for each unique table, listing and figure program, associate with a milestone in the schedule
Create timelines in Unfuddle Schedule Determine timelines for completing programming, including validation and QC review
Assign Resources Identify resource needs and make assignments (ticket assignments)
Create Tracking Optional - Google/Excel spreadsheet to track status and issues for output

The Unfuddle programming tickets are to be used to provide all table-specific specifications and details not indicated in the SAP document. This provides documentation to the programming team for details required to perform the analyses or present the data.

For example, a block of SAS code can be included to specify the model, options and statistical tests to be performed in a table.

Developing the Programming Plan

  1. First, if it hasn't been done yet for your project, create the ToC spreadsheet for the project by copying the ToC template.
  2. To support the SAP and creating mock table shells, much of the ToC spreadsheet will be filled in already. Additional details will be added to the ToC at this stage, and you may need to re-sync Unfuddle tickets with the %pp_cr_tickets macro.
  3. Confirm you have tickets created for each unique table, listing and figure planned.
  4. In Unfuddle, create milestones for key timelines and deliverables.
  5. Assign program tickets to the first deliverable milestone when they are due. Later, when drafts are sent, you can re-assign program tickets to a "final" deliverable.
  6. Add additional specifications as clarified by the project biostatistician to the program tickets to fill in details that are not covered in the SAP.

The programming plan will evolve and require adjustments or additions as you progress through the project. It is important to keep the plan and tracking information in Unfuddle up to date both for the team's benefit and also during project reviews or operations meetings.