Model 2.0IG 3.4Content 1.0.0Curated educational coverage

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

Original synthetic input · JSON
[
  {
    "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

4 records · all fields included
VS synthetic output
STUDYIDDOMAINUSUBJIDVSSEQVSTESTCDVSORRESVSORRESUVSDTC
CLD-SYN-001VSSYN-0011DEMO_A72DEMO_UNIT2025-02-03
CLD-SYN-001VSSYN-0012DEMO_B18DEMO_UNIT2025-02-03
CLD-SYN-001VSSYN-0021DEMO_A75DEMO_UNIT2025-02-04
CLD-SYN-001VSSYN-0022DEMO_B20DEMO_UNIT2025-02-04
Inspect output JSON and CSV
Output JSON
[
  {
    "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"
  }
]

Output CSV
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:1
  • obs-b → vital-signs-rows:2
  • obs-c → vital-signs-rows:3
  • obs-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