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: derive vital-signs analysis values where each fragile read states its fallback beside it: an unmapped or absent test code, a collected result that cannot be read as a whole number, and a subject with more than one dosing record.
Input: one spec.yaml. VS carries the vital-signs records:
subject, sequence, test code, the result as entered text, and units.
EX carries the dosing records: subject, sequence, treatment, dose,
and start date.
Fallbacks:
PARAMcodes each test: a collected code with no dictionary entry, and a record with no collected code at all, both take the stated "Other measure" label.AVALreads the collected result as a whole number: a result that cannot be read that way, such as "ND" or the fractional "98.6", is left blank by the stated fallback. A record with no collected result is blank because there is nothing to read.LASTDOSEtakes each subject's latest dose: a dosing record with no dose never qualifies, the dosed record with the latest start date wins, and a subject with no dosed record keeps the dose blank.
Note: each fallback is stated beside the read it guards, so the run completes with the stated answers instead of failing; a read whose condition never occurs keeps its ordinary value.
Inputs
Under review2 source filesinput/ex.csv
Edit4 rows| STUDYID | USUBJID | EXSEQ | EXTRT | EXDOSE | EXSTDTC |
|---|---|---|---|---|---|
| YAMAA-01 | 1 | DRUG A | 10 | 2026-01-05 | |
| YAMAA-01 | 2 | DRUG A | 20 | 2026-02-05 | |
| YAMAA-01 | 3 | DRUG A | — | 2026-03-05 | |
| YAMAA-01 | 1 | DRUG A | 10 | 2026-01-10 |
input/vs.csv
Edit8 rows| STUDYID | USUBJID | VSSEQ | VSTESTCD | VSSTRESN | VSSTRESU |
|---|---|---|---|---|---|
| YAMAA-01 | 1 | SYSBP | 120 | mmHg | |
| YAMAA-01 | 2 | DIABP | 80 | mmHg | |
| YAMAA-01 | 3 | PULSE | 72 | beats/min | |
| YAMAA-01 | 1 | SYSBP | ND | mmHg | |
| YAMAA-01 | 2 | DIABP | 78 | mmHg | |
| YAMAA-01 | 3 | TEMP | 98.6 | F | |
| YAMAA-01 | 4 | — | — | — | |
| YAMAA-01 | 1 | PULSE | 68 | beats/min |
Expected output
Under review8 expected rowsexpected/advs.csv
Edit8 rows| STUDYID | USUBJID | VSSEQ | PARAM | AVAL | LASTDOSE |
|---|---|---|---|---|---|
| YAMAA-01 | 1 | Systolic Blood Pressure | 120 | 20 | |
| YAMAA-01 | 2 | Diastolic Blood Pressure | 80 | 20 | |
| YAMAA-01 | 3 | Pulse Rate | 72 | 20 | |
| YAMAA-01 | 1 | Systolic Blood Pressure | — | 10 | |
| YAMAA-01 | 2 | Diastolic Blood Pressure | 78 | 10 | |
| YAMAA-01 | 3 | Other measure | — | 10 | |
| YAMAA-01 | 4 | Other measure | — | 10 | |
| YAMAA-01 | 1 | Pulse Rate | 68 | — |
Comments and assessment materials
| Dataset Name | Variable Name | Variable Label | Type | Codelist/Controlled Terms | Core | Computational Method | Origin |
|---|---|---|---|---|---|---|---|
| ADVS | STUDYID | Study Identifier | character | Copy value from VS.STUDYID. | Predecessor | ||
| ADVS | USUBJID | Unique Subject Identifier | character | Copy value from VS.USUBJID. | Predecessor | ||
| ADVS | VSSEQ | Sequence Number | numeric | Copy value from VS.VSSEQ. | Predecessor | ||
| ADVS | PARAM | Parameter | character | Recode VS.VSTESTCD: "SYSBP" → "Systolic Blood Pressure", "DIABP" → "Diastolic Blood Pressure", "PULSE" → "Pulse Rate"; missing or unlisted values → "Other measure". | Derived | ||
| ADVS | AVAL | Analysis Value | numeric | Copy value from VS.VSSTRESN; a value that cannot be converted → blank. | Derived | ||
| ADVS | LASTDOSE | Latest Dose | numeric | Copy value from EX.EXDOSE where EX.EXDOSE IS NOT NULL, keeping the last ordered by EX.EXSTDTC; an absent source → blank. | Predecessor |
| 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