The following example is an disposition table. The report features extensive data preparation using the procs data manipulation functions. The example also shows how to create a stub column with summary statistics on all levels.
library(sassy)
library(procs)
library(stringr)
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, "example3.log"))
# Get data
dir <- system.file("extdata", package = "sassy")
# Load and Prepare Data ---------------------------------------------------
sep("Prepare Data")
put("Define data library")
libname(sdtm, dir, "csv")
put("Loads data into workspace")
lib_load(sdtm)
put("Prepare DM data")
datastep(sdtm.DM, keep = v(USUBJID, ARM),
where = expression(ARM != "SCREEN FAILURE"), {}) -> dm_mod
put("Prepare DS data")
datastep(sdtm.DS, keep = v(USUBJID, DSTERM, DSDECOD, DSCAT),
where = expression(DSCAT != "PROTOCOL MILESTONE"), {}) -> ds_mod
put("Join DM with DS to get ARMs on DS")
datastep(dm_mod, merge = ds_mod, merge_by = USUBJID, {}) -> dmds
put("Change ARM to factor to assist with sparse data")
dmds$ARM <- factor(dmds$ARM, levels = c("ARM A", "ARM B", "ARM C", "ARM D"))
put("Get ARM population counts")
proc_freq(dm_mod, tables = ARM, output = long,
options = v(nonobs, nopercent)) -> arm_pop
# Prepare formats ---------------------------------------------------------
# Completed Study
complete_fmt <- value(condition(x == "SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS",
str_to_title("SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS")),
condition(x == "SUBJECT COMPLETED ALL VISITS BUT WITH MAJOR PROTOCOL VIOLATIONS",
str_to_title("SUBJECT COMPLETED ALL VISITS BUT WITH MAJOR PROTOCOL VIOLATIONS")))
# Subject Non-compliance
noncomp_fmt <- value(condition(x == "NON-COMPLIANCE WITH STUDY DRUG",
str_to_title("NON-COMPLIANCE WITH STUDY DRUG")))
# Early Termination
term_fmt <- value(condition(x == "LACK OF EFFICACY",
str_to_title("LACK OF EFFICACY")),
condition(str_detect(x, "LOST"),
str_to_title("LOST TO FOLLOW UP")),
condition(TRUE, str_to_title("LACK OF EFFICACY")))
# Group labels
group_fmt <- value(condition(x == "COMPLETED", "Subjects who Completed Study"),
condition(x == "NONCOMPLIANCE", "Subjects terminated due to non-compliance"),
condition(x == "OTHER", "Subjects who terminated early"))
# Disposition Groups ------------------------------------------------------
put("Create vector of final dataframe columns")
cols <- v(group, cat, catseq, `ARM A`, `ARM B`, `ARM C`, `ARM D`) |> put()
put("Get group counts")
proc_freq(dmds, tables = DSDECOD, by = ARM) |>
datastep(keep = v(BY, CAT, CNTPCT), {
CNTPCT <- fmt_cnt_pct(CNT, arm_pop[[BY]])
}) |>
proc_transpose(var = CNTPCT, by = CAT, id = BY) |>
datastep(keep = cols,
{
group <- ifelse(CAT == "NON-COMPLIANCE WITH STUDY DRUG", "NONCOMPLIANCE", CAT)
cat = NA
catseq = 1
}) -> grps
# Disposition Subgroups ----------------------------------------------------
put("Pull out subjects who completed study.")
datastep(dmds, where = expression(DSDECOD == "COMPLETED"),
{
TERMDECOD <- fapply(DSTERM, complete_fmt)
}) |>
proc_freq(tables = v(DSDECOD * TERMDECOD), by = ARM) |>
datastep(keep = v(BY, CAT1, CAT2, CNTPCT),
{
CNTPCT <- fmt_cnt_pct(CNT, arm_pop[[BY]])
}) |>
proc_transpose(var = CNTPCT, by = v(CAT1, CAT2), id = BY) |>
datastep(keep = cols,
{
group = CAT1
cat = CAT2
catseq = 2
}) -> cmplt
put("Pull out subjects who were non-compliant")
datastep(dmds, where = expression(DSDECOD == "NON-COMPLIANCE WITH STUDY DRUG"),
{
TERMDECOD <- fapply(DSTERM, noncomp_fmt)
}) |>
proc_freq(tables = v(DSDECOD * TERMDECOD), by = ARM) |>
datastep(keep = v(BY, CAT1, CAT2, CNTPCT),
{
CNTPCT <- fmt_cnt_pct(CNT, arm_pop[[BY]])
}) |>
proc_transpose(var = CNTPCT, by = v(CAT1, CAT2), id = BY) |>
datastep(keep = cols,
{
group = "NONCOMPLIANCE"
cat = CAT2
catseq = 2
}) -> noncompl
put("Pull out subjects who terminated early")
datastep(dmds, where = expression(DSDECOD == "OTHER"),
{
TERMDECOD <- fapply(DSTERM, term_fmt)
}) |>
proc_freq(tables = v(DSDECOD * TERMDECOD), by = ARM) |>
datastep(keep = v(BY, CAT1, CAT2, CNTPCT),
{
CNTPCT <- fmt_cnt_pct(CNT, arm_pop[[BY]])
}) |>
proc_transpose(var = CNTPCT, by = v(CAT1, CAT2), id = BY) |>
datastep(keep = cols,
{
group = "OTHER"
cat = CAT2
catseq = 2
}) -> earlyterm
put("Combine blocks into final data frame")
datastep(grps, set = list(cmplt, noncompl, earlyterm),
{
lblind <- ifelse(is.na(cat), TRUE, FALSE)
}) |>
proc_sort(by = v(group, catseq, cat)) -> final
# Report ------------------------------------------------------------------
sep("Create and print report")
# Create Table
tbl <- create_table(final, first_row_blank = TRUE,
borders = "all", width = 8.5, header_bold = TRUE) |>
column_defaults(from = `ARM A`, to = `ARM D`,
align = "center", width = 1) |>
stub(vars = v(group, cat), "Completion Status",
style = cell_style(bold = TRUE, indicator = "lblind")) |>
define(group, blank_after = TRUE, dedupe = TRUE,
format = group_fmt) |>
define(cat, indent = .5) |>
define(catseq, visible = FALSE) |>
define(`ARM A`, label = "Placebo", n = arm_pop["ARM A"]) |>
define(`ARM B`, label = "Drug 50mg", n = arm_pop["ARM B"]) |>
define(`ARM C`, label = "Drug 100mg", n = arm_pop["ARM C"]) |>
define(`ARM D`, label = "Competitor", n = arm_pop["ARM D"]) |>
define(lblind, visible = FALSE) |>
titles("Table 5.2.3", "Subject Disposition by Category and Treatment Group",
"Safety Population", bold = TRUE, font_size = 11,
borders = "outside", blank_row = "none") |>
footnotes("Program: DS_Table.R",
"NOTE: Denominator based on number of non-missing responses.",
borders = "outside", blank_row = "none")
pth <- file.path(tmp, "example3.pdf")
rpt <- create_report(pth, output_type = "PDF", font = "Arial") |>
set_margins(top = 1, bottom = 1) |>
add_content(tbl)
write_report(rpt)
# Clean Up ----------------------------------------------------------------
# Unload library from workspace
lib_unload(sdtm)
# Close log
log_close()
# Uncomment to view files
# file.show(pth)
# file.show(lf)
Here is the output:
And here is the log:
=========================================================================
Log Path: C:/Users/dbosa/AppData/Local/Temp/Rtmp0IaQyN/log/example3.log
Program Path: C:/packages/Testing/procs/ProcsDisposition.R
Working Directory: C:/packages/Testing
User Name: dbosa
R Version: 4.3.1 (2023-06-16 ucrt)
Machine: SOCRATES x86-64
Operating System: Windows 10 x64 build 22621
Base Packages: stats graphics grDevices utils datasets methods base Other
Packages: tidylog_1.0.2 stringr_1.5.0 procs_1.0.3 reporter_1.4.1 libr_1.2.8
fmtr_1.5.9 logr_1.3.4 common_1.0.8 sassy_1.1.0
Log Start Time: 2023-09-04 15:26:52.219403
=========================================================================
=========================================================================
Prepare Data
=========================================================================
Define data library
# library 'sdtm': 7 items
- attributes: csv not loaded
- path: C:/Users/dbosa/AppData/Local/R/win-library/4.3/sassy/extdata
- items:
Name Extension Rows Cols Size LastModified
1 AE csv 150 27 88.5 Kb 2023-08-07 17:51:40
2 DM csv 87 24 45.5 Kb 2023-08-07 17:51:40
3 DS csv 174 9 34.1 Kb 2023-08-07 17:51:40
4 EX csv 84 11 26.4 Kb 2023-08-07 17:51:40
5 IE csv 2 14 13.4 Kb 2023-08-07 17:51:40
6 SV csv 685 10 70.3 Kb 2023-08-07 17:51:40
7 VS csv 3358 17 467.4 Kb 2023-08-07 17:51:40
Loads data into workspace
lib_load: library 'sdtm' loaded
Prepare DM data
datastep: columns decreased from 24 to 2
# A tibble: 85 × 2
USUBJID ARM
<chr> <chr>
1 ABC-01-049 ARM D
2 ABC-01-050 ARM B
3 ABC-01-051 ARM A
4 ABC-01-052 ARM C
5 ABC-01-053 ARM B
6 ABC-01-054 ARM D
7 ABC-01-055 ARM C
8 ABC-01-056 ARM A
9 ABC-01-113 ARM D
10 ABC-01-114 ARM B
# ℹ 75 more rows
# ℹ Use `print(n = ...)` to see more rows
Prepare DS data
datastep: columns decreased from 9 to 4
# A tibble: 87 × 4
USUBJID DSTERM DSDECOD DSCAT
<chr> <chr> <chr> <chr>
1 ABC-01-049 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
2 ABC-01-050 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
3 ABC-01-051 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
4 ABC-01-052 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
5 ABC-01-053 NON-COMPLIANCE WITH STUDY DRUG NON-COMPLIANCE WITH STUDY DRUG DISPOSITION E…
6 ABC-01-054 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
7 ABC-01-055 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
8 ABC-01-056 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
9 ABC-01-113 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
10 ABC-01-114 SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION E…
# ℹ 77 more rows
# ℹ Use `print(n = ...)` to see more rows
Join DM with DS to get ARMs on DS
datastep: columns increased from 2 to 5
# A tibble: 87 × 5
USUBJID ARM DSTERM DSDECOD DSCAT
<chr> <chr> <chr> <chr> <chr>
1 ABC-01-049 ARM D SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
2 ABC-01-050 ARM B SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
3 ABC-01-051 ARM A SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
4 ABC-01-052 ARM C SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
5 ABC-01-053 ARM B NON-COMPLIANCE WITH STUDY DRUG NON-COMPLIANCE WITH STUDY DRUG DISPOSI…
6 ABC-01-054 ARM D SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
7 ABC-01-055 ARM C SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
8 ABC-01-056 ARM A SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
9 ABC-01-113 ARM D SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
10 ABC-01-114 ARM B SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSI…
# ℹ 77 more rows
# ℹ Use `print(n = ...)` to see more rows
Change ARM to factor to assist with sparse data
Get ARM population counts
proc_freq: input data set 85 rows and 2 columns
tables: ARM
output: long
view: TRUE
output: 1 datasets
# A tibble: 1 × 6
VAR STAT `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 ARM CNT 20 21 21 23
# A user-defined format: 2 conditions
Name Type Expression
1 obj U x == "SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS"
2 obj U x == "SUBJECT COMPLETED ALL VISITS BUT WITH MAJOR PROTOCOL VIOLATIONS"
Label Order
1 Subject Completed All Visits And Protocol Requirements NA
2 Subject Completed All Visits But With Major Protocol Violations NA
# A user-defined format: 1 conditions
Name Type Expression Label Order
1 obj U x == "NON-COMPLIANCE WITH STUDY DRUG" Non-Compliance With Study Drug NA
# A user-defined format: 3 conditions
Name Type Expression Label Order
1 obj U x == "LACK OF EFFICACY" Lack Of Efficacy NA
2 obj U str_detect(x, "LOST") Lost To Follow Up NA
3 obj U TRUE Lack Of Efficacy NA
# A user-defined format: 3 conditions
Name Type Expression Label Order
1 obj U x == "COMPLETED" Subjects who Completed Study NA
2 obj U x == "NONCOMPLIANCE" Subjects terminated due to non-compliance NA
3 obj U x == "OTHER" Subjects who terminated early NA
Create vector of final dataframe columns
group
cat
catseq
ARM A
ARM B
ARM C
ARM D
Get group counts
proc_freq: input data set 87 rows and 5 columns
tables: DSDECOD
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 DSDECOD COMPLETED 20 19 95
2 ARM A DSDECOD NON-COMPLIANCE WITH STUDY DRUG 20 0 0
3 ARM A DSDECOD OTHER 20 1 5
4 ARM B DSDECOD COMPLETED 21 17 81.0
5 ARM B DSDECOD NON-COMPLIANCE WITH STUDY DRUG 21 1 4.76
6 ARM B DSDECOD OTHER 21 3 14.3
7 ARM C DSDECOD COMPLETED 21 16 76.2
8 ARM C DSDECOD NON-COMPLIANCE WITH STUDY DRUG 21 0 0
9 ARM C DSDECOD OTHER 21 5 23.8
10 ARM D DSDECOD COMPLETED 23 20 87.0
11 ARM D DSDECOD NON-COMPLIANCE WITH STUDY DRUG 23 0 0
12 ARM D DSDECOD OTHER 23 3 13.0
datastep: columns decreased from 6 to 3
# A tibble: 12 × 3
BY CAT CNTPCT
<chr> <chr> <chr>
1 ARM A COMPLETED 19 ( 95.0%)
2 ARM A NON-COMPLIANCE WITH STUDY DRUG 0 ( 0.0%)
3 ARM A OTHER 1 ( 5.0%)
4 ARM B COMPLETED 17 ( 81.0%)
5 ARM B NON-COMPLIANCE WITH STUDY DRUG 1 ( 4.8%)
6 ARM B OTHER 3 ( 14.3%)
7 ARM C COMPLETED 16 ( 76.2%)
8 ARM C NON-COMPLIANCE WITH STUDY DRUG 0 ( 0.0%)
9 ARM C OTHER 5 ( 23.8%)
10 ARM D COMPLETED 20 ( 87.0%)
11 ARM D NON-COMPLIANCE WITH STUDY DRUG 0 ( 0.0%)
12 ARM D OTHER 3 ( 13.0%)
proc_transpose: input data set 12 rows and 3 columns
by: CAT
var: CNTPCT
id: BY
name: NAME
output dataset 3 rows and 6 columns
# A tibble: 3 × 6
CAT NAME `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <chr> <chr> <chr> <chr>
1 COMPLETED CNTPCT 19 ( 95.0%) 17 ( 81.0%) 16 ( 76.2%) 20 ( 87.0%)
2 NON-COMPLIANCE WITH STUDY DRUG CNTPCT 0 ( 0.0%) 1 ( 4.8%) 0 ( 0.0%) 0 ( 0.0%)
3 OTHER CNTPCT 1 ( 5.0%) 3 ( 14.3%) 5 ( 23.8%) 3 ( 13.0%)
datastep: columns increased from 6 to 7
# A tibble: 3 × 7
group cat catseq `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <lgl> <dbl> <chr> <chr> <chr> <chr>
1 COMPLETED NA 1 19 ( 95.0%) 17 ( 81.0%) 16 ( 76.2%) 20 ( 87.0%)
2 NONCOMPLIANCE NA 1 0 ( 0.0%) 1 ( 4.8%) 0 ( 0.0%) 0 ( 0.0%)
3 OTHER NA 1 1 ( 5.0%) 3 ( 14.3%) 5 ( 23.8%) 3 ( 13.0%)
Pull out subjects who completed study.
datastep: columns increased from 5 to 6
# A tibble: 74 × 6
USUBJID ARM DSTERM DSDECOD DSCAT TERMDECOD
<chr> <fct> <chr> <chr> <chr> <chr>
1 ABC-01-049 ARM D SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
2 ABC-01-050 ARM B SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
3 ABC-01-051 ARM A SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
4 ABC-01-052 ARM C SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
5 ABC-01-054 ARM D SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
6 ABC-01-055 ARM C SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
7 ABC-01-056 ARM A SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
8 ABC-01-113 ARM D SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
9 ABC-01-114 ARM B SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
10 ABC-02-033 ARM C SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS COMPLETED DISPOSITION EVENT Subject Co…
# ℹ 64 more rows
# ℹ Use `print(n = ...)` to see more rows
proc_freq: input data set 74 rows and 6 columns
tables: DSDECOD * TERMDECOD
by: ARM
view: TRUE
output: 1 datasets
# A tibble: 8 × 8
BY VAR1 VAR2 CAT1 CAT2 N CNT PCT
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ARM A DSDECOD TERMDECOD COMPLETED Subject Completed All Visits And Protocol Requirements 19 19 100
2 ARM A DSDECOD TERMDECOD COMPLETED Subject Completed All Visits But With Major Protocol Viola… 19 0 0
3 ARM B DSDECOD TERMDECOD COMPLETED Subject Completed All Visits And Protocol Requirements 17 16 94.1
4 ARM B DSDECOD TERMDECOD COMPLETED Subject Completed All Visits But With Major Protocol Viola… 17 1 5.88
5 ARM C DSDECOD TERMDECOD COMPLETED Subject Completed All Visits And Protocol Requirements 16 16 100
6 ARM C DSDECOD TERMDECOD COMPLETED Subject Completed All Visits But With Major Protocol Viola… 16 0 0
7 ARM D DSDECOD TERMDECOD COMPLETED Subject Completed All Visits And Protocol Requirements 20 20 100
8 ARM D DSDECOD TERMDECOD COMPLETED Subject Completed All Visits But With Major Protocol Viola… 20 0 0
datastep: columns decreased from 8 to 4
# A tibble: 8 × 4
BY CAT1 CAT2 CNTPCT
<chr> <chr> <chr> <chr>
1 ARM A COMPLETED Subject Completed All Visits And Protocol Requirements 19 ( 95.0%)
2 ARM A COMPLETED Subject Completed All Visits But With Major Protocol Violations 0 ( 0.0%)
3 ARM B COMPLETED Subject Completed All Visits And Protocol Requirements 16 ( 76.2%)
4 ARM B COMPLETED Subject Completed All Visits But With Major Protocol Violations 1 ( 4.8%)
5 ARM C COMPLETED Subject Completed All Visits And Protocol Requirements 16 ( 76.2%)
6 ARM C COMPLETED Subject Completed All Visits But With Major Protocol Violations 0 ( 0.0%)
7 ARM D COMPLETED Subject Completed All Visits And Protocol Requirements 20 ( 87.0%)
8 ARM D COMPLETED Subject Completed All Visits But With Major Protocol Violations 0 ( 0.0%)
proc_transpose: input data set 8 rows and 4 columns
by: CAT1 CAT2
var: CNTPCT
id: BY
name: NAME
output dataset 2 rows and 7 columns
# A tibble: 2 × 7
CAT1 CAT2 NAME `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 COMPLETED Subject Completed All Visits And Protocol Requirements CNTPCT 19 ( 9… 16 ( 7… 16 ( 7… 20 ( 8…
2 COMPLETED Subject Completed All Visits But With Major Protocol Violations CNTPCT 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0…
datastep: columns started with 7 and ended with 7
# A tibble: 2 × 7
group cat catseq `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <dbl> <chr> <chr> <chr> <chr>
1 COMPLETED Subject Completed All Visits And Protocol Requirements 2 19 ( 9… 16 ( 7… 16 ( 7… 20 ( 8…
2 COMPLETED Subject Completed All Visits But With Major Protocol Violations 2 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0…
Pull out subjects who were non-compliant
datastep: columns increased from 5 to 6
# A tibble: 1 × 6
USUBJID ARM DSTERM DSDECOD DSCAT TERMDECOD
<chr> <fct> <chr> <chr> <chr> <chr>
1 ABC-01-053 ARM B NON-COMPLIANCE WITH STUDY DRUG NON-COMPLIANCE WITH STUDY DRUG DISPOSITION EVENT Non-Compliance…
proc_freq: input data set 1 rows and 6 columns
tables: DSDECOD * TERMDECOD
by: ARM
view: TRUE
output: 1 datasets
# A tibble: 4 × 8
BY VAR1 VAR2 CAT1 CAT2 N CNT PCT
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ARM A DSDECOD TERMDECOD NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 0 0 NaN
2 ARM B DSDECOD TERMDECOD NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 1 1 100
3 ARM C DSDECOD TERMDECOD NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 0 0 NaN
4 ARM D DSDECOD TERMDECOD NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 0 0 NaN
datastep: columns decreased from 8 to 4
# A tibble: 4 × 4
BY CAT1 CAT2 CNTPCT
<chr> <chr> <chr> <chr>
1 ARM A NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 0 ( 0.0%)
2 ARM B NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 1 ( 4.8%)
3 ARM C NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 0 ( 0.0%)
4 ARM D NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug 0 ( 0.0%)
proc_transpose: input data set 4 rows and 4 columns
by: CAT1 CAT2
var: CNTPCT
id: BY
name: NAME
output dataset 1 rows and 7 columns
# A tibble: 1 × 7
CAT1 CAT2 NAME `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 NON-COMPLIANCE WITH STUDY DRUG Non-Compliance With Study Drug CNTPCT 0 ( 0.0%) 1 ( 4.8%) 0 ( 0.0%) 0 ( 0.0%)
datastep: columns started with 7 and ended with 7
# A tibble: 1 × 7
group cat catseq `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <dbl> <chr> <chr> <chr> <chr>
1 NONCOMPLIANCE Non-Compliance With Study Drug 2 0 ( 0.0%) 1 ( 4.8%) 0 ( 0.0%) 0 ( 0.0%)
Pull out subjects who terminated early
datastep: columns increased from 5 to 6
# A tibble: 12 × 6
USUBJID ARM DSTERM DSDECOD DSCAT TERMDECOD
<chr> <fct> <chr> <chr> <chr> <chr>
1 ABC-03-005 ARM C LOST OF FOLLOW UP. CERTIFIED LETTER ASKING ABOUT DRUG RETURN SENT; P… OTHER DISP… Lost To …
2 ABC-03-008 ARM D WORSENING OF PSORIASIS AND LACK OF EFFICACY OTHER DISP… Lack Of …
3 ABC-04-074 ARM C LACK OF EFFICACY OTHER DISP… Lack Of …
4 ABC-04-128 ARM C LOST TO FOLLOW UP OTHER DISP… Lost To …
5 ABC-06-069 ARM A PSORIASIS FLARING/NOT RESPONDING TO DRUG OTHER DISP… Lack Of …
6 ABC-06-161 ARM C NON RESPONSE TO DRUG - PRURITIS INTOLERABLE OTHER DISP… Lack Of …
7 ABC-08-103 ARM B LOST TO FOLLOW UP OTHER DISP… Lost To …
8 ABC-08-105 ARM C MOTHER TERMINALLY ILL OTHER DISP… Lack Of …
9 ABC-08-107 ARM D PATIENT DISSATISFIED OTHER DISP… Lack Of …
10 ABC-08-108 ARM B LOST TO FOLLOW UP OTHER DISP… Lost To …
11 ABC-09-021 ARM B LOST TO FOLLOW UP OTHER DISP… Lost To …
12 ABC-09-022 ARM D LOST TO FOLLOW-UP OTHER DISP… Lost To …
proc_freq: input data set 12 rows and 6 columns
tables: DSDECOD * TERMDECOD
by: ARM
view: TRUE
output: 1 datasets
# A tibble: 8 × 8
BY VAR1 VAR2 CAT1 CAT2 N CNT PCT
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ARM A DSDECOD TERMDECOD OTHER Lack Of Efficacy 1 1 100
2 ARM A DSDECOD TERMDECOD OTHER Lost To Follow Up 1 0 0
3 ARM B DSDECOD TERMDECOD OTHER Lack Of Efficacy 3 0 0
4 ARM B DSDECOD TERMDECOD OTHER Lost To Follow Up 3 3 100
5 ARM C DSDECOD TERMDECOD OTHER Lack Of Efficacy 5 3 60
6 ARM C DSDECOD TERMDECOD OTHER Lost To Follow Up 5 2 40
7 ARM D DSDECOD TERMDECOD OTHER Lack Of Efficacy 3 2 66.7
8 ARM D DSDECOD TERMDECOD OTHER Lost To Follow Up 3 1 33.3
datastep: columns decreased from 8 to 4
# A tibble: 8 × 4
BY CAT1 CAT2 CNTPCT
<chr> <chr> <chr> <chr>
1 ARM A OTHER Lack Of Efficacy 1 ( 5.0%)
2 ARM A OTHER Lost To Follow Up 0 ( 0.0%)
3 ARM B OTHER Lack Of Efficacy 0 ( 0.0%)
4 ARM B OTHER Lost To Follow Up 3 ( 14.3%)
5 ARM C OTHER Lack Of Efficacy 3 ( 14.3%)
6 ARM C OTHER Lost To Follow Up 2 ( 9.5%)
7 ARM D OTHER Lack Of Efficacy 2 ( 8.7%)
8 ARM D OTHER Lost To Follow Up 1 ( 4.3%)
proc_transpose: input data set 8 rows and 4 columns
by: CAT1 CAT2
var: CNTPCT
id: BY
name: NAME
output dataset 2 rows and 7 columns
# A tibble: 2 × 7
CAT1 CAT2 NAME `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 OTHER Lack Of Efficacy CNTPCT 1 ( 5.0%) 0 ( 0.0%) 3 ( 14.3%) 2 ( 8.7%)
2 OTHER Lost To Follow Up CNTPCT 0 ( 0.0%) 3 ( 14.3%) 2 ( 9.5%) 1 ( 4.3%)
datastep: columns started with 7 and ended with 7
# A tibble: 2 × 7
group cat catseq `ARM A` `ARM B` `ARM C` `ARM D`
<chr> <chr> <dbl> <chr> <chr> <chr> <chr>
1 OTHER Lack Of Efficacy 2 1 ( 5.0%) 0 ( 0.0%) 3 ( 14.3%) 2 ( 8.7%)
2 OTHER Lost To Follow Up 2 0 ( 0.0%) 3 ( 14.3%) 2 ( 9.5%) 1 ( 4.3%)
Combine blocks into final data frame
datastep: columns increased from 7 to 8
# A tibble: 8 × 8
group cat catseq `ARM A` `ARM B` `ARM C` `ARM D` lblind
<chr> <chr> <dbl> <chr> <chr> <chr> <chr> <lgl>
1 COMPLETED <NA> 1 19 ( 9… 17 ( 8… 16 ( 7… 20 ( 8… TRUE
2 NONCOMPLIANCE <NA> 1 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0… TRUE
3 OTHER <NA> 1 1 ( 5… 3 ( 14… 5 ( 23… 3 ( 13… TRUE
4 COMPLETED Subject Completed All Visits And Protocol Requireme… 2 19 ( 9… 16 ( 7… 16 ( 7… 20 ( 8… FALSE
5 COMPLETED Subject Completed All Visits But With Major Protoco… 2 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0… FALSE
6 NONCOMPLIANCE Non-Compliance With Study Drug 2 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0… FALSE
7 OTHER Lack Of Efficacy 2 1 ( 5… 0 ( 0… 3 ( 14… 2 ( 8… FALSE
8 OTHER Lost To Follow Up 2 0 ( 0… 3 ( 14… 2 ( 9… 1 ( 4… FALSE
proc_sort: input data set 8 rows and 8 columns
by: group catseq cat
keep: group cat catseq ARM A ARM B ARM C ARM D lblind
order: a a a
output data set 8 rows and 8 columns
# A tibble: 8 × 8
group cat catseq `ARM A` `ARM B` `ARM C` `ARM D` lblind
<chr> <chr> <dbl> <chr> <chr> <chr> <chr> <lgl>
1 COMPLETED <NA> 1 19 ( 9… 17 ( 8… 16 ( 7… 20 ( 8… TRUE
2 COMPLETED Subject Completed All Visits And Protocol Requireme… 2 19 ( 9… 16 ( 7… 16 ( 7… 20 ( 8… FALSE
3 COMPLETED Subject Completed All Visits But With Major Protoco… 2 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0… FALSE
4 NONCOMPLIANCE <NA> 1 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0… TRUE
5 NONCOMPLIANCE Non-Compliance With Study Drug 2 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0… FALSE
6 OTHER <NA> 1 1 ( 5… 3 ( 14… 5 ( 23… 3 ( 13… TRUE
7 OTHER Lack Of Efficacy 2 1 ( 5… 0 ( 0… 3 ( 14… 2 ( 8… FALSE
8 OTHER Lost To Follow Up 2 0 ( 0… 3 ( 14… 2 ( 9… 1 ( 4… FALSE
=========================================================================
Create and print report
=========================================================================
# A report specification: 1 pages
- file_path: 'C:\Users\dbosa\AppData\Local\Temp\Rtmp0IaQyN/example3.pdf'
- output_type: PDF
- units: inches
- orientation: landscape
- margins: top 1 bottom 1 left 1 right 1
- line size/count: 9/41
- content:
# A table specification:
- data: tibble 'final' 8 rows 8 cols
- show_cols: all
- use_attributes: all
- width: 8.5
- title 1: 'Table 5.2.3'
- title 2: 'Subject Disposition by Category and Treatment Group'
- title 3: 'Safety Population'
- footnote 1: 'Program: DS_Table.R'
- footnote 2: 'NOTE: Denominator based on number of non-missing responses.'
- stub: group cat 'Completion Status' align='left'
- define: group dedupe='TRUE'
- define: cat
- define: catseq visible='FALSE'
- define: ARM A 'Placebo'
- define: ARM B 'Drug 50mg'
- define: ARM C 'Drug 100mg'
- define: ARM D 'Competitor'
- define: lblind visible='FALSE'
lib_sync: synchronized data in library 'sdtm'
lib_unload: library 'sdtm' unloaded
=========================================================================
Log End Time: 2023-09-04 15:26:56.527739
Log Elapsed Time: 0 00:00:04
=========================================================================