# Applying a Variable Date Cut

# 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
- Create DCUT Dataset
- Postprocess DCUT

## Read in Data

To start, all SDTM data needs to be stored in a list.

    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

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.

    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"
    )

USUBJID | DCUTDTC | DCUTDTM | DCUTDESC
--- | --- | --- | ---
AB12345-001 | 2025-11-14 | 2025-11-14 23:59:59 | Week 24 Cut
AB12345-002 | 2025-11-14 | 2025-11-14 23:59:59 | Week 24 Cut
AB12345-003 | 2025-11-14 | 2025-11-14 23:59:59 | Week 24 Cut
AB12345-004 | 2025-11-14 | 2025-11-14 23:59:59 | Week 24 Cut
AB12345-005 | 2025-11-14 | 2025-11-14 23:59:59 | Week 24 Cut

## Postprocess DCUT

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.

    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)

USUBJID | DCUTDTC | DCUTDTM | DCUTDESC
--- | --- | --- | ---
AB12345-001 | 2022-06-01 | 2022-06-01 23:59:59 | Week 24 Cut
AB12345-002 | 2022-06-30 | 2022-06-30 23:59:59 | Week 24 Cut
AB12345-003 | 2022-07-01 | 2022-07-01 23:59:59 | Week 24 Cut
AB12345-004 | 2022-05-04 | 2022-05-04 23:59:59 | Week 24 Cut
AB12345-005 | 2025-11-14 | 2025-11-14 23:59:59 | Week 24 Cut

Now that `DCUT` is prepared, the rest of the process follows the same as previously prescribed using either the wrapped function approach Link or modular approach Link