Validation Checks

This table provides a complete list of all CDISC ADaM 2.1 validation checks.
Validation Checks
checkid
source description
table scope
column scope
ADAM0001
There is only one ADSL per study
ADSL
ADAM0002
Any ADaM variable whose name is the same as an SDTM variable must be a copy of the SDTM variable, and its label and values must not be modified
_ALL_
ADAM0003
Any ADaM variable whose name is the same as an SDTM variable must be a copy of the SDTM variable, and its label and values must not be modified
_ALL_
ADAM0004
Any ADaM variable whose name is the same as an SDTM variable must be a copy of the SDTM variable, and its label and values must not be modified
_ALL_
ADAM0005
The names of all other character flag (or indicator) variables end in FL
_ALL_
**FL
ADAM0006
The names of the corresponding numeric flag (or indicator) variables end in FN
_ALL_
**FN
ADAM0007
If the numeric flag is used, the character version (*FL) is required
_ALL_
*FN+*FL
ADAM0010
*FN and *FL must be a one-to-one mapping
_ALL_
{**FL}{**FN}
ADAM0011
*FN and *FL must be a one-to-one mapping
_ALL_
{**FL}{**FN}
ADAM0012
*FN and *FL must be a one-to-one mapping
_ALL_
{**FL}{**FN}
ADAM0013
ADaM variable names must be no more than 8 characters in length
_ALL_
_ALL_
ADAM0014
ADaM variable names must start with a letter (not underscore), and be comprised only of letters (A-Z), underscore (_), and numerals (0-9)
_ALL_
_ALL_
ADAM0015
ADaM variable names must start with a letter (not underscore), and be comprised only of letters (A-Z), underscore (_), and numerals (0-9)
_ALL_
_ALL_
ADAM0016
All ADaM variable labels must be no more than 40 characters in length
_ALL_
_ALL_
ADAM0017
All ADaM character variables must be no more than 200 characters in length
_ALL_
_ALL_
ADAM0018
In general, the variable labels specified in the tables in Section 3 are required. There are only two exceptions to this rule (1) descriptive text is allowed at the end of the labels of variables whose names contain indexes "y", "xx", or "zz"; and (2) asterisks (*) and ellipses (...) in specified variable labels should be replaced by the sponsor with appropriate text
_ALL_
_ALL_
ADAM0019
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed
ADSL
COMPLFL
ADAM0020
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed
ADSL
FASFL
ADAM0021
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed
ADSL
ITTFL
ADAM0022
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed
ADSL
PPROTFL
ADAM0023
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed.
ADSL
SAFFL
ADAM0024
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed.
ADSL
RANDFL
ADAM0025
For subject-level character population flag variables: N = no (not included in the population), Y = yes (included). Null values are not allowed.
ADSL
ENRLFL
ADAM0026
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
COMPLFN
ADAM0027
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
FASFN
ADAM0028
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
ITTFN
ADAM0029
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
PPROTFN
ADAM0030
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
SAFFN
ADAM0031
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
RANDFN
ADAM0032
For subject-level numeric population flag variables: 0 = no (not included), 1 = yes (included). Null values are not allowed.
ADSL
ENRLFN
ADAM0033
For record-level character population flag variables: Y = yes (included). Null values are allowed
_ALL_-ADSL
**RFL
ADAM0034
For parameter-level character population flag variables: Y = yes (included). Null values are allowed
_ALL_-ADSL
**PFL
ADAM0035
For record-level numeric population flag variables: 1 = yes (included). Null values are allowed
_ALL_-ADSL
**RFN
ADAM0036
For parameter-level numeric population flag variables: 1 = yes (included). Null values are allowed
_ALL_-ADSL
**PFN
ADAM0037
The *GRy and associated *GRyN variable must have a one-to-one relationship
ADSL
{**GR#}{**GR#N}
ADAM0038
The *GRy and associated *GRyN variable must have a one-to-one relationship
ADSL
{**GR#}{**GR#N}
ADAM0039
The names of date imputation flag variables end in DTF
_ALL_
**DTF
ADAM0040
The names of time imputation flag variables end in TMF
_ALL_
**TMF
ADAM0041
Numeric dates, times and datetimes should be formatted so as to be human readable with no loss of precision
_ALL_
**DT
ADAM0042
Numeric dates, times and datetimes should be formatted so as to be human readable with no loss of precision
_ALL_
**TM-**DTM
ADAM0043
Numeric dates, times and datetimes should be formatted so as to be human readable with no loss of precision
_ALL_
**DTM
ADAM0044
If a *DTM and associated *TM variable exist, then the *TM variable must match the time part of the *DTM variable
_ALL_
[**DTM][**TM-**DTM]
ADAM0045
If a *DTM and associated *DT variable exist, then the *DT variable must match the date part of the *DTM variable
_ALL_
[**DTM][**DT]
ADAM0046
*DY cannot = 0
_ALL_-ADSL
**DY
ADAM0047
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
SITEID
ADAM0048
ADSL must have at least one variable that ends in FL because you need at least one population flag
ADSL
**FL
ADAM0049
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
AGE
ADAM0050
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
AGEU
ADAM0051
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
SEX
ADAM0052
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
RACE
ADAM0053
Invalid STUDYID/USUBJID combination not found in the SDTM Demographics domain
_ALL_
STUDYID+USUBJID
ADAM0054
ADSL is one record per USUBJID
ADSL
ADAM0055
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
SUBJID
ADAM0058
All *DT variables must be numeric
_ALL_
**DT
ADAM0059
All *TM variables must be numeric
_ALL_
**TM
ADAM0061
TRTSDT or TRTSDTM variables are required if there is an investigational product
ADSL
TRTSDT+TRTSDTM
ADAM0062
Any ADSL variable beginning with TRT and ending in A or beginning in TRT and ending in AN must include xx where xx is a two-digit number
ADSL
TRT**A-TRTSEQA
ADAM0063
Any ADSL variable beginning with TRT and ending in A or beginning in TRT and ending in AN must include xx where xx is a two-digit number
ADSL
TRT**AN-TRTSEQAN
ADAM0064
Any variable beginning with TRT and ending in AN must have a corresponding variable beginning with TRT, having the same increment and end in A
ADSL
[TRT##AN][TRT##A]
ADAM0065
Any ADSL variable beginning with TR and containing PG must have a padded numeric of 01 and increment
ADSL
TR**PG
ADAM0066
Any variable beginning with TR, containing PG and ending in N must have a corresponding variable beginning with TR, containing PG, and having the same increment
ADSL
TR**
ADAM0068
Any ADSL variable beginning with TR and containing AG must have numeric where xx is a two-digit number
ADSL
TR**AG
ADAM0069
Any variable beginning with TR, containing AG and ending in N must have a corresponding variable beginning with TR, containing AG, and having the same increment
ADSL
TR**
ADAM0070
Any variable beginning with TR, containing AG and ending in N must have a corresponding variable beginning with TR, containing AG, and having the same increment
ADSL
TR**
ADAM0071
ADSL must have the variables SUBJID, SITEID, AGE, AGEU, SEX, RACE, ARM
ADSL
ARM
ADAM0072
ADSL must have at least one TRTxxP variable
ADSL
TRT**P
ADAM0073
Any ADSL variable beginning with TRT and ending in P must have a suffix that is a two-digit integer [01-99]
ADSL
TRT**P-TRTSEQP
ADAM0074
Any ADSL variable beginning with TRT and ending in PN must have a suffix that is a two-digit integer [01-99]
ADSL
TRT**PN-TRTSEQPN
ADAM0075
Any variable beginning with TRT and ending in PN must have a corresponding variable beginning with TRT, having the same increment and end in P
ADSL
[TRT##PN][TRT##P]
ADAM0076
Any variable beginning with TRT and ending in PN must have a corresponding variable beginning with TRT, having the same increment and end in P
ADSL
[TRT##PN][TRT##P]
ADAM0078
If there is more than one treatment period, then TRxxSDT and TRxxEDT should exist in ADSL
ADSL
[TRT##P][TR##SDT]
ADAM0079
If there is more than one treatment period, then TRxxSDT and TRxxEDT should exist in ADSL
ADSL
[TRT##P][TR##EDT]
ADAM0080
If TRTxxA exists, then TRTxxP should exist
ADSL
[TRT##A][TRT##P]
ADAM0081
If TRT(xx+1)P exists, then TRTxxP should exist for xx+1 > 01
ADSL
TRT**P
ADAM0083
If TR01SDT exists, then TRTSDT=TR01SDT
ADSL
[TR01SDT][TRTSDT]
ADAM0084
TRTEDT = maximum(TRxxEDT)
ADSL
{TRTEDT}{TR##EDT}
ADAM0085
BDS variables STUDYID, USUBJID, SUBJID, SITEID, and so on, must match ADSL variable in metadata
_ALL_
_ALL_
ADAM0086
BDS variables STUDYID, USUBJID, SUBJID, SITEID, and so on, must match ADSL variable in metadata
_ALL_
_ALL_
ADAM0087
BDS variables STUDYID, USUBJID, SUBJID, SITEID, and so on, must match ADSL variable in metadata
_ALL_
_ALL_
ADAM0088
All data sets must have the variables STUDYID and USUBJID
_ALL_
STUDYID
ADAM0089
All data sets must have the variables STUDYID and USUBJID
_ALL_
USUBJID
ADAM0090
BDS must have TRTP variable
_ALL_-ADSL
TRTP
ADAM0091
TRTP must match at least one value in TRT01P-TRTxxP
[_ALL_-ADSL] [ADSL]
{_cstList:USUBJID+TRT##P} {_cstList:USUBJID+TRTP}
ADAM0092
TRTPN must be a one-to-one match to TRTP
_ALL_-ADSL
[TRTP][TRTPN]
ADAM0094
Any variable beginning with TRTPG must have a suffix of 1 and increment up to 9
_ALL_
TRTPG#
ADAM0095
TRTAN must be a one-to-one match to TRTA
_ALL_-ADSL
[TRTA][TRTAN]
ADAM0097
Any variable beginning with TRTPG and ending in N must have a corresponding variable beginning with TRTPG, and having the same increment
_ALL_-ADSL
[TRTPG#N][TRTPG#]
ADAM0098
*SDY is less than or equal to *EDY if both are nonmissing
_ALL_-ADSL
[**SDY][**EDY]
ADAM0099
*STDY is less than or equal to *ENDY if both are nonmissing
_ALL_-ADSL
[**STDY][**ENDY]
ADAM0100
APEREDT must have corresponding APxxEDT value
[_ALL_-ADSL] [ADSL]
{_cstlist:APEREDT+APERIOD} {_cstlist:AP##EDT}
ADAM0101
APEREDTM must have corresponding APxxEDTM value
[_ALL_-ADSL] [ADSL]
{_cstlist:APEREDTM+APERIOD} {_cstlist:AP##EDTM}
ADAM0102
APERIOD value must have corresponding TRTxxP/TRxxSDT/TRxxEDT variables
[_ALL_-ADSL] [ADSL]
{_cstlist:APERIOD} {_cstlist:TRT##P}
ADAM0103
APERIOD value must have corresponding TRTxxP/TRxxSDT/TRxxEDT variables
[_ALL_-ADSL] [ADSL]
{_cstlist:APERIOD} {_cstlist:TR##SDT}
ADAM0104
APERIOD value must have corresponding TRTxxP/TRxxSDT/TRxxEDT variables
[_ALL_-ADSL] [ADSL]
{_cstlist:APERIOD} {_cstlist:TR##EDT}
ADAM0105
APERIODC must have one-to-one mapping with APERIOD
_ALL_-ADSL
[APERIOD][APERIODC]
ADAM0107
APERSDT must have corresponding APxxSDT value
[_ALL_-ADSL] [ADSL]
{_cstlist:APERSDT+APERIOD} {_cstlist:AP##SDT}
ADAM0108
APERSDTM must have corresponding APxxSDTM value
[_ALL_-ADSL] [ADSL]
{_cstlist:APERSDTM+APERIOD} {_cstlist:AP##SDTM}
ADAM0109
AVISITN is a one-to-one mapping with AVISIT
_ALL_-ADSL
[AVISITN][AVISIT]
ADAM0111
When ARELTM is present, the anchor time variable and ARELTMU must also be included in the data set, and the anchor time variable must be identified in the metadata for ARELTM
_ALL_-ADSL
[ARELTM][ARELTMU]
ADAM0112
When ARELTM is present, the anchor time variable and ARELTMU must also be included in the data set, and the anchor time variable must be identified in the metadata for ARELTM
_ALL_-ADSL
[ARELTM][ARELTMU]
ADAM0113
When ARELTM is present, the anchor time variable and ARELTMU must also be included in the data set, and the anchor time variable must be identified in the metadata for ARELTM
_ALL_-ADSL
[ARELTMU][ARELTM]
ADAM0114
When ARELTM is present, the anchor time variable and ARELTMU must also be included in the data set, and the anchor time variable must be identified in the metadata for ARELTM
_ALL_-ADSL
[ARELTMU][ARELTM]
ADAM0115
If ATPTREF is populated, then ATPT must be populated
_ALL_-ADSL
[ATPTREF][ATPT]
ADAM0116
If ATPTREF is populated, then ATPT must be populated
_ALL_-ADSL
[ATPT][ATPTREF]
ADAM0117
Within the same parameter there must be a one-to-one mapping between ATPT and ATPTN if both variables are present
_ALL_-ADSL
[ATPT][ATPTN]
ADAM0121
If *SDT and *EDT are nonmissing, then *SDT <= *EDT
_ALL_
[**SDT][**EDT]
ADAM0122
If *SDTM and *EDTM are nonmissing, then *SDTM <= *EDTM
_ALL_
[**SDTM][**EDTM]
ADAM0123
PARAMTYP has the same value for all records within a parameter
_ALL_-ADSL
[PARAMTYP][PARAMCD]
ADAM0124
PARCATy has the same value for all records within a parameter
_ALL_-ADSL
[PARCAT#][PARAMCD]
ADAM0125
PARCATy and PARCATyN have a one-to-one mapping
_ALL_-ADSL
[PARCAT#][PARCAT#N]
ADAM0127
If BASE is populated, then there must be a corresponding AVAL value with ABLFL=Y
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASE+ABLFL}
ADAM0128
If BASEC is populated, then there must be a corresponding AVALC value with ABLFL=Y
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASEC+ABLFL}
ADAM0129
If both BASE and BASEC are populated, then there must be a one-to-one mapping
_ALL_-ADSL
[BASE][BASEC]
ADAM0131
If BASETYPE is populated for at least one record within a parameter, then it must be populated for all records within that parameter
_ALL_-ADSL
[PARAMCD][BASETYPE]
ADAM0132
R2BASE must equal AVAL/BASE
_ALL_-ADSL
{_cstList:R2BASE+AVAL+BASE}
ADAM0133
R2AyLO must equal AVAL/AyLO
_ALL_-ADSL
{_cstList:R2A#LO} {_cstList:A#LO}
ADAM0134
R2AyHI must equal AVAL/AyHI
_ALL_-ADSL
{_cstList:R2A#HI} {_cstList:A#HI}
ADAM0135
SHIFTyN must be a one-to-one mapping with SHIFTy
_ALL_-ADSL
[SHIFT#N][SHIFT#]
ADAM0137
If CRITyFL is populated, then CRITy must be populated
_ALL_-ADSL
[CRIT#FL][CRIT#]
ADAM0138
If CRITyFL is populated, then CRITy must be populated
_ALL_-ADSL
[CRIT#][CRIT#FL]
ADAM0141
PARAM and PARAMCD are present and have a one-to-one mapping
_ALL_-ADSL
[PARAM][PARAMCD]
ADAM0143
PARAMCD values should follow SAS V5 variable naming conventions
_ALL_-ADSL
PARAMCD
ADAM0145
PARAMCD values should follow SAS V5 variable naming conventions
_ALL_-ADSL
PARAMCD
ADAM0146
PARAMN is a one-to-one mapping with PARAM if present
_ALL_-ADSL
[PARAM][PARAMN]
ADAM0148
PARAMN must be an integer
_ALL_-ADSL
PARAMN
ADAM0149
If both AVAL and AVALC are populated, then there must be a one-to-one mapping
_ALL_-ADSL
[AVAL][AVALC]
ADAM0151
The values of CRITy within a parameter must be constant on all rows on which it is populated
_ALL_-ADSL
{_cstList:PARAMCD+CRIT#}
ADAM0152
If BASE is populated, then it must be with a value flagged for some record via ABLFL for that parameter
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASETYPE+BASE+AVAL+ABLFL}
ADAM0153
If there are multiple baseline records flagged for a given parameter within a subject, then BASETYPE should be populated and contain different values for the baseline records within a subject
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASETYPE+ABLFL}
ADAM0154
If there are multiple baseline records flagged for a given parameter within a subject, then BASETYPE should be populated and contain different values for the baseline records within a subject
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASETYPE+ABLFL}
ADAM0155
Whenever there is more than one definition of baseline, the BASETYPE column is required. BASETYPE identifies the definition of baseline that corresponds to the value of BASE in each row. There is only one BASE column, and only one column for each qualifying function of AVAL and BASE
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ ABLFL}
ADAM0156
Variable CRITyFL must be present on the data set if variable CRITy is present, and vice versa.
_ALL_-ADSL
[CRIT#FL][CRIT#]
ADAM0157
Variable CRITyFL must be present on the data set if variable CRITy is present, and vice versa
_ALL_-ADSL
[CRIT#][CRIT#FL]
ADAM0158
If AWTDIFF is present, then AWTARGET must be present
_ALL_-ADSL
[AWTDIFF][AWTARGET]
ADAM0159
If AWTDIFF is populated, then AWTARGET must be populated
_ALL_-ADSL
[AWTDIFF][AWTARGET]
ADAM0160
If AWU is present, then AWLO and AWHI must be present
_ALL_-ADSL
{_cstList:AWU+AWLO+AWHI}
ADAM0161
If AWU is populated, then AWLO and AWHI must be populated
_ALL_-ADSL
{_cstList:AWU+AWLO+AWHI}
ADAM0162
*LO must be less than or equal to *HI
_ALL_-ADSL
[**LO][**HI]
ADAM0163
If BTOXGR is present, then ATOXGR and ABLFL must be present
_ALL_-ADSL
[BTOXGR][ATOXGR]
ADAM0164
If BTOXGR is present, then ATOXGR and ABLFL must be present
_ALL_-ADSL
[BTOXGR][ABLFL]
ADAM0165
If BTOXGR is populated, then there must be a corresponding ATOXGR value with ABLFL=Y
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASETYPE+BTOXGR+ATOXGR+ ABLFL}
ADAM0166
If BNRIND is present, then ANRIND and ABLFL must be present
_ALL_-ADSL
[BNRIND][ANRIND]
ADAM0167
If BNRIND is present, then ANRIND and ABLFL must be present
_ALL_-ADSL
[BNRIND][ABLFL]
ADAM0168
If BNRIND is populated, then there must be a corresponding ANRIND value with ABLFL=Y
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASETYPE+BNRIND+ANRIND+ ABLFL}
ADAM0169
CNSR should be an integer
_ALL_-ADSL
CNSR
ADAM0170
If STARTDT is present, then CNSR must be present
_ALL_-ADSL
[STARTDT][CNSR]
ADAM0171
If ONTRTFL ^=Y then TRTSDT <= ADT <= TRTEDT should not be true
[_ALL_-ADSL] [ADSL]
{_cstList:USUBJID+ONTRTFL+ADT} {_cstList:USUBJID+TRTSDT}
ADAM0172
If ONTRTFL ^=Y then TRTSDT <= ADT <= TRTEDT should not be true
[_ALL_-ADSL] [ADSL]
{_cstList:USUBJID+ONTRTFL+ADT} {_cstList:USUBJID+TRTEDT}
ADAM0173
If ONTRTFL ^=Y then TRTSDT <= ADT <= TRTEDT should not be true
[_ALL_-ADSL] [ADSL]
{_cstList:USUBJID+ONTRTFL+ADT} {_cstList:USUBJID+TRTSDT+TRTEDT}
ADAM0174
If LVOTFL=Y then TRTSDT <= ADT <= TRTEDT should be true
[_ALL_-ADSL] [ADSL]
{_cstList:USUBJID+LVOTFL+ADT} {_cstList:USUBJID+TRTSDT}
ADAM0175
A maximum of one record within a parameter timepoint can have LVOTFL=Y
_ALL_-ADSL
[PARAMCD][LVOTFL]
ADAM0176
ABLFL must have a value of Y or null
_ALL_-ADSL
ABLFL
ADAM0177
A maximum of one record within a parameter can have ABLFL=Y
_ALL_-ADSL
[BASETYPE][ABLFL]
ADAM0178
ANLzzFL must have a value of Y or null
_ALL_-ADSL
ANL##FL
ADAM0179
If LVOTFL=Y then TRTSDT <= ADT <= TRTEDT should be true
[_ALL_-ADSL] [ADSL]
{_cstList:USUBJID+LVOTFL+ADT} {_cstList:USUBJID+TRTEDT}
ADAM0180
The value of SRCDOM should reference a valid SDTM domain.
_ALL_-ADSL
SRCDOM
ADAM0181
If BASE is populated, then it must be with a value flagged for some record via ABLFL for that parameter
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BASE+AVAL+ABLFL}
ADAM0182
If BTOXGR is populated, then there must be a corresponding ATOXGR value with ABLFL=Y
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BTOXGR+ATOXGR+ABLFL}
ADAM0183
If BNRIND is populated, then there must be a corresponding ANRIND value with ABLFL=Y
_ALL_-ADSL
{_cstList:USUBJID+PARAMCD+ BNRIND+ANRIND+ABLFL}