--- title: "Applying a Variable Date Cut" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Applying a Variable Date Cut} %\VignetteEngine{knitr::rmarkdown} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` # Introduction This article describes how to apply a data cut, when the date to apply is not the more common singular date, but a different date per patient. An example would be to cut all patients data at their week 24 visit date. The below is an example how this can be done utilizing `datacutr`. # Programming Flow * [Read in Data](#readdata) * [Create DCUT Dataset](#dcut) * [Postprocess DCUT](#postprocess) ## Read in Data {#readdata} To start, all SDTM data needs to be stored in a list. ```{r, message=FALSE, warning=FALSE} library(datacutr) library(admiraldev) library(dplyr) library(lubridate) library(stringr) library(purrr) library(rlang) source_data <- list( ds = datacutr_ds, dm = datacutr_dm, ae = datacutr_ae, sc = datacutr_sc, lb = datacutr_lb, fa = datacutr_fa, ts = datacutr_ts ) ``` ## Create DCUT Dataset {#dcut} The next step is to create the `DCUT` dataset containing the description, and a fixed date that ensures all data necessary from `ds` is included into `DCUT`. An example would be today's date. ```{r, message=FALSE, warning=FALSE} dcut <- create_dcut( dataset_ds = source_data$ds, ds_date_var = DSSTDTC, filter = DSDECOD == "RANDOMIZATION", cut_date = as.character(lubridate::today()), cut_description = "Week 24 Cut" ) ``` ```{r, eval=TRUE, echo=FALSE} dataset_vignette( dcut, display_vars = exprs(USUBJID, DCUTDTC, DCUTDTM, DCUTDESC) ) ``` ## Postprocess DCUT {#postprocess} The next step is to update `DCUT` with the required date per patient required for the variable cut. An example is below using the trial visits as source. If the required event has not been observed, keeping `DCUT.DCUTDTC` as the future/today date ensures all data is kept within the cut for that patient. ```{r, message=FALSE, warning=FALSE} sv <- tibble::tribble( ~USUBJID, ~VISIT, ~SVSTDTC, "AB12345-001", "WEEK24", "2022-06-01", "AB12345-002", "WEEK24", "2022-06-30", "AB12345-003", "WEEK24", "2022-07-01", "AB12345-004", "WEEK24", "2022-05-04", ) dcut <- dcut %>% left_join(sv %>% filter(VISIT == "WEEK24") %>% select(USUBJID, SVSTDTC)) %>% mutate(DCUTDTC = as.character(ifelse(!is.na(SVSTDTC), SVSTDTC, as.character(DCUTDTC)))) %>% impute_dcutdtc(dsin = ., varin = DCUTDTC, varout = DCUTDTM) ``` ```{r, eval=TRUE, echo=FALSE} dataset_vignette( dcut, display_vars = exprs(USUBJID, DCUTDTC, DCUTDTM, DCUTDESC) ) ``` Now that `DCUT` is prepared, the rest of the process follows the same as previously prescribed using either the wrapped function approach [Link](https://pharmaverse.github.io/datacutr/articles/wrapper.html#processcut) or modular approach [Link](https://pharmaverse.github.io/datacutr/articles/modular.html#preprocess)