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.

Example 3: Disposition

Program

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)

Output

Here is the output:

Log

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
=========================================================================

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.