## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  
#  #% Here is a macro comment
#  
#  # Here is a regular comment
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  
#  # Here is a regular comment
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Assignment using left arrow
#  #%let a <- 1
#  x <- `&a`
#  
#  #% Assignment using equals sign
#  #%let b = 2
#  y <- `&b`
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  x <- 1
#  
#  y <- 2
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Quoted Assignment
#  #%let a <- "One"
#  x <- `&a`
#  
#  #% Unquoted Assignment
#  #%let b <- Two
#  y <- "&b"
#  z <- '&b'
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  x <- "One"
#  
#  y <- "Two"
#  z <- 'Two'
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Unquoted Assignment
#  #%let c <- Three
#  
#  # Unquoted resolution
#  z <- `&c`
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Macro assignment
#  #%let b <- 2
#  x <- `&b`
#  
#  #% Clear assignment
#  #%let b
#  y <- `&b`
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Assignment before msource()
#  `&c` <- 3
#  
#  # Pre-process
#  msource("./temp1.R", "./temp1_mod.R")
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Print macro variable
#  z <- `&c`

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Print macro variable
#  z <- 3

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let x <- 1
#  #%let mvar1 <- Hello!
#  
#  print("&mvar&x")

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let x <- 1
#  #%let mvar <- Goodbye!
#  #%let mvar1 <- Hello!
#  
#  print("&mvar&x")
#  print("&&mvar&x")

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let a <- # Subset mtcars
#  #%let b <- mtcars
#  #%let c <- , mpg > 25
#  #%let d <- dat <- subset(&b&c)
#  #%let e <- (dat)
#  `&a`
#  `&d`
#  print&e

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Subset mtcars
#  dat <- subset(mtcars, mpg > 25)
#  print(dat)

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Assign variable name to macro
#  #%let x <- cyl
#  
#  # Leading macro replacement
#  `&x._mean` <- mean(mtcars[["&x"]])
#  
#  # Trailing macro replacement
#  mean_&x <- mean(mtcars[["&x"]])
#  
#  # Middle macro replacement
#  my_&x_mean <- mean(mtcars[["&x"]])
#  
#  # Intermediate macro replacement
#  #%let myvar <- &x_mean
#  `&myvar` <- mean(mtcars[["&x"]])
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  
#  # Leading macro replacement
#  `cyl_mean` <- mean(mtcars[["cyl"]])
#  
#  # Trailing macro replacement
#  mean_cyl <- mean(mtcars[["cyl"]])
#  
#  # Middle macro replacement
#  my_cyl_mean <- mean(mtcars[["cyl"]])
#  
#  # Intermediate macro replacement
#  cyl_mean <- mean(mtcars[["cyl"]])

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let dev_path <- ./dev/data
#  #%let prod_path <- ./prod/data
#  #%let env <- dev
#  
#  # Path to data
#  #%if ("&env" == "prod")
#  pth <- "&prod_path/dm.sas7bdat"
#  #%else
#  pth <- "&dev_path/dm.sas7bdat"
#  #%end

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  
#  # Path to data
#  pth <- "./dev/data/dm.sas7bdat"

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Data source SAS or RDS
#  #%let src <- SAS
#  
#  #% Select analysis variables
#  #%let anal_vars <- c("AGE", "AGEG", "SEX", "RACE", "PULSE", "TEMP")
#  
#  ###################
#  # Get data
#  ###################
#  #%if ("&src" == "SAS")
#    library(haven)
#  
#    # Get adsl dataset
#    adsl <- haven("./data/ADSL.sas7bdat")
#  
#    #%if (any(c("PULSE", "TEMP", "BP") %in% &anal_vars))
#    # Get advs dataset
#    advs <- haven("./data/ADVS.sas7bdat")
#    #%end
#  
#  #%else
#  
#    # Get adsl dataset
#    adsl <- readRDS("./data/ADSL.rds")
#  
#    #%if (any(c("PULSE", "TEMP", "BP") %in% &anal_vars))
#    # Get advs dataset
#    advs <- readRDS("./data/ADVS.rds")
#    #%end
#  
#  #%end

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  ######################
#  # Get data
#  ######################
#    library(haven)
#  
#    # Get adsl dataset
#    adsl <- haven("./data/ADSL.sas7bdat")
#  
#    # Get advs dataset
#    advs <- haven("./data/ADVS.sas7bdat")
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Create sample data
#  #%include "./templates/dat01.R"
#  
#  # Print sample data
#  print(dat)

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Create sample data
#  dm <- read.table(header = TRUE, text = '
#         SUBJID  ARM    SEX  RACE    AGE
#         "001"   "ARM A" "F"  "ASIAN" 19
#         "002"   "ARM B" "F"  "WHITE" 21
#         "003"   "ARM C" "F"  "WHITE" 23
#         "004"   "ARM D" "F"  "BLACK OR AFRICAN AMERICAN" 28
#         "005"   "ARM A" "M"  "WHITE" 37
#         "006"   "ARM B" "M"  "WHITE" 34
#         "007"   "ARM C" "M"  "ASIAN" 36
#         "008"   "ARM D" "M"  "WHITE" 30
#         "009"   "ARM A" "F"  "WHITE" 39
#         "010"   "ARM B" "F"  "WHITE" 31
#         "011"   "ARM C" "F"  "BLACK OR AFRICAN AMERICAN" 33
#         "012"   "ARM D" "F"  "WHITE" 38
#         "013"   "ARM A" "M"  "BLACK OR AFRICAN AMERICAN" 37
#         "014"   "ARM B" "M"  "WHITE" 34
#         "015"   "ARM C" "M"  "WHITE" 36
#         "016"   "ARM A" "M"  "WHITE" 40')
#  
#  # Print sample data
#  print(dm)

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Unevaluated assignment
#  #%let a <- 2 + 2
#  w <- `&a`
#  
#  #% Evaluated assignment
#  #%let b <- %sysfunc(2 + 2)
#  x <- `&b`
#  
#  #% Unevaluated replacement
#  #%let c <- &a + &b
#  y <- `&c`
#  
#  #% Evaluated replacement
#  #%let d <- %sysfunc(&a + &b)
#  z <- `&d`
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  w <- 2 + 2
#  x <- 4
#  y <- 2 + 2 + 4
#  z <- 8

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let a <- c(1.205, 4.683, 3.812, 6.281, 9.467)
#  
#  #%if (%sysfunc(mean(&a.)) > 5)
#  x <- "> 5"
#  #%else
#  x <- "<= 5"
#  #%end
#  print(x)
#  print("The mean of 'a' is %sysfunc(mean(&a.), %.2f)")

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  > msource()
#  # ---------
#  # x <- "> 5"
#  #  print(x)
#  #  print("The mean of 'a' is 5.09")
#  # ---------
#  # [1] "> 5"
#  # [1] "The mean of 'a' is 5.09"

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let a = 1
#  
#  #%if (%symexist(a))
#  
#    print("Macro variable 'a' exists!")
#    print("Here is the value: &a")
#  
#  #%else
#  
#    print("Macro variable 'a' does not exist!")
#  
#  #%end
#  
#  #%if (%symexist(b))
#  
#    print("Macro variable 'b' exists!")
#    print("Here is the value: &b")
#  
#  #%else
#  
#    print("Macro variable 'b' does not exist!")
#  
#  #%end
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  
#    print("Macro variable 'a' exists!")
#    print("Here is the value: 1")
#  
#    print("Macro variable 'b' does not exist!")

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Assign vector
#  v1 <- c("one", "two", "three")
#  
#  #% Get length of vector
#  #%let x <- %symput(length(v1))
#  
#  #% Get vector values
#  #%let y <- %symput(v1)
#  
#  # Use macro variables
#  a <- `&x`
#  b <- `&y`
#  
#  # Print to console
#  print(a)
#  print(b)
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #% Assign variables
#  #%let x <- 1
#  print("The value of %nrstr(&x) is &x")

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%do x = 1 %to 3
#  print("Hello #&x.")
#  #%end

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  [1] "Hello #1"
#  [1] "Hello #2"
#  [1] "Hello #3"

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  print("Hello #1")
#  print("Hello #2")
#  print("Hello #3")

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let vars <- c("mpg", "disp", "hp", "drat")
#  # Get data
#  dat <- mtcars
#  
#  #% Print mean for each variable
#  #%do v = 1 %to %sysfunc(length(&vars))
#  #%let var <- %sysfunc(&vars[&v])
#  
#  # Calculate mean for &var.
#  mn&v. <- sprintf("%.2f", mean(dat$`&var.`))
#  print(paste0("Mean of '&var.' is ", mn&v.))
#  
#  #%end
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  # Get data
#  dat <- mtcars
#  
#  # Calculate mean for mpg
#  mn1 <- sprintf("%.2f", mean(dat$mpg))
#  print(paste0("Mean of 'mpg' is ", mn1))
#  
#  # Calculate mean for disp
#  mn2 <- sprintf("%.2f", mean(dat$disp))
#  print(paste0("Mean of 'disp' is ", mn2))
#  
#  # Calculate mean for hp
#  mn3 <- sprintf("%.2f", mean(dat$hp))
#  print(paste0("Mean of 'hp' is ", mn3))
#  
#  # Calculate mean for drat
#  mn4 <- sprintf("%.2f", mean(dat$drat))
#  print(paste0("Mean of 'drat' is ", mn4))
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%macro printit(txt)
#  print("Print the text: &txt.")
#  #%mend
#  #%printit(Hello!)

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  library(dplyr)
#  
#  #%macro print_analysis(dat, byvar, var)
#  cat("Analysis for &var.\n")
#  `&dat` |>
#    select(`&byvar`, `&var`) |>
#    group_by(`&byvar`) |>
#    summarize(Mean = mean(`&var`, rm.na = TRUE),
#              SD = sd(`&var`),
#              Quantile = quantile(`&var`, probs = .25, rm.na = TRUE)) |>
#    as.data.frame() |> print()
#  cat("\n")
#  
#  #%mend
#  
#  #%let vars <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
#  #%do idx = 1 %to %sysfunc(length(&vars))
#  #%print_analysis(iris, Species, %sysfunc(&vars[&idx]))
#  #%end

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  library(dplyr)
#  
#  cat("Analysis for Sepal.Length\n")
#  iris |>
#    select(Species, Sepal.Length) |>
#    group_by(Species) |>
#    summarize(Mean = mean(Sepal.Length, rm.na = TRUE),
#              SD = sd(Sepal.Length),
#              Quantile = quantile(Sepal.Length, probs = .25, rm.na = TRUE)) |>
#    as.data.frame() |> print()
#  cat("\n")
#  
#  cat("Analysis for Sepal.Width\n")
#  iris |>
#    select(Species, Sepal.Width) |>
#    group_by(Species) |>
#    summarize(Mean = mean(Sepal.Width, rm.na = TRUE),
#              SD = sd(Sepal.Width),
#              Quantile = quantile(Sepal.Width, probs = .25, rm.na = TRUE)) |>
#    as.data.frame() |> print()
#  cat("\n")
#  
#  cat("Analysis for Petal.Length\n")
#  iris |>
#    select(Species, Petal.Length) |>
#    group_by(Species) |>
#    summarize(Mean = mean(Petal.Length, rm.na = TRUE),
#              SD = sd(Petal.Length),
#              Quantile = quantile(Petal.Length, probs = .25, rm.na = TRUE)) |>
#    as.data.frame() |> print()
#  cat("\n")
#  
#  cat("Analysis for Petal.Width\n")
#  iris |>
#    select(Species, Petal.Width) |>
#    group_by(Species) |>
#    summarize(Mean = mean(Petal.Width, rm.na = TRUE),
#              SD = sd(Petal.Width),
#              Quantile = quantile(Petal.Width, probs = .25, rm.na = TRUE)) |>
#    as.data.frame() |> print()
#  cat("\n")
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  #%let trt_grps <- c("ARM A" = "Placebo",
#  #%>                 "ARM B" = "Drug 10mg",
#  #%>                 "ARM C" = "Drug 20mg",
#  #%>                 "ARM D" = "Competitor")
#  
#  a <- `&trt_grps`
#  print(a)
#  

## ----eval=FALSE, echo=TRUE----------------------------------------------------
#  a <- c("ARM A" = "Placebo",
#                   "ARM B" = "Drug 10mg",
#                   "ARM C" = "Drug 20mg",
#                   "ARM D" = "Competitor")
#  print(a)
#  

