tests/reference_results/02_generate_sas_macro_calls_helpers.R

library(tidyverse)


## Defined here as it will be called by
## tests/reference_results/02_generate_sas_macro_calls_helpers.R
## and
## tests/testthat/test-09_cross_check_with_sas_macro.R.
generate_sas_macro_args <- function() {

    sas_common_string <- "
/** Set libname */
libname w './';

/* Load SAS macro */
%include './mediation.sas';

/* Load data */
proc import datafile = './data-pbc_cc.csv'
    out = pbc_cc
    dbms = csv
    replace;
run;
"

    sas_macro_call_string_fmt <- "
%%mediation(
    data = pbc_cc,
    yvar = %s,
    avar = %s,
    mvar = %s,
    cvar = %s,
    a0 = %s,
    a1 = %s,
    m = %s,
    yreg = %s,
    mreg = %s,
    interaction = %s,
    casecontrol = %s,
    output = %s,
    c = %s,
    boot = ,
    cens = %s);
run;"

    crossing(mreg = c("linear",
                      "logistic"),
             yreg = c("linear",
                      "logistic",
                      "loglinear",
                      "poisson",
                      "negbin",
                      "survCox",
                      "survAFT_exp",
                      "survAFT_weibull"),
             interaction = c("false","true"),
             casecontrol = c("false","true"),
             ## empty cvar may not work with output = full
             ncvar = c(0,3)) %>%
        ## casecontrol is only relevant for binary yreg
        filter(casecontrol == "false" |
               (casecontrol == "true" & (yreg == "logistic" | yreg == "loglinear"))) %>%
        ## Choose appropriate variable names
        mutate(avar = "trt",
               ##
               mvar = case_when(mreg == "linear" ~ "bili",
                                mreg == "logistic" ~ "bili_bin"),
               ##
               yvar = case_when(yreg == "linear" ~ "alk_phos",
                                ##
                                yreg == "logistic" ~ "spiders",
                                yreg == "loglinear" ~ "spiders",
                                ##
                                yreg == "poisson" ~ "platelet",
                                yreg == "negbin" ~ "platelet",
                                ##
                                yreg == "survCox" ~ "time",
                                yreg == "survAFT_exp" ~ "time",
                                yreg == "survAFT_weibull" ~ "time"),
               ##
               eventvar = case_when(yreg == "survCox" ~ "status",
                                    yreg == "survAFT_exp" ~ "status",
                                    yreg == "survAFT_weibull" ~ "status",
                                    TRUE ~ ""),
               cens = "cens",
               ##
               cvar = case_when(ncvar == 0 ~ "",
                                ncvar == 3 ~ "age male stage"),
               ##
               output = case_when(ncvar == 0 ~ "full",
                                  ncvar == 3 ~ "full"),
               ##
               c_cond = case_when(ncvar == 0 ~ "",
                                  ncvar == 3 ~ "50 1 2"),
               ## Stress test with nonsensical tricky values
               a0 = "1.1",
               a1 = "2.3",
               m_cde = "1.4") %>%
        ## Contruct macro text
        mutate(macro_call = sprintf(sas_macro_call_string_fmt,
                                    yvar,
                                    avar,
                                    mvar,
                                    cvar,
                                    a0,
                                    a1,
                                    m_cde,
                                    yreg,
                                    mreg,
                                    interaction,
                                    casecontrol,
                                    output,
                                    c_cond,
                                    cens)) %>%
        ## Construct the entire sas script
        mutate(sas_script = paste0(sas_common_string,
                                   macro_call)) %>%
        ## File name
        mutate(filename = sprintf("sas-mreg_%s_yreg_%s_int_%s_caco_%s_ncvar%s.sas",
                                  ## All variables in crossing() should appear hear.
                                  mreg,
                                  yreg,
                                  str_sub(interaction, start = 1, end = 1),
                                  str_sub(casecontrol, start = 1, end = 1),
                                  ncvar))

}

Try the regmedint package in your browser

Any scripts or data that you put into this service are public.

regmedint documentation built on June 25, 2024, 1:16 a.m.