The cstcheck_crossstdmetamismatch
macro identifies inconsistencies in metadata across registered standards.
The macro requires use of _cstCodeLogic as a full DATA step or PROC
SQL invocation. This DATA step or SQL step assumes as input a work
copy of the column metadata data set returned by the cstutil_buildcollist
macro. Any resulting records in the derived data set represent errors
to be reported.
Assumptions:
-
No data content is accessed
for this check.
-
Both study and reference
metadata are available to assess compliance.
-
The _cstProblems macro
includes at least two columns. The mnemonics are from the global standards
library data set:
-
&_cstStMnemonic._value (for
example, ADAM_value containing the value of the column of interest
from the primary standard)
-
&_cstCrMnemonic._value (for
example, SDTM_value containing the value of the column of interest
from the comparison standard)
Required global macro
variables:
-
_cstcrossstd: The name of the comparison
standard. It is also used as a parameter to initialize _cstCrMnemonic.
-
_cstcrossstdver: The version of
the comparison standard.
-
_cstrunstd: The primary standard.
It is also used as a parameter to initialize _cstStMnemonic.
-
_cstrunstdver: The version of the
primary standard.
An ADaM 2.1 validation
check that uses this macro is ADAM0002. Here is the rule description
for this check, taken from the CDISC ADaM Validation document:
“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.”
Here is the message
text for this check:
A variable
is present in ADaM with the same name as a variable present in SDTM
but the variables do not have identical labels
Here is sample code
from the codelogic field from the ADaM 2.1 Validation Master data
set for validation check ADAM0002. In this example, &_cstStMnemonic=ADAM
and &_cstCrMnemonic=SDTM are generated by the macro prior to execution
of codelogic.
%let _cstAttr=label;
proc sql noprint;
create table work._cstProblems as
select &_cstStMne..sasref, &_cstStMne..table, &_cstStMne..column,
&_cstStMne..&_cstAttr as &_cstStMne._value,
&_cstCrMne..&_cstAttr as &_cstCrMne._value
from work._cstcolumnmetadata &_cstStMne
left join
work._cstcrosscolumnmetadata &_cstCrMne
on upcase(&_cstStMne..column)=upcase(&_cstCrMne..column)
where &_cstCrMne..column ne "" and
(&_cstStMne..&_cstAttr ne &_cstCrMne..&_cstAttr);
quit;