--- title: "Generate a Static AE Listing Table in RTF format" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Generate a Static AE Listing Table in RTF format} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} resource_files: - rtf/ae0listing1.rtf --- ```{r, include=FALSE} knitr::opts_chunk$set( comment = "#>", collapse = TRUE, out.width = "100%", dpi = 150 ) ``` ```{r} library(metalite.ae) ``` ## Overview This vignette demonstrates how to generate a static adverse event (AE) listing focused on serious AEs in **RTF** format. The listing presents participant-level details for adverse events of interest. Three functions support the workflow: - `prepare_ae_listing()` prepares the listing dataset. - `format_ae_listing()` formats the listing dataset. - `tlf_ae_listing()` creates the RTF table. ## Step 1: Define metadata The example uses ADSL and ADAE data from the [forestly](https://merck.github.io/forestly/) package. ```{r} adsl <- forestly::forestly_adsl adae <- forestly::forestly_adae adsl$TRT01A <- factor( adsl$TRT01A, levels = c("Xanomeline Low Dose", "Placebo"), labels = c("Low Dose", "Placebo") ) adae$TRTA <- factor( adae$TRTA, levels = c("Xanomeline Low Dose", "Placebo"), labels = c("Low Dose", "Placebo") ) analysis_plan <- metalite::plan( analysis = "ae_listing", population = "apat", observation = "wk12", parameter = "ser" ) meta <- metalite::meta_adam(observation = adae, population = adsl) |> metalite::define_plan(analysis_plan) |> metalite::define_population( name = "apat", var = c( "USUBJID", "SAFFL", "TRT01A", "TRTDUR", "SITEID", "SEX", "RACE", "AGE" ), group = "TRT01A", subset = SAFFL == "Y", label = "All Participants as Treated" ) |> metalite::define_observation( name = "wk12", var = c( "USUBJID", "SAFFL", "TRTA", "AEDECOD", "AEBODSYS", "AEREL", "AESER", "AEOUT", "AEACN", "AESDTH", "ASTDT", "AENDT" ), group = "TRTA", subset = SAFFL == "Y", label = "Weeks 0 to 12" ) |> metalite::define_parameter( name = "ser", term1 = "Serious", term2 = "", subset = AESER == "Y", var = "AEDECOD", soc = "AEBODSYS", label = "Serious AEs" ) |> metalite::define_analysis( name = "ae_listing", var_name = c( "USUBJID", "ASTDY", "AEDECOD", "ADURN", "AESEV", "AESER", "AEREL", "AEOUT" ), group_by = c("USUBJID", "ASTDY"), page_by = "TRTA" ) |> metalite::meta_build() ``` ## Step 2: Generate the AE listing table `prepare_ae_listing()` uses the population, observation, parameter, and analysis definitions in `meta` to prepare the listing dataset. `format_ae_listing()` organizes the prepared output, and `tlf_ae_listing()` creates the RTF table. ```{r} footnote <- c( "Related: Investigator-assessed relationship of the adverse event to study medication. Y = RELATED, N = NOT RELATED", "Action Taken: Discontinued = DRUG WITHDRAWN, Interrupted = DRUG INTERRUPTED, Reduced = DOSE REDUCED, Increased = DOSE INCREASED, None = DOSE NOT CHANGED, N/A = NOT APPLICABLE.", "Outcome: Resolved = RECOVERED/RESOLVED, Resolving = RECOVERING/RESOLVING, Sequelae = RECOVERED/RESOLVED WITH SEQUELAE, Not resolved = NOT RECOVERED/NOT RESOLVED.", "Adverse event terms are from MedDRA Version 25.0." ) rtf_dir <- if (dir.exists("vignettes/rtf")) "vignettes/rtf" else "rtf" rtf_file <- file.path(rtf_dir, "ae0listing1.rtf") prepare_ae_listing( meta, analysis = "ae_listing", population = "apat", observation = "wk12", parameter = "ser" ) |> format_ae_listing() |> tlf_ae_listing( footnotes = footnote, orientation = "portrait", source = "Source: [CDISCpilot: adam-adsl; adae]", analysis = "ae_listing", # Provide analysis type defined in meta$analysis path_outtable = rtf_file ) ``` ```{r download-rtf, results="asis", echo=FALSE} cat( "Generated RTF file: ae0listing1.rtf" ) ```