EAER vs EAIR - A Deep Dive for Statistical Programmers
In a clinical trial, patients rarely spend the same amount of time under observation. Some drop out early, some experience an event on day 3, some complete the full three-year study. If you simply report the proportion of patients with an adverse event, you are conflating two very different things: the probability of an event and the time during which a patient was actually at risk of having one. A patient who discontinues after two weeks and does not have an AE is not the same as a patient who completes 104 weeks without an AE, yet both contribute a zero to a crude proportion.
Exposure-adjusted rates solve this by dividing the event count by the total patient-time observed, producing rates on a per-year (or per-100-patient-years) scale. Two metrics dominate this space in regulatory submissions: the Exposure-Adjusted Incidence Rate (EAIR) and the Exposure-Adjusted Event Rate (EAER). They are not interchangeable. Each answers a different clinical question, and choosing the wrong one can distort the safety picture.
| Who this article is for | Statistical programmers who build ADAE-based analysis datasets, write SAPs, or program Tables, Listings, and Figures (TLFs) for NDA/BLA/MAA submissions. Examples use SAS macro logic and CDISC ADaM conventions. |
EAIR counts the number of subjects who experienced at least one occurrence of an event, divided by the total subject-years of exposure across the treatment arm. Each subject appears in the numerator at most once, regardless of how many times the event occurred.
| Component | Description |
| Numerator | Number of subjects with ≥1 event |
| Denominator | Total subject-years of exposure (all subjects in arm) |
| Formula | EAIR = n_subjects_with_event / total_subject_years |
| Units | Events per subject-year (reported per 100 subject-years) |
| Key property | A subject who has the event multiple times still counts as 1 in the numerator |
Table 1. EAIR components
EAER counts every event occurrence (all recurrences included) divided by total subject-years of exposure. A subject who has the same adverse event four times contributes 4 to the numerator.
| Component | Description |
| Numerator | Total number of event occurrences (all recurrences) |
| Denominator | Total subject-years of exposure (all subjects in arm) |
| Formula | EAER = total_events / total_subject_years |
| Units | Events per subject-year (reported per 100 subject-years) |
| Key property | A subject who has 4 occurrences contributes 4 to the numerator |
Table 2. EAER components
| EAIR | EAER | |
| Full name | Exposure-Adjusted Incidence Rate | Exposure-Adjusted Event Rate |
| Numerator counts | Subjects with ≥1 event | All event occurrences |
| Max subject contribution to numerator | 1 (first event only) | Unlimited (all recurrences) |
| Denominator | Total subject-years | Total subject-years |
| Clinical question answered | What proportion of the at-risk population develops this event? | How often does this event occur in this population? |
| Sensitive to recurrence? | No | Yes |
| Typical use cases | Most standard AE tables in NDA/BLA/MAA submissions | Recurrent events: hospitalizations, seizures, headaches, bleeding episodes |
| EAIR > EAER possible? | No (mathematically, EAIR ≤ EAER) | N/A |
Table 3. EAIR vs EAER — key differences
Consider a 52-week randomised, double-blind trial comparing a CGRP antagonist (Drug A) versus placebo for migraine prevention. Migraine headaches are the primary endpoint, but they are also reported as adverse events because of their recurrent nature. The ADAE dataset contains one record per AE occurrence.
Eight subjects from the Drug A arm are shown below. EXDUR is exposure duration in years derived from the ADEX dataset (minimum of last dose date minus first dose date + 1, and date of first post-baseline AE).
| USUBJID | TRTA | EXDUR (yrs) | N Migraine Occurrences | N Nausea Occurrences | N Dizziness Occurrences |
| PT-001 | Drug A | 1.00 | 6 | 2 | 0 |
| PT-002 | Drug A | 0.75 | 3 | 0 | 1 |
| PT-003 | Drug A | 1.00 | 0 | 1 | 0 |
| PT-004 | Drug A | 0.50 | 4 | 4 | 2 |
| PT-005 | Drug A | 1.00 | 2 | 0 | 0 |
| PT-006 | Drug A | 0.85 | 1 | 0 | 0 |
| PT-007 | Drug A | 0.30 | 0 | 0 | 0 |
| PT-008 | Drug A | 1.00 | 0 | 3 | 1 |
| TOTAL | 6.40 | 16 | 10 | 4 |
Table 4. Subject-level AE data (Drug A arm, n=8, illustrative only)
Step 1 — Total subject-years of exposure:
Sum of EXDUR across all 8 subjects = 1.00 + 0.75 + 1.00 + 0.50 + 1.00 + 0.85 + 0.30 + 1.00 = 6.40 subject-years
Step 2 — EAIR numerator (subjects with ≥1 migraine):
PT-001: 6 events → YES PT-002: 3 events → YES PT-003: 0 events → NO
PT-004: 4 events → YES PT-005: 2 events → YES PT-006: 1 event → YES
PT-007: 0 events → NO PT-008: 0 events → NO
Subjects with ≥1 migraine = 5
Step 3 — EAER numerator (all migraine occurrences):
6 + 3 + 0 + 4 + 2 + 1 + 0 + 0 = 16 total migraines
Step 4 — Compute the rates:
| AE Term | EAIR (per 100 subject-yrs) | EAER (per 100 subject-yrs) | Ratio EAER/EAIR |
| Migraine | 5 / 6.40 × 100 = 78.1 | 16 / 6.40 × 100 = 250.0 | 3.2 |
| Nausea | 4 / 6.40 × 100 = 62.5 | 10 / 6.40 × 100 = 156.3 | 2.5 |
| Dizziness | 3 / 6.40 × 100 = 46.9 | 4 / 6.40 × 100 = 62.5 | 1.3 |
Table 5. EAIR and EAER calculated for three AE terms (Drug A arm, n=8)
The EAER/EAIR ratio tells you about recurrence load. For migraine, a ratio of 3.2 means that each subject who developed at least one migraine had, on average, 3.2 migraine occurrences during the study. For dizziness, the ratio is only 1.3, suggesting most subjects experienced it at most once. This ratio has no clinical meaning on its own, but it directly informs which metric you should prioritise in your TLF shells.
| The key insight | EAIR and EAER share the same denominator (total subject-years). They differ only in their numerators. EAIR ≤ EAER always. When every subject has at most one event, EAIR = EAER. The bigger the gap, the more recurrence is present in the data. |
Both metrics are typically derived from ADAE and ADEX. The key variables are:
| Dataset | Variable | Role |
| ADAE | USUBJID | Subject identifier — used to count distinct subjects for EAIR numerator |
| ADAE | AEBODSYS / AEDECOD | SOC and PT for grouping events |
| ADAE | TRTEMFL | Treatment-emergent flag — subset to TRTEMFL='Y' before computing either metric |
| ADAE | ANL01FL | Analysis flag — additional subsetting for specific analyses |
| ADEX | EXDUR | Exposure duration in days or years — forms the denominator for both metrics |
| ADEX | TRTDUR | Alternative: treatment duration variable sometimes used instead of EXDUR |
Table 6. Key ADaM variables for EAIR and EAER
The approach below uses ADAE to flag subjects with ≥1 event, then merges with ADEX to attach exposure, then summarises by treatment arm and PT.
/* Step 1: One record per subject-PT, flag = 1 if ≥1 event */
proc sort data=adae(where=(TRTEMFL='Y')) out=ae_sorted;
by USUBJID AEDECOD;
run;
data ae_first;
set ae_sorted;
by USUBJID AEDECOD;
if first.AEDECOD then AEFL = 1; /* subject had ≥1 occurrence of this PT */
if first.AEDECOD then output;
run;
/* Step 2: Sum distinct subject counts by treatment arm and PT */
proc means data=ae_first noprint nway;
class TRTA AEDECOD;
var AEFL;
output out=ae_n_subj(drop=_type_ _freq_) sum=n_subj;
run;
/* Step 3: Total subject-years per arm from ADEX */
proc means data=adex noprint nway;
class TRTA;
var EXDUR; /* in years */
output out=arm_exdur(drop=_type_ _freq_) sum=total_subj_yrs;
run;
/* Step 4: Merge and compute EAIR per 100 subject-years */
proc sql;
create table eair_out as
select a.TRTA, a.AEDECOD, a.n_subj,
b.total_subj_yrs,
(a.n_subj / b.total_subj_yrs) * 100 as EAIR
from ae_n_subj a
left join arm_exdur b on a.TRTA = b.TRTA;
quit;
For EAER, the numerator is simply the count of all AE records (after applying TRTEMFL='Y' and any analysis flag). The denominator is identical to EAIR.
/* Step 1: Count all occurrences per treatment arm and PT */
proc means data=adae(where=(TRTEMFL='Y')) noprint nway;
class TRTA AEDECOD;
var AESEQ; /* any numeric var works; we just need count of records */
output out=ae_n_events(drop=_type_ _freq_) n=n_events;
run;
/* Step 2: Reuse arm_exdur from EAIR section above */
/* Step 3: Compute EAER per 100 subject-years */
proc sql;
create table eaer_out as
select a.TRTA, a.AEDECOD, a.n_events,
b.total_subj_yrs,
(a.n_events / b.total_subj_yrs) * 100 as EAER
from ae_n_events a
left join arm_exdur b on a.TRTA = b.TRTA;
quit;
Regulatory tables frequently report both metrics side-by-side. After computing eair_out and eaer_out separately, a simple merge on TRTA and AEDECOD produces a combined output ready for RTF formatting via PROC REPORT or a macro.
proc sql;
create table ae_combined as
select a.TRTA, a.AEDECOD,
a.n_subj, a.EAIR,
b.n_events, b.EAER
from eair_out a
left join eaer_out b on a.TRTA = b.TRTA and a.AEDECOD = b.AEDECOD;
quit;
Both rates share the same denominator structure, but the source and definition matter. Three denominator definitions appear in practice:
| Denominator definition | What it includes | Watch out for |
| On-treatment time | Days from first dose to last dose + 1 | Does not account for early discontinuation due to AE |
| Time at risk | Days from first dose to time of first event (for EAIR only) | Rarely used in practice; often just total exposure time is used for both |
| Follow-up time | Extends past treatment end if off-treatment AEs are included | Must be consistent with AE collection window |
Table 7. Common denominator definitions and their implications
The SAP should specify the denominator definition. In most NDA/BLA submissions, on-treatment exposure time from ADEX (EXDUR = TRTEDT - TRTSDT + 1, expressed in years) is the standard choice for both EAIR and EAER.
The question of which metric to use comes down to the clinical nature of the adverse event and what question the safety team needs to answer.
| Scenario | Use EAIR? | Use EAER? |
| Standard AE table in a regulatory submission | ✔ Yes — default for most TEAEs | Optional, include if recurrence is clinically relevant |
| Recurrent events (seizures, headaches, bleeding, hospitalizations) | ✔ Yes — captures affected subjects | ✔ Yes — captures event burden |
| Serious AEs (typically single-occurrence) | ✔ Yes — appropriate | Less useful; numerator rarely exceeds EAIR numerator |
| Events by severity grade (e.g., CTCAE) | ✔ Yes — grade-specific rates | Possible but complicated by grade changes on repeat |
| Drug that causes a recurrent lab abnormality (e.g., repeated ALT elevations) | ✔ Yes — proportion of subjects affected | ✔ Yes — rate of elevations |
| Comparing to external historical data reported as incidence rates | ✔ Yes — standard epidemiological metric | Only if historical data also uses all-event counts |
Table 8. Decision guide for EAIR vs EAER
| Regulatory context | ICH E9, FDA Guidance on Safety Reporting, and EMA's Statistical Guidance on Reporting Results from Studies Evaluating Investigational Medicinal Products do not mandate one metric over the other for general AE tables. However, EAIR is the conventional default. EAER is increasingly requested for chronic therapies where event burden (not just occurrence) is the clinical concern — for example, in rheumatology, neurology, and oncology indications. |
If EXDUR = 0 for a subject (e.g., they withdrew before receiving any treatment), they contribute nothing to either denominator. If they also had no AEs, they are excluded entirely. If they somehow have AEs despite zero exposure, this is a data quality issue requiring adjudication, not a metric question.
PT-004 in Table 4 had 0.50 years of exposure and 4 migraine occurrences. This subject drives the EAER for migraine disproportionately. EAER = 16/6.40 = 250 per 100 subject-years; if PT-004 had completed the full year, EAER would have been 16/6.90 = 232. The metric is sensitive to early discontinuers who experienced many events. This is not a flaw — it reflects the actual event burden — but it should be discussed in the clinical study report when a small number of subjects account for a large proportion of EAER.
Mathematically, EAIR ≤ EAER always. If your output shows EAIR > EAER for any PT, there is a programming error — the most common causes are:
•Different analysis flag subsets applied to numerators (e.g., TRTEMFL applied to EAIR but not EAER)
•Different denominator datasets used (e.g., ITT for EAIR, PP for EAER)
•Duplicate records in ADAE inflating EAER, or duplicate subjects in the EAIR numerator step
If a subject reports three occurrences of the same MedDRA PT at the same study visit (same AESTDTC), all three count individually in the EAER numerator. The EAIR numerator counts the subject once. This is correct. Verify that your ADAE derivation does not collapse same-visit, same-PT records into a single row before computing EAER.
EAIR and EAER by treatment arm require access to unblinded data. During an ongoing trial, these calculations are typically performed by an independent Data Safety Monitoring Board (DSMB) statistician or within a firewall. Statistical programmers should not produce unblinded rate comparisons unless the trial is unblinded or they are formally designated as unblinded staff.
A TLF shell showing both metrics typically looks like this (per treatment arm):
| Preferred Term | n (%) | N events | EAIR (per 100 PY) | EAER (per 100 PY) |
| Migraine | 5 (62.5%) | 16 | 78.1 | 250.0 |
| Nausea | 4 (50.0%) | 10 | 62.5 | 156.3 |
| Dizziness | 3 (37.5%) | 4 | 46.9 | 62.5 |
Table 9. Sample TLF structure with n(%), N events, EAIR, and EAER (Drug A arm, n=8, total 6.40 subject-years)
PY = patient-years. The n(%) column uses the arm N as denominator and counts distinct subjects. This column and the EAIR numerator should agree (n = EAIR numerator). If they do not agree, flag this during QC.
Standard footnote wording (adjust per your house style):
EAIR: Exposure-adjusted incidence rate = (number of subjects with ≥1 event / total subject-years) × 100.
EAER: Exposure-adjusted event rate = (total number of events / total subject-years) × 100.
Subject-years of exposure = (date of last dose - date of first dose + 1) / 365.25.
Only treatment-emergent adverse events (TRTEMFL='Y') are included.
One decimal place is convention for both EAIR and EAER when reported per 100 subject-years. For very rare events (EAIR < 1.0), two decimal places may be warranted. The SAP should specify this; do not decide ad hoc in the program.
| EAIR | EAER |
| Counts subjects, not events | Counts every event occurrence |
| Answers: what fraction of the arm experienced this event? | Answers: how often does this event happen per subject-year? |
| Default metric for most TEAE tables | Used alongside EAIR for recurrent-event AEs |
| EAIR ≤ EAER always | EAER = EAIR only when every subject had exactly one event |
| Same denominator as EAER: total subject-years | Same denominator as EAIR: total subject-years |
Table 10. One-page summary of EAIR vs EAER
Both metrics use the same denominator. The only difference is what goes in the numerator. That single distinction determines the clinical question being answered. Statistical programmers should confirm the intended metric with the SAP before writing any code, and QC should verify that n(%) and EAIR numerators match for all PTs in the final output.
No comments yet. Be the first!