## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  library(tidyverse)
#  library(sassy)
#  
#  options("logr.autolog" = TRUE,
#          "logr.notes" = FALSE)
#  
#  # Get path to temp directory
#  tmp <- tempdir()
#  
#  # Get path to sample data
#  pkg <- system.file("extdata", package = "sassy")
#  
#  # Open log
#  lgpth <- log_open(file.path(tmp, "example5.log"))
#  
#  sep("Prepare Data")
#  
#  # Create libname for csv data
#  libname(sdtm, pkg, "csv")
#  
#  put("Join and prepare data")
#  prep <- sdtm$DM |>
#    left_join(sdtm$VS, by = c("USUBJID" = "USUBJID")) |>
#    select(USUBJID, VSTESTCD, VISIT, VISITNUM, VSSTRESN, ARM, VSBLFL) |>
#    filter(VSTESTCD %in% c("PULSE", "RESP", "TEMP", "DIABP", "SYSBP"),
#           !(VISIT == "SCREENING" & VSBLFL != "Y")) |>
#    arrange(USUBJID, VSTESTCD, VISITNUM) |>
#    group_by(USUBJID, VSTESTCD) |>
#    datastep(retain = list(BSTRESN = 0), {
#  
#      # Combine treatment groups
#      # And distingish baseline time points
#      if (ARM == "ARM A") {
#        if (VSBLFL %eq% "Y") {
#          GRP <- "A_BASE"
#        } else {
#          GRP <- "A_TRT"
#        }
#      } else {
#        if (VSBLFL %eq% "Y") {
#          GRP <- "O_BASE"
#        } else {
#          GRP <- "O_TRT"
#        }
#      }
#  
#      # Populate baseline value
#      if (first.)
#        BSTRESN = VSSTRESN
#  
#    }) |>
#    ungroup()
#  
#  put("Get population counts")
#  pop_A <- prep |> select(USUBJID, GRP) |> filter(GRP == "A_BASE") |>
#    distinct() |> count() |> deframe() |> put()
#  pop_O <- prep |> select(USUBJID, GRP) |> filter(GRP == "O_BASE") |>
#    distinct() |> count() |> deframe() |> put()
#  
#  put("Prepare final data frame")
#  final <- prep |>
#    select(VSTESTCD, GRP, VSSTRESN, BSTRESN) |>
#    group_by(VSTESTCD, GRP) |>
#    summarize(Mean = fmt_mean_sd(VSSTRESN),
#              Median = fmt_median(VSSTRESN),
#              Quantiles = fmt_quantile_range(VSSTRESN),
#              Range = fmt_range(VSSTRESN)) |>
#    ungroup() |>
#    pivot_longer(cols = c(Mean, Median, Quantiles, Range),
#                 names_to = "stats",
#                 values_to = "values") |>
#    pivot_wider(names_from = GRP,
#                values_from = values) |>
#    put()
#  
#  
#  sep("Create formats")
#  
#  # Vital sign lookup format
#  vs_fmt <- c(PULSE = "Pulse",
#              TEMP = "Temperature °C",
#              RESP = "Respirations/min",
#              SYSBP = "Systolic Blood Pressure",
#              DIABP = "Diastolic Blood Pressure") |>
#    put()
#  
#  # Statistics user-defined format
#  stat_fmt <- value(condition(x == "Mean", "Mean (SD)"),
#                    condition(x == "Quantiles", "Q1 - Q3")) |>
#    put()
#  
#  sep("Create Report")
#  
#  
#  # Apply sort
#  final <- final |>
#    mutate(VSTESTCD = factor(VSTESTCD, levels = names(vs_fmt))) |>
#    arrange(VSTESTCD)
#  
#  # Define table object
#  tbl <- create_table(final, borders = "bottom") |>
#    spanning_header(A_BASE, A_TRT, "Placebo", n = pop_A) |>
#    spanning_header(O_BASE, O_TRT, "Treated", n = pop_O) |>
#    column_defaults(width = 1.25, align = "center") |>
#    stub(c(VSTESTCD, stats), width = 2.5) |>
#    define(VSTESTCD, "Vital Sign", format = vs_fmt,
#           blank_after = TRUE, dedupe = TRUE, label_row = TRUE) |>
#    define(stats, indent = .25, format = stat_fmt) |>
#    define(A_BASE, "Baseline") |>
#    define(A_TRT, "After Treatment") |>
#    define(O_BASE, "Baseline") |>
#    define(O_TRT, "After Treatment")
#  
#  # Construct output path
#  pth <- file.path(tmp, "output/t_vs.pdf")
#  
#  # Define report object
#  rpt <- create_report(pth, output_type = "PDF", font = "Times",
#                       font_size = 11) |>
#    page_header("Sponsor: Company", "Study: ABC") |>
#    titles("Table 4.0", "Selected Vital Signs", bold = TRUE, font_size = 12) |>
#    add_content(tbl, align = "center") |>
#    page_footer(Sys.time(), "CONFIDENTIAL", "Page [pg] of [tpg]")
#  
#  # Write report to file system
#  write_report(rpt)
#  
#  # Close log
#  log_close()
#  
#  # View files
#  # file.show(pth)
#  # file.show(lgpth)
#  

