Sapling SAP
Reference

ADaM conformance

sapling adam conform: the ADaM data sets against rules of the ADaM Implementation Guide v1.2.

This page is the repository's own document docs/conformance.md, shown as it is, so that it never drifts from the product.

sapling adam conform checks the ADaM data sets of a study (out/adam/data/*.xpt) against rules of the ADaM Implementation Guide v1.2 (CDISC, 2019). It reads the data sets themselves: the names, labels, types and lengths of the variables, and their values. It writes out/adam/conformance.md.

sapling run             # the ADaM data sets
sapling adam conform    # ADAM CONFORMANCE PASS / FAIL: 27 rules of the ADaMIG v1.2 on n data set(s): e error(s), w warning(s)

What this is, and what it is not. Each rule is a sentence of the guide, named by its section and item. This is Sapling's reading of the guide. It is not the list "ADaM Conformance Rules" that CDISC publishes (about 2,000 checks with their own ids), and it is not CDISC CORE. A finding here is real. No finding here does not prove conformance: use a validator (Pinnacle 21) before a submission.

The rules#

RuleFrom the ADaMIG v1.2What it says
name3.1.1 item 1A variable name has at most 8 characters, starts with a letter, and has only letters, digits and the underscore.
label3.1.1 item 1A variable label has at most 40 characters (and is there).
length3.1.1 item 1A character variable has at most 200 characters.
sdtm-copy3.1.1 item 3A variable with the name of an SDTM variable is a copy of it: its label is not changed.
pair-primary3.1.1 items 6 and 7The numeric *N of a character variable is there only with that variable.
pair-one-to-one3.1.1 items 5 and 6The two variables of a pair have a one-to-one relationship where both have a value.
flag-values3.1.1 item 8, 3.1.4 item 9A flag (*FL) is a character variable with the values Y, N or null.
flag-numeric3.1.1 item 8, 3.1.4 item 9A numeric flag (*FN) is 1, 0 or null, and is there only with its *FL.
population-flag-null3.1.4 item 4A subject-level population flag is Y or N on every row.
population-flag3.1.4 item 2ADSL has at least one population flag.
date-numeric3.1.2 items 2 to 4, table 3.1.5.1A name that ends in DT, TM or DTM is a numeric date, time or datetime.
day-zero3.1.2 item 8A relative day (*DY) is never 0.
imputation-flag3.1.3 items 1 and 2*DTF is Y, M, D or null; *TMF is H, M, S or null.
required3.2 (ADSL), 3.3 (BDS): core ReqThe variables the guide requires in the data structure are there.
ig-type3.2, 3.3A standard variable has the type the guide gives it.
ig-label3.2, 3.3A standard variable has the label the guide gives it (a warning).
flag-y-only3.3.4.3, 3.3.8.1: codelist YA flag the guide gives the value Y only (ABLFL, ANLzzFL) is Y or null, never N.
datetime-parts3.1.2 item 5Where a datetime (*DTM) has a value, its date (*DT) is the date part of it.
baseline3.3.4.1 (BASE), 3.3.8.1 (ABLFL)A data set with BASE has ABLFL; a subject and parameter with a baseline value has a flagged record; BASE is the AVAL of that record. More than one flagged record for a subject and parameter is a warning (the guide wants BASETYPE then).
change3.3.4.1 (CHG, PCHG)CHG is AVAL - BASE; PCHG is ((AVAL - BASE) / BASE) * 100, and is null where BASE is 0.
censor3.3.6 (CNSR)CNSR is numeric: 0 for an event, a positive integer for a censored time.
paramcd3.3.4.1PARAMCD: at most 8 characters, a letter first, only A-Z, digits and underscore; a value on every record; one-to-one with PARAM; a BDS data set has AVAL or AVALC.
adsl-one-record3.2ADSL has one record for each subject.
subject-in-adsl2.3.1, 3.3.1 (USUBJID)A subject of another data set has its record in ADSL.
adsl-dm3.2.1, 3.2.2, 3.2.4A variable of ADSL that the guide takes from DM (DM.AGE, DM.SEX, DM.ARM, ...) has the value of DM for the subject, and a subject of ADSL is in DM. Checked when sdtm/dm.xpt is there.
criterion3.3.4.3 (CRITy, CRITyFL)CRITy and CRITyFL come together; where CRITyFL has a value, CRITy has one.
baseline-indicator3.3.7 (BNRIND, BTOXGR)BNRIND is the ANRIND, and BTOXGR the ATOXGR, of the baseline record: ANRIND (ATOXGR) and ABLFL are there, and the two are equal on the baseline record.

The standard variables (name, label, type, required or not) come from standards/adamig_v1.2_variables.csv. The structure of a data set (ADSL, BDS) comes from its specification (out/adam/spec/<ds>.json); a data set of another structure (an occurrence data set) gets the rules of names, labels and flags, not the rules of a structure.

Not checked#

Other checkers#