Synthetic example / DM
One subject, several identities
Separate an app-local key from the identifiers used to join an educational extract.
The application keys person-a and person-b are convenient for the invented input. The output uses SYN-001 and SYN-002 as its stable subject references. Keeping the original input IDs in the manifest lets you inspect the transformation without claiming those IDs are SDTM variables. Notice that SUBJID remains a string: converting 001 to a number would silently change its representation.
01 / The collection
[
{
"id": "person-a",
"study": "CLD-SYN-001",
"subject": "SYN-001",
"localLabel": "001",
"age": 34,
"referenceDate": "2025-01-10"
},
{
"id": "person-b",
"study": "CLD-SYN-001",
"subject": "SYN-002",
"localLabel": "002",
"age": 47,
"referenceDate": "2025-01-12"
}
]02 / The representation
Scroll this table horizontally to inspect every field, or read as records.
| STUDYID | DOMAIN | USUBJID | SUBJID | AGE | SEX | RFSTDTC |
|---|---|---|---|---|---|---|
| CLD-SYN-001 | DM | SYN-001 | 001 | 34 | null (missing) | 2025-01-10 |
| CLD-SYN-001 | DM | SYN-002 | 002 | 47 | null (missing) | 2025-01-12 |
Inspect output JSON and CSV
[
{
"STUDYID": "CLD-SYN-001",
"DOMAIN": "DM",
"USUBJID": "SYN-001",
"SUBJID": "001",
"AGE": 34,
"SEX": null,
"RFSTDTC": "2025-01-10"
},
{
"STUDYID": "CLD-SYN-001",
"DOMAIN": "DM",
"USUBJID": "SYN-002",
"SUBJID": "002",
"AGE": 47,
"SEX": null,
"RFSTDTC": "2025-01-12"
}
]STUDYID,DOMAIN,USUBJID,SUBJID,AGE,SEX,RFSTDTC
CLD-SYN-001,DM,SYN-001,001,34,,2025-01-10
CLD-SYN-001,DM,SYN-002,002,47,,2025-01-12
03 / The decisions between them
study → STUDYID- Copy the fictional study identifier.
subject → USUBJID- Copy the stable authored subject key; do not expose the app-local id.
localLabel → SUBJID- Preserve the string and leading zeros.
age → AGE- Copy an invented integer; no age derivation is implied.
referenceDate → RFSTDTC- Preserve the date string; this is not a universal reference-date rule.
(authored) → DOMAIN- Set constant DM for this teaching example.
(not collected) → SEX- Missing categorical values stay null; no controlled terminology lookup.
Trace each row
person-a→subject-identity:1person-b→subject-identity:2
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