Synthetic example / VS
From a collection to four observations
Follow each fictional measurement into its own row and keep a trace back to the input.
Each input observation yields exactly one output row. Two subjects with two observations each produce four rows, not a wide record with two measurement columns. Sequence numbers distinguish this example's rows within a subject, while the manifest retains the actual input IDs. Values stay as strings so the demonstration does not silently impose numeric interpretation.
01 / The collection
[
{
"id": "obs-a",
"study": "CLD-SYN-001",
"subject": "SYN-001",
"measurement": "DEMO_A",
"value": "72",
"unit": "DEMO_UNIT",
"date": "2025-02-03"
},
{
"id": "obs-b",
"study": "CLD-SYN-001",
"subject": "SYN-001",
"measurement": "DEMO_B",
"value": "18",
"unit": "DEMO_UNIT",
"date": "2025-02-03"
},
{
"id": "obs-c",
"study": "CLD-SYN-001",
"subject": "SYN-002",
"measurement": "DEMO_A",
"value": "75",
"unit": "DEMO_UNIT",
"date": "2025-02-04"
},
{
"id": "obs-d",
"study": "CLD-SYN-001",
"subject": "SYN-002",
"measurement": "DEMO_B",
"value": "20",
"unit": "DEMO_UNIT",
"date": "2025-02-04"
}
]02 / The representation
Scroll this table horizontally to inspect every field, or read as records.
| STUDYID | DOMAIN | USUBJID | VSSEQ | VSTESTCD | VSORRES | VSORRESU | VSDTC |
|---|---|---|---|---|---|---|---|
| CLD-SYN-001 | VS | SYN-001 | 1 | DEMO_A | 72 | DEMO_UNIT | 2025-02-03 |
| CLD-SYN-001 | VS | SYN-001 | 2 | DEMO_B | 18 | DEMO_UNIT | 2025-02-03 |
| CLD-SYN-001 | VS | SYN-002 | 1 | DEMO_A | 75 | DEMO_UNIT | 2025-02-04 |
| CLD-SYN-001 | VS | SYN-002 | 2 | DEMO_B | 20 | DEMO_UNIT | 2025-02-04 |
Inspect output JSON and CSV
[
{
"STUDYID": "CLD-SYN-001",
"DOMAIN": "VS",
"USUBJID": "SYN-001",
"VSSEQ": 1,
"VSTESTCD": "DEMO_A",
"VSORRES": "72",
"VSORRESU": "DEMO_UNIT",
"VSDTC": "2025-02-03"
},
{
"STUDYID": "CLD-SYN-001",
"DOMAIN": "VS",
"USUBJID": "SYN-001",
"VSSEQ": 2,
"VSTESTCD": "DEMO_B",
"VSORRES": "18",
"VSORRESU": "DEMO_UNIT",
"VSDTC": "2025-02-03"
},
{
"STUDYID": "CLD-SYN-001",
"DOMAIN": "VS",
"USUBJID": "SYN-002",
"VSSEQ": 1,
"VSTESTCD": "DEMO_A",
"VSORRES": "75",
"VSORRESU": "DEMO_UNIT",
"VSDTC": "2025-02-04"
},
{
"STUDYID": "CLD-SYN-001",
"DOMAIN": "VS",
"USUBJID": "SYN-002",
"VSSEQ": 2,
"VSTESTCD": "DEMO_B",
"VSORRES": "20",
"VSORRESU": "DEMO_UNIT",
"VSDTC": "2025-02-04"
}
]STUDYID,DOMAIN,USUBJID,VSSEQ,VSTESTCD,VSORRES,VSORRESU,VSDTC
CLD-SYN-001,VS,SYN-001,1,DEMO_A,72,DEMO_UNIT,2025-02-03
CLD-SYN-001,VS,SYN-001,2,DEMO_B,18,DEMO_UNIT,2025-02-03
CLD-SYN-001,VS,SYN-002,1,DEMO_A,75,DEMO_UNIT,2025-02-04
CLD-SYN-001,VS,SYN-002,2,DEMO_B,20,DEMO_UNIT,2025-02-04
03 / The decisions between them
study → STUDYID- Copy study identity.
subject → USUBJID- Copy the authored subject key.
measurement → VSTESTCD- Copy the explicit teaching token; this is not terminology normalization.
value → VSORRES- Preserve the original string.
unit → VSORRESU- Preserve the fictional unit token.
date → VSDTC- Preserve recorded precision; do not add a timezone.
(authored) → DOMAIN- Set constant VS for this teaching example.
(authored) → VSSEQ- Assign fixed example sequence numbers within each subject; not a general sequencing rule.
Trace each row
obs-a→vital-signs-rows:1obs-b→vital-signs-rows:2obs-c→vital-signs-rows:3obs-d→vital-signs-rows:4
JSON null becomes an empty CSV cell. Empty CSV cells cannot distinguish absent from empty text; use JSON for that distinction.
Read the variable lessons
Follow the source
Original ClinDevLab explanations. Publisher material is linked, not reproduced. Reviewed 8 October 2026.
- SDTM 2.0https://www.cdisc.org/standards/foundational/sdtm/sdtm-v2-0 · CDISC · 2.0 · accessed 2026-10-08
- SDTMIG 3.4https://www.cdisc.org/standards/foundational/sdtmig/sdtmig-v3-4 · CDISC · 3.4 · accessed 2026-10-08