## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(rmarkdown.html_vignette.check_title = FALSE) ## ----eval=FALSE, echo=TRUE---------------------------------------------------- # library(sassy) # # options("logr.autolog" = TRUE, # "logr.notes" = FALSE) # # # Get temp location for log and report output # tmp <- tempdir() # # # Open log # lf <- log_open(file.path(tmp, "example1.log")) # # # # Prepare Data ------------------------------------------------------------ # # sep("Prepare Data") # # # Get path to sample data # pkg <- system.file("extdata", package = "libr") # # # Create libname for csv data # libname(sdtm, pkg, "csv", quiet = TRUE) # # # put("Join and prepare data") # # put("Join DM to VS and keep desired columns") # datastep(sdtm$DM, merge = sdtm$VS, merge_by = USUBJID, # keep = v(USUBJID, VSTESTCD, VISIT, VISITNUM, VSSTRESN, ARM, VSBLFL), # where = expression(VSTESTCD %in% c("PULSE", "RESP", "TEMP", "DIABP", "SYSBP") & # !(VISIT == "SCREENING" & VSBLFL != "Y")), {}) -> dm_joined # # put("Sort by variables") # proc_sort(dm_joined, by = v(USUBJID, VSTESTCD, VISITNUM)) -> dm_sorted # # put("Differentiate baseline from treated vital signs") # datastep(dm_sorted, by = v(USUBJID, VSTESTCD), # retain = list(BSTRESN = 0), { # # # Combine treatment groups # # And distinguish 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 # # }) -> prep # # # put("Get population counts") # pop_A <- subset(prep, GRP == "A_BASE", v(USUBJID, GRP)) |> # proc_sort(options = nodupkey) |> # proc_freq(tables = GRP, # options = v(nocum, nonobs, nopercent), # output = long) |> # subset(select = "A_BASE", drop = TRUE) # # pop_O <- subset(prep, GRP == "O_BASE", v(USUBJID, GRP)) |> # proc_sort(options = nodupkey) |> # proc_freq(tables = GRP, # options = v(nocum, nonobs, nopercent), # output = long) |> # subset(select = "O_BASE", drop = TRUE) # # # # Prepare formats --------------------------------------------------------- # # sep("Prepare formats") # # # # put("Vital sign lookup format") # vs_fmt <- c(PULSE = "Pulse", # TEMP = "Temperature °C", # RESP = "Respirations/min", # SYSBP = "Systolic Blood Pressure", # DIABP = "Diastolic Blood Pressure") |> put() # # put("Statistics lookup format") # stat_fmt <- c(MEANSTD = "Mean (SD)", # MEDIAN = "Median", # Q1Q3 = "Q1 - Q3", # MINMAX = "Min - Max") |> put() # # # put("Create format catalog") # fc <- fcat(MEAN = "%.1f", # STD = "(%.2f)", # MEDIAN = "%.1f", # Q1 = "%.1f", # Q3 = "%.1f", # MIN = "%.1f", # MAX = "%.1f") # # # Prepare final data frame ------------------------------------------------ # # sep("Prepare final data") # # put("Calculate statistics and prepare final data frame") # proc_means(prep, var = VSSTRESN, class = VSTESTCD, by = GRP, # stats = v(mean, std, median, q1, q3, min, max), # options = v(notype, nofreq, nway)) |> # datastep(format = fc, # drop = v(MEAN, STD, Q1, Q3, MIN, MAX, VAR), # rename = c("CLASS" = "VAR"), # { # MEANSTD <- fapply2(MEAN, STD) # Q1Q3 <- fapply2(Q1, Q3, sep = " - ") # MINMAX <- fapply2(MIN, MAX, sep = " - ") # }) |> # proc_transpose(id = BY, var = v(MEANSTD, MEDIAN, Q1Q3, MINMAX), # by = VAR, name = "LABEL") -> final # # put("Prepare factor for sorting") # final$VAR <- factor(final$VAR, names(vs_fmt)) # # # put("Final sort") # proc_sort(final, by = VAR) -> final # # # # Create Report ----------------------------------------------------------- # sep("Create Report") # # # # Define table object # tbl <- create_table(final) |> # 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(VAR, LABEL), width = 2.5) |> # define(VAR, "Vital Sign", format = vs_fmt, # blank_after = TRUE, dedupe = TRUE, label_row = TRUE) |> # define(LABEL, indent = .25, format = stat_fmt) |> # define(A_BASE, "Baseline") |> # define(A_TRT, "After Treatment") |> # define(O_BASE, "Baseline") |> # define(O_TRT, "After Treatment") # # # # Define report object # rpt <- create_report(file.path(tmp, "./output/example2.rtf"), output_type = "RTF", # font = "Times", font_size = 12) |> # page_header("Sponsor: Company", "Study: ABC") |> # titles("Table 4.0", "Selected Vital Signs", bold = TRUE) |> # add_content(tbl, align = "center") |> # page_footer(Sys.time(), "CONFIDENTIAL", "Page [pg] of [tpg]") # # # Write report to file system # res <- write_report(rpt) # # # # Clean Up ---------------------------------------------------------------- # sep("Clean Up") # # # Close log # log_close() # # # View report # # file.show(res$file_path) # # # View log # # file.show(lf) # #