← Methods repository
CONCEPTFOUNDATIONALPYTHON · R4 citations

ATC Classification and Defined Daily Dose (DDD)

The WHO Anatomical Therapeutic Chemical (ATC) classification assigns every drug substance to a five-level hierarchy — from broad anatomical group down to the specific chemical substance — while the Defined Daily Dose (DDD) is a standardized unit of measurement (not a prescribing recommendation) representing the assumed average adult maintenance dose per day for the main indication; together, ATC and DDD are the international standard currency for drug utilization research, enabling cross-country and time-trend comparisons that are impossible with US-centric NDC codes alone.

Data Standardatcddddefined-daily-dosecoding-systemdata-standarddrug-classificationwho-atcdrug-utilization
On this page
Methods reference only. Use primary source citations and local policy before applying this in a study protocol, regulatory submission, payer dossier, or clinical decision.
In plain language

The WHO ATC (Anatomical Therapeutic Chemical) system is a five-level coding hierarchy that organizes every drug from broad organ system down to the specific molecule — for example, metformin gets the code A10BA02, placing it in the diabetes drug group (A10), biguanide class (A10BA), and then the specific substance (A10BA02).

The DDD (Defined Daily Dose) is the number the WHO assigns as the typical adult maintenance dose per day for that drug's main use — for metformin it is 2 g (2000 mg). Crucially, the DDD is a measurement unit like a "standard drink," not a prescription: it lets researchers count and compare how much of a drug a population uses, without that number telling them anything about whether any individual patient was on the right dose.

US pharmacy claims use NDC drug codes instead of ATC, so analysts working with American data must convert through an intermediate vocabulary (RxNorm) to reach ATC — a translation that sometimes fails for drugs with multiple uses or newly approved medicines.

When to use it
Prefer ATC/DDD for population-level volume reporting, cross-country comparison, and regulatory/HTA submissions requiring WHO-compatible metrics.
ATC/DDD is always the preferred measurement layer for drug utilization research involving volume, trends, or international comparison. Think of it as the unit system; the DUS is what you build with those units.
Use RxNorm as the normalization step and ATC as the classification/reporting layer. The two systems are complementary, not competing.
Watch out for
ATC/DDD is not natively present in US pharmacy claims and requires a three-step crosswalk (NDC→RxNorm→ATC) that is lossy for combination products and indication-dependent drugs.
ATC/DDD alone does not produce a utilization study; population denominators, study windows, washout rules, and analytic decisions are all outside the ATC/DDD system.
For US claims work, RxNorm is the bridge that makes ATC reachable; ATC alone cannot be joined to US pharmacy claims without first going through RxNorm.

The ATC hierarchy: five levels from organ system to molecule

The Anatomical Therapeutic Chemical (ATC) classification system, maintained by the WHO Collaborating Centre for Drug Statistics Methodology in Oslo, organizes every marketed drug substance into a five-level code. Walking through A10BA02 (metformin) makes each level concrete:

  • Level 1 — Anatomical main group (1 letter): A = Alimentary tract and metabolism. The 14 top-level groups map to organ systems or therapeutic domains: A (alimentary), B (blood), C (cardiovascular), J (anti-infectives), L (antineoplastic), N (nervous system), R (respiratory), and so on.
  • Level 2 — Therapeutic subgroup (2 digits): A10 = Drugs used in diabetes. This level narrows to the therapeutic purpose within the organ system.
  • Level 3 — Pharmacological subgroup (1 letter): A10B = Blood glucose-lowering drugs, excluding insulins. The third level specifies pharmacological mechanism.
  • Level 4 — Chemical subgroup (1 letter): A10BA = Biguanides. The fourth level reaches the chemical class.
  • Level 5 — Chemical substance (2 digits): A10BA02 = metformin. The fifth level uniquely identifies the active substance.

Analysts query ATC at whichever level the research question demands. A stewardship report on all antidiabetics queries A10. A comparative study of biguanides queries A10BA. A study of metformin specifically queries A10BA02. The hierarchy is the design tool; the level chosen is an analytic decision that must be pre-specified.

DDD: a measurement unit, not a dose recommendation

The DDD is the assumed average maintenance dose per day for a drug used for its main indication in adults. It is purely a measurement unit — a yardstick that makes the volume of different drugs comparable — not a therapeutic recommendation and not the dose any individual patient should receive. The WHO states this explicitly and emphatically: "The DDD is a unit of measurement and does not necessarily reflect the recommended or prescribed daily dose."

This distinction is the single most important honesty point in applying DDD-based metrics. An analyst who reports "patients received 1.5 DDDs per day on average" is not saying they were over-dosed; they are saying the volume of drug dispensed, expressed as a fraction of the reference unit, was 1.5. The clinical interpretation of that number depends entirely on context.

For metformin (A10BA02), the WHO DDD is 2 g (2000 mg). This is the assumed daily maintenance dose for type 2 diabetes. A patient receiving metformin 500 mg twice daily (1000 mg/day) is receiving 0.5 DDDs/day. A patient on 1000 mg twice daily (2000 mg/day) is receiving 1.0 DDD/day. A patient on 1000 mg three times daily (3000 mg/day) is receiving 1.5 DDDs/day. All three patients are within the licensed dosing range; the DDD simply standardizes the comparison.

Why international RWE speaks ATC while US pharmacy claims speak NDC

US pharmacy claims use NDC (National Drug Code) as the primary drug identifier. NDC is package-level and labeler-specific — excellent for identifying the exact dispensed product, but ill-suited for international comparison or therapeutic-class grouping without a mapping layer.

International drug utilization research — WHO drug statistics, OECD health data, ECDC antimicrobial surveillance, EMA post-authorization safety studies, pan-European pharmacoepidemiology networks — uses ATC/DDD as the common currency. This is because:

  1. ATC transcends country-specific billing codes. The same metformin molecule carries ATC A10BA02 in the US, UK, Sweden, Germany, and Japan, allowing direct cross-country comparison.
  2. DDD/1000 inhabitants/day is scale-invariant. A rate of 300 DDD/1000/day for metformin means the same thing regardless of the currency or healthcare system.

The NDC-to-ATC crosswalk path is: NDC → RxNorm (ingredient level via RxNav) → ATC (via the RxClass service using the `classType=ATC1-4` endpoint). This three-step chain is the standard approach for US claims studies that need to report in ATC terms or link to European registries. The chain is lossy in at least three documented ways:

  • Combination products map to multiple ATC codes. A fixed-dose combination tablet containing both metformin and sitagliptin (Janumet) has two ATC codes: A10BA02 (metformin component) and A10BH01 (sitagliptin component). A simple NDC→single-ATC mapping must choose one or create two records; both choices introduce error.
  • One substance, multiple ATC codes for different indications. Aspirin is the canonical example. At antiplatelet doses (75–325 mg/day), aspirin is classified as B01AC06 (platelet aggregation inhibitors). At analgesic doses (500–1000 mg per dose), it is N02BA01 (salicylic acid and derivatives, anilides). Assigning "the" ATC code for aspirin without knowing the clinical indication is meaningless — a common source of drug class miscounting in claims studies. This is sometimes called the aspirin mapping trap and applies to any drug with approved uses across multiple therapeutic domains (e.g., low-dose naltrexone for autoimmune vs opioid dependence).
  • ATC assignment lag for new substances. Newly approved drugs may lack an ATC code at launch. During the gap, NDC→ATC crosswalks return no match, systematically undercounting exposure to novel agents in the period immediately following approval.

DDD/1000 inhabitants/day: the population utilization metric

The standard WHO aggregate drug utilization metric is:

DDD / 1000 inhabitants / day = (Total DDDs dispensed in period) / (population × days in period) × 1000

This quantity answers: "Of every 1000 people in this population, how many are (notionally) on a full DDD of this drug every day?" A value of 300 DDD/1000/day for metformin means that, if everyone took exactly one DDD per day, 30% of the population (300 per 1000) would be treated. It is a utilization intensity measure, not a prevalence measure — the two will differ whenever the actual prescribed dose differs from the DDD.

When computing DDD/1000/day from US pharmacy claims rather than census population, the denominator should be enrolled person-days, not census population. Mixing the two numerator and denominator populations creates a ratio that is neither interpretable nor comparable to WHO country-level statistics.

DDD vs days_supply vs PDC: what each measures and when to prefer each

These three quantities answer different questions from the same dispensing record:

  • DDDs: Volume of drug (how much was dispensed in WHO standardized units). Answers "how much?" at both patient and population level. Insensitive to whether the patient actually took the drug; depends entirely on dispensed quantity and strength.
  • days_supply: Coverage duration as recorded by the dispensing pharmacy. Answers "how long was this fill meant to last?" Directly usable for PDC/MPR without conversion. Does not require knowing the DDD.
  • PDC (Proportion of Days Covered): Adherence metric. Uses days_supply to build an exposure timeline; union-rule prevents double-counting of stockpiled days; answers "what fraction of the observation window did the patient have medication on hand?"

For US claims adherence studies (PDC, MPR, persistence), days_supply is the correct input — DDD is irrelevant. For international utilization comparison and volume measurement, DDD is the correct metric — days_supply units differ across countries and pharmacy systems.

Where DDD breaks: seven documented failure modes

  1. Pediatrics. The DDD is defined for adults. Pediatric dosing is weight-based and age- adjusted; a child prescribed amoxicillin at the correct pediatric dose will appear to receive a fraction of the DDD that has no clinical interpretation. DDD/1000/day is uninformative for pediatric populations and should never be used as an adherence proxy.
  2. Renal and hepatic dosing. Drugs with mandatory dose reductions in renal impairment (e.g., metformin is contraindicated in severe CKD; most direct oral anticoagulants require dose reduction) will show patients receiving less than 1 DDD/day — not because of poor adherence but because 1 DDD is the wrong target for their physiology.
  3. PRN (as-needed) medications. NSAIDs, analgesics, migraine treatments, and benzodiazepines used on demand have no stable daily dose. DDD/1000/day for a PRN drug mixes usage intensity with number of users in a way that is difficult to disentangle.
  4. Topical and transdermal formulations. Many dermatological preparations have DDDs expressed in grams of ointment, which bears no obvious relationship to therapeutic effect or coverage.
  5. Combination products. As noted above, a single dispensing event for a fixed-dose combination generates multiple DDDs for different component ATC codes, requiring care to avoid double-counting at the patient level while correctly attributing volume to each component at the population level.
  6. Biologics and many specialty drugs. Some injectable biologics have no assigned DDD, either because the molecule was approved after ATC assignment was established or because weight-based or body-surface-area dosing makes a fixed DDD meaningless. Adalimumab, for example, has a DDD of 1.4 mg assigned in a specific formulation unit that requires careful strength conversion. Checking the WHO ATC/DDD index for a "no DDD assigned" status before computing any volume metric is essential.
  7. Off-label or non-main-indication use. A drug prescribed for an indication other than the main indication used to set the DDD will appear to receive more or fewer DDDs than expected. Aspirin at antithrombotic doses (75–100 mg) is prescribed at roughly 1/10 of the 500 mg analgesic DDD (N02BA01); a patient on aspirin for secondary prevention will appear to receive only 0.15–0.2 DDDs/day using the analgesic DDD, which is exactly wrong for characterizing antithrombotic use.

ATC-DDD versioning: the reproducibility requirement

The WHO Collaborating Centre updates the ATC/DDD system annually, typically effective 1 January. Updates include: new ATC codes for newly approved substances, DDD changes for existing drugs (based on accumulating prescribing evidence), reclassifications moving a drug from one ATC branch to another, and deletions. A DDD that was 2 g in one year may change in a subsequent update.

For RWE reproducibility, this means:

  1. always report the ATC/DDD version used;
  2. pin the version at study initiation and do not update mid-study;
  3. when replicating an earlier study, use the version in force at the time of the original analysis;
  4. be alert to version-change artifacts in longitudinal trend data — a step in DDD/1000/day over time may be an ATC reclassification rather than a real change in prescribing practice.

Pros, cons, and trade-offs

ATC classification

  • Pros: internationally standardized and maintained by a single authoritative body (WHO Collaborating Centre, Oslo); enables cross-country and cross-database drug class comparison without vocabulary harmonization; hierarchical design allows analysis at any level of therapeutic granularity; freely available and openly documented; used as the classification layer in OMOP CDM and linked to RxNorm via RxClass; required for regulatory submissions to EMA and many HTA bodies; ESAC, OECD, WHO country-level statistics all report in ATC/DDD.
  • Cons: not natively present in US pharmacy claims (requires NDC→RxNorm→ATC crosswalk with associated lossiness); annual versioning creates reproducibility obligations; combination products require multi-code assignment; indication-dependent codes (aspirin) demand clinical context that claims rarely provide; lag for newly approved substances.

DDD as a utilization unit

  • Pros: scale-invariant, enabling direct comparison across drugs of different potency; internationally recognized and applied consistently; allows computation of "treated patient equivalents" for budget-impact and policy purposes; technically simple once the DDD value is known (dispensed quantity × strength / DDD).
  • Cons: not a recommended dose, not a therapeutic target, not a coverage measure, and not an adherence metric; systematically wrong for pediatrics, renally-adjusted doses, PRN use, biologics without DDDs, and off-label use; requires knowledge of dispensed quantity (tablets) and strength (mg), which is sometimes absent or unreliable in claims; combination products require splitting.

When NOT to use

Do NOT use DDD as a proxy for adherence or days of coverage in individual-level analyses. For adherence, use days_supply-based PDC or MPR. A patient who fills 90 DDDs of metformin (180 tablets × 1000 mg) is not necessarily adherent for 90 days; the actual coverage depends on the prescribed regimen, which the DDD does not encode.

Do NOT apply ATC/DDD to pediatric populations without explicitly acknowledging and quantifying the dose-DDD mismatch. Reporting DDD/1000 children/day for an antibiotic is numerically computable but clinically misleading.

Do NOT treat the ATC/DDD crosswalk as a solved problem in US claims. The NDC→RxNorm→ATC chain fails silently for: combination products (one NDC → multiple ATC codes), off-label use (wrong ATC level selected), biologics without DDDs, and newly approved drugs without ATC codes. Always audit unmapped NDCs and report the fraction assigned an ATC code.

Do NOT use a stale ATC/DDD version across a multi-year study without checking whether any relevant DDD assignments or reclassifications occurred during the study period. A trend artifact created by a WHO version update is indistinguishable from a real prescribing shift in the data.

Do NOT use DDD to compare dosing adequacy across renally-impaired patients versus normal-renal patients. The apparent lower DDDs in CKD patients reflects guideline-concordant dose reduction, not inadequate treatment.

Interpreting the output

In the worked example, a single dispensing of metformin 1000 mg × 180 tablets yields 90 DDDs. At the plan level, 90000 DDDs dispensed across 10000 members in a 30-day month yields 300 DDD/1000 members/day.

(1) Formal interpretation. The 90-DDD single-dispensing quantity is a volume measure expressing how many "standard treatment days" (at the WHO assumed maintenance dose of 2000 mg) are contained in this dispensing event. The ratio DDDs = 180000 mg / 2000 mg = 90 is dimensionless in the sense that it expresses dispensed volume relative to the reference unit.

The population rate of 300 DDD/1000 members/day is a utilization intensity measure: if the entire plan population took exactly one DDD of metformin daily, 30% of members (300 per 1000) would be on therapy. Because actual prescribed doses (typically 1000–2000 mg/day) bracket the 2000 mg DDD closely for metformin, this metric is reasonably well-behaved for this drug — but the same arithmetic applied to aspirin or a biologic would require far more interpretation.

(2) Practical interpretation. A plan pharmacist reviewing the 300 DDD/1000/day figure can compare it to WHO country-level benchmarks or prior-year plan data to assess whether metformin utilization is changing. A formulary analyst can multiply the total DDDs dispensed by the cost per DDD to estimate plan spend. Neither can conclude from this metric alone that patients are adherent, that doses are appropriate, or that metformin is causing any clinical outcome.

If the question becomes "are patients taking enough metformin to achieve glycemic targets," the DDD is the wrong tool — the analyst needs HbA1c laboratory data and prescribed dose, not DDDs.

Decision diagram

flowchart TD
  L1["Level 1 — Anatomical group (letter)\nA = Alimentary tract and metabolism"]
  L2["Level 2 — Therapeutic subgroup (2 digits)\nA10 = Drugs used in diabetes"]
  L3["Level 3 — Pharmacological subgroup (letter)\nA10B = Blood glucose-lowering drugs, excl. insulins"]
  L4["Level 4 — Chemical subgroup (letter)\nA10BA = Biguanides"]
  L5["Level 5 — Chemical substance (2 digits)\nA10BA02 = metformin (DDD = 2000 mg)"]
  NDC["US pharmacy claim NDC\n(package-level, labeler-specific)"]
  RXNORM["RxNorm ingredient rollup\n(via RxNav ndcstatus API)"]
  ATC["ATC code\n(via RxClass ATC1-4 query)"]
  L1 --> L2 --> L3 --> L4 --> L5
  NDC -->|"Step 1: NDC → RxCUI (ingredient)"| RXNORM
  RXNORM -->|"Step 2: RxCUI → ATC (via RxClass)"| ATC
  ATC -->|"Lossy for combination products\nand dual-indication drugs (aspirin)"| ATC
The five-level ATC hierarchy for metformin (A10BA02) and the three-step NDC→RxNorm→ATC crosswalk path used to assign ATC codes in US pharmacy claims. The crosswalk is lossy for combination products and dual-indication drugs.

Worked example

Scenario

A health plan pharmacist wants to report metformin utilization for March 2023 in the format required by a WHO drug utilization study: DDDs per 1000 members per day. She starts with one representative pharmacy claim to confirm the DDD arithmetic, then scales to the full plan population. Metformin's ATC code is A10BA02 and its WHO DDD is 2000 mg (2 g).

Dataset

One pharmacy claim for metformin (representative of the plan data), plus the plan-level aggregate. The claim shows the dispensed product at the ATC and DDD level needed for calculation. Strength is per tablet; quantity is the number of tablets dispensed.

claim_idfill_datedrug_nameatc_codewho_ddd_mgquantity_tabletsstrength_mg_per_tablet
C0012023-03-01metforminA10BA0220001801000

Steps

1Total milligrams dispensed in claim C001: 180 * 1000 = 180000 mg.
2Convert to DDDs: 180000 / 2000 = 90 DDDs. This single dispensing contains 90 standard treatment days of metformin at the WHO reference dose — note this does not mean the patient is adherent for 90 days; the actual coverage depends on the prescribed regimen (days_supply on the claim, not the DDD).
3Summing across all metformin claims for the plan's 10000 members in March 2023 (30 days), total DDDs dispensed = 90000 DDDs (hypothetical plan-level aggregate).
4Compute denominator in person-days: 10000 * 30 = 300000 person-days.
5DDD per person per day: 90000 / 300000 = 0.3.
6Scale to per 1000 members: 0.3 * 1000 = 300 DDD/1000 members/day. This is the standard WHO utilization rate. It means: if every member took exactly one DDD of metformin daily, 300 out of 1000 (30%) would be on therapy.

Result

Single claim: 180 * 1000 = 180000 mg total; 180000 / 2000 = 90 DDDs. Plan level March 2023: 90000 DDDs across 10000 members over 30 days; denominator = 10000 * 30 = 300000 person-days; rate = 90000 / 300000 = 0.3 DDD/person/day; scaled = 0.3 * 1000 = 300 DDD/1000 members/day. This rate is a volume measure — it does not indicate adherence, prescribed dose adequacy, or clinical outcomes.

Trade-offs

Pros of this
ATC codes are internationally standardized across countries, data sources, and labelers; a single ATC code covers the drug's entire market regardless of manufacturer or package. DDD provides a scale-invariant volume unit that enables cross-country and cross-drug comparison impossible with NDC alone.
Pros of this
ATC classification and DDD supply the *measurement vocabulary* for drug utilization studies. Without ATC codes, a DUS cannot group drugs by therapeutic class; without DDDs, it cannot express volume in a cross-drug-comparable unit.
Pros of this
ATC provides a therapeutic-class hierarchy directly usable for cross-country benchmarking and regulatory submissions. RxNorm does not carry a built-in therapeutic classification; it requires a separate RxClass query to reach ATC.

Runnable example

Three utilities for ATC/DDD work in US pharmacy claims: (A) look up a substance's DDD value from the RxClass/WHO index via the RxNav API; (B) convert a dispensing record's quantity and strength to DDDs; (C) compute the DDD/1000 enrolled members/day aggregate metric from a pandas DataFrame of claims.

requires: requests · pandas
import requests
import pandas as pd

WHO_DDD_TABLE = {
    "A10BA02": {"ddd_mg": 2000, "unit": "mg", "substance": "metformin"},
    "C10AA01": {"ddd_mg": 20,   "unit": "mg", "substance": "simvastatin"},
    "C10AA05": {"ddd_mg": 20,   "unit": "mg", "substance": "atorvastatin"},
    "N02BA01": {"ddd_mg": 3000, "unit": "mg", "substance": "aspirin (analgesic)"},
    "B01AC06": {"ddd_mg": 75,   "unit": "mg", "substance": "aspirin (antiplatelet)"},
}
# NOTE: always load DDD values from the pinned WHO ATC/DDD index release for your study;
# this table is illustrative only. Pin the release year in every study protocol.
ATC_DDD_RELEASE = "2024"


# ── A. DDD value lookup ──────────────────────────────────────────────────────
def get_ddd_mg(atc_code: str) -> dict | None:
    """Return the WHO DDD metadata for an ATC code from the local reference table.
    In production, load the full WHO index CSV; this snippet uses a small illustrative dict."""
    entry = WHO_DDD_TABLE.get(atc_code.upper())
    if entry:
        return {**entry, "atc": atc_code, "release": ATC_DDD_RELEASE}
    return None


# ── B. Convert a single dispensing to DDDs ───────────────────────────────────
def dispensing_to_ddds(quantity_units: int, strength_mg: float, atc_code: str) -> float | None:
    """Convert a dispensing event (quantity × strength) to DDDs for the given ATC code.

    Parameters
    ----------
    quantity_units : number of tablets, capsules, or other unit-dose items dispensed
    strength_mg    : milligrams per unit-dose item
    atc_code       : 7-character ATC code (e.g. 'A10BA02')

    Returns None if the ATC code has no DDD entry (e.g. biologic without a DDD).

    Examples
    --------
    >>> dispensing_to_ddds(180, 1000, "A10BA02")
    90.0  # 180 * 1000 / 2000
    >>> dispensing_to_ddds(30, 20, "C10AA05")
    30.0  # 30 * 20 / 20
    """
    ddd_info = get_ddd_mg(atc_code)
    if ddd_info is None:
        return None
    total_mg = quantity_units * strength_mg
    return total_mg / ddd_info["ddd_mg"]


# ── C. DDD/1000 enrolled members/day from a claims DataFrame ────────────────
def ddd_per_1000_per_day(
    rx: pd.DataFrame,
    enroll: pd.DataFrame,
    atc_code: str,
    period_start: pd.Timestamp,
    period_end: pd.Timestamp,
) -> float:
    """Compute WHO aggregate DDD/1000 enrolled members/day for one ATC code and period.

    rx columns: fill_date (Timestamp), atc_code (str), quantity_units (int), strength_mg (float)
    enroll columns: person_id (any), enroll_start (Timestamp), enroll_end (Timestamp),
                    ma_only (bool)  — exclude MA-only spans (no FFS pharmacy claims)

    Returns nan if no enrolled person-days in the period.
    """
    ddd_info = get_ddd_mg(atc_code)
    if ddd_info is None:
        return float("nan")

    # Numerator: total DDDs dispensed in the period
    mask = (
        (rx["atc_code"] == atc_code)
        & (rx["fill_date"] >= period_start)
        & (rx["fill_date"] <= period_end)
    )
    rx_period = rx.loc[mask].copy()
    rx_period["ddds"] = (
        rx_period["quantity_units"] * rx_period["strength_mg"] / ddd_info["ddd_mg"]
    )
    total_ddds = rx_period["ddds"].sum()

    # Denominator: FFS-observable enrolled person-days in the period
    e = enroll.loc[~enroll["ma_only"]].copy()
    e["days"] = (
        e["enroll_end"].clip(upper=period_end) - e["enroll_start"].clip(lower=period_start)
    ).dt.days.clip(lower=0)
    person_days = e["days"].sum()

    if person_days == 0:
        return float("nan")

    return 1000.0 * total_ddds / person_days


# ── Demo ─────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
    # Single-claim DDD verification from the worked example
    qty, strength, atc = 180, 1000, "A10BA02"
    ddds = dispensing_to_ddds(qty, strength, atc)
    print(f"{qty} tablets × {strength} mg / {get_ddd_mg(atc)['ddd_mg']} mg DDD = {ddds:.0f} DDDs")
    # → 180 tablets × 1000 mg / 2000 mg DDD = 90 DDDs

    # Population rate: 90000 DDDs across 10000 members in 30 days
    total_ddds_plan = 90000
    members = 10000
    days = 30
    rate = 1000 * total_ddds_plan / (members * days)
    print(f"Plan rate: 1000 * {total_ddds_plan} / ({members} * {days}) = {rate:.0f} DDD/1000/day")
    # → Plan rate: 1000 * 90000 / (10000 * 30) = 300 DDD/1000/day

Citations

FOUNDATIONAL / METHODS
  1. [1]Hollingworth SA, Kairuz T. Measuring Medicine Use: Applying ATC/DDD Methodology to Real-World Data. Pharmacy. 2021;9(1):60.
  2. [2]Rasmussen L, Wettermark B, Steinke D, Pottegård A. Core concepts in pharmacoepidemiology: Measures of drug utilization based on individual-level drug dispensing data. Pharmacoepidemiology and Drug Safety. 2022;31(10):1015-1026.
APPLIED EXAMPLES
  1. [3]Furu K, Wettermark B, Andersen M, Martikainen JE, Almarsdottir AB, Sørensen HT. The Nordic Countries as a Cohort for Pharmacoepidemiological Research. Basic and Clinical Pharmacology and Toxicology. 2010;106(2):86-94.
REPORTING & GUIDANCE
  1. [4]WHO Collaborating Centre for Drug Statistics Methodology. ATC/DDD Index 2024. Oslo: WHO Collaborating Centre for Drug Statistics Methodology. Available at: https://www.whocc.no/atc_ddd_index/. Accessed 2026.