As a clinical trial statistician or programmer, challenge anything in this benchmark: describe a problem in Comments, or propose a fix with the Edit button on any source file.
- Task: Would a real study need this derivation, specified this way? Does it follow CDISC ADaM: variable names, controlled terms, record structure? Flag any rule that is ambiguous or that a sponsor would handle differently.
- Inputs: Do they look like data collected in a real trial, and do they include the situations you would expect to meet in one?
- Expected output: Would independent QC programming reproduce every value from these inputs and rules?
The other tabs beside Comments are background for assessment, not under review.
Summary
README.mdGoal: demonstrate a study level changing details inside inherited
columns - AVAL, ANRIND, and PARCAT1.
Input: three spec files, read root-first:
spec_organization.yamlturns the laboratory test code, result, and reference range indicator intoPARAMCD,AVAL,ANRIND, andPARCAT1, reading the indicator without regard to letter case; it marksAVALas the analysis value and checks that it is not negative;spec_compound.yamladds the low reference range wording the organization does not list, and notes thatAVALcomes from the central laboratory;spec_study.yamlis the entry: it applies one corrected result, marksAVALas adjudicated and checks that it is never missing, leaves an unrecognized indicator empty, statesPARCAT1as the one category this study collects, and declares the complete output.
Parents resolve depth-first, left to right, with later levels winning;
the chain resolves to expected/spec_resolved.yaml, the default view
in the specification dropdown.
Note: a later level composes a column detail by detail. The added
reference range wording joins the two the organization already lists,
the three annotations on AVAL accumulate, and the case-insensitive
reading survives a level that never mentions it. A level naming a
different way to produce a value replaces it whole instead, which is
why PARCAT1 stops reading the test code. Lists never accumulate: the
study's own check on AVAL replaces the organization's.
Inputs
Under review1 source fileinput/lb.csv
Edit4 rows| USUBJID | LBTESTCD | LBSTRESN | LBSTRESU | LBNRIND |
|---|---|---|---|---|
| ALT | 12.5 | U/L | n | |
| AST | -1.0 | U/L | h | |
| ALT | 21.0 | U/L | l | |
| AST | 30.0 | U/L | x |
Expected output
Under review4 expected rowsexpected/adlb.csv
Edit4 rows| USUBJID | PARAMCD | AVAL | ANRIND | PARCAT1 |
|---|---|---|---|---|
| ALT | 12.5 | NORMAL | CHEMISTRY | |
| AST | 31 | HIGH | CHEMISTRY | |
| ALT | 21 | LOW | CHEMISTRY | |
| AST | 30 | — | CHEMISTRY |
Comments and assessment materials
| Dataset Name | Variable Name | Variable Label | Type | Codelist/Controlled Terms | Core | Computational Method | Origin |
|---|---|---|---|---|---|---|---|
| ADLB | AVAL | If USUBJID = '01' AND PARAMCD = 'AST' then "31.0"; otherwise "LB.LBSTRESN". | Derived | ||||
| ADLB | ANRIND | Recode None: ; missing or unlisted values stay missing. | Derived | ||||
| ADLB | PARCAT1 | Set constant value "CHEMISTRY". | Assigned |
| Version | Date | Author | Description | Reviewer | Sign-off |
|---|---|---|---|---|---|
| 1.3 | 2026-09-29 | yamaa docs build | Show study codelist names, external dictionaries, and ISO 8601 formats in variable rows; list the document's codelist values and metadata | ||
| 1.2 | 2026-09-29 | yamaa docs build | Classify ADaM copies from a declared input as Predecessor and recodes as Derived, and SDTM recodes of locally derived columns as Derived | ||
| 1.1 | 2026-09-29 | yamaa docs build | Resolve lookups into the donor record they select, and give every derivation shape a plain-language rule instead of its raw YAML | ||
| 1.0 | yamaa docs build | Initial generation from spec.yaml |
yamaa
Comments
Signed in with GitHub; saved in repository Discussions