Le modèle de tabulation SDTM : classes et rôles

L’unique structure que partage chaque domaine SDTM de CDISC — les trois classes générales d’observation (Findings, Events, Interventions), les quatre rôles de variables (Identifier, Topic, Qualifier, Timing) et la convention de nommage – — apprenez-la une fois et chacun des ~50 domaines se lit tout seul

Le modèle d’ensemble derrière le standard CDISC SDTM, avant de mapper un seul domaine. Découvrez les trois classes générales d’observation — Findings (une mesure), Events (ce qui est arrivé), Interventions (ce qui est administré) — plus la classe Special-Purpose, et les quatre RÔLES de variables dont chaque domaine est construit : Identifier (STUDYID, USUBJID, –SEQ), Topic (–TESTCD / –TERM / –TRT), Qualifier (–ORRES, –DOSE, –SEV) et Timing (–DTC, –DY). Voyez le même squelette lu sur de vrais domaines de signes vitaux, d’événements indésirables, d’exposition et de démographie, et comprenez pourquoi la convention de nommage – fait de VSSEQ, AESEQ et EXSEQ la même variable — pour que chaque domaine SDTM devienne reconnaissable comme une instance d’un seul modèle.

Date de publication

1 juillet 2026

Modifié

7 juillet 2026

AstucePoints clés
  • SDTM est un seul modèle répété ~50 fois. Chaque domaine — signes vitaux, événements indésirables, exposition au médicament, démographie — est construit à partir du même squelette, vous apprenez donc la structure une fois et chaque domaine se lit tout seul.
  • Trois classes générales d’observation déterminent la forme d’un enregistrement. Findings enregistre une mesure, Events enregistre ce qui est arrivé, Interventions enregistre ce qui est administré — plus la classe Special-Purpose (une ligne par sujet).
  • Quatre rôles de variables construisent chaque enregistrement. Identifier (qui et quel enregistrement), Topic (l’objet de l’observation), Qualifier (tout ce qui le décrit), et Timing (quand cela s’est produit).
  • La convention de nommage -- relie le tout. Un préfixe de domaine à deux lettres plus un suffixe standard fait de VSSEQ, AESEQ et EXSEQ la même variable (--SEQ) dans trois domaines différents — reconnaissez le suffixe et vous connaissez le rôle.
  • Un domaine est un code à deux lettres et une instance d’une classe. VS, AE, EX, DM, GF — un seul jeu de données physique chacun, tous taillés dans le même patron.

Introduction

Vous avez mappé les signes vitaux. Le promoteur vous confie maintenant quarante domaines de plus — événements indésirables, médicaments concomitants, analyses biologiques, ECG, disposition, antécédents médicaux, exposition, démographie — et une échéance. La bonne nouvelle est celle qu’il vaut la peine d’intérioriser avant d’écrire une ligne de code de mapping supplémentaire : ils ont tous la même forme. Trois classes d’observation, quatre rôles de variables, une convention de nommage. Apprenez le modèle une fois et chaque domaine se lit tout seul.

Cette leçon est la carte que vous lisez avant de mapper un seul domaine. SDTM — le Study Data Tabulation Model — est le standard CDISC (Clinical Data Interchange Standards Consortium) qui organise toutes les données recueillies dans un essai clinique en un ensemble fixe de tables, pour qu’un évaluateur réglementaire puisse ouvrir n’importe quelle étude et la lire de la même façon. Il est publié comme le standard fondamental SDTM, avec les règles au niveau des domaines dans le SDTM Implementation Guide (SDTMIG). Un domaine est l’une de ces tables — un code à deux lettres (VS, AE, EX, DM) et un seul jeu de données physique. Il y en a une cinquantaine, et cette leçon porte sur l’unique patron qu’ils partagent tous.

Voici tout ce patron en une seule image — le modèle que cette leçon décortique :

A grid diagram of the SDTM model. Three rows are the general observation classes — Findings shown by the vital-signs domain VS, Events by the adverse-events domain AE, Interventions by the exposure domain EX. Four columns are the variable roles: Identifier, Topic, Qualifier, Timing. Each cell shows the standardized -- suffix in bold (identical down every column: --SEQ for Identifier in all three rows) and the real domain variable in mono below it. The Identifier column is --SEQ / VSSEQ, AESEQ, EXSEQ; the Topic column differs by class — --TESTCD / VSTESTCD for Findings, --TERM / AETERM for Events, --TRT / EXTRT for Interventions; the Qualifier column is --ORRES / VSORRES, --SEV / AESEV, --DOSE / EXDOSE; the Timing column is --DTC / VSDTC, --STDTC / AESTDTC, --STDTC / EXSTDTC. The visual point is that three different record shapes are built from the same four-role skeleton, and the -- prefix carries the role across domains.

Chaque cellule de cette grille est une vraie variable d’un vrai domaine. Les colonnes sont les quatre rôles de variables ; les lignes sont trois des classes d’observation de SDTM. Lisez la colonne Identifier de haut en bas : le suffixe --SEQ est identique, seul le préfixe à deux lettres change. C’est toute l’idée. Le reste de cette leçon explique chaque pièce, puis la lit directement sur quatre vrais domaines de pharmaversesdtm, le package pharmaverse de jeux de données SDTM d’exemple. Nouveau sur la place de SDTM dans le pipeline plus large ? Commencez par le flux de données de l’essai clinique et les standards CDISC.

Les classes d’observation : ce que représente un enregistrement

Une classe d’observation est la division de plus haut niveau de SDTM : elle regroupe les domaines selon ce que représente fondamentalement un enregistrement, et ce choix fixe la forme de l’enregistrement. SDTM définit trois classes générales d’observation pour l’essentiel des données d’essai, plus une classe Special-Purpose et deux classes structurelles :

Classe d’observation Ce que capture un enregistrement Variable topic Domaines d’exemple
Findings Une mesure ou évaluation — un test qui a produit un résultat --TESTCD VS (signes vitaux), LB (analyses biologiques), EG (ECG), GF (résultats génomiques)
Events Ce qui est arrivé au sujet --TERM AE (événements indésirables), MH (antécédents médicaux), DS (disposition)
Interventions Ce qui est donné au ou fait au sujet --TRT EX (exposition), CM (médicaments concomitants), PR (procédures)
Special-Purpose Faits au niveau du sujet qui n’entrent dans aucune classe générale (aucune) DM (démographie), CO (commentaires), SE (éléments du sujet)
Trial Design La conception planifiée de l’étude, pas les données des sujets (aucune) TA (bras), TV (visites), TS (résumé), TI (inclusion/exclusion)
Relationship Liens entre enregistrements ou jeux de données (aucune) RELREC (liens d’enregistrements), SUPP– (qualificateurs supplémentaires)

Les trois classes générales d’observation portent presque toutes les observations au niveau du sujet, et la classe est une véritable décision de contenu, pas une convention de classement. Une mesure de pression artérielle est un enregistrement Findings parce que c’est une mesure — un test (VSTESTCD = "SYSBP") qui a produit un résultat. Un mal de tête est un enregistrement Events parce que c’est quelque chose qui est arrivé — un terme rapporté (AETERM = "HEADACHE"), sans valeur de résultat. Une dose de 54 mg est un enregistrement Interventions parce que c’est quelque chose d’administré — un traitement (EXTRT) avec une dose. Demandez « est-ce une mesure, une occurrence ou une administration ? » et la classe — et donc la forme de l’enregistrement — en découle.

Les classes restantes complètent le modèle. Les domaines Special-Purpose contiennent des faits au niveau du sujet qui n’entrent dans aucune des trois formes générales — surtout DM (démographie), qui compte une ligne par sujet (âge, sexe, race, bras de traitement) sans variable topic ni numéro de séquence. Les domaines Trial Design décrivent la structure planifiée de l’étude (ses bras, visites et éléments) plutôt que ce qui est arrivé à un sujet. Les jeux de données Relationship relient des enregistrements — les jeux SUPP-- attachent des qualificateurs supplémentaires à un domaine parent, et RELREC relie des enregistrements liés entre domaines. Vous mapperez des domaines d’observation générale la plupart du temps ; les trois autres classes sont là quand vous en avez besoin.

Vous pouvez lire la différence de classe directement sur les données. Chacun de ces domaines relève d’une classe différente, donc chacun est indexé par une variable topic différente — l’unique colonne qui nomme l’objet de l’enregistrement :

library(pharmaversesdtm)
library(dplyr, warn.conflicts = FALSE)
data(vs); data(ae); data(ex)

# Findings: the topic is a TEST that produced a RESULT
vs |> select(USUBJID, VSTESTCD, VSTEST, VSORRES) |> slice_head(n = 2)
# A tibble: 2 × 4
  USUBJID     VSTESTCD VSTEST                   VSORRES
  <chr>       <chr>    <chr>                    <chr>  
1 01-701-1015 DIABP    Diastolic Blood Pressure 64     
2 01-701-1015 DIABP    Diastolic Blood Pressure 83     
# Events: the topic is a reported TERM, no result value
ae |> select(USUBJID, AETERM, AEDECOD) |> slice_head(n = 2)
# A tibble: 2 × 3
  USUBJID     AETERM                    AEDECOD                  
  <chr>       <chr>                     <chr>                    
1 01-701-1015 APPLICATION SITE ERYTHEMA APPLICATION SITE ERYTHEMA
2 01-701-1015 APPLICATION SITE PRURITUS APPLICATION SITE PRURITUS
# Interventions: the topic is the TREATMENT given, with a dose
ex |> select(USUBJID, EXTRT, EXDOSE, EXDOSU) |> slice_head(n = 2)
# A tibble: 2 × 4
  USUBJID     EXTRT   EXDOSE EXDOSU
  <chr>       <chr>    <dbl> <chr> 
1 01-701-1015 PLACEBO      0 mg    
2 01-701-1015 PLACEBO      0 mg    

Trois domaines, trois variables topic : VSTESTCD nomme un test (avec un résultat dans VSORRES), AETERM nomme un événement, EXTRT nomme un traitement. Cette unique colonne est ce qui fait de chaque enregistrement un Finding, un Event ou une Intervention — la classe exprimée dans les données.

Les quatre rôles de variables : pourquoi chaque domaine se ressemble

La classe fixe le topic ; le reste de l’enregistrement est construit à partir d’un petit ensemble fixe de rôles de variables. Chaque variable SDTM, dans chaque domaine, joue l’un de quatre rôles. C’est le cœur du modèle — apprenez les quatre rôles et vous pouvez lire un domaine que vous n’avez jamais vu :

Rôle de variable Ce qu’il fait Patron standard Exemples réels
Identifier Dit qui et quel enregistrement — étude, sujet, domaine, numéro d’enregistrement STUDYID, USUBJID, DOMAIN, --SEQ STUDYID, USUBJID, VSSEQ, AESEQ
Topic Nomme l’objet de l’observation (la colonne qui définit la classe) --TESTCD / --TERM / --TRT VSTESTCD, AETERM, EXTRT
Qualifier Décrit le topic — le résultat, le regroupement, les unités, la sévérité, la dose --ORRES, --STRESC, --CAT, --SEV, --DOSE VSORRES, AESEV, EXDOSE, EXROUTE
Timing Dit quand cela s’est produit --DTC, --STDTC, --ENDTC, --DY VSDTC, AESTDTC, EXSTDY

Deux des rôles relèvent d’un vocabulaire fixe et deux varient selon l’observation. Les variables Identifier sont presque les mêmes dans chaque domaine : STUDYID (l’étude), USUBJID (l’identifiant unique de sujet, unique sur toute l’étude), DOMAIN (le code à deux lettres) et --SEQ (un numéro de séquence qui rend chaque enregistrement unique au sein d’un sujet). Les variables Timing répondent au quand : une seule date --DTC pour un Finding ponctuel, une paire --STDTC/--ENDTC pour un Event ou une Intervention qui s’étend dans le temps, et les variables jour d’étude --DY qui comptent les jours depuis la date de début de référence du sujet.

Le Topic est l’unique colonne que la classe définit (section précédente). Tout le reste est un Qualifier — le rôle le plus vaste, et celui qui porte le contenu réel. SDTM répartit les qualificateurs en cinq sortes qu’il vaut la peine de connaître par leur nom : les qualificateurs Result contiennent la valeur du finding (--ORRES le résultat tel que collecté, --STRESC le résultat standardisé) ; les qualificateurs Grouping catégorisent les enregistrements (--CAT, --SCAT) ; les qualificateurs Variable décrivent un résultat (--ORRESU son unité) ; les qualificateurs Record décrivent l’enregistrement entier (AESEV sévérité, EXDOSE dose) ; et les qualificateurs Synonym donnent un nom alternatif (--DECOD, le terme codé par dictionnaire). Vous ne mémorisez pas les sous-types — vous reconnaissez que toute colonne qui n’est pas un Identifier, le Topic ou un Timing décrit le topic, et c’est un Qualifier.

Le rôle Identifier illustre le point le plus clairement, car il est presque invariant d’une classe à l’autre. Extrayez les identifiants de trois domaines de trois classes différentes et empilez-les :

library(pharmaversesdtm)
library(dplyr, warn.conflicts = FALSE)
data(vs); data(ae); data(ex)

# Grab the identifier columns from one domain, discovering its --SEQ variable
pick_ids <- function(dat, class) {
  seq_var <- grep("SEQ$", names(dat), value = TRUE)[1]
  dat |>
    transmute(class = class, DOMAIN, USUBJID,
              seq_variable = seq_var, SEQ = .data[[seq_var]]) |>
    slice_head(n = 2)
}

bind_rows(
  pick_ids(vs, "Findings"),      # VS
  pick_ids(ae, "Events"),        # AE
  pick_ids(ex, "Interventions")  # EX
)
# A tibble: 6 × 5
  class         DOMAIN USUBJID     seq_variable   SEQ
  <chr>         <chr>  <chr>       <chr>        <dbl>
1 Findings      VS     01-701-1015 VSSEQ            1
2 Findings      VS     01-701-1015 VSSEQ            2
3 Events        AE     01-701-1015 AESEQ            1
4 Events        AE     01-701-1015 AESEQ            2
5 Interventions EX     01-701-1015 EXSEQ            1
6 Interventions EX     01-701-1015 EXSEQ            2

Le même sujet (01-701-1015) apparaît dans les trois domaines avec une structure d’identifiants identique : STUDYID, USUBJID, DOMAIN, et un numéro de séquence qui est VSSEQ ici, AESEQ là, EXSEQ dans le troisième — le même rôle Identifier, la même variable --SEQ, seul le préfixe change. C’est le modèle qui fait son travail.

La convention de nommage -- : pourquoi VSSEQ et AESEQ sont une seule variable

Ce préfixe est la convention qui tient tout l’ensemble. Chaque nom de variable SDTM est un préfixe de domaine à deux lettres plus un suffixe standardisé. Le suffixe est le rôle ; le préfixe est le domaine. Ainsi --SEQ est la variable du numéro de séquence, et elle devient VSSEQ dans les signes vitaux, AESEQ dans les événements indésirables, EXSEQ dans l’exposition — trois noms, une variable, une signification. Le -- que vous voyez dans le SDTMIG (--TESTCD, --DTC, --SEQ) est un espace réservé pour « quelles que soient les deux lettres de ce domaine ».

C’est pourquoi le modèle passe à l’échelle. Une fois que vous savez que --DTC est la date/heure ISO 8601 de l’observation et --DY le jour d’étude de celle-ci, vous savez ce que signifient VSDTC, AESTDTC et EXSTDY sans les chercher. Lisez les variables de temporalité sur les trois domaines et regardez les suffixes se répéter :

library(pharmaversesdtm)
data(vs); data(ae); data(ex)

# Every timing variable ends in DTC (a date/time) or DY (a study day)
timing_vars <- function(dat) grep("DTC$|DY$", names(dat), value = TRUE)

timing_vars(vs)   # a point-in-time Finding: one --DTC and its --DY
[1] "VISITDY" "VSDTC"   "VSDY"   
timing_vars(ae)   # an Event that spans time: start/end --DTC and their --DY
[1] "AEDTC"   "AESTDTC" "AEENDTC" "AESTDY"  "AEENDY" 
timing_vars(ex)   # an Intervention episode: start/end --DTC and their --DY
[1] "VISITDY" "EXSTDTC" "EXENDTC" "EXSTDY"  "EXENDY" 

Chacun de ces noms se termine par DTC (une date ou date/heure) ou DY (un jour d’étude) — le rôle de temporalité, porté par le suffixe. VISITDY est le jour d’étude planifié d’une visite ; VSDTC la date d’un signe vital ; AESTDTC/AEENDTC le début et la fin d’un événement indésirable ; EXSTDY/EXENDY les jours d’étude où un épisode d’exposition a commencé et fini. Vous n’avez pas eu à apprendre séparément « la variable de date des signes vitaux » et « la variable de date de début de l’exposition » : ce sont toutes deux --DTC, et le préfixe vous a dit quel domaine.

Un domaine est un code à deux lettres et une instance d’une classe

En rassemblant le tout : un domaine est un seul jeu de données physique, nommé par un code à deux lettres, qui est une instance d’une classe d’observation. VS est un domaine Findings, AE un domaine Events, EX un domaine Interventions, GF un autre domaine Findings (résultats pharmacogénomiques). La classe vous indique la forme de l’enregistrement et la variable topic ; le code à deux lettres vous indique le préfixe de chaque nom de variable ; et les quatre rôles vous indiquent à quoi sert chaque colonne.

La classe Special-Purpose est l’exception instructive, et DM (démographie) est celle à connaître. Ce n’est pas une classe générale d’observation, elle rompt donc le patron exactement de la façon que le modèle prédit : pas de variable topic (un sujet n’est pas une observation à propos de quelque chose), et pas de --SEQ, parce qu’il y a une ligne par sujet plutôt que de nombreuses observations par sujet. Lisez-le sur les données :

library(pharmaversesdtm)
data(dm)

nrow(dm) == length(unique(dm$USUBJID))   # exactly one row per subject?
[1] TRUE
any(grepl("SEQ$", names(dm)))            # any --SEQ sequence variable?
[1] FALSE
# DM's columns are identifiers + subject-level qualifiers + a reference date — no topic
intersect(c("STUDYID", "USUBJID", "DOMAIN", "SUBJID", "RFSTDTC",
            "AGE", "SEX", "RACE", "ARM"), names(dm))
[1] "STUDYID" "USUBJID" "DOMAIN"  "SUBJID"  "RFSTDTC" "AGE"     "SEX"    
[8] "RACE"    "ARM"    

TRUE puis FALSE : une ligne par sujet, et aucune variable de séquence — exactement ce qu’implique « une ligne par sujet ». DM utilise tout de même le rôle Identifier (STUDYID, USUBJID, DOMAIN) et le rôle Qualifier (AGE, SEX, RACE, ARM décrivent le sujet) et une variable Timing (RFSTDTC, la date de début de référence que compte le --DY de chaque autre domaine) — il n’a simplement ni Topic ni --SEQ. Le modèle le décrit toujours ; il utilise juste un sous-ensemble des rôles.

Voilà le gain. Il y a environ cinquante domaines SDTM, et vous détenez désormais la clé de tous : identifiez la classe (mesure, événement, intervention ou niveau sujet), et chaque colonne relève de l’un des quatre rôles, nommé par un préfixe à deux lettres et un suffixe standard. Les prochaines leçons mappent un domaine chacune — les signes vitaux (Findings), les événements indésirables (Events), l’exposition (Interventions) et la démographie (Special-Purpose) — et chacune est une instance du modèle de cette page.

🟢 Avec un agent IA

Demandez à Prova « étant donné une colonne brute que j’ai collectée, à quelle classe d’observation et à quel rôle de variable SDTM appartient-elle, et quel est le nom de variable à suffixe -- dans le domaine cible ? » — elle répond en s’appuyant sur les leçons de ce pilier, avec du code exécutable que vous pouvez essayer sur les domaines d’exemple pharmaversesdtm. The runtime is the judge. Demandez à Prova →

Problèmes fréquents

Vous traitez un résultat Findings comme s’il était un topic Events. Une valeur de laboratoire ou un signe vital est une mesure : son topic est un code de test (--TESTCD) et sa valeur réside dans un qualificateur de résultat (--ORRES/--STRESC). Si vous vous surprenez à chercher un --TERM pour contenir « tension artérielle élevée », vous avez la mauvaise classe en tête — c’est un raisonnement Events appliqué à un Finding. Demandez si l’enregistrement est un test qui a produit un résultat (Findings) ou quelque chose qui est arrivé (Events) ; la variable topic découle de la réponse.

Vous confondez --SEQ avec un identifiant de sujet. --SEQ n’est pas un ID du sujet — c’est USUBJID. --SEQ est un numéro de séquence unique au sein d’un sujet, donc le même VSSEQ = 1 apparaît pour chaque sujet de l’étude. La clé qui rend un enregistrement Findings/Events/Interventions unique est la paire USUBJID + --SEQ, jamais --SEQ seul. Trier ou joindre sur --SEQ seul mélangera silencieusement les sujets.

Vous attendez que DM ait un --SEQ ou une variable topic. La démographie est un domaine Special-Purpose avec une ligne par sujet, il n’y a donc pas de numéro de séquence pour rendre les lignes uniques (USUBJID le fait déjà) ni de variable topic (un sujet n’est pas une observation à propos d’une seule chose). Si votre code DM cherche un DMSEQ ou un DMTESTCD, il applique la forme d’observation générale à un domaine qui ne l’utilise pas. Indexez DM sur USUBJID seul.

Questions fréquentes

SDTM (le CDISC Study Data Tabulation Model) définit trois classes générales d’observationFindings (une mesure ou évaluation, comme VS ou LB), Events (ce qui est arrivé, comme AE ou MH) et Interventions (ce qui est administré, comme EX ou CM) — plus une classe Special-Purpose (domaines au niveau du sujet comme la démographie DM), une classe Trial Design (la structure planifiée de l’étude) et une classe Relationship (liens entre enregistrements, comme SUPP– et RELREC). La classe à laquelle appartient un domaine détermine la forme de son enregistrement et sa variable topic. Voir le standard fondamental SDTM.

Chaque variable SDTM joue l’un de quatre rôles. Les variables Identifier disent qui et quel enregistrement (STUDYID, USUBJID, DOMAIN, --SEQ). La variable Topic nomme l’objet de l’observation (--TESTCD pour Findings, --TERM pour Events, --TRT pour Interventions). Les variables Qualifier décrivent le topic — son résultat, sa catégorie, son unité, sa sévérité ou sa dose (--ORRES, --CAT, --SEV, --DOSE). Les variables Timing disent quand cela s’est produit (--DTC, --STDTC/--ENDTC, --DY). Reconnaissez le rôle que joue une colonne et vous savez à quoi elle sert, dans n’importe quel domaine.

Parce qu’ils sont tous construits à partir du même modèle en trois parties : l’une de quelques classes d’observation fixe la forme de l’enregistrement, quatre rôles de variables (Identifier, Topic, Qualifier, Timing) construisent chaque enregistrement, et une convention de nommage -- nomme chaque variable comme un préfixe de domaine à deux lettres plus un suffixe standard. Ainsi le numéro de séquence est --SEQ dans chaque domaine (VSSEQ, AESEQ, EXSEQ), la date d’observation est --DTC, et le jour d’étude est --DY. Apprenez le patron une fois et chacun des quelque cinquante domaines en est une instance. Cette uniformité est ce qui permet à un régulateur de lire n’importe quelle étude de la même façon — l’objet du SDTM Implementation Guide.

Le -- dans un nom comme --TESTCD ou --DTC est un espace réservé pour le code à deux lettres du domaine. Chaque nom de variable est ce préfixe à deux lettres plus un suffixe standardisé qui identifie le rôle et la signification de la variable. Ainsi --SEQ devient VSSEQ dans le domaine VS, AESEQ dans AE et EXSEQ dans EX — trois noms pour la même variable. Le SDTMIG écrit les règles avec -- pour qu’une seule règle s’applique à chaque domaine ; quand vous implémentez un domaine spécifique, vous substituez ses deux lettres.

La variable Topic nomme l’objet de l’enregistrement — l’unique colonne qui définit la classe d’observation (VSTESTCD = le test mesuré, AETERM = l’événement rapporté, EXTRT = le traitement administré). Les variables Qualifier décrivent ce topic : le résultat (VSORRES), une catégorie (--CAT), une unité, une sévérité (AESEV), une dose (EXDOSE). Un enregistrement a exactement un topic et de nombreux qualificateurs. Si une colonne répond à « quelle est cette observation ? » c’est le Topic ; si elle répond à « dis-m’en plus » c’est un Qualifier.

Testez vos connaissances

Une étude collecte trois champs bruts. Pour chacun, nommez la classe d’observation à laquelle il appartient, le rôle de variable qu’il joue, et le suffixe -- standardisé de sa variable SDTM cible :

  1. Une pression artérielle systolique en position assise de 120 mmHg enregistrée à la visite de la semaine 4.
  2. Une « nausée » rapportée que le sujet a ressentie pendant l’essai.
  3. La date d’application d’un patch de 54 mg de médicament à l’étude.

Demandez d’abord, pour chaque champ : est-ce une mesure (Findings), quelque chose qui est arrivé (Events) ou quelque chose d’administré (Interventions) ? Décidez ensuite si le champ est le Topic (l’objet de l’enregistrement), un Qualifier (une valeur qui le décrit) ou un Timing (une date). Le suffixe découle du rôle : les résultats sont --ORRES, les dates sont --DTC/--STDTC, les topics sont --TESTCD/--TERM/--TRT.

  1. Pression artérielle = 120 mmHg → classe Findings, et la valeur est un Qualifier (un résultat) : la variable cible est --ORRES (VSORRES), le résultat tel que collecté, le test lui-même étant porté par la variable Topic VSTESTCD = "SYSBP".
  2. « Nausée » → classe Events, et c’est le Topic — le terme rapporté : la variable cible est --TERM (AETERM), la colonne qui définit l’enregistrement AE.
  3. La date d’application du patch → classe Interventions, et c’est un Timing : la variable cible est --STDTC (EXSTDTC), la date de début ISO 8601 de l’épisode d’exposition (avec le traitement lui-même comme Topic EXTRT).

Le patron à remarquer : les trois mêmes questions — quelle classe, quel rôle, quel suffixe — placent n’importe quel champ collecté dans SDTM, quel que soit celui des cinquante domaines où il atterrit.

A. Parce que USUBJID n’est pas unique sur toute l’étude B. Parce qu’un sujet a de nombreux enregistrements Findings, donc l’unicité nécessite USUBJID plus --SEQ C. Parce que les enregistrements Findings n’ont pas de variables d’identifiants

B. USUBJID est unique par sujet sur toute l’étude, mais un sujet a de nombreuses observations dans un domaine Findings, Events ou Interventions (de nombreux signes vitaux, de nombreux événements indésirables). Le numéro de séquence --SEQ rend chaque enregistrement unique au sein du sujet, donc la clé est la paire USUBJID + --SEQ. A est faux (USUBJID est unique par sujet par conception), et C est faux (STUDYID, USUBJID, DOMAIN et --SEQ sont toutes des variables de rôle Identifier). L’exception est un domaine Special-Purpose comme DM, où USUBJID seul est la clé parce qu’il y a une ligne par sujet.

Conclusion

SDTM n’est pas cinquante choses à mémoriser — c’est un seul modèle, instancié cinquante fois. Un domaine appartient à une classe d’observation (Findings pour une mesure, Events pour une occurrence, Interventions pour une administration, ou Special-Purpose pour des faits au niveau du sujet), et cette classe fixe la forme de l’enregistrement et sa variable Topic. Chaque colonne joue ensuite l’un de quatre rôles — Identifier, Topic, Qualifier, Timing — et la convention de nommage -- la nomme comme un préfixe de domaine à deux lettres plus un suffixe standard, si bien que --SEQ, --DTC et --DY signifient la même chose dans chaque domaine. Retenez ce patron et chaque leçon de mapping de domaine qui suit est le même modèle avec un préfixe à deux lettres différent : commencez par les signes vitaux, le cas Findings.

Note

Cette leçon est reproductible : chaque résultat de cette page a été produit par le code montré — copiez n’importe quel bloc et exécutez-le pour les reproduire. The runtime is the judge.

Leçons connexes

Cette page vous a-t-elle été utile ?

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Le modèle de tabulation SDTM : classes et rôles},
  date = {2026-07-01},
  url = {https://www.datanovia.com/learn/pharma-clinical/02-sdtm-programming/sdtm-tabulation-model},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Le modèle de tabulation SDTM : classes et rôles.” 2026. July 1. https://www.datanovia.com/learn/pharma-clinical/02-sdtm-programming/sdtm-tabulation-model.