The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The following example is an adverse events program. The program
demonstrates how multiple frequency tables can be combined into a single
report. This example also shows how a wide report can be wrapped
horizontally using the page_wrap
feature of the
reporter package.
library(sassy)
library(procs)
options("logr.autolog" = TRUE,
"logr.notes" = FALSE,
"logr.on" = TRUE,
"procs.print" = FALSE)
# Get temp directory
tmp <- tempdir()
# Open log
lf <- log_open(file.path(tmp, "example2.log"))
# Get data
dir <- system.file("extdata", package = "sassy")
# Get Data ----------------------------------------------------------------
sep("Prepare Data")
# Create libname for csv data
libname(sdtm, dir, "csv", quiet = TRUE)
# Load data into workspace
lib_load(sdtm)
put("Filter DM data")
datastep(sdtm.DM,
keep = v(USUBJID, ARM, ARMCD),
where = expression(ARM != "SCREEN FAILURE"), {}) -> dm
put("Get population counts")
proc_freq(dm, tables = ARM,
output = long,
options = v(nopercent, nonobs)) -> arm_pop
put ("Create lookup for AE severity")
sevn <- c(MILD = 1, MODERATE = 2, SEVERE = 3) |> put()
put("Prepare table data")
datastep(sdtm.AE, merge = dm,
merge_by = "USUBJID",
merge_in = v(inA, inB),
keep = v(USUBJID, ARM, AESEV, AESEVN, AESOC, AEDECOD),
where = expression(inB == 1 & inA != 0),
{
AESEVN <- fapply(AESEV, sevn)
}) -> ae_sub
# Prepare Formats ---------------------------------------------------------
sep("Prepare Formats")
fc <- fcat(CNT = "%3d",
PCT = "(%5.1f)",
CAT2 = c(MILD = "Mild",
MODERATE = "Moderate",
SEVERE = "Severe"))
# Perform Calculations ----------------------------------------------------
sep("Perform Calculations")
put("Get SOC Frequencies")
proc_freq(ae_sub,
tables = v(AESOC * AESEV),
by = "ARM") -> ae_soc
put("Combine columns for SOC")
datastep(ae_soc,
format = fc,
rename = list(VAR1 = "VAR", CAT1 = "CAT"),
drop = v(VAR2, CNT, PCT),
{
VARORD <- 1
CNTPCT <- fapply2(CNT, PCT)
CAT2 <- fapply(CAT2)
}) -> ae_soc_c
put("Pivot SOC frequencies")
proc_transpose(ae_soc_c, id = v(BY, CAT2),
var = CNTPCT,
copy = v(VAR, VARORD),
by = CAT) -> ae_soc_t
put("Get PT Frequencies")
proc_freq(ae_sub,
tables = "AEDECOD * AESEV",
by = "ARM",
options = nonobs) -> ae_pt
put("Get unique SOC and PT combinations")
proc_sort(ae_sub, keep = v(AESOC, AEDECOD),
by = v(AESOC, AEDECOD), options = nodupkey) -> evnts
put("Combine columns for PT")
datastep(ae_pt,
format = fc,
rename = list(VAR1 = "VAR", CAT1 = "CAT"),
drop = v(VAR2, CNT, PCT),
{
VARORD <- 2
CNTPCT <- fapply2(CNT, PCT)
CAT2 <- fapply(CAT2)
}) -> ae_pt_c
put("Pivot PT frequencies")
proc_transpose(ae_pt_c, id = v(BY, CAT2),
var = CNTPCT,
copy = v(VAR, VARORD),
by = CAT) -> ae_pt_t
nms <- names(ae_soc_t)
put("Join in SOC")
datastep(ae_pt_t, merge = evnts, rename = c(CAT = "CAT2", AESOC = "CAT"),
merge_by = c(CAT = "AEDECOD"), {
CAT <- toTitleCase(tolower(CAT))
}) -> ae_pt_tj
put("Stack SOC and PT counts")
datastep(ae_soc_t, set = ae_pt_tj,
keep = c("VAR", "CAT", "CAT2", "VARORD",
find.names(ae_pt_tj, "ARM*")), {}) -> ae_soc_pt
aefinal <- proc_sort(ae_soc_pt, by = v( CAT, VARORD, CAT2))
# All Adverse Events ------------------------------------------------------
put("Get frequencies for all events")
proc_freq(ae_sub, tables = "AESEV", by = v(ARM)) -> allfreq
put("Combine all events.")
datastep(allfreq, format = fc,
drop = v(N, CNT, PCT),
{
CNTPCT <- fapply2(CNT, PCT)
CAT <- fapply(CAT, fc$CAT2)
}) -> allfreqm
put("Prepare data for reporting")
proc_transpose(allfreqm, id = v(BY, CAT),
var = CNTPCT, copy = VAR, name = CAT) -> allfreqt
# Final Data --------------------------------------------------------------
sep("Create final data frame")
datastep(allfreqt, set = aefinal,
keep = names(aefinal),
{
if (VAR == "AESEV")
CAT <- "All Adverse Events"
}) -> allfinal
# Print Report ----------------------------------------------------------
sep("Create and print report")
put("Create table object")
tbl <- create_table(allfinal, first_row_blank = TRUE, width = 9) |>
column_defaults(from = `ARM A.Mild`, to = `ARM D.Severe`, width = 1, align = "center") |>
spanning_header("ARM A.Mild", "ARM A.Severe", label = "ARM A", n = arm_pop["ARM A"]) |>
spanning_header("ARM B.Mild", "ARM B.Severe", label = "ARM B", n = arm_pop["ARM B"]) |>
spanning_header("ARM C.Mild", "ARM C.Severe", label = "ARM C", n = arm_pop["ARM C"]) |>
spanning_header("ARM D.Mild", "ARM D.Severe", label = "ARM D", n = arm_pop["ARM D"]) |>
stub(vars = c("CAT", "CAT2"), label = "System Organ Class\n Preferred Term", width = 5) |>
define(CAT, blank_after = TRUE) |>
define(CAT2, indent = .25) |>
define(`ARM A.Mild`, label = "Mild") |>
define(`ARM A.Moderate`, label = "Moderate") |>
define(`ARM A.Severe`, label = "Severe") |>
define(`ARM B.Mild`, label = "Mild", page_wrap = TRUE) |>
define(`ARM B.Moderate`, label = "Moderate") |>
define(`ARM B.Severe`, label = "Severe") |>
define(`ARM C.Mild`, label = "Mild", page_wrap = TRUE) |>
define(`ARM C.Moderate`, label = "Moderate") |>
define(`ARM C.Severe`, label = "Severe") |>
define(`ARM D.Mild`, label = "Mild", page_wrap = TRUE) |>
define(`ARM D.Moderate`,label = "Moderate") |>
define(`ARM D.Severe`, label = "Severe") |>
define(VAR, visible = FALSE) |>
define(VARORD, visible = FALSE)
put("Create report object")
rpt <- create_report(file.path(tmp, "example2.rtf"), output_type = "RTF", font = "Arial") |>
options_fixed(font_size = 10) |>
page_header("Sponsor: Company", "Study: ABC") |>
titles("Table 5.0", "Adverse Events by Maximum Severity", bold = TRUE) |>
add_content(tbl) |>
footnotes("Program: AE_Table.R",
"Note: Adverse events were coded using MedDRA Version 9.1") |>
page_footer(Sys.time(), "Confidential", "Page [pg] of [tpg]")
put("Print report")
res <- write_report(rpt)
# Clean Up ----------------------------------------------------------------
sep("Clean Up")
put("Remove library from workspace")
lib_unload(sdtm)
put("Close log")
log_close()
# Uncomment to view report
# file.show(res$modified_path)
# Uncomment to view log
# file.show(lf)
Here is the output:
And here is the log:
=========================================================================
Log Path: C:/Users/dbosa/AppData/Local/Temp/RtmpKQddL7/log/example2.log
Program Path: C:/Projects/Archytas/Demo/example2.R
Working Directory: C:/Projects/Archytas/Demo
User Name: dbosa
R Version: 4.2.1 (2022-06-23 ucrt)
Machine: SOCRATES x86-64
Operating System: Windows 10 x64 build 19044
Base Packages: stats graphics grDevices utils datasets methods base Other
Packages: tidylog_1.0.2 procs_0.0.9007 reporter_1.3.7 libr_1.2.6 fmtr_1.5.9
logr_1.3.3 common_1.0.5 sassy_1.0.8
Log Start Time: 2022-10-15 20:24:55
=========================================================================
=========================================================================
Prepare Data
=========================================================================
# library 'sdtm': 8 items
- attributes: csv not loaded
- path: ./data
- items:
Name Extension Rows Cols Size
1 AE csv 150 27 88.2 Kb
2 DA csv 3587 18 528 Kb
3 DM csv 87 24 45.3 Kb
4 DS csv 174 9 33.8 Kb
5 EX csv 84 11 26.1 Kb
6 IE csv 2 14 13.1 Kb
7 SV csv 685 10 70.1 Kb
8 VS csv 3358 17 467.2 Kb
LastModified
1 2020-09-18 14:30:23
2 2020-09-18 14:30:23
3 2020-09-18 14:30:23
4 2022-09-26 16:54:16
5 2020-09-18 14:30:23
6 2020-09-18 14:30:23
7 2020-09-18 14:30:24
8 2020-09-18 14:30:24
lib_load: library 'sdtm' loaded
Filter DM data
datastep: columns decreased from 24 to 3
# A tibble: 85 × 3
USUBJID ARM ARMCD
<chr> <chr> <chr>
1 ABC-01-049 ARM D 4
2 ABC-01-050 ARM B 2
3 ABC-01-051 ARM A 1
4 ABC-01-052 ARM C 3
5 ABC-01-053 ARM B 2
6 ABC-01-054 ARM D 4
7 ABC-01-055 ARM C 3
8 ABC-01-056 ARM A 1
9 ABC-01-113 ARM D 4
10 ABC-01-114 ARM B 2
# … with 75 more rows
# ℹ Use `print(n = ...)` to see more rows
Get population counts
proc_freq: input data set 85 rows and 3 columns
tables: ARM
view: TRUE
output: 1 datasets
# A tibble: 1 × 6
VAR STAT `ARM A` `ARM B` `ARM C`
<chr> <chr> <dbl> <dbl> <dbl>
1 ARM CNT 20 21 21
# … with 1 more variable: `ARM D` <dbl>
# ℹ Use `colnames()` to see all variable names
Create lookup for AE severity
MILD MODERATE SEVERE
1 2 3
Prepare table data
datastep: columns decreased from 27 to 6
# A tibble: 145 × 6
USUBJID ARM AESEV AESEVN AESOC AEDECOD
<chr> <chr> <chr> <dbl> <chr> <chr>
1 ABC-01… ARM D MODE… 2 Inve… BLOOD …
2 ABC-01… ARM D MODE… 2 Inve… BLOOD …
3 ABC-01… ARM D MILD 1 Musc… MUSCUL…
4 ABC-01… ARM D MILD 1 Nerv… HEADAC…
5 ABC-01… ARM D MODE… 2 Inve… LABORA…
6 ABC-01… ARM B MILD 1 Resp… UPPER …
7 ABC-01… ARM B MILD 1 Skin… RASH
8 ABC-01… ARM A MILD 1 Nerv… HEADAC…
9 ABC-01… ARM A MILD 1 Nerv… HEADAC…
10 ABC-01… ARM A MILD 1 Gene… INFLUE…
# … with 135 more rows
# ℹ Use `print(n = ...)` to see more rows
=========================================================================
Prepare Formats
=========================================================================
# A format catalog: 3 formats
- $CNT: type S, "%3d"
- $PCT: type S, "(%5.1f)"
- $CAT2: type V, 3 elements
=========================================================================
Perform Calculations
=========================================================================
Get SOC Frequencies
proc_freq: input data set 145 rows and 6 columns
tables: AESOC * AESEV
by: ARM
view: TRUE
output: 1 datasets
# A tibble: 240 × 8
BY VAR1 VAR2 CAT1 CAT2 N
<chr> <chr> <chr> <chr> <chr> <dbl>
1 ARM A AESOC AESEV Blood and… MILD 37
2 ARM A AESOC AESEV Blood and… MODE… 37
3 ARM A AESOC AESEV Blood and… SEVE… 37
4 ARM A AESOC AESEV Cardiac d… MILD 37
5 ARM A AESOC AESEV Cardiac d… MODE… 37
6 ARM A AESOC AESEV Cardiac d… SEVE… 37
7 ARM A AESOC AESEV Congenita… MILD 37
8 ARM A AESOC AESEV Congenita… MODE… 37
9 ARM A AESOC AESEV Congenita… SEVE… 37
10 ARM A AESOC AESEV Ear and l… MILD 37
# … with 230 more rows, and 2 more
# variables: CNT <dbl>, PCT <dbl>
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Combine columns for SOC
datastep: columns decreased from 8 to 7
# A tibble: 240 × 7
BY VAR CAT CAT2 N VARORD
<chr> <chr> <chr> <chr> <dbl> <dbl>
1 ARM A AESOC Blood an… Mild 37 1
2 ARM A AESOC Blood an… Mode… 37 1
3 ARM A AESOC Blood an… Seve… 37 1
4 ARM A AESOC Cardiac … Mild 37 1
5 ARM A AESOC Cardiac … Mode… 37 1
6 ARM A AESOC Cardiac … Seve… 37 1
7 ARM A AESOC Congenit… Mild 37 1
8 ARM A AESOC Congenit… Mode… 37 1
9 ARM A AESOC Congenit… Seve… 37 1
10 ARM A AESOC Ear and … Mild 37 1
# … with 230 more rows, and 1 more
# variable: CNTPCT <chr>
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Pivot SOC frequencies
proc_transpose: input data set 240 rows and 7 columns
by: CAT
var: CNTPCT
id: BY CAT2
copy: VAR VARORD
name: NAME
output dataset 20 rows and 16 columns
# A tibble: 20 × 16
VAR CAT VARORD NAME ARM A…¹ ARM A…²
<chr> <chr> <dbl> <chr> <chr> <chr>
1 AESOC Bloo… 1 CNTP… " 0 (… " 0 (…
2 AESOC Card… 1 CNTP… " 0 (… " 0 (…
3 AESOC Cong… 1 CNTP… " 0 (… " 0 (…
4 AESOC Ear … 1 CNTP… " 0 (… " 0 (…
5 AESOC Endo… 1 CNTP… " 0 (… " 0 (…
6 AESOC Gast… 1 CNTP… " 0 (… " 1 (…
7 AESOC Gene… 1 CNTP… " 2 (… " 0 (…
8 AESOC Infe… 1 CNTP… " 7 (… " 5 (…
9 AESOC Inju… 1 CNTP… " 0 (… " 0 (…
10 AESOC Inve… 1 CNTP… " 4 (… " 2 (…
11 AESOC Meta… 1 CNTP… " 0 (… " 0 (…
12 AESOC Musc… 1 CNTP… " 3 (… " 0 (…
13 AESOC Neop… 1 CNTP… " 0 (… " 0 (…
14 AESOC Nerv… 1 CNTP… " 7 (… " 0 (…
15 AESOC Psyc… 1 CNTP… " 0 (… " 1 (…
16 AESOC Rena… 1 CNTP… " 1 (… " 0 (…
17 AESOC Resp… 1 CNTP… " 2 (… " 1 (…
18 AESOC Skin… 1 CNTP… " 1 (… " 0 (…
19 AESOC Surg… 1 CNTP… " 0 (… " 0 (…
20 AESOC Vasc… 1 CNTP… " 0 (… " 0 (…
# … with 10 more variables:
# `ARM A.Severe` <chr>,
# `ARM B.Mild` <chr>,
# `ARM B.Moderate` <chr>,
# `ARM B.Severe` <chr>,
# `ARM C.Mild` <chr>,
# `ARM C.Moderate` <chr>, …
# ℹ Use `colnames()` to see all variable names
Get PT Frequencies
proc_freq: input data set 145 rows and 6 columns
tables: AEDECOD * AESEV
by: ARM
view: TRUE
output: 1 datasets
# A tibble: 876 × 7
BY VAR1 VAR2 CAT1 CAT2 CNT
<chr> <chr> <chr> <chr> <chr> <dbl>
1 ARM A AEDECOD AESEV ANXIETY MILD 0
2 ARM A AEDECOD AESEV ANXIETY MODE… 0
3 ARM A AEDECOD AESEV ANXIETY SEVE… 0
4 ARM A AEDECOD AESEV APPLICA… MILD 0
5 ARM A AEDECOD AESEV APPLICA… MODE… 0
6 ARM A AEDECOD AESEV APPLICA… SEVE… 0
7 ARM A AEDECOD AESEV APPLICA… MILD 0
8 ARM A AEDECOD AESEV APPLICA… MODE… 0
9 ARM A AEDECOD AESEV APPLICA… SEVE… 0
10 ARM A AEDECOD AESEV BACK PA… MILD 2
# … with 866 more rows, and 1 more
# variable: PCT <dbl>
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Get unique SOC and PT combinations
proc_sort: input data set 73 rows and 6 columns
by: AESOC AEDECOD
keep: AESOC AEDECOD
order: a a
nodupkey: TRUE
output data set 73 rows and 2 columns
# A tibble: 73 × 2
AESOC AEDECOD
<chr> <chr>
1 Blood and lymphatic system diso… NEUTRO…
2 Cardiac disorders PALPIT…
3 Cardiac disorders SINUS …
4 Congenital, familial and geneti… DERMOI…
5 Ear and labyrinth disorders VERTIGO
6 Endocrine disorders PARATH…
7 Gastrointestinal disorders DIARRH…
8 Gastrointestinal disorders FOOD P…
9 Gastrointestinal disorders TOOTHA…
10 Gastrointestinal disorders VOMITI…
# … with 63 more rows
# ℹ Use `print(n = ...)` to see more rows
Combine columns for PT
datastep: columns decreased from 7 to 6
# A tibble: 876 × 6
BY VAR CAT CAT2 VARORD CNTPCT
<chr> <chr> <chr> <chr> <dbl> <chr>
1 ARM A AEDECOD ANXIE… Mild 2 " 0 …
2 ARM A AEDECOD ANXIE… Mode… 2 " 0 …
3 ARM A AEDECOD ANXIE… Seve… 2 " 0 …
4 ARM A AEDECOD APPLI… Mild 2 " 0 …
5 ARM A AEDECOD APPLI… Mode… 2 " 0 …
6 ARM A AEDECOD APPLI… Seve… 2 " 0 …
7 ARM A AEDECOD APPLI… Mild 2 " 0 …
8 ARM A AEDECOD APPLI… Mode… 2 " 0 …
9 ARM A AEDECOD APPLI… Seve… 2 " 0 …
10 ARM A AEDECOD BACK … Mild 2 " 2 …
# … with 866 more rows
# ℹ Use `print(n = ...)` to see more rows
Pivot PT frequencies
proc_transpose: input data set 876 rows and 6 columns
by: CAT
var: CNTPCT
id: BY CAT2
copy: VAR VARORD
name: NAME
output dataset 73 rows and 16 columns
# A tibble: 73 × 16
VAR CAT VARORD NAME ARM A…¹ ARM A…²
<chr> <chr> <dbl> <chr> <chr> <chr>
1 AEDE… ANXI… 2 CNTP… " 0 (… " 0 (…
2 AEDE… APPL… 2 CNTP… " 0 (… " 0 (…
3 AEDE… APPL… 2 CNTP… " 0 (… " 0 (…
4 AEDE… BACK… 2 CNTP… " 2 (… " 0 (…
5 AEDE… BASA… 2 CNTP… " 0 (… " 0 (…
6 AEDE… BLOO… 2 CNTP… " 0 (… " 0 (…
7 AEDE… BLOO… 2 CNTP… " 0 (… " 0 (…
8 AEDE… BLOO… 2 CNTP… " 0 (… " 1 (…
9 AEDE… BLOO… 2 CNTP… " 1 (… " 1 (…
10 AEDE… BLOO… 2 CNTP… " 0 (… " 0 (…
# … with 63 more rows, 10 more variables:
# `ARM A.Severe` <chr>,
# `ARM B.Mild` <chr>,
# `ARM B.Moderate` <chr>,
# `ARM B.Severe` <chr>,
# `ARM C.Mild` <chr>,
# `ARM C.Moderate` <chr>, …
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Join in SOC
datastep: columns increased from 16 to 17
# A tibble: 73 × 17
VAR CAT2 VARORD NAME ARM A…¹ ARM A…²
<chr> <chr> <dbl> <chr> <chr> <chr>
1 AEDE… Anxi… 2 CNTP… " 0 (… " 0 (…
2 AEDE… Appl… 2 CNTP… " 0 (… " 0 (…
3 AEDE… Appl… 2 CNTP… " 0 (… " 0 (…
4 AEDE… Back… 2 CNTP… " 2 (… " 0 (…
5 AEDE… Basa… 2 CNTP… " 0 (… " 0 (…
6 AEDE… Bloo… 2 CNTP… " 0 (… " 0 (…
7 AEDE… Bloo… 2 CNTP… " 0 (… " 0 (…
8 AEDE… Bloo… 2 CNTP… " 0 (… " 1 (…
9 AEDE… Bloo… 2 CNTP… " 1 (… " 1 (…
10 AEDE… Bloo… 2 CNTP… " 0 (… " 0 (…
# … with 63 more rows, 11 more variables:
# `ARM A.Severe` <chr>,
# `ARM B.Mild` <chr>,
# `ARM B.Moderate` <chr>,
# `ARM B.Severe` <chr>,
# `ARM C.Mild` <chr>,
# `ARM C.Moderate` <chr>, …
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Stack SOC and PT counts
datastep: columns started with 16 and ended with 16
# A tibble: 93 × 16
VAR CAT CAT2 VARORD ARM A…¹ ARM A…² ARM A…³ ARM B…⁴ ARM B…⁵ ARM B…⁶ ARM C…⁷ ARM C…⁸
<chr> <chr> <chr> <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 AESOC Blood a… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (…
2 AESOC Cardiac… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
3 AESOC Congeni… <NA> 1 " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (… " 0 (…
4 AESOC Ear and… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (…
5 AESOC Endocri… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (…
6 AESOC Gastroi… <NA> 1 " 0 (… " 1 (… " 0 (… " 4 (… " 1 (… " 0 (… " 0 (… " 0 (…
7 AESOC General… <NA> 1 " 2 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 3 (… " 0 (…
8 AESOC Infecti… <NA> 1 " 7 (… " 5 (… " 0 (… " 7 (… " 1 (… " 0 (… " 6 (… " 3 (…
9 AESOC Injury,… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (…
10 AESOC Investi… <NA> 1 " 4 (… " 2 (… " 0 (… " 1 (… " 0 (… " 0 (… " 2 (… " 1 (…
# … with 83 more rows, 4 more variables: `ARM C.Severe` <chr>, `ARM D.Mild` <chr>,
# `ARM D.Moderate` <chr>, `ARM D.Severe` <chr>, and abbreviated variable names
# ¹`ARM A.Mild`, ²`ARM A.Moderate`, ³`ARM A.Severe`, ⁴`ARM B.Mild`, ⁵`ARM B.Moderate`,
# ⁶`ARM B.Severe`, ⁷`ARM C.Mild`, ⁸`ARM C.Moderate`
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
proc_sort: input data set 93 rows and 16 columns
by: CAT VARORD CAT2
keep: VAR CAT CAT2 VARORD ARM A.Mild ARM A.Moderate ARM A.Severe ARM B.Mild ARM B.Moderate ARM B.Severe ARM C.Mild ARM C.Moderate ARM C.Severe ARM D.Mild ARM D.Moderate ARM D.Severe
order: a a a
nodupkey: FALSE
output data set 93 rows and 16 columns
# A tibble: 93 × 16
VAR CAT CAT2 VARORD ARM A…¹ ARM A…² ARM A…³ ARM B…⁴ ARM B…⁵ ARM B…⁶ ARM C…⁷ ARM C…⁸
<chr> <chr> <chr> <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 AESOC Blood… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (…
2 AEDECOD Blood… Neut… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (…
3 AESOC Cardi… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
4 AEDECOD Cardi… Palp… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
5 AEDECOD Cardi… Sinu… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
6 AESOC Conge… <NA> 1 " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (… " 0 (…
7 AEDECOD Conge… Derm… 2 " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (… " 0 (…
8 AESOC Ear a… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (…
9 AEDECOD Ear a… Vert… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (…
10 AESOC Endoc… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (…
# … with 83 more rows, 4 more variables: `ARM C.Severe` <chr>, `ARM D.Mild` <chr>,
# `ARM D.Moderate` <chr>, `ARM D.Severe` <chr>, and abbreviated variable names
# ¹`ARM A.Mild`, ²`ARM A.Moderate`, ³`ARM A.Severe`, ⁴`ARM B.Mild`, ⁵`ARM B.Moderate`,
# ⁶`ARM B.Severe`, ⁷`ARM C.Mild`, ⁸`ARM C.Moderate`
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Get frequencies for all events
proc_freq: input data set 145 rows and 6 columns
tables: AESEV
by: ARM
view: TRUE
output: 1 datasets
# A tibble: 12 × 6
BY VAR CAT N CNT PCT
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ARM A AESEV MILD 37 27 73.0
2 ARM A AESEV MODERATE 37 10 27.0
3 ARM A AESEV SEVERE 37 0 0
4 ARM B AESEV MILD 32 24 75
5 ARM B AESEV MODERATE 32 6 18.8
6 ARM B AESEV SEVERE 32 2 6.25
7 ARM C AESEV MILD 36 29 80.6
8 ARM C AESEV MODERATE 36 7 19.4
9 ARM C AESEV SEVERE 36 0 0
10 ARM D AESEV MILD 40 31 77.5
11 ARM D AESEV MODERATE 40 9 22.5
12 ARM D AESEV SEVERE 40 0 0
Combine all events.
datastep: columns decreased from 6 to 4
# A tibble: 12 × 4
BY VAR CAT CNTPCT
<chr> <chr> <chr> <chr>
1 ARM A AESEV Mild " 27 ( 73.0)"
2 ARM A AESEV Moderate " 10 ( 27.0)"
3 ARM A AESEV Severe " 0 ( 0.0)"
4 ARM B AESEV Mild " 24 ( 75.0)"
5 ARM B AESEV Moderate " 6 ( 18.8)"
6 ARM B AESEV Severe " 2 ( 6.2)"
7 ARM C AESEV Mild " 29 ( 80.6)"
8 ARM C AESEV Moderate " 7 ( 19.4)"
9 ARM C AESEV Severe " 0 ( 0.0)"
10 ARM D AESEV Mild " 31 ( 77.5)"
11 ARM D AESEV Moderate " 9 ( 22.5)"
12 ARM D AESEV Severe " 0 ( 0.0)"
Prepare data for reporting
proc_transpose: input data set 12 rows and 4 columns
var: CNTPCT
id: BY CAT
copy: VAR
name: CAT
output dataset 1 rows and 14 columns
# A tibble: 1 × 14
VAR CAT ARM A…¹ ARM A…² ARM A…³ ARM B…⁴ ARM B…⁵ ARM B…⁶ ARM C…⁷ ARM C…⁸ ARM C…⁹ ARM D…˟
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 AESEV CNTPCT " 27 (… " 10 (… " 0 (… " 24 (… " 6 (… " 2 (… " 29 (… " 7 (… " 0 (… " 31 (…
# … with 2 more variables: `ARM D.Moderate` <chr>, `ARM D.Severe` <chr>, and abbreviated
# variable names ¹`ARM A.Mild`, ²`ARM A.Moderate`, ³`ARM A.Severe`, ⁴`ARM B.Mild`,
# ⁵`ARM B.Moderate`, ⁶`ARM B.Severe`, ⁷`ARM C.Mild`, ⁸`ARM C.Moderate`, ⁹`ARM C.Severe`,
# ˟`ARM D.Mild`
# ℹ Use `colnames()` to see all variable names
=========================================================================
Create final data frame
=========================================================================
datastep: columns increased from 14 to 16
# A tibble: 94 × 16
VAR CAT CAT2 VARORD ARM A…¹ ARM A…² ARM A…³ ARM B…⁴ ARM B…⁵ ARM B…⁶ ARM C…⁷ ARM C…⁸
<chr> <chr> <chr> <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 AESEV All A… <NA> NA " 27 (… " 10 (… " 0 (… " 24 (… " 6 (… " 2 (… " 29 (… " 7 (…
2 AESOC Blood… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (…
3 AEDECOD Blood… Neut… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 1 (…
4 AESOC Cardi… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
5 AEDECOD Cardi… Palp… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
6 AEDECOD Cardi… Sinu… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (… " 0 (…
7 AESOC Conge… <NA> 1 " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (… " 0 (…
8 AEDECOD Conge… Derm… 2 " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (… " 0 (…
9 AESOC Ear a… <NA> 1 " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (…
10 AEDECOD Ear a… Vert… 2 " 0 (… " 0 (… " 0 (… " 0 (… " 1 (… " 0 (… " 0 (… " 0 (…
# … with 84 more rows, 4 more variables: `ARM C.Severe` <chr>, `ARM D.Mild` <chr>,
# `ARM D.Moderate` <chr>, `ARM D.Severe` <chr>, and abbreviated variable names
# ¹`ARM A.Mild`, ²`ARM A.Moderate`, ³`ARM A.Severe`, ⁴`ARM B.Mild`, ⁵`ARM B.Moderate`,
# ⁶`ARM B.Severe`, ⁷`ARM C.Mild`, ⁸`ARM C.Moderate`
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
=========================================================================
Create and print report
=========================================================================
Create table object
Create report object
Print report
# A report specification: 16 pages
- file_path: 'C:\Users\dbosa\AppData\Local\Temp\RtmpKQddL7/example2.rtf'
- output_type: RTF
- units: inches
- orientation: landscape
- margins: top 0.5 bottom 0.5 left 1 right 1
- line size/count: 9/42
- page_header: left=Sponsor: Company right=Study: ABC
- title 1: 'Table 5.0'
- title 2: 'Adverse Events by Maximum Severity'
- footnote 1: 'Program: AE_Table.R'
- footnote 2: 'Note: Adverse events were coded using MedDRA Version 9.1'
- page_footer: left=2022-10-15 20:25:00 center=Confidential right=Page [pg] of [tpg]
- content:
# A table specification:
- data: tibble 'allfinal' 94 rows 16 cols
- show_cols: all
- use_attributes: all
- width: 9
- spanning_header: from='ARM A.Mild' to='ARM A.Severe' 'ARM A' level=1
- spanning_header: from='ARM B.Mild' to='ARM B.Severe' 'ARM B' level=1
- spanning_header: from='ARM C.Mild' to='ARM C.Severe' 'ARM C' level=1
- spanning_header: from='ARM D.Mild' to='ARM D.Severe' 'ARM D' level=1
- stub: CAT CAT2 'System Organ Class
Preferred Term' width=5 align='left'
- define: CAT
- define: CAT2
- define: ARM A.Mild 'Mild'
- define: ARM A.Moderate 'Moderate'
- define: ARM A.Severe 'Severe'
- define: ARM B.Mild 'Mild' page_wrap='TRUE'
- define: ARM B.Moderate 'Moderate'
- define: ARM B.Severe 'Severe'
- define: ARM C.Mild 'Mild' page_wrap='TRUE'
- define: ARM C.Moderate 'Moderate'
- define: ARM C.Severe 'Severe'
- define: ARM D.Mild 'Mild' page_wrap='TRUE'
- define: ARM D.Moderate 'Moderate'
- define: ARM D.Severe 'Severe'
- define: VAR visible='FALSE'
- define: VARORD visible='FALSE'
=========================================================================
Clean Up
=========================================================================
Remove library from workspace
lib_sync: synchronized data in library 'sdtm'
lib_unload: library 'sdtm' unloaded
Close log
=========================================================================
Log End Time: 2022-10-15 20:25:01
Log Elapsed Time: 0 00:00:06
=========================================================================
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.