6月 272019

When Jack Shostak and I first started thinking about writing a SAS book on implementing CDISC (Clinical Data Interchange Standards Consortium) standards, we held one truth to be self-evident: that at least some parts of the book would be outdated before it was even published. Thanks to some lucky timing and the ability to make some minor tweaks just prior to publishing, the extent of the “outdated-ness” with our first edition of Implementing CDISC Using SAS: An End-to-End Guide, was fairly limited…for a few weeks at least.

Shortly after publishing, the final version 2.0 of the Define-XML specification came out and we knew there was some work to do in the future. So, after a bit of a writing break, we rolled up our sleeves again and began updating our %make_define macro and the associated metadata spreadsheets for the second edition of our book. Quite a few other changes were also in the works!

That edition came out in November of 2016. However, CDISC standards didn’t stop for us. True to form, even before publishing, we realized that we weren’t implementing NCI codes, aka “C-codes”, in our metadata-controlled terminology.

This was painfully obvious thanks to a check that started coming up in the Pinnacle 21 reports: “Missing NCI Code for Term in Codelist”. Some users shared this feedback with us, and we took action (thank you, users!).

So with some motivation from Jack, I started working on implementing C-codes. But I wanted it to be slick. The codes are all on the NCI website spreadsheets, so why should we expect users to enter them all into their study-specific metadata spreadsheets, right? Why not just read those spreadsheets, also available in XML format, and automatically merge the C-codes into the study-specific data? Well, I can tell you why it wasn’t that easy.

Jack, meanwhile, was a little more motivated than I to get a solution in place. So, as he frequently did back when we worked together at PRA Health Sciences in the early ’90s, he showed me how it was done. Thanks to him, in April of this year, Implementing CDISC Using SAS: An End-to-End Guide, Revised Second Edition hit the virtual bookstore shelves. The updated macros and meta-data spreadsheets can be downloaded on the SAS website. See the C-codes for yourself and let us know what you think!

Want to get a sneak peek? Also check our book excerpt of Chapter 1: Implementation Strategies! Hoping to learn more about SAS Books? Subscribe to our newsletter for the latest discounts and news.

Other Resources:


Move beyond the ‘whys’ of CDISC and bridge the gap between theory and practice by Jack Shostak

Working with ever-changing CDISC standards was published on SAS Users.

9月 302014

It’s the first PharmaSUG event I ever attended and it’s great and I plan to submit a paper for PharmaSUG 2015.

Honors belonged to Mike Molter and Lex Jansen for their hardcore talks on XML and CDISC Dataset-XML respectively. Dataset-XML is basically ODM based replacement of currently wildly used SAS Version 5 Transport File. It’s an emerging technology and it’s nice to check it out:

CDISC Dataset-XML Resources @CDISC

Support for Dataset-XML v1.0 @SAS

5月 152014
In the spirit of shameless self-promotion full disclosure with the goal of collecting huge royalty checks promoting the efficient review of clinical trials, I’d like to make everyone aware of the forthcoming SAS Press title Risk-Based Monitoring and Fraud Detection in Clinical Trials Using JMP and SAS. Clinical trials are […]
3月 182014

If you think it’s clear enough to differentiate record qualifier from variable qualifier as they were defined (in CDISC SDTM Version 1.3):

Record Qualifiers define additional attributes of the observation record as a whole (rather than describing a particular variable within a record). Examples include –REASND, AESLIFE, and all other SAE flag variables in the AE domain; AGE, SEX, and RACE in the DM domain; and –BLFL, –POS, –LOC, –SPEC, and –NAM in a Findings domain

Variable Qualifiers are used to further modify or describe a specific variable within an observation and are only meaningful in the context of the variable they qualify. Examples include –ORRESU, –ORNRHI, and –ORNRLO, all of which are Variable Qualifiers of –ORRES; and –DOSU, which is a Variable Qualifier of –DOSE.

take a look at this table, where

  • Role in column C comes from SDTMIG V3.1.3
  • Role in column E comes from SDTM V1.3


It is unavoidable for such systemic confusion among record qualifier and variable qualifier. A variable is a variable, and I don’t think it’s even possible to capture such subtle differences.

2月 192014

Clinical programmers are very familiar with the length limit of strings in CDISC compliant datasets, such as

      • #1: variable names: <= 8 characters
      • #2: variable labels: <= 40 characters
      • #3: data set labels: <= 40 characters
      • #4: data value of a single variable: <= 200 characters

and they are due to the limitations of SAS XPORT transport files (v5). But there are some rules which are not  as explicit as rule #1-4, for example,

        • #5: For domain LB, data value of variable LBTESTCD: <= 8 characters
        • #6: For domain LB, data value of variable LBTEST: <= 40 characters

Rule #5-6 is much more strict than #4  where 200 is the maximum. Actually, in SDTM Implementation Guide, the rational was well stated (“  TEST NAME (–TEST) GREATER THAN 40 CHARACTERS”):

Since the –TEST variable is meant to serve as a label for a –TESTCD when a Findings dataset is transposed to a more horizontal format, the length of –TEST is normally limited to 40 characters to conform to the limitations of the SAS V5 Transport format currently used for submission datasets.

You can take the following piece of codes to understand it where rule #5-6 actually are set to follow rule #1-2:

data lb;
    input usubjid $ lbtestcd $  lbtest $ lborres visitnum;
001 AA aaaaa 12 1
001 BB bbbbb 20 1
001 CC ccccc 3  1
001 AA aaaaa 4  2
001 BB bbbbb 40 2
001 CC ccccc 35 2

proc transpose data=lb out=lb2 (drop=_name_);
    by usubjid  visitnum;
    var lborres;
    id lbtestcd;
    idlabel lbtest;



11月 092013
This week's SAS tip is from Implementing CDISC Using SAS: An End-to-End Guide by Chris Holland and Jack Shostak. If you'd like to learn more about what CDISC offers, look no further. As SAS user Greg Nelson said, "Combined with useful advice and working examples, this treatise on CDISC implementation [...]
6月 222013
This week's SAS tip is from the new book Implementing CDISC Using SAS: An End-to-End Guide by Chris Holland and Jack Shostak. This comprehensive book will help anyone dealing with CDISC standards. Learn more about the book and the authors--plus get free content here. The following excerpt is from SAS Press authors Chris Holland and [...]
5月 092013
Developing a new concept for a book can be daunting, but it can also be very rewarding. Think about The Little SAS Book. I bet Susan Slaughter and Lora Delwiche didn’t know they were stumbling on a huge hit when they created that format. I love to see authors create [...]
4月 042013

There’s always plenty to learn at PharmaSUG, which is one reason it draws attendees not only from the US and Canada, but from countries such as Denmark, Finland, Germany, India, Israel, Italy, Japan, Mexico and the UK. 

Learning Highlights

 But did you know that there’s also lots of laughter in store as well?

 Laughter Highlights 

  • "A Funny Thing Happened on the Way to PharmaSUG,"
    from Susan Fehrer Coulson, a light-hearted opening keynote trip down PharmaSUG memory lane.
  • SAS Bowl, a game-show-style event where you can show off your SAS expertise and win fabulous prizes.
  • And last but not least - a special performance by the world-famous Second City comedy troupe!  Attendees will be treated to an exclusive comedy show just for PharmaSUG!

It’s going to be a busy, productive, and FUN time in Chicago at PharmaSUG this year.   If you haven’t registered already – do so now and save $100! Early registration has been extended until April 8.   I hope to see you in Chicago in May.

tags: cdisc, hands-on training, PharmaSUG, Second City comedy show, Wayne Kubick