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.
This example produces a subject disposition table. The report features extensive data preparation using the procs package. The example also shows how to create a stub column with summary rows.
library(sassy)
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, "example10.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("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, "example10.pdf")
rpt <- create_report(pth, output_type = "PDF", font = "Arial") |>
set_margins(top = 1, bottom = 1) |>
add_content(tbl)
write_report(rpt)
# Clean Up ----------------------------------------------------------------
# Close log
log_close()
# Uncomment to view files
# file.show(pth)
# file.show(lf)
Here is the output report:
Here is the log:
=========================================================================
Log Path: C:/Users/dbosa/AppData/Local/Temp/RtmpEBPgPu/log/example10.log
Program Path: C:/packages/Testing/procs/ProcsDisposition.R
Working Directory: C:/packages/Testing/procs
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-05 22:06:05.090672
=========================================================================
=========================================================================
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
1 AE csv 150 27 88.5 Kb
2 DM csv 87 24 45.5 Kb
3 DS csv 174 9 34.1 Kb
4 EX csv 84 11 26.4 Kb
5 IE csv 2 14 13.4 Kb
6 SV csv 685 10 70.3 Kb
7 VS csv 3358 17 467.4 Kb
LastModified
1 2023-08-07 17:51:40
2 2023-08-07 17:51:40
3 2023-08-07 17:51:40
4 2023-08-07 17:51:40
5 2023-08-07 17:51:40
6 2023-08-07 17:51:40
7 2023-08-07 17:51:40
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 … COMPLE… DISP…
2 ABC-01-050 SUBJECT COMPLETED ALL … COMPLE… DISP…
3 ABC-01-051 SUBJECT COMPLETED ALL … COMPLE… DISP…
4 ABC-01-052 SUBJECT COMPLETED ALL … COMPLE… DISP…
5 ABC-01-053 NON-COMPLIANCE WITH ST… NON-CO… DISP…
6 ABC-01-054 SUBJECT COMPLETED ALL … COMPLE… DISP…
7 ABC-01-055 SUBJECT COMPLETED ALL … COMPLE… DISP…
8 ABC-01-056 SUBJECT COMPLETED ALL … COMPLE… DISP…
9 ABC-01-113 SUBJECT COMPLETED ALL … COMPLE… DISP…
10 ABC-01-114 SUBJECT COMPLETED ALL … COMPLE… DISP…
# ℹ 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 COMPLETE… COMPLE… DISP…
2 ABC-01-050 ARM B SUBJECT COMPLETE… COMPLE… DISP…
3 ABC-01-051 ARM A SUBJECT COMPLETE… COMPLE… DISP…
4 ABC-01-052 ARM C SUBJECT COMPLETE… COMPLE… DISP…
5 ABC-01-053 ARM B NON-COMPLIANCE W… NON-CO… DISP…
6 ABC-01-054 ARM D SUBJECT COMPLETE… COMPLE… DISP…
7 ABC-01-055 ARM C SUBJECT COMPLETE… COMPLE… DISP…
8 ABC-01-056 ARM A SUBJECT COMPLETE… COMPLE… DISP…
9 ABC-01-113 ARM D SUBJECT COMPLETE… COMPLE… DISP…
10 ABC-01-114 ARM B SUBJECT COMPLETE… COMPLE… DISP…
# ℹ 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
1 obj U
2 obj U
Expression
1 x == "SUBJECT COMPLETED ALL VISITS AND PROTOCOL REQUIREMENTS"
2 x == "SUBJECT COMPLETED ALL VISITS BUT WITH MAJOR PROTOCOL VIOLATIONS"
Label
1 Subject Completed All Visits And Protocol Requirements
2 Subject Completed All Visits But With Major Protocol Violations
Order
1 NA
2 NA
# A user-defined format: 1 conditions
Name Type Expression
1 obj U x == "NON-COMPLIANCE WITH STUDY DRUG"
Label Order
1 Non-Compliance With Study Drug NA
# A user-defined format: 3 conditions
Name Type Expression
1 obj U x == "LACK OF EFFICACY"
2 obj U str_detect(x, "LOST")
3 obj U TRUE
Label Order
1 Lack Of Efficacy NA
2 Lost To Follow Up NA
3 Lack Of Efficacy NA
# A user-defined format: 3 conditions
Name Type Expression
1 obj U x == "COMPLETED"
2 obj U x == "NONCOMPLIANCE"
3 obj U x == "OTHER"
Label Order
1 Subjects who Completed Study NA
2 Subjects terminated due to non-compliance NA
3 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 … 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 … 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 … 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 … 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 CNTP… 19 ( 9… 17 ( 8… 16 ( 7… 20 ( 8…
2 NON-COMPLI… CNTP… 0 ( 0… 1 ( 4… 0 ( 0… 0 ( 0…
3 OTHER CNTP… 1 ( 5… 3 ( 14… 5 ( 23… 3 ( 13…
datastep: columns increased from 6 to 7
# A tibble: 3 × 7
group cat catseq `ARM A` `ARM B` `ARM C`
<chr> <lgl> <dbl> <chr> <chr> <chr>
1 COMPLETED NA 1 19 ( 9… 17 ( 8… 16 ( 7…
2 NONCOMPLIAN… NA 1 0 ( 0… 1 ( 4… 0 ( 0…
3 OTHER NA 1 1 ( 5… 3 ( 14… 5 ( 23…
# ℹ 1 more variable: `ARM D` <chr>
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 SUBJEC… COMPLE… DISP… Subject …
2 ABC-01-050 ARM B SUBJEC… COMPLE… DISP… Subject …
3 ABC-01-051 ARM A SUBJEC… COMPLE… DISP… Subject …
4 ABC-01-052 ARM C SUBJEC… COMPLE… DISP… Subject …
5 ABC-01-054 ARM D SUBJEC… COMPLE… DISP… Subject …
6 ABC-01-055 ARM C SUBJEC… COMPLE… DISP… Subject …
7 ABC-01-056 ARM A SUBJEC… COMPLE… DISP… Subject …
8 ABC-01-113 ARM D SUBJEC… COMPLE… DISP… Subject …
9 ABC-01-114 ARM B SUBJEC… COMPLE… DISP… Subject …
10 ABC-02-033 ARM C SUBJEC… COMPLE… DISP… Subject …
# ℹ 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 DSDEC… TERM… COMP… Subj… 19 19 100
2 ARM A DSDEC… TERM… COMP… Subj… 19 0 0
3 ARM B DSDEC… TERM… COMP… Subj… 17 16 94.1
4 ARM B DSDEC… TERM… COMP… Subj… 17 1 5.88
5 ARM C DSDEC… TERM… COMP… Subj… 16 16 100
6 ARM C DSDEC… TERM… COMP… Subj… 16 0 0
7 ARM D DSDEC… TERM… COMP… Subj… 20 20 100
8 ARM D DSDEC… TERM… COMP… Subj… 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 Vis… 19 ( …
2 ARM A COMPLETED Subject Completed All Vis… 0 ( …
3 ARM B COMPLETED Subject Completed All Vis… 16 ( …
4 ARM B COMPLETED Subject Completed All Vis… 1 ( …
5 ARM C COMPLETED Subject Completed All Vis… 16 ( …
6 ARM C COMPLETED Subject Completed All Vis… 0 ( …
7 ARM D COMPLETED Subject Completed All Vis… 20 ( …
8 ARM D COMPLETED Subject Completed All Vis… 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 COMP… Subj… CNTP… 19 ( 9… 16 ( 7… 16 ( 7… 20 ( 8…
2 COMP… Subj… CNTP… 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`
<chr> <chr> <dbl> <chr> <chr> <chr>
1 COMPLETED Subject… 2 19 ( 9… 16 ( 7… 16 ( 7…
2 COMPLETED Subject… 2 0 ( 0… 1 ( 4… 0 ( 0…
# ℹ 1 more variable: `ARM D` <chr>
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-COM… NON-CO… DISP… Non-Comp…
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 TERM… NON-… Non-… 0 0 NaN
2 ARM B DSDECOD TERM… NON-… Non-… 1 1 100
3 ARM C DSDECOD TERM… NON-… Non-… 0 0 NaN
4 ARM D DSDECOD TERM… NON-… Non-… 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-… 0 ( …
2 ARM B NON-COMPLIANCE WITH STUDY DRUG Non-… 1 ( …
3 ARM C NON-COMPLIANCE WITH STUDY DRUG Non-… 0 ( …
4 ARM D NON-COMPLIANCE WITH STUDY DRUG Non-… 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-… Non-… CNTP… 0 ( 0… 1 ( 4… 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`
<chr> <chr> <dbl> <chr> <chr> <chr>
1 NONCOMPLIAN… Non-… 2 0 ( 0… 1 ( 4… 0 ( 0…
# ℹ 1 more variable: `ARM D` <chr>
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 O… OTHER DISP… Lost To …
2 ABC-03-008 ARM D WORSEN… OTHER DISP… Lack Of …
3 ABC-04-074 ARM C LACK O… OTHER DISP… Lack Of …
4 ABC-04-128 ARM C LOST T… OTHER DISP… Lost To …
5 ABC-06-069 ARM A PSORIA… OTHER DISP… Lack Of …
6 ABC-06-161 ARM C NON R… OTHER DISP… Lack Of …
7 ABC-08-103 ARM B LOST T… OTHER DISP… Lost To …
8 ABC-08-105 ARM C MOTHER… OTHER DISP… Lack Of …
9 ABC-08-107 ARM D PATIEN… OTHER DISP… Lack Of …
10 ABC-08-108 ARM B LOST T… OTHER DISP… Lost To …
11 ABC-09-021 ARM B LOST T… OTHER DISP… Lost To …
12 ABC-09-022 ARM D LOST T… 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 TERM… OTHER Lack… 1 1 100
2 ARM A DSDECOD TERM… OTHER Lost… 1 0 0
3 ARM B DSDECOD TERM… OTHER Lack… 3 0 0
4 ARM B DSDECOD TERM… OTHER Lost… 3 3 100
5 ARM C DSDECOD TERM… OTHER Lack… 5 3 60
6 ARM C DSDECOD TERM… OTHER Lost… 5 2 40
7 ARM D DSDECOD TERM… OTHER Lack… 3 2 66.7
8 ARM D DSDECOD TERM… OTHER Lost… 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… CNTP… 1 ( 5… 0 ( 0… 3 ( 14… 2 ( 8…
2 OTHER Lost… CNTP… 0 ( 0… 3 ( 14… 2 ( 9… 1 ( 4…
datastep: columns started with 7 and ended with 7
# A tibble: 2 × 7
group cat catseq `ARM A` `ARM B` `ARM C`
<chr> <chr> <dbl> <chr> <chr> <chr>
1 OTHER Lack Of Eff… 2 1 ( 5… 0 ( 0… 3 ( 14…
2 OTHER Lost To Fol… 2 0 ( 0… 3 ( 14… 2 ( 9…
# ℹ 1 more variable: `ARM D` <chr>
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`
<chr> <chr> <dbl> <chr> <chr> <chr>
1 COMPLETED <NA> 1 19 ( 9… 17 ( 8… 16 ( 7…
2 NONCOMPLIAN… <NA> 1 0 ( 0… 1 ( 4… 0 ( 0…
3 OTHER <NA> 1 1 ( 5… 3 ( 14… 5 ( 23…
4 COMPLETED Subj… 2 19 ( 9… 16 ( 7… 16 ( 7…
5 COMPLETED Subj… 2 0 ( 0… 1 ( 4… 0 ( 0…
6 NONCOMPLIAN… Non-… 2 0 ( 0… 1 ( 4… 0 ( 0…
7 OTHER Lack… 2 1 ( 5… 0 ( 0… 3 ( 14…
8 OTHER Lost… 2 0 ( 0… 3 ( 14… 2 ( 9…
# ℹ 2 more variables: `ARM D` <chr>, lblind <lgl>
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`
<chr> <chr> <dbl> <chr> <chr> <chr>
1 COMPLETED <NA> 1 19 ( 9… 17 ( 8… 16 ( 7…
2 COMPLETED Subj… 2 19 ( 9… 16 ( 7… 16 ( 7…
3 COMPLETED Subj… 2 0 ( 0… 1 ( 4… 0 ( 0…
4 NONCOMPLIAN… <NA> 1 0 ( 0… 1 ( 4… 0 ( 0…
5 NONCOMPLIAN… Non-… 2 0 ( 0… 1 ( 4… 0 ( 0…
6 OTHER <NA> 1 1 ( 5… 3 ( 14… 5 ( 23…
7 OTHER Lack… 2 1 ( 5… 0 ( 0… 3 ( 14…
8 OTHER Lost… 2 0 ( 0… 3 ( 14… 2 ( 9…
# ℹ 2 more variables: `ARM D` <chr>, lblind <lgl>
=========================================================================
Create and print report
=========================================================================
# A report specification: 1 pages
- file_path: 'C:\Users\dbosa\AppData\Local\Temp\RtmpEBPgPu/example10.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'
=========================================================================
Log End Time: 2023-09-05 22:06:09.329367
Log Elapsed Time: 0 00:00:04
=========================================================================
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.