From e15a08cda61e6694dac096c617e21b33f2b89798 Mon Sep 17 00:00:00 2001 From: Stacey Fisher Date: Fri, 19 Apr 2019 15:04:10 -0400 Subject: [PATCH 001/123] Example of using centering, rcs and Fine and Grey modelling using pbc data --- .RData | Bin 114262 -> 89727 bytes R/rcs2.R | 129 ++++++++++++++++++++++ vignettes/fine_and_grey_model_example.Rmd | 102 +++++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 R/rcs2.R create mode 100644 vignettes/fine_and_grey_model_example.Rmd diff --git a/.RData b/.RData index 3148f2deb850ea04a9d879c32772407588dc76d4..141777782530f565a7c0be22a8b6d28fe63d856c 100644 GIT binary patch literal 89727 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 diff --git a/R/rcs2.R b/R/rcs2.R new file mode 100644 index 00000000..84825f4a --- /dev/null +++ b/R/rcs2.R @@ -0,0 +1,129 @@ + +#Modified RCS function +#Modified to allow for naming of the new rcs variables +#Original rcs() function in github repo: harrelfe/rms/rms.trans.s + +#Requires Hmisc and rms package +library(Hmisc) +library(rms) + +des.args <- function(x,parms.allowed,call.args) { + nam <- names(x) + if(! length(nam)) nam <- rep("",5) + name <- nam[1] + if(name=="") { + form <- formula(call("~",as.name("...y..."),call.args[[2]])) + name <- var.inner(form) + } + pa <- parms.allowed + argu <- function(x,karg, arg.name, parms.all, nm) { + if(! parms.all) karg <- karg-1 + k <- charmatch(arg.name,nm,0) #k>0 : named arg found + ## Added karg <= length(x) 9Apr02 for R; R doesn't return NULL + ## like S+ + if(k>0) x[[k]] else + if(length(nm) < karg || nm[karg] != "") NULL else + if(karg <= length(x)) x[[karg]] else NULL + } + if(parms.allowed) parms <- argu(x,2,"parms",pa,nam) else { + parms <- NULL + if(charmatch("parms",nam,0)>0) + stop(paste("parms not allowed for",as.character(call.args[1]))) + } + + nm <- argu(x,5,"name",pa,nam) + if(length(nm)) name <- nm + if(length(.Options$Design.attr)) { + atr <- .Options$Design.attr + i <- charmatch(name, atr$name, 0) + if(! length(i))stop("program logic error for options(factor.number)") + parmi <- atr$parms[[name]] + return(list(name=atr$name[i],parms=parmi,label=atr$label[i], + units=atr$units[i])) # added units 9Jun99 + } + + label <- argu(x,3,"label",pa,nam) + atx <- attributes(x[[1]]) # 9Jun99 + if(! length(label)) label <- atx$label # 9Jun99 attr(x[[1]],"label") + if(! length(label)) label <- name + + list(name=name,parms=parms,label=label,units=atx$units) #9Jun99 + +} + + +## Function to list all attributes of new sub-design matrix +set.atr <- function(xd, x, z, colnames, assume, code, parms, nonlinear) { + ##Note: x argument isn't used + if(is.matrix(xd)) + list(dim=dim(xd),dimnames=list(NULL,colnames),class="rms", + name=z$name, label=z$label, assume=assume, assume.code=code, + parms=parms, + nonlinear=nonlinear,colnames=colnames,units=z$units) + else list(dim=dim(xd), class="rms", + name=z$name, label=z$label, assume=assume, assume.code=code, + parms=parms, + nonlinear=nonlinear,colnames=colnames,units=z$units) +} + + +## Restricted cubic spline expansion +rcs2 <- function(..., rcs_names) { + + cal <- sys.call() + xx <- list(...) + z <- des.args(xx, TRUE, cal) + x <- xx[[1]] + if(! is.numeric(x)) stop(paste(z$name, "is not numeric")) + + nknots <- .Options$nknots + if(! length(nknots)) nknots <- 5 + + parms <- z$parms + if(! length(parms)) parms <- nknots + + if(length(parms)==1) { + nknots <- parms + knots <- NULL + if(nknots == 0) { + attributes(x) <- set.atr(x, x, z, z$name, "asis", 1, NULL, FALSE) + return(x) + } + } + else { + nknots <- length(parms) + knots <- parms + } + + pc <- length(.Options$rcspc) && .Options$rcspc + fractied <- .Options$fractied + if(! length(fractied)) fractied <- 0.05 + + if(! length(knots)) { + xd <- rcspline.eval(x, nk=nknots, inclx=TRUE, pc=pc, fractied=fractied) + knots <- attr(xd,"knots") + } + else xd <- rcspline.eval(x, knots=knots, inclx=TRUE, pc=pc, fractied=fractied) + + parms <- knots + nknots <- length(parms) + nam <- z$name + name <- rcs_names + + if(pc) attr(parms, 'pcparms') <- attr(xd, 'pcparms') + attributes(xd) <- + set.atr(xd, x, z, name, "rcspline", 4, parms, + if(pc) rep(TRUE, nknots-1) else c(FALSE,rep(TRUE,nknots-2))) + xd +} + +#Test modified RCS function (rcs2) +#Age_rcs1 <- as.numeric(sample(18:100, 3000, replace=TRUE)) +#DrinksLastWeek_rcs1 <- as.numeric(sample(0:20, 3000, replace=TRUE)) +#data1 <- data.frame(Age_rcs1, DrinksLastWeek_rcs1) +#rm(Age_rcs1, DrinksLastWeek_rcs1) + +#attach(data1) +#rcs(Age_rcs1, 5) +#rcs2(Age_rcs1, 5, rcs_names=c('Age_rcs1', 'Age_rcs2', 'Age_rcs3', 'Age_rcs4')) +#detach(data1) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd new file mode 100644 index 00000000..9ecbb810 --- /dev/null +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -0,0 +1,102 @@ +--- +title: "fine_and_grey_model_example" +author: "Stacey Fisher" +date: '2019-04-19' +output: html_document +--- + +```{r, collapse=TRUE} +library(survival) #pcb data +library(cmprsk) #crr function +library(rms) #rcs function +``` + +```{r} +data(pbc) +``` + +##Overview +Here I am going to show an example of using the primary billary cirrhosis (PBC) data to create a Fine and Grey regression model to evalute the effect of treatment with Dpenicillamine (trt) on time to transpantion (time), considering death as a competing risk (status) +Age will be modelled as a restricted cubic spline with 5 knots (requires the Hmic package), and bilirubin as an rcs with 3 knots. + +Only include the patients invovled in the randomized trial: +```{r} +pbc <- pbc[!is.na(pbc$trt),] +``` + +##Prepare the data +First we need to change sex from 'm' and 'f' to '0' and '1' +```{r} +attach(pbc) +pbc$sex <- ifelse(sex=='m', 0, + ifelse(sex=='f', 1, NA)) +detach(pbc) +``` + +Next we want to find the means and center the variables +```{r} +attach(pbc) +trt_mean <- signif(mean(trt), 3) +sex_mean <- signif(mean(sex), 3) +age_mean <- signif(mean(age), 3) +bili_mean <- signif(mean(bili), 3) +detach(pbc) +``` + +Center on the means +```{r} +attach(pbc) +pbc$trtC <- trt - trt_mean +pbc$sexC <- sex - sex_mean +pbc$ageC <- age - age_mean +pbc$biliC <- bili - bili_mean +detach(pbc) +``` + +##Create restricted cubic spline variables for age and bilirubin +A k knot spline is specified by k-1 variables. For example, a five knot spline is specified by 4 variables. The first variable is always the same as the original variable. + +The rcs function creates variables are named by adding ' to the end of the original variable name. These names are difficult to work with and do not fit our naming scheme. For example, this code this will create the four variables needed for a 5 knot cubic spline of age: age (the original variable), age', age'', and age''': + +```{r} +attach(pbc) +age_rcs_vec <- rcs(ageC, 5) +detach(pbc) +``` + +I have modified the rcs function from Harrell's rms package to let us specify the names of the resulting rcs variables. + +```{r} +source(file.path("/Users/staceyfisher/Desktop/Git/bllFlow/R/rcs2.R")) +``` + +Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. +```{r} +attach(pbc) +allvars <- as.data.frame(cbind(trtC, sexC, + rcs2(ageC, 5, rcs_names= c('AgeC_rcs1', 'AgeC_rcs2', 'AgeC_rcs3', 'AgeC_rcs4')), + rcs2(biliC, 3, rcs_names= c('BiliC_rcs1', 'BiliC_rcs2')))) +detach(pbc) +str(allvars) +``` +The allvars object contains 8 variables. + +##Create the Fine and Grey regression model +The 'time' variable is the time (in days) from study start to either censoring, liver transplantation, or death +The 'status' variable is 0 for censored, 1 for transplant, 2 for death +```{r} +pbc_crr_model <- crr(ftime= pbc$time, fstatus= pbc$status, allvars, failcode=1, cencode=0) +summary(pbc_crr_model) +``` +The beta coefficients for the model are here: +```{r} +pbc_crr_model$coef +``` + +#Knot locations +We need to know where the knots are placed. To determine this: +```{r} +attributes(rcspline.eval(pbc$ageC, nk=5))$knots +attributes(rcspline.eval(pbc$biliC, nk=3))$knots +``` + From 9c8f70c661dbfa195a340c30a30153ffdd4e5613 Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Fri, 19 Apr 2019 15:37:11 -0400 Subject: [PATCH 002/123] [feature] linting and add getwd() --- vignettes/fine_and_grey_model_example.Rmd | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 9ecbb810..825e8545 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -28,8 +28,8 @@ pbc <- pbc[!is.na(pbc$trt),] First we need to change sex from 'm' and 'f' to '0' and '1' ```{r} attach(pbc) -pbc$sex <- ifelse(sex=='m', 0, - ifelse(sex=='f', 1, NA)) +pbc$sex <- ifelse(sex == 'm', 0, + ifelse(sex == 'f', 1, NA)) detach(pbc) ``` @@ -67,15 +67,15 @@ detach(pbc) I have modified the rcs function from Harrell's rms package to let us specify the names of the resulting rcs variables. ```{r} -source(file.path("/Users/staceyfisher/Desktop/Git/bllFlow/R/rcs2.R")) +source(file.path(getwd(), "../R/rcs2.R")) ``` Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. ```{r} attach(pbc) allvars <- as.data.frame(cbind(trtC, sexC, - rcs2(ageC, 5, rcs_names= c('AgeC_rcs1', 'AgeC_rcs2', 'AgeC_rcs3', 'AgeC_rcs4')), - rcs2(biliC, 3, rcs_names= c('BiliC_rcs1', 'BiliC_rcs2')))) + rcs2(ageC, 5, rcs_names = c('AgeC_rcs1', 'AgeC_rcs2', 'AgeC_rcs3', 'AgeC_rcs4')), + rcs2(biliC, 3, rcs_names = c('BiliC_rcs1', 'BiliC_rcs2')))) detach(pbc) str(allvars) ``` @@ -85,7 +85,7 @@ The allvars object contains 8 variables. The 'time' variable is the time (in days) from study start to either censoring, liver transplantation, or death The 'status' variable is 0 for censored, 1 for transplant, 2 for death ```{r} -pbc_crr_model <- crr(ftime= pbc$time, fstatus= pbc$status, allvars, failcode=1, cencode=0) +pbc_crr_model <- crr(ftime = pbc$time, fstatus = pbc$status, allvars, failcode = 1, cencode = 0) summary(pbc_crr_model) ``` The beta coefficients for the model are here: @@ -96,7 +96,7 @@ pbc_crr_model$coef #Knot locations We need to know where the knots are placed. To determine this: ```{r} -attributes(rcspline.eval(pbc$ageC, nk=5))$knots -attributes(rcspline.eval(pbc$biliC, nk=3))$knots +attributes(rcspline.eval(pbc$ageC, nk = 5))$knots +attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` From 977e2a99ecdd751f90f00da58a8bf382b8790da5 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 13 May 2019 09:28:44 -0400 Subject: [PATCH 003/123] [Refactor] Added travis settings --- .travis.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3380eeab..bf014bec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,7 @@ +branches: + except: + - gh-pages + language: r cache: packages @@ -16,6 +20,7 @@ script: - R CMD check *tar.gz after_success: + - Rscript -e 'devtools::install()' - R -e "install.packages('pkgdown')" - Rscript -e 'pkgdown::build_site(run_dont_run = TRUE)' @@ -25,5 +30,6 @@ deploy: github-token: $GITHUB_TOKEN keep-history: true local-dir: docs + target_branch: gh-pages on: - tags: true \ No newline at end of file + branch: master \ No newline at end of file From 54729af5d03482da00eea6e7d50f5d19b55402c4 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 13 May 2019 14:10:54 -0400 Subject: [PATCH 004/123] [Feature] Added basic Model Reference creation --- R/create-reference.R | 20 +++++++++++++++++++- vignettes/fine_and_grey_model_example.Rmd | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/R/create-reference.R b/R/create-reference.R index 69310a29..21049f48 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -1,4 +1,4 @@ -#' @export + CreateReference <- function(x, ...){ UseMethod("CreateReference") } @@ -13,4 +13,22 @@ CreateReference.default <- function(data, ...){ ExtractData <- function(passedData){ variableNames <- colnames(passedData) +} + +#' @export +CreateBLLModelObject <- function(passedData, passedModel, passedTableOne){ + varNames <- attr(passedModel$coef, "names") + betaCoefficient <- passedModel$coef + attr(betaCoefficient, "names") <- NULL + allStrataVarMeans <- list() + retTable <- data.frame(betaCoefficient = betaCoefficient, row.names = varNames) + if (!is.null(passedTableOne$ContTable)) { + for (strataVar in length(passedTableOne$ContTable)) { + allStrataVarMeans[[strataVar]] <- passedTableOne$ContTable[[strataVar]][varNames, "mean"] + attr(allStrataVarMeans[[strataVar]], "names") <- NULL + retTable[[paste("meanForStrata#", strataVar, sep = "")]] <- allStrataVarMeans[[strataVar]] + } + } + + return(retTable) } \ No newline at end of file diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 825e8545..3e94a10a 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -99,4 +99,7 @@ We need to know where the knots are placed. To determine this: attributes(rcspline.eval(pbc$ageC, nk = 5))$knots attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` +```{r} +modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) +``` From f103c8e482765699dc5e82703a7882c562ad9742 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 13 May 2019 14:12:43 -0400 Subject: [PATCH 005/123] [Refactor] Added example to vignette --- vignettes/fine_and_grey_model_example.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 3e94a10a..707d4e67 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -101,5 +101,6 @@ attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) +CreateBLLModelObject(pbc, pbc_crr_model, modelPbcTableOne) ``` From e3113ba59565f380f2bbce8be99cdd3ed56f7e85 Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Mon, 13 May 2019 14:42:08 -0400 Subject: [PATCH 006/123] [feature] example vignette for CreateBLLModelObject --- vignettes/fine_and_grey_model_example.Rmd | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 825e8545..93db95c7 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -99,4 +99,25 @@ We need to know where the knots are placed. To determine this: attributes(rcspline.eval(pbc$ageC, nk = 5))$knots attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` +```{r} +modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) +CreateBLLModelObject(pbc, pbc_crr_model, modelPbcTableOne) +``` + +# Generate a bllflow model object +This object is used to generate the PMML file, for manuscript figures and other uses. + +CreateBLLModelObject(modelObject, modelType, tableOne, ModekData) +@param modelObject The object that is returned when a model is created. +@param modelType values = crr, NULL. The class name of the modelObject. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. +@param tableOne The object returned by createTableOne(). +@param modelData The data used to generate the model. +@param calculateMean default = TRUE. If TRUE and tableOne = missing, then calculate means of variables. +```{r} + +pbcTableOne = CreateTableOne(pbc) +CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = pbc) + +``` +Note that modelType is missing in this call. The function should examine class of pbc_crr_model. If class <> 'crr' the issue error "Not a recognized model (allowable models include: crr)". From edb2aab85b6d01b3df938c205d6e24861c913b48 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 13 May 2019 15:09:58 -0400 Subject: [PATCH 007/123] [Refactor] Column name change --- R/create-reference.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/create-reference.R b/R/create-reference.R index 21049f48..628de950 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -26,7 +26,7 @@ CreateBLLModelObject <- function(passedData, passedModel, passedTableOne){ for (strataVar in length(passedTableOne$ContTable)) { allStrataVarMeans[[strataVar]] <- passedTableOne$ContTable[[strataVar]][varNames, "mean"] attr(allStrataVarMeans[[strataVar]], "names") <- NULL - retTable[[paste("meanForStrata#", strataVar, sep = "")]] <- allStrataVarMeans[[strataVar]] + retTable[["mean"]] <- allStrataVarMeans[[strataVar]] } } From bce8610cb5630b8be887e1c80ef413c436c14803 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Tue, 21 May 2019 08:55:39 -0400 Subject: [PATCH 008/123] [Feature] Function Skeleton --- R/create-reference.R | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/R/create-reference.R b/R/create-reference.R index 628de950..ec3b5cd0 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -16,7 +16,20 @@ ExtractData <- function(passedData){ } #' @export -CreateBLLModelObject <- function(passedData, passedModel, passedTableOne){ +#' CreateBLLModelObject (modelObject, modelType, tableOne, modelData) +CreateBLLModelObject <- function(modelData, modelObject, tableOne = NULL, modelType = NULL) { + # ----Step 1: verify input/create not passed input---- + varNames <- attr(modelObject$coef, "names") + if (is.null(tableOne)) { + tableOne <- tableone::CreateTableOne(data = modelData, vars = varNames) + } else { + for (varName in varNames) { + + } + } + # ----Step 2: Pull out information ---- + + # ----Step 3: Generate model object ---- varNames <- attr(passedModel$coef, "names") betaCoefficient <- passedModel$coef attr(betaCoefficient, "names") <- NULL From ec8b969d182a65f21ce6d63a649e0fcdda9d96d9 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 27 May 2019 10:20:15 -0400 Subject: [PATCH 009/123] [Feature] Cleaner CreateBLLModelObject function structure with additional args --- R/create-reference.R | 20 +++++++++++++------- R/strings.R | 1 + vignettes/fine_and_grey_model_example.Rmd | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/R/create-reference.R b/R/create-reference.R index ec3b5cd0..7ed8b805 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -16,28 +16,34 @@ ExtractData <- function(passedData){ } #' @export -#' CreateBLLModelObject (modelObject, modelType, tableOne, modelData) CreateBLLModelObject <- function(modelData, modelObject, tableOne = NULL, modelType = NULL) { # ----Step 1: verify input/create not passed input---- + supportedModelTypes <- c("crr") varNames <- attr(modelObject$coef, "names") + + if (!class(modelObject) %in% supportedModelTypes) { + stop("Passed model type is not yet supported. Aborting!") + } if (is.null(tableOne)) { tableOne <- tableone::CreateTableOne(data = modelData, vars = varNames) } else { for (varName in varNames) { - + if (!varName %in% tableOne[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { + stop("Passed table one does not contain the vars in the passed model. Aborting!") + } } } # ----Step 2: Pull out information ---- # ----Step 3: Generate model object ---- - varNames <- attr(passedModel$coef, "names") - betaCoefficient <- passedModel$coef + varNames <- attr(modelObject$coef, "names") + betaCoefficient <- modelObject$coef attr(betaCoefficient, "names") <- NULL allStrataVarMeans <- list() retTable <- data.frame(betaCoefficient = betaCoefficient, row.names = varNames) - if (!is.null(passedTableOne$ContTable)) { - for (strataVar in length(passedTableOne$ContTable)) { - allStrataVarMeans[[strataVar]] <- passedTableOne$ContTable[[strataVar]][varNames, "mean"] + if (!is.null(tableOne$ContTable)) { + for (strataVar in length(tableOne$ContTable)) { + allStrataVarMeans[[strataVar]] <- tableOne$ContTable[[strataVar]][varNames, "mean"] attr(allStrataVarMeans[[strataVar]], "names") <- NULL retTable[["mean"]] <- allStrataVarMeans[[strataVar]] } diff --git a/R/strings.R b/R/strings.R index 3ea41d69..8158cfc4 100644 --- a/R/strings.R +++ b/R/strings.R @@ -46,6 +46,7 @@ pkg.globals$tableOne.Level <- "level" pkg.globals$tableOne.Percent <- "percent" pkg.globals$tableOne.StrataVarName <- "strataVarName" pkg.globals$tableOne.N <- "n" +pkg.globals$tableOne.Vars <- "vars" # Long table column names pkg.globals$LongTable.VariableCategory <- "variableCategory" diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 93db95c7..1a915045 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -116,7 +116,7 @@ CreateBLLModelObject(modelObject, modelType, tableOne, ModekData) ```{r} -pbcTableOne = CreateTableOne(pbc) +pbcTableOne = CreateTableOne(data = pbc) CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = pbc) ``` From 6f380488d734839bb0be961e78195727b2aa697b Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 27 May 2019 12:00:11 -0400 Subject: [PATCH 010/123] [Refactor] Revieved the comments of CreateBLLModelObject --- NAMESPACE | 1 + R/create-reference.R | 113 ++++++++++++---------- vignettes/fine_and_grey_model_example.Rmd | 5 +- 3 files changed, 67 insertions(+), 52 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 5b88704c..cb1d9a7a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -11,6 +11,7 @@ S3method(clean.Min,BLLFlow) S3method(print,metaDataLog) export(BLLFlow) export(CheckSmallCells) +export(CreateBLLModelObject) export(CreateTableOne) export(GetDDIDescription) export(GetDDIVariables) diff --git a/R/create-reference.R b/R/create-reference.R index 7ed8b805..e59201e3 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -1,53 +1,68 @@ - -CreateReference <- function(x, ...){ - UseMethod("CreateReference") -} - -CreateReference.BLLFlow <- function(bllFlowObject, ...){ - -} - -CreateReference.default <- function(data, ...){ - -} - -ExtractData <- function(passedData){ - variableNames <- colnames(passedData) -} - +#' Create Bll Model Object +#' +#' This object is used to generate the PMML file, for manuscript figures and other uses. +#' +#' @param modelObject The object that is returned when a model is created. +#' @param modelType values = crr, NULL. The class name of the modelObject. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. +#' @param tableOne The object returned by createTableOne(). +#' @param modelData The data used to generate the model. +#' @param calculateMean default = TRUE. If TRUE and tableOne = missing, then calculate means of variables. #' @export -CreateBLLModelObject <- function(modelData, modelObject, tableOne = NULL, modelType = NULL) { - # ----Step 1: verify input/create not passed input---- - supportedModelTypes <- c("crr") - varNames <- attr(modelObject$coef, "names") - - if (!class(modelObject) %in% supportedModelTypes) { - stop("Passed model type is not yet supported. Aborting!") - } - if (is.null(tableOne)) { - tableOne <- tableone::CreateTableOne(data = modelData, vars = varNames) - } else { - for (varName in varNames) { - if (!varName %in% tableOne[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { - stop("Passed table one does not contain the vars in the passed model. Aborting!") +CreateBLLModelObject <- + function(modelData, + modelObject, + tableOne = NULL, + modelType = NULL) { + # ----Step 1: verify input/create not passed input---- + supportedModelTypes <- c("crr") + varNames <- attr(modelObject$coef, "names") + + if (!class(modelObject) %in% supportedModelTypes) { + stop("Passed model type is not yet supported. Aborting!") + } + if (is.null(tableOne)) { + tableOne <- + tableone::CreateTableOne(data = modelData, vars = varNames) + } else { + for (varName in varNames) { + if (!varName %in% tableOne[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { + # Issue warning before creating table one + warning( + "Passed table one does not contain the vars in the passed model. Creating new TableOne \n" + ) + # Verify data contains the varNames + varInData <- varNames %in% colnames(modelData) + if (all(varInData)) { + tableOne <- + tableone::CreateTableOne(data = modelData, vars = varNames) + } else { + stop("The modelData does not contain all the variables from the model. Aborting!") + } + break() + } } } - } - # ----Step 2: Pull out information ---- - - # ----Step 3: Generate model object ---- - varNames <- attr(modelObject$coef, "names") - betaCoefficient <- modelObject$coef - attr(betaCoefficient, "names") <- NULL - allStrataVarMeans <- list() - retTable <- data.frame(betaCoefficient = betaCoefficient, row.names = varNames) - if (!is.null(tableOne$ContTable)) { - for (strataVar in length(tableOne$ContTable)) { - allStrataVarMeans[[strataVar]] <- tableOne$ContTable[[strataVar]][varNames, "mean"] - attr(allStrataVarMeans[[strataVar]], "names") <- NULL - retTable[["mean"]] <- allStrataVarMeans[[strataVar]] + + # ----Step 2: Generate model object ---- + # Obtain the beta coefficient + betaCoefficient <- modelObject$coef + attr(betaCoefficient, "names") <- NULL + allStrataVarMeans <- list() + retTable <- + data.frame(betaCoefficient = betaCoefficient, row.names = varNames) + + # Obtain the means + if (!is.null(tableOne$ContTable)) { + for (strataVar in length(tableOne$ContTable)) { + allStrataVarMeans[[strataVar]] <- + tableOne$ContTable[[strataVar]][varNames, pkg.globals$tableOne.Mean] + attr(allStrataVarMeans[[strataVar]], "names") <- NULL + retTable[[pkg.globals$tableOne.Mean]] <- + allStrataVarMeans[[strataVar]] + } + } else { + warning("The tableOne does not contain cont table therefore means were not calculated") } - } - - return(retTable) -} \ No newline at end of file + + return(retTable) + } \ No newline at end of file diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 1a915045..55e5c657 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -101,13 +101,12 @@ attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) -CreateBLLModelObject(pbc, pbc_crr_model, modelPbcTableOne) +CreateBLLModelObject(allvars, pbc_crr_model, modelPbcTableOne) ``` # Generate a bllflow model object This object is used to generate the PMML file, for manuscript figures and other uses. -CreateBLLModelObject(modelObject, modelType, tableOne, ModekData) @param modelObject The object that is returned when a model is created. @param modelType values = crr, NULL. The class name of the modelObject. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. @param tableOne The object returned by createTableOne(). @@ -117,7 +116,7 @@ CreateBLLModelObject(modelObject, modelType, tableOne, ModekData) ```{r} pbcTableOne = CreateTableOne(data = pbc) -CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = pbc) +CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = allvars) ``` Note that modelType is missing in this call. The function should examine class of pbc_crr_model. If class <> 'crr' the issue error "Not a recognized model (allowable models include: crr)". From bc339f01d9e97eb21bcc0aae24310ef4dee672cd Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 28 May 2019 11:38:47 -0400 Subject: [PATCH 011/123] [Bug] Fixed check() errors --- DESCRIPTION | 3 ++- R/table-one-long.R | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8c21863b..47501710 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -38,7 +38,8 @@ Suggests: rmarkdown, DT, magrittr, - survival + survival, + rms URL: https://github.com/Big-Life-Lab/bllflow BugReports: https://github.com/Big-Life-Lab/bllflow/issues Maintainer: Rostyslav Vyuha diff --git a/R/table-one-long.R b/R/table-one-long.R index a199bc59..28a64202 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -19,10 +19,10 @@ #' ifelse(pbc$age >= 80, 4, NA)))) #' #' library(bllflow) -#' variablesSheet <- read.csv(file.path(getwd(), '../inst/extdata/PBC-variables.csv')) -#' variablesDetailsSheet <- read.csv(file.path(getwd(), '../inst/extdata/PBC-variableDetails.csv')) -#' ddi <- ReadDDI(file.path(getwd(), '../inst/extdata'),"pbcDDI.xml") -#' pbcModel <- BLLFlow(pbc, variablesSheet, variablesDetailsSheet, ddi) +#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") +#' pbcModel <- BLLFlow(pbc, variablesSheet, variableDetails, ddi) #' #' pbcTableOne <- CreateTableOne(pbcModel, strata = "edema") #' pbcSummaryTableNoLabels <- SummaryDataLong(pbcTableOne) @@ -100,10 +100,10 @@ CreateTableOne <- function(x = NULL, ...) { #' ifelse(pbc$age >= 80, 4, NA)))) #' #' library(bllflow) -#' variablesSheet <- read.csv(file.path(getwd(), '../inst/extdata/PBC-variables.csv')) -#' variablesDetailsSheet <- read.csv(file.path(getwd(), '../inst/extdata/PBC-variableDetails.csv')) -#' ddi <- ReadDDI(file.path(getwd(), '../inst/extdata'),"pbcDDI.xml") -#' pbcModel <- BLLFlow(pbc, variablesSheet, variablesDetailsSheet, ddi) +#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") +#' pbcModel <- BLLFlow(pbc, variablesSheet, variableDetails, ddi) #' #' pbcTableOne <- CreateTableOne(pbcModel, strata = "edema") #' From 912f6ad67946c06dfa10f3f060c821204bde16f3 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 28 May 2019 12:05:21 -0400 Subject: [PATCH 012/123] [Bug] Fixed model example rmd not being pkgdown properly --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 47501710..4f1ba585 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -39,7 +39,8 @@ Suggests: DT, magrittr, survival, - rms + rms, + cmprsk URL: https://github.com/Big-Life-Lab/bllflow BugReports: https://github.com/Big-Life-Lab/bllflow/issues Maintainer: Rostyslav Vyuha From d62515ade1b884181094122c9b5785fc37096ddb Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 28 May 2019 12:14:28 -0400 Subject: [PATCH 013/123] [Bug] pkgdown function fix --- vignettes/fine_and_grey_model_example.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 55e5c657..d928942e 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -101,6 +101,7 @@ attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) +library(bllflow) CreateBLLModelObject(allvars, pbc_crr_model, modelPbcTableOne) ``` From 28d6b229bc1d5f416c02e134dcfcbee12a2ee2de Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Fri, 31 May 2019 19:28:11 -0400 Subject: [PATCH 014/123] [feature] add vignette to e_model_development.Rmd --- vignettes/e_model_development.Rmd | 110 ++++++++++++++++++++++ vignettes/fine_and_grey_model_example.Rmd | 5 +- 2 files changed, 112 insertions(+), 3 deletions(-) diff --git a/vignettes/e_model_development.Rmd b/vignettes/e_model_development.Rmd index 148f7fea..76edf8e1 100644 --- a/vignettes/e_model_development.Rmd +++ b/vignettes/e_model_development.Rmd @@ -22,3 +22,113 @@ approach. Vignette examples will develop the `pbc` model following the original study's cox proportional hazard approach using functions in base R and the 'Hmisc' package. + + +Below is a temporary example for the Fine and Grey model. + + +##Overview +Here I am going to show an example of using the primary billary cirrhosis (PBC) data to create a Fine and Grey regression model to evalute the effect of treatment with Dpenicillamine (trt) on time to transpantion (time), considering death as a competing risk (status) +Age will be modelled as a restricted cubic spline with 5 knots (requires the Hmic package), and bilirubin as an rcs with 3 knots. + +Only include the patients invovled in the randomized trial: +```{r} +pbc <- pbc[!is.na(pbc$trt),] +``` + +##Prepare the data +First we need to change sex from 'm' and 'f' to '0' and '1' +```{r} +attach(pbc) +pbc$sex <- ifelse(sex == 'm', 0, + ifelse(sex == 'f', 1, NA)) +detach(pbc) +``` + +Next we want to find the means and center the variables +```{r} +attach(pbc) +trt_mean <- signif(mean(trt), 3) +sex_mean <- signif(mean(sex), 3) +age_mean <- signif(mean(age), 3) +bili_mean <- signif(mean(bili), 3) +detach(pbc) +``` + +Center on the means +```{r} +attach(pbc) +pbc$trtC <- trt - trt_mean +pbc$sexC <- sex - sex_mean +pbc$ageC <- age - age_mean +pbc$biliC <- bili - bili_mean +detach(pbc) +``` + +##Create restricted cubic spline variables for age and bilirubin +A k knot spline is specified by k-1 variables. For example, a five knot spline is specified by 4 variables. The first variable is always the same as the original variable. + +The rcs function creates variables are named by adding ' to the end of the original variable name. These names are difficult to work with and do not fit our naming scheme. For example, this code this will create the four variables needed for a 5 knot cubic spline of age: age (the original variable), age', age'', and age''': + +```{r} +attach(pbc) +age_rcs_vec <- rcs(ageC, 5) +detach(pbc) +``` + +I have modified the rcs function from Harrell's rms package to let us specify the names of the resulting rcs variables. + +```{r} +source(file.path(getwd(), "../R/rcs2.R")) +``` + +Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. +```{r} +attach(pbc) +allvars <- as.data.frame(cbind(trtC, sexC)) +detach(pbc) +str(allvars) +``` +The allvars object contains 8 variables. + +##Create the Fine and Grey regression model +The 'time' variable is the time (in days) from study start to either censoring, liver transplantation, or death +The 'status' variable is 0 for censored, 1 for transplant, 2 for death +```{r} +pbc_crr_model <- crr(ftime = pbc$time, fstatus = pbc$status, allvars, failcode = 1, cencode = 0) +summary(pbc_crr_model) +``` +The beta coefficients for the model are here: +```{r} +pbc_crr_model$coef +``` + +#Knot locations +We need to know where the knots are placed. To determine this: +```{r} +attributes(rcspline.eval(pbc$ageC, nk = 5))$knots +attributes(rcspline.eval(pbc$biliC, nk = 3))$knots +``` +TODO: when we create the RCS function, we'll need to have an argument that passess the bllflow modelObject. Then add these knots to that object. +```{r} +modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) +library(bllflow) +CreateBLLModelObject(allvars, pbc_crr_model, modelPbcTableOne) +``` + +# Generate a bllflow model object +This object is used to generate the PMML file, for manuscript figures and other uses. + +@param modelObject The object that is returned when a model is created. +@param modelType values = crr, NULL. The class name of the modelObject. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. +@param tableOne The object returned by createTableOne(). This contains the mean values that is used if there are any variables that are centered on the mean. +@param modelData The data used to generate the model. This is only required if tableOne = misssiong. +@param calculateMean default = TRUE. If TRUE and tableOne = missing, then calculate means of variables. + +```{r} + +pbcTableOne = CreateTableOne(data = pbc) +CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = allvars) + +``` +Note that modelType is missing in this call. The function should examine class of pbc_crr_model. If class <> 'crr' the issue error "Not a recognized model (allowable models include: crr)". diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index d928942e..43546295 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -73,9 +73,7 @@ source(file.path(getwd(), "../R/rcs2.R")) Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. ```{r} attach(pbc) -allvars <- as.data.frame(cbind(trtC, sexC, - rcs2(ageC, 5, rcs_names = c('AgeC_rcs1', 'AgeC_rcs2', 'AgeC_rcs3', 'AgeC_rcs4')), - rcs2(biliC, 3, rcs_names = c('BiliC_rcs1', 'BiliC_rcs2')))) +allvars <- as.data.frame(cbind(trtC, sexC)) detach(pbc) str(allvars) ``` @@ -99,6 +97,7 @@ We need to know where the knots are placed. To determine this: attributes(rcspline.eval(pbc$ageC, nk = 5))$knots attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` +TODO: when we create the RCS function, we'll need to have an argument that passess the bllflow modelObject. Then add these knots to that object. ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) library(bllflow) From 1921641309cdfd38f8ad05d74924febace64a6cf Mon Sep 17 00:00:00 2001 From: Stacey Fisher Date: Tue, 4 Jun 2019 12:07:19 -0400 Subject: [PATCH 015/123] Modify fine and grey example to use rcs2 function --- vignettes/fine_and_grey_model_example.Rmd | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 43546295..c0c45e6c 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -37,7 +37,6 @@ Next we want to find the means and center the variables ```{r} attach(pbc) trt_mean <- signif(mean(trt), 3) -sex_mean <- signif(mean(sex), 3) age_mean <- signif(mean(age), 3) bili_mean <- signif(mean(bili), 3) detach(pbc) @@ -47,13 +46,12 @@ Center on the means ```{r} attach(pbc) pbc$trtC <- trt - trt_mean -pbc$sexC <- sex - sex_mean pbc$ageC <- age - age_mean pbc$biliC <- bili - bili_mean detach(pbc) ``` -##Create restricted cubic spline variables for age and bilirubin +##Create restricted cubic spline variables for age A k knot spline is specified by k-1 variables. For example, a five knot spline is specified by 4 variables. The first variable is always the same as the original variable. The rcs function creates variables are named by adding ' to the end of the original variable name. These names are difficult to work with and do not fit our naming scheme. For example, this code this will create the four variables needed for a 5 knot cubic spline of age: age (the original variable), age', age'', and age''': @@ -61,6 +59,7 @@ The rcs function creates variables are named by adding ' to the end of the origi ```{r} attach(pbc) age_rcs_vec <- rcs(ageC, 5) +bili_rcs_vec <- rcs(biliC, 5) detach(pbc) ``` @@ -68,16 +67,18 @@ I have modified the rcs function from Harrell's rms package to let us specify th ```{r} source(file.path(getwd(), "../R/rcs2.R")) +age_rcs_vec2 <- rcs2(pbc$ageC, 5, rcs_names = c("AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4")) +bili_rcs_vec2 <- rcs2(pbc$biliC, 3, rcs_names = c("BiliC_rcs1", "BiliC_rcs2")) ``` Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. ```{r} attach(pbc) -allvars <- as.data.frame(cbind(trtC, sexC)) +allvars <- as.data.frame(cbind(trtC, age_rcs_vec2, bili_rcs_vec2)) detach(pbc) str(allvars) ``` -The allvars object contains 8 variables. +The allvars object contains 7 variables. ##Create the Fine and Grey regression model The 'time' variable is the time (in days) from study start to either censoring, liver transplantation, or death @@ -91,12 +92,22 @@ The beta coefficients for the model are here: pbc_crr_model$coef ``` +#Baseline Risk of Event +We also need to know the baseline risk of the event at time t. Here I will show how to obtain baseline risk at 5 years: + + + #Knot locations We need to know where the knots are placed. To determine this: ```{r} attributes(rcspline.eval(pbc$ageC, nk = 5))$knots attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` +Or, +```{r} +attributes(age_rcs_vec2)$parms +attributes(bili_rcs_vec2)$parms +``` TODO: when we create the RCS function, we'll need to have an argument that passess the bllflow modelObject. Then add these knots to that object. ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) From a938980196ddc1612b69ead9ba4454217b68e61d Mon Sep 17 00:00:00 2001 From: Stacey Fisher Date: Tue, 4 Jun 2019 15:20:53 -0400 Subject: [PATCH 016/123] Revert commit- will move to new branch --- vignettes/fine_and_grey_model_example.Rmd | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index c0c45e6c..43546295 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -37,6 +37,7 @@ Next we want to find the means and center the variables ```{r} attach(pbc) trt_mean <- signif(mean(trt), 3) +sex_mean <- signif(mean(sex), 3) age_mean <- signif(mean(age), 3) bili_mean <- signif(mean(bili), 3) detach(pbc) @@ -46,12 +47,13 @@ Center on the means ```{r} attach(pbc) pbc$trtC <- trt - trt_mean +pbc$sexC <- sex - sex_mean pbc$ageC <- age - age_mean pbc$biliC <- bili - bili_mean detach(pbc) ``` -##Create restricted cubic spline variables for age +##Create restricted cubic spline variables for age and bilirubin A k knot spline is specified by k-1 variables. For example, a five knot spline is specified by 4 variables. The first variable is always the same as the original variable. The rcs function creates variables are named by adding ' to the end of the original variable name. These names are difficult to work with and do not fit our naming scheme. For example, this code this will create the four variables needed for a 5 knot cubic spline of age: age (the original variable), age', age'', and age''': @@ -59,7 +61,6 @@ The rcs function creates variables are named by adding ' to the end of the origi ```{r} attach(pbc) age_rcs_vec <- rcs(ageC, 5) -bili_rcs_vec <- rcs(biliC, 5) detach(pbc) ``` @@ -67,18 +68,16 @@ I have modified the rcs function from Harrell's rms package to let us specify th ```{r} source(file.path(getwd(), "../R/rcs2.R")) -age_rcs_vec2 <- rcs2(pbc$ageC, 5, rcs_names = c("AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4")) -bili_rcs_vec2 <- rcs2(pbc$biliC, 3, rcs_names = c("BiliC_rcs1", "BiliC_rcs2")) ``` Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. ```{r} attach(pbc) -allvars <- as.data.frame(cbind(trtC, age_rcs_vec2, bili_rcs_vec2)) +allvars <- as.data.frame(cbind(trtC, sexC)) detach(pbc) str(allvars) ``` -The allvars object contains 7 variables. +The allvars object contains 8 variables. ##Create the Fine and Grey regression model The 'time' variable is the time (in days) from study start to either censoring, liver transplantation, or death @@ -92,22 +91,12 @@ The beta coefficients for the model are here: pbc_crr_model$coef ``` -#Baseline Risk of Event -We also need to know the baseline risk of the event at time t. Here I will show how to obtain baseline risk at 5 years: - - - #Knot locations We need to know where the knots are placed. To determine this: ```{r} attributes(rcspline.eval(pbc$ageC, nk = 5))$knots attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` -Or, -```{r} -attributes(age_rcs_vec2)$parms -attributes(bili_rcs_vec2)$parms -``` TODO: when we create the RCS function, we'll need to have an argument that passess the bllflow modelObject. Then add these knots to that object. ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) From 29827881a6ad8bb3debc7c24d1e0ede4fd6ab364 Mon Sep 17 00:00:00 2001 From: Stacey Fisher Date: Tue, 4 Jun 2019 15:28:30 -0400 Subject: [PATCH 017/123] Fine and Grey baseline risk and other minor chagnes --- vignettes/fine_and_grey_model_example.Rmd | 32 +++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 43546295..52420307 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -53,7 +53,7 @@ pbc$biliC <- bili - bili_mean detach(pbc) ``` -##Create restricted cubic spline variables for age and bilirubin +##Create restricted cubic spline variables for age A k knot spline is specified by k-1 variables. For example, a five knot spline is specified by 4 variables. The first variable is always the same as the original variable. The rcs function creates variables are named by adding ' to the end of the original variable name. These names are difficult to work with and do not fit our naming scheme. For example, this code this will create the four variables needed for a 5 knot cubic spline of age: age (the original variable), age', age'', and age''': @@ -61,6 +61,7 @@ The rcs function creates variables are named by adding ' to the end of the origi ```{r} attach(pbc) age_rcs_vec <- rcs(ageC, 5) +bili_rcs_vec <- rcs(biliC, 5) detach(pbc) ``` @@ -68,12 +69,14 @@ I have modified the rcs function from Harrell's rms package to let us specify th ```{r} source(file.path(getwd(), "../R/rcs2.R")) +age_rcs_vec2 <- rcs2(pbc$ageC, 5, rcs_names = c("AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4")) +bili_rcs_vec2 <- rcs2(pbc$biliC, 3, rcs_names = c("BiliC_rcs1", "BiliC_rcs2")) ``` Use the rcs funciton to collect all of the variables you want to use in the model into a single object for easier regression running. ```{r} attach(pbc) -allvars <- as.data.frame(cbind(trtC, sexC)) +allvars <- as.data.frame(cbind(trtC, sexC, age_rcs_vec2, bili_rcs_vec2)) detach(pbc) str(allvars) ``` @@ -91,12 +94,37 @@ The beta coefficients for the model are here: pbc_crr_model$coef ``` +#Baseline Risk of Event +We also need to know the baseline risk (1- cumualtive incidence) of the event at time t. Here I will show how to obtain baseline risk of transplant at 2 years + +Function for calcualting baseline risk: +```{r} +baseline.risk <- function(model, time) { + jumps <- data.frame(time = model$uftime, bfitj = model$bfitj) + jumps_time <- jumps[jumps$time <= time, ] + b0 <- sum(jumps_time$bfitj) + out <- 1-exp(-b0) +} +``` + +Baseline risk at 2 years +```{r} +H0_2YR <- baseline.risk(pbc_crr_model, (365.25*2)) +H0_2YR +``` +`r H0_2YR*100`% of average individuals receive transplant within 2 years + #Knot locations We need to know where the knots are placed. To determine this: ```{r} attributes(rcspline.eval(pbc$ageC, nk = 5))$knots attributes(rcspline.eval(pbc$biliC, nk = 3))$knots ``` +Or, +```{r} +attributes(age_rcs_vec2)$parms +attributes(bili_rcs_vec2)$parms +``` TODO: when we create the RCS function, we'll need to have an argument that passess the bllflow modelObject. Then add these knots to that object. ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) From bae5f20a94e5c56d98d4d598ab290855125fea9d Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Jun 2019 10:09:51 -0400 Subject: [PATCH 018/123] [Feature] Implemented calculateMean param --- R/create-reference.R | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/R/create-reference.R b/R/create-reference.R index e59201e3..315986b1 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -1,18 +1,19 @@ #' Create Bll Model Object -#' +#' #' This object is used to generate the PMML file, for manuscript figures and other uses. #' #' @param modelObject The object that is returned when a model is created. #' @param modelType values = crr, NULL. The class name of the modelObject. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. #' @param tableOne The object returned by createTableOne(). #' @param modelData The data used to generate the model. -#' @param calculateMean default = TRUE. If TRUE and tableOne = missing, then calculate means of variables. +#' @param calculateMean default = TRUE. If the means should be included in the table #' @export CreateBLLModelObject <- function(modelData, modelObject, tableOne = NULL, - modelType = NULL) { + modelType = NULL, + calculateMean = TRUE) { # ----Step 1: verify input/create not passed input---- supportedModelTypes <- c("crr") varNames <- attr(modelObject$coef, "names") @@ -46,23 +47,22 @@ CreateBLLModelObject <- # ----Step 2: Generate model object ---- # Obtain the beta coefficient betaCoefficient <- modelObject$coef - attr(betaCoefficient, "names") <- NULL allStrataVarMeans <- list() retTable <- data.frame(betaCoefficient = betaCoefficient, row.names = varNames) # Obtain the means - if (!is.null(tableOne$ContTable)) { - for (strataVar in length(tableOne$ContTable)) { - allStrataVarMeans[[strataVar]] <- - tableOne$ContTable[[strataVar]][varNames, pkg.globals$tableOne.Mean] - attr(allStrataVarMeans[[strataVar]], "names") <- NULL - retTable[[pkg.globals$tableOne.Mean]] <- - allStrataVarMeans[[strataVar]] + if (calculateMean) { + if (!is.null(tableOne$ContTable)) { + for (strataVar in length(tableOne$ContTable)) { + allStrataVarMeans[[strataVar]] <- + tableOne$ContTable[[strataVar]][varNames, pkg.globals$tableOne.Mean] + retTable[[pkg.globals$tableOne.Mean]] <- + allStrataVarMeans[[strataVar]] + } + } else { + warning("The tableOne does not contain cont table therefore means were not calculated") } - } else { - warning("The tableOne does not contain cont table therefore means were not calculated") } - return(retTable) } \ No newline at end of file From ad90c8fec6a6e19776921c47ed2e6b30e3abe1b0 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Jun 2019 12:21:20 -0400 Subject: [PATCH 019/123] [Feature] Added baseline --- R/create-reference.R | 18 +++++++++++++++--- vignettes/fine_and_grey_model_example.Rmd | 9 +++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/R/create-reference.R b/R/create-reference.R index 315986b1..77d95b01 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -7,13 +7,15 @@ #' @param tableOne The object returned by createTableOne(). #' @param modelData The data used to generate the model. #' @param calculateMean default = TRUE. If the means should be included in the table +#' @param baselineRiskTimeFrame default = 5. The time for the baseline risk make sure to only use years as input #' @export CreateBLLModelObject <- function(modelData, modelObject, tableOne = NULL, modelType = NULL, - calculateMean = TRUE) { + calculateMean = TRUE, + baselineRiskTimeFrame = 5) { # ----Step 1: verify input/create not passed input---- supportedModelTypes <- c("crr") varNames <- attr(modelObject$coef, "names") @@ -64,5 +66,15 @@ CreateBLLModelObject <- warning("The tableOne does not contain cont table therefore means were not calculated") } } - return(retTable) - } \ No newline at end of file + baselineRisk <- CalculateBaselineRisk(modelObject, (365.25*baselineRiskTimeFrame)) + + return(list(reference = retTable, baseline = baselineRisk)) + } + +CalculateBaselineRisk <- function(model, time) { + jumps <- data.frame(time = model$uftime, bfitj = model$bfitj) + jumps_time <- jumps[jumps$time <= time, ] + b0 <- sum(jumps_time$bfitj) + out <- 1-exp(-b0) + return(out) +} \ No newline at end of file diff --git a/vignettes/fine_and_grey_model_example.Rmd b/vignettes/fine_and_grey_model_example.Rmd index 52420307..daa8eafe 100644 --- a/vignettes/fine_and_grey_model_example.Rmd +++ b/vignettes/fine_and_grey_model_example.Rmd @@ -104,6 +104,7 @@ baseline.risk <- function(model, time) { jumps_time <- jumps[jumps$time <= time, ] b0 <- sum(jumps_time$bfitj) out <- 1-exp(-b0) + return(out) } ``` @@ -129,7 +130,9 @@ TODO: when we create the RCS function, we'll need to have an argument that passe ```{r} modelPbcTableOne <- tableone::CreateTableOne(data = allvars, vars = c("trtC", "sexC", "AgeC_rcs1", "AgeC_rcs2", "AgeC_rcs3", "AgeC_rcs4", "BiliC_rcs1", "BiliC_rcs2")) library(bllflow) -CreateBLLModelObject(allvars, pbc_crr_model, modelPbcTableOne) +bllModel <- CreateBLLModelObject(allvars, pbc_crr_model, modelPbcTableOne) +bllModel$reference +bllModel$baseline ``` # Generate a bllflow model object @@ -144,7 +147,9 @@ This object is used to generate the PMML file, for manuscript figures and other ```{r} pbcTableOne = CreateTableOne(data = pbc) -CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = allvars) +bllModel <- CreateBLLModelObject(modelObject = pbc_crr_model, tableOne = pbcTableOne, modelData = allvars) +bllModel$reference +bllModel$baseline ``` Note that modelType is missing in this call. The function should examine class of pbc_crr_model. If class <> 'crr' the issue error "Not a recognized model (allowable models include: crr)". From 7a7cf956d655aa87c18acd33e382cd28de3b8835 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 3 Jul 2019 12:44:22 -0400 Subject: [PATCH 020/123] [Feature] Recipe use Example --- vignettes/pbc_recipes_test.Rmd | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 vignettes/pbc_recipes_test.Rmd diff --git a/vignettes/pbc_recipes_test.Rmd b/vignettes/pbc_recipes_test.Rmd new file mode 100644 index 00000000..8ac7f9ef --- /dev/null +++ b/vignettes/pbc_recipes_test.Rmd @@ -0,0 +1,63 @@ +--- +title: "pbc_recipes_test" +author: "Rostyslav Vyuha" +date: '2019-07-03' +output: html_document +--- + + +```{r, collapse=TRUE} +library(survival) #pcb data +library(recipes) #recipes library +``` +```{r} +data(pbc) +``` + +##Overview +Here I am going to show an example of using the primary billary cirrhosis (PBC) data to create a coxhp model to evalute all-cause mortality. +Age will be modelled as a b spline with 5 knots, and bilirubin as an b spline with 3 knots. + +```{r} +# Doug i assume status is the mortality since its related to patience death?? +pbcRec <- recipe(status ~ age+sex+bili+albumin+protime+edema, data = pbc) +``` + +##Prepare the data +```{r} +pbcRec <- pbcRec %>% + step_integer(matches("sex")) +#pbcRec +``` + +##Process the data +@Doug doing b-spline basis on protime causes an error not sure why. Is it something that can have this spline per +```{r} +pbcRec <- pbcRec %>% + step_center(everything(),-sex) %>% + step_interact(terms = ~(bili+albumin+protime+edema):age) %>% + step_meanimpute(everything(), -contains("age"), -contains("sex")) %>% + step_num2factor(sex,edema)%>% + step_dummy(sex,edema) %>% + step_bs(age ,degree = 4) %>% + step_bs(bili,albumin,protime,match("edema")) + +#pbcRec +``` +@Doug im not sure which impute to use + + +```{r} +trainedPBCRec <- prep(pbcRec, training = pbc) +#trainedPBCRec +``` + +```{r} +bakedPBC <- bake(trainedPBCRec, new_data = pbc) +#bakedPBC +``` +OutModel @Doug Im really not sure what the prefered output is since im not sure how models work +```{r} +coxPbcModel <- coxph(Surv(status) ~ age+sex+bili+albumin+protime+edema, data = bakedPBC) +coxPbcModel +``` \ No newline at end of file From 4a21b0086c8ef31200faa253898a822d1363d341 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 3 Jul 2019 12:46:05 -0400 Subject: [PATCH 021/123] [Refactor] Better comments --- vignettes/pbc_recipes_test.Rmd | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/vignettes/pbc_recipes_test.Rmd b/vignettes/pbc_recipes_test.Rmd index 8ac7f9ef..0e199b80 100644 --- a/vignettes/pbc_recipes_test.Rmd +++ b/vignettes/pbc_recipes_test.Rmd @@ -29,9 +29,8 @@ pbcRec <- pbcRec %>% step_integer(matches("sex")) #pbcRec ``` - +@Doug all the steps can be put into one call or be added at later times ##Process the data -@Doug doing b-spline basis on protime causes an error not sure why. Is it something that can have this spline per ```{r} pbcRec <- pbcRec %>% step_center(everything(),-sex) %>% @@ -40,7 +39,7 @@ pbcRec <- pbcRec %>% step_num2factor(sex,edema)%>% step_dummy(sex,edema) %>% step_bs(age ,degree = 4) %>% - step_bs(bili,albumin,protime,match("edema")) + step_bs(bili,albumin,protime,matches("edema")) #pbcRec ``` @@ -49,15 +48,15 @@ pbcRec <- pbcRec %>% ```{r} trainedPBCRec <- prep(pbcRec, training = pbc) -#trainedPBCRec +trainedPBCRec ``` ```{r} bakedPBC <- bake(trainedPBCRec, new_data = pbc) -#bakedPBC +bakedPBC ``` OutModel @Doug Im really not sure what the prefered output is since im not sure how models work ```{r} -coxPbcModel <- coxph(Surv(status) ~ age+sex+bili+albumin+protime+edema, data = bakedPBC) +coxPbcModel <- coxph(Surv(status) ~ bili_x_age+sex_X2, data = bakedPBC) coxPbcModel ``` \ No newline at end of file From 62324ac37cbf9040860fa176b2d79c22448b91c6 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 8 Jul 2019 12:41:03 -0400 Subject: [PATCH 022/123] [Feature] Proposed Implementation of the operations --- inst/extdata/pbc-operations.csv | 3 ++ vignettes/operations-test.Rmd | 96 +++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 inst/extdata/pbc-operations.csv create mode 100644 vignettes/operations-test.Rmd diff --git a/inst/extdata/pbc-operations.csv b/inst/extdata/pbc-operations.csv new file mode 100644 index 00000000..679fb78a --- /dev/null +++ b/inst/extdata/pbc-operations.csv @@ -0,0 +1,3 @@ +Operation,Variables,Append,OverwriteStartVariable +integer,"sex","_Int",FALSE +center,"allDataVars","_C",FALSE \ No newline at end of file diff --git a/vignettes/operations-test.Rmd b/vignettes/operations-test.Rmd new file mode 100644 index 00000000..201e03ed --- /dev/null +++ b/vignettes/operations-test.Rmd @@ -0,0 +1,96 @@ +--- +title: "operations-test" +author: "Rostyslav Vyuha" +date: "July 8, 2019" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +##Specify the operations to perform on the data +Using the operations sheet in MSW. The steps are executed from top to bottom row by row. +The Operation column is used to specify the operation you wish to perform. Use the name after step_. + +The variables columns is used to specify which variables are affected by this operation (I think its a good idea to follow the same format that recipy uses. This bypasses the major issue i saw with my previous implementation where you would copy alot of steps for each variable would get complex and convoluded very quickly). + +Append column specifies what u wish to append to the end of the new variable. (@Doug Should we have default appends or append nothing if nothing is passed or have special value for empty append) + +Overwrite StartVariable is the specification on if the variable should be overwritten or a new variable should be created. + +##Custom functions +In case users wish to add custom functions or specify new variable creations they can use this to specify their own custom function. (@Doug I think of providing a template where they can insurt whatever code they wish and just make sure they use the same inputs and outputs. Kinda how we design programs atm where we set their ins and outs and they insert the black box) + +I think adding it as steps is a good idea as this allows following the recipy formula and auto generated logs. +(@Doug @Yulric @Carol is creating a step too much for a basic user? should we just stick to letting them make simple functions?) + +##Custom Function Template +```{r} +library(recipes) + +#New step creation +step_customStepNamePleaseChange <- function( + recipe, ..., + role = NA, + trained = FALSE, + #If you wish to add more arguments insert here + skip = FALSE, + id = rand_id("customStepNamePleaseChange") + ) { + + ## The variable selectors are not immediately evaluated by using + ## the `quos` function in `rlang`. `ellipse_check` captures the + ## values and also checks to make sure that they are not empty. + terms <- ellipse_check(...) + + add_step( + recipe, + step_customStepNamePleaseChange_new( + terms = terms, + trained = trained, + role = role, + skip = skip, + id = id + ) + ) +} + +#New step decleration +step_customStepNamePleaseChange_new <- + function(terms, role, trained, skip, id) { + step( + subclass = "customStepNamePleaseChange", + terms = terms, + role = role, + trained = trained, + #Make sure ur custom args are always present + skip = skip, + id = id + ) + } + +# The prep function +prep.step_customStepNamePleaseChange <- function(x, training, info = NULL, ...) { + # This is where you insert the function u wish to do in the prep stage + + #After the function make sure to update the recipy object + step_customStepNamePleaseChange_new( + terms = x$terms, + trained = TRUE, + role = x$role, + skip = x$skip, + id = x$id + ) +} + +#The function to run to create the data +bake.step_percentile <- function(object, new_data, ...) { + require(tibble) + #Add the function to modify data HERE + + + ## Always convert to tibbles on the way out + as_tibble(new_data) +} +``` From a54d6897f6a14b353609e207e55c31ba00f88521 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 8 Jul 2019 12:41:53 -0400 Subject: [PATCH 023/123] [Refactor] Function name fix --- vignettes/operations-test.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/operations-test.Rmd b/vignettes/operations-test.Rmd index 201e03ed..1eeef72f 100644 --- a/vignettes/operations-test.Rmd +++ b/vignettes/operations-test.Rmd @@ -85,7 +85,7 @@ prep.step_customStepNamePleaseChange <- function(x, training, info = NULL, ...) } #The function to run to create the data -bake.step_percentile <- function(object, new_data, ...) { +bake.step_customStepNamePleaseChange <- function(object, new_data, ...) { require(tibble) #Add the function to modify data HERE From 8f8455b7c283b725ecc6a2bb52f33ea551ad51e1 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 9 Jul 2019 13:51:27 -0400 Subject: [PATCH 024/123] [Feature] Updated Proof of concept --- inst/extdata/Meeting Version - Modules.csv | 6 ++ inst/extdata/Meeting Version - Variables.csv | 7 ++ inst/extdata/PBC-variables.csv | 14 +-- inst/extdata/pbc-modules.csv | 5 ++ inst/extdata/pbc-operations.csv | 17 +++- vignettes/operations-test.Rmd | 90 +++----------------- 6 files changed, 53 insertions(+), 86 deletions(-) create mode 100644 inst/extdata/Meeting Version - Modules.csv create mode 100644 inst/extdata/Meeting Version - Variables.csv create mode 100644 inst/extdata/pbc-modules.csv diff --git a/inst/extdata/Meeting Version - Modules.csv b/inst/extdata/Meeting Version - Modules.csv new file mode 100644 index 00000000..7023e842 --- /dev/null +++ b/inst/extdata/Meeting Version - Modules.csv @@ -0,0 +1,6 @@ +ModuleName,ModuleOperations,DefaultOrder,TableOneName,ModuleID,ModuleDescription +data cleaning,RecWTable,1,1a,, +finish data cleaning,"impute,RecWTable,Min,Max",2,1b,, +impute missing data,impute,3,1c,, +transform data,"center,RCS,interactions",4,1d,, +util,"impute, center",NA,NA,, \ No newline at end of file diff --git a/inst/extdata/Meeting Version - Variables.csv b/inst/extdata/Meeting Version - Variables.csv new file mode 100644 index 00000000..df02b5b0 --- /dev/null +++ b/inst/extdata/Meeting Version - Variables.csv @@ -0,0 +1,7 @@ +variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,operations,centre,interaction,RCS,dummy,impute,min,max,outlier +age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,"data cleaning, finish data cleaning, impute missing data, transform data, data cleaning_2",TRUE,NA,4,NA,"1::FALSE, TRUE",40,70,delete +sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,"transform data, impute",FALSE,NA,NA,TRUE,FALSE,NA,NA,delete +bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,"finish data cleaning_2,transform data",TRUE,age,3,NA,1::TRUE,NA,NA,missing +albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,"finish data cleaning,transform data",TRUE,age,3,NA,TRUE,NA,NA,missing +protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,"finish data cleaning,transform data, impute",TRUE,age,3,NA,TRUE,NA,NA,missing +edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,"finish data cleaning,transform data, tsq.func(stpo, stpoy)",TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/PBC-variables.csv b/inst/extdata/PBC-variables.csv index 12b92b2f..a2f7b2b0 100644 --- a/inst/extdata/PBC-variables.csv +++ b/inst/extdata/PBC-variables.csv @@ -1,7 +1,7 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file +variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier,operations +age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete,"data cleaning, finish data cleaning, impute missing data, transform data" +sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete,"transform data" +bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" +albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" +protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" +edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing,"finish data cleaning,transform data" \ No newline at end of file diff --git a/inst/extdata/pbc-modules.csv b/inst/extdata/pbc-modules.csv new file mode 100644 index 00000000..f1bc45ed --- /dev/null +++ b/inst/extdata/pbc-modules.csv @@ -0,0 +1,5 @@ +ModuleName,ModuleOperations,DefaultOrder +data cleaning,"RecWTable",1 +finish data cleaning,"impute,RecWTable,Min,Max",2 +impute missing data, "impute",3 +transform data,"center,RCS,interactions",4 diff --git a/inst/extdata/pbc-operations.csv b/inst/extdata/pbc-operations.csv index 679fb78a..f7f953bf 100644 --- a/inst/extdata/pbc-operations.csv +++ b/inst/extdata/pbc-operations.csv @@ -1,3 +1,14 @@ -Operation,Variables,Append,OverwriteStartVariable -integer,"sex","_Int",FALSE -center,"allDataVars","_C",FALSE \ No newline at end of file +Operation,Variables,Append,CreateNewVariable +recodeVars,"ageGroup","DEFAULT",True +tableOne,"everything()",NA,NA +impute,"all_predictors(),-age,-sex","_imp",False +createVars::packYear,"packyears","DEFAULT",True +recodeVars,"packyears","DEFAULT",True +cleanExclusions,"age","_Clean",False +tableOne,"everything()",NA,NA +impute,"packyears","_imp",False +tableOne,"everything()",NA,NA +center,"all_predictors(),-sex","_C",False +RCS::4,"age","_rcs",True +RCS::3,"all_predictors(),-age,-sex","_rcs",True +interaction::age,"all_predictors(),-age,-sex",_X_age,True \ No newline at end of file diff --git a/vignettes/operations-test.Rmd b/vignettes/operations-test.Rmd index 1eeef72f..9cdaf24b 100644 --- a/vignettes/operations-test.Rmd +++ b/vignettes/operations-test.Rmd @@ -8,89 +8,27 @@ output: html_document ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` +##Updated specs +Please refer to the google sheets for updated information +https://docs.google.com/spreadsheets/d/18sPxA2CSf2WDArtZuroR9T-98SA7lWEXCW3GYWm6rgs/edit?usp=sharing -##Specify the operations to perform on the data -Using the operations sheet in MSW. The steps are executed from top to bottom row by row. -The Operation column is used to specify the operation you wish to perform. Use the name after step_. +##Specify the Modules to perform +Isinde the modules sheet u can specify modules which are sets of funtions. Default order is the default order that the modules are ran in, if the cell is set to NA the module is not a default module and is just a utility module. -The variables columns is used to specify which variables are affected by this operation (I think its a good idea to follow the same format that recipy uses. This bypasses the major issue i saw with my previous implementation where you would copy alot of steps for each variable would get complex and convoluded very quickly). +Module ID is used as reference for the modules in the variables sheet. -Append column specifies what u wish to append to the end of the new variable. (@Doug Should we have default appends or append nothing if nothing is passed or have special value for empty append) +Module description describes the purpose of the module. -Overwrite StartVariable is the specification on if the variable should be overwritten or a new variable should be created. +TableOne Name specifies the name of the table that is created at the end of the module if the name is NA no table is created at the end of the module. These tables are then stored as part of bllFlow as Module Summary. In the future we can add additional things to generate as in other tables or models. Module summary can have a long summary data table for all the table ones as well as a sepearte table one for each step. -##Custom functions -In case users wish to add custom functions or specify new variable creations they can use this to specify their own custom function. (@Doug I think of providing a template where they can insurt whatever code they wish and just make sure they use the same inputs and outputs. Kinda how we design programs atm where we set their ins and outs and they insert the black box) - -I think adding it as steps is a good idea as this allows following the recipy formula and auto generated logs. -(@Doug @Yulric @Carol is creating a step too much for a basic user? should we just stick to letting them make simple functions?) - -##Custom Function Template -```{r} -library(recipes) +Module operations specifies the functions as well as the order they are ran in -#New step creation -step_customStepNamePleaseChange <- function( - recipe, ..., - role = NA, - trained = FALSE, - #If you wish to add more arguments insert here - skip = FALSE, - id = rand_id("customStepNamePleaseChange") - ) { +Module name is the name that module is logged under, could also be basically short label - ## The variable selectors are not immediately evaluated by using - ## the `quos` function in `rlang`. `ellipse_check` captures the - ## values and also checks to make sure that they are not empty. - terms <- ellipse_check(...) +## Specify the operations to perform +Each variable inside the variables sheet will contain an operations column which describes what modules and functions to run on it.If the cell is left empty all default modules are ran on that variable in that order. If the cell contains modules they are ran in that order as well as any functions(Modules should follow their default order unless they are being ran a seccond time in which case u need to specify it with a semi collon ex:data cleaning::2 this then lets u syncronize other vars to create data cleaning::2) - add_step( - recipe, - step_customStepNamePleaseChange_new( - terms = terms, - trained = trained, - role = role, - skip = skip, - id = id - ) - ) -} -#New step decleration -step_customStepNamePleaseChange_new <- - function(terms, role, trained, skip, id) { - step( - subclass = "customStepNamePleaseChange", - terms = terms, - role = role, - trained = trained, - #Make sure ur custom args are always present - skip = skip, - id = id - ) - } - -# The prep function -prep.step_customStepNamePleaseChange <- function(x, training, info = NULL, ...) { - # This is where you insert the function u wish to do in the prep stage - - #After the function make sure to update the recipy object - step_customStepNamePleaseChange_new( - terms = x$terms, - trained = TRUE, - role = x$role, - skip = x$skip, - id = x$id - ) -} +##Custom functions +Custom function will just be functions the user is sourcing in their environment. Which i will then convert into steps. Custom funtions are added to the variables sheet following their basic function call ie: createPackYears(pack,year,smoke) this will then use the corelating variables in variables to calculate packYears. -#The function to run to create the data -bake.step_customStepNamePleaseChange <- function(object, new_data, ...) { - require(tibble) - #Add the function to modify data HERE - - - ## Always convert to tibbles on the way out - as_tibble(new_data) -} -``` From 3e1bc424810089150afabaf5cc3b18c4ab016f83 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 11 Jul 2019 11:56:56 -0400 Subject: [PATCH 025/123] [Feature] Added a sample run of modules --- inst/extdata/Meeting Version - Modules.csv | 9 +-- inst/extdata/Meeting Version - Variables.csv | 16 +++--- .../Meeting Version - variableDetails.csv | 21 +++++++ vignettes/pbc-operations-test.Rmd | 57 +++++++++++++++++++ 4 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 inst/extdata/Meeting Version - variableDetails.csv create mode 100644 vignettes/pbc-operations-test.Rmd diff --git a/inst/extdata/Meeting Version - Modules.csv b/inst/extdata/Meeting Version - Modules.csv index 7023e842..b1de785c 100644 --- a/inst/extdata/Meeting Version - Modules.csv +++ b/inst/extdata/Meeting Version - Modules.csv @@ -1,6 +1,3 @@ -ModuleName,ModuleOperations,DefaultOrder,TableOneName,ModuleID,ModuleDescription -data cleaning,RecWTable,1,1a,, -finish data cleaning,"impute,RecWTable,Min,Max",2,1b,, -impute missing data,impute,3,1c,, -transform data,"center,RCS,interactions",4,1d,, -util,"impute, center",NA,NA,, \ No newline at end of file +ModuleName,ModuleOperations,DefaultOrder,ModuleID,ModuleDescription +StandardizeToInteger,"integer::[append=FALSE,suffix=FALSE]",1,1,Converts string values to integer values +PrepareForModel,"center::[append=TRUE,suffix=""_C""],interact::[append=TRUE,suffix=""_X-{var}""],impute::[append=false,imputeOn=mean,suffix=FALSE],num2factor::[append=FALSE,suffix=FALSE],dummy::[append=TRUE,suffix=""_Dummy""],bs::[append=TRUE,suffix=""_bs{num}""]",2,2,Prepares the module for coxhp model creation \ No newline at end of file diff --git a/inst/extdata/Meeting Version - Variables.csv b/inst/extdata/Meeting Version - Variables.csv index df02b5b0..06270aa6 100644 --- a/inst/extdata/Meeting Version - Variables.csv +++ b/inst/extdata/Meeting Version - Variables.csv @@ -1,7 +1,9 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,operations,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,"data cleaning, finish data cleaning, impute missing data, transform data, data cleaning_2",TRUE,NA,4,NA,"1::FALSE, TRUE",40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,"transform data, impute",FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,"finish data cleaning_2,transform data",TRUE,age,3,NA,1::TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,"finish data cleaning,transform data",TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,"finish data cleaning,transform data, impute",TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,"finish data cleaning,transform data, tsq.func(stpo, stpoy)",TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file +variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,operations,centre,interaction,RCS,dummy,impute,2factor,min,max,outlier +age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,2,TRUE,FALSE,4,FALSE,FALSE,FALSE,,, +sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,"1,2",FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,,, +bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, +albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, +protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, +edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,2,TRUE,age,3,TRUE,mean,TRUE,,, +stage,,,,,,,,,2,TRUE,FALSE,FALSE,FALSE,mean,FALSE,,, +,,,,,,,,,,,,,,mean,FALSE,,, \ No newline at end of file diff --git a/inst/extdata/Meeting Version - variableDetails.csv b/inst/extdata/Meeting Version - variableDetails.csv new file mode 100644 index 00000000..0ce1a821 --- /dev/null +++ b/inst/extdata/Meeting Version - variableDetails.csv @@ -0,0 +1,21 @@ +variable,VariableRole,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,low,high,interval +sex,predictor,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,2,2,N/A +sex,predictor,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,1,1,N/A +sex,predictor,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A,N/A +age,predictor,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A,N/A +age,predictor,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A,N/A +age,predictor,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A,N/A +age,predictor,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A,N/A +age,predictor,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,NA,NA,N/A +edema,predictor,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,0,0,N/A +edema,predictor,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,0.5,0.5,N/A +edema,predictor,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,1,1,N/A +edema,predictor,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,NA,NA,N/A +ageGroup,created,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,0,20,"[,)" +ageGroup,created,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,20,40,"[,)" +ageGroup,created,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,40,80,"[,)" +ageGroup,created,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,80,105,"[,]" +bili,predictor,,,,,,,,,,,,,,,,,,,, +albumin,predictor,,,,,,,,,,,,,,,,,,,, +protime,predictor,,,,,,,,,,,,,,,,,,,, +status,outcome,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/vignettes/pbc-operations-test.Rmd b/vignettes/pbc-operations-test.Rmd new file mode 100644 index 00000000..340e88c0 --- /dev/null +++ b/vignettes/pbc-operations-test.Rmd @@ -0,0 +1,57 @@ +--- +title: "pbc-operations-test" +author: "Rostyslav Vyuha" +date: "July 11, 2019" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +##Step one initial variable role specification +Iniside variable details specify which variables are predictors, used in creation of other vars, and which variables are the outcome(this is used to build the initial recipy) @Doug(perhaps we should move created variables into variables as well and move role specification to variables too?) + +##Specify the modules +Inside the modules csv specify the functions you wish to use for each step + +##Specify module effects +Inside the variables csv specify which variables are affected by which modules as well as the arguments for those modules for each variable + +##Run the modules +Run the modules sequentially then procced to run checks on each modules as the analyst sees fit + +```{r} +library(survival) +library(bllflow) +data(pbc) + +#Import the ddi,variables,variableDetails,modules +variables <- read.csv(file.path(getwd(), '../inst/extdata/Meeting Version - Variables.csv')) +variableDetails <- read.csv(file.path(getwd(), '../inst/extdata/Meeting Version - variableDetails.csv')) +modules <- read.csv(file.path(getwd(), '../inst/extdata/Meeting Version - Modules.csv')) +ddi = pbcDDI <- ReadDDI(file.path(getwd(), "../inst/extdata"), + "pbcDDI.xml") + +bllFlowObject <- BLLFlow() + +# This updates the working data inside bllFlow to the data returned by RunModule as well as its current module sequence number +bllFlowObject <- RunModule(bllObject = bllFlowObject, moduleSequenceNumber = 1) +#The non bllFlow version +#Returns a list containing the working data, recipy log, as well as the module number as its elements +workingData <- RunModule(variables = variables, variableDetails = variableDetails, modules = modules, data = pbc, moduleSequenceNumber = 1) + +# The analyst can then run required analysis on workingData$data to verify the module performed the steps they wished if not they can update module csv module 1 to run what they prefer to do in this step and rerun until they are satisfyid with its output + +#CHECKS AND ANALYSIS +#rerun +workingData <- RunModule(variables = variables, variableDetails = variableDetails, modules = modules, data = pbc, moduleSequenceNumber = 1) + +#Once the step is satisfied next module is ran with the first module output +workingData <- RunModule(variables = variables, variableDetails = variableDetails, modules = modules, data = workingData, moduleSequenceNumber = 2) + +#This is then continued for as many default modules as there are created or however many the analyst wishes to run +#The working data/bllflow object will store a log for each module ran however will overwrite if the same module number is ran twice +``` + + From 890f4c3a5d18e15f9b0b1cd5b3e60c15a1de4a7a Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 11 Jul 2019 15:05:10 -0400 Subject: [PATCH 026/123] [Feature] Module sequence error trapping --- NAMESPACE | 1 + R/module-instruction-parsing.R | 84 ++++++++++++++++++++++++++++++++++ R/strings.R | 8 +++- 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 R/module-instruction-parsing.R diff --git a/NAMESPACE b/NAMESPACE index cb1d9a7a..0a26165f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,6 +17,7 @@ export(GetDDIDescription) export(GetDDIVariables) export(ProcessDDIVariableDetails) export(ReadDDI) +export(RunModule) export(SummaryDataLong) export(UpdateMSW) export(WriteDDIPopulatedMSW) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R new file mode 100644 index 00000000..e6248202 --- /dev/null +++ b/R/module-instruction-parsing.R @@ -0,0 +1,84 @@ +#Parse out the functions inside each module returning a list of the functions in it +ParseModuleFunctions <- function(moduleTable, moduleSequence) { + #Check row with module sequence + + #Seperate each function into seperate list element with 2 elements function name and its arguments + +} + +#Uses the function list to parse out its arguments creating a "function" object +ParseFunctionArguments <- function(functionList) { + +} + +#Uses the function object to find the variables for it and find all the applicable variables +ParseFunctionVariables <- + function(functionList, variables, variableDetails) { + + } + +#Uses the function objects to create a recipy +CreateRecipy <- function(functionObjectList, workingData) { + +} + +#verify module sequence matches the passed data +VerifyDataAndSequenceMatch <- function(moduleSequenceNumber, data) { + if (moduleSequenceNumber == 1 && class(data) == "workingData") { + stop( + "Working data was passed when sequance is at step 1. Make sure to pass the starting data. + Aborting operation!" + ) + } else if (class(data) != "workingData") { + stop( + paste( + "Non workingData was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", + moduleSequenceNumber, + " + Aborting operation!" + ) + ) + } else if (data[[pkg.globals$WorkingData.ModuleSequenceNumber]] + 1 != moduleSequenceNumber) { + stop( + paste( + "The WorkingData passed is not from the previous module please verify that the data passed is from module", + moduleSequenceNumber - 1, + " + Aborting operation!" + ) + ) + } + } + +#' @export +RunModule <- + function(variables, + modules, + data, + moduleSequenceNumber, + variableDetails = NULL) { + #Standardize moduleSequenceNumber + if (moduleSequenceNumber == "all") { + moduleOrder <- modules[, pkg.globals$Modules.DefaultOrder] + # Create moduleSequenceNumber out of all default modules + moduleSequenceNumber <- + min(moduleOrder, na.rm = TRUE):max(moduleOrder, na.rm = TRUE) + } else if (!is.numeric(moduleSequenceNumber)) { + stop( + "Invalid moduleSequenceNumberPassed please make sure its either the word all or numeric. + Aborting operation!", + call. = FALSE + ) + } + + VerifyDataAndSequenceMatch(moduleSequenceNumber, data) + + workingData <- data + for (sequenceElement in moduleSequenceNumber) { + moduleFunctions <- + ParseModuleFunctions(moduleTable = modules, moduleSequence = sequenceElement) + workingData <- CreateRecipy(moduleFunctions, workingData) + } + + return(workingData) + } \ No newline at end of file diff --git a/R/strings.R b/R/strings.R index 8158cfc4..f3aefe78 100644 --- a/R/strings.R +++ b/R/strings.R @@ -65,4 +65,10 @@ pkg.globals$LongTable.GroupByLabel <- "groupByLabel" pkg.globals$LongTable.GroupByValueLabel <- "groupByValueLabel" pkg.globals$LongTable.ClassName <- "LongTable" pkg.globals$LongTable.MetaData <- "MetaData" -pkg.globals$LongTable.SmallCells <- "smallCells" \ No newline at end of file +pkg.globals$LongTable.SmallCells <- "smallCells" + +# Module Column names +pkg.globals$Modules.DefaultOrder <- "DefaultOrder" + +# WorkingData contents +pkg.globals$WorkingData.ModuleSequenceNumber <- "moduleSequenceNumber" \ No newline at end of file From 81c8e7c8a8ef7fc16a9cc6b58e04ae9b83327134 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 11 Jul 2019 15:33:05 -0400 Subject: [PATCH 027/123] [Bug] Fixed missing comma --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 27327e28..7dbb931f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -40,7 +40,7 @@ Suggests: magrittr, survival, rms, - cmprsk + cmprsk, testthat URL: https://github.com/Big-Life-Lab/bllflow BugReports: https://github.com/Big-Life-Lab/bllflow/issues From 7263905ebebac920065e911ac31b4a982e9e0032 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 17 Jul 2019 09:22:33 -0400 Subject: [PATCH 028/123] [Feature] Function Object created --- DESCRIPTION | 3 +- R/module-instruction-parsing.R | 145 ++++++++++++++----- R/strings.R | 8 +- inst/extdata/Meeting Version - Variables.csv | 2 +- 4 files changed, 122 insertions(+), 36 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7dbb931f..1e054db2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -25,7 +25,8 @@ Depends: R (>= 3.2), tableone, DDIwR, - xml2 + xml2, + stringr Imports: rstudioapi, glue, diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index e6248202..14776621 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -1,22 +1,93 @@ #Parse out the functions inside each module returning a list of the functions in it -ParseModuleFunctions <- function(moduleTable, moduleSequence) { - #Check row with module sequence - - #Seperate each function into seperate list element with 2 elements function name and its arguments - -} - -#Uses the function list to parse out its arguments creating a "function" object -ParseFunctionArguments <- function(functionList) { - -} +ParseModuleFunctions <- + function(moduleTable, + moduleSequence, + variables, + variableDetails) { + #Check row with module sequence + rawFunc <- + as.character(moduleTable[moduleTable[[pkg.globals$Modules.DefaultOrder]] == moduleSequence, pkg.globals$WorkingData.ModuleOperations]) + + funcList <- strsplit(rawFunc, "],")[[1]] + #print(funcList) + + #Seperate each function into seperate list element with 2 elements function name and its arguments + refactoredFuncsWithArgs <- list() + + for (singleFunc in funcList) { + funcWithArgs <- as.list(strsplit(singleFunc, "::")[[1]]) + funcWithArgs[[2]] <- + stringr::str_remove_all(funcWithArgs[[2]], "[\\[\\]]") + funcWithArgs[[2]] <- + as.list(strsplit(funcWithArgs[[2]], ",")[[1]]) + + funcName <- funcWithArgs[[1]] + refactoredFuncsWithArgs[[funcName]] <- list() + + for (argument in funcWithArgs[[2]]) { + tmpArg <- as.list(strsplit(argument, "=")[[1]]) + tmpArg[[2]] <- + stringr::str_remove_all(tmpArg[[2]], "[\"\"]") + refactoredFuncsWithArgs[[funcName]][[pkg.globals$FunctionList.Arguments]][[tmpArg[[1]]]] <- + tmpArg[[2]] + } + } + + refactoredFuncsWithArgsAndVars <- + ParseFunctionVariables( + functionList = refactoredFuncsWithArgs, + variables = variables, + moduleSequenceNumber = moduleSequence + ) + + return(refactoredFuncsWithArgsAndVars) + } #Uses the function object to find the variables for it and find all the applicable variables ParseFunctionVariables <- - function(functionList, variables, variableDetails) { + function(functionList, + variables, + moduleSequenceNumber) { + #Check which rows contain the module currently being ran + affectedRows <- + variables[grepl(moduleSequenceNumber, variables[[pkg.globals$columnNames.Operations]]),] + + #Check the additional params for the operations and add to function + for (currentFuncName in names(functionList)) { + if (currentFuncName %in% colnames(affectedRows)) { + columnsToCheck <- + affectedRows[affectedRows[[currentFuncName]] != FALSE, c(currentFuncName, pkg.globals$columnNames.Variable)] + + for (row in 1:nrow(columnsToCheck)) { + functionList[[currentFuncName]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columnsToCheck[row, pkg.globals$columnNames.Variable])]] <- + columnsToCheck[row, currentFuncName] + } + + } else{ + warning( + paste( + "Requested function", + currentFuncName, + "is not present in variables please verify the function name is correct" + ), + call. = FALSE + ) + } + } + #Create new functions in case of additional params being there } +#Define exact functions depending on variable arguments +CreateExactFunction <- function(functionList, modelSequenceNumber){ + #Parse out non TRUE parameters + for (funCheck in functionList) { + + } + + #Create new functions with the new paramev ters +} + #Uses the function objects to create a recipy CreateRecipy <- function(functionObjectList, workingData) { @@ -24,31 +95,34 @@ CreateRecipy <- function(functionObjectList, workingData) { #verify module sequence matches the passed data VerifyDataAndSequenceMatch <- function(moduleSequenceNumber, data) { - if (moduleSequenceNumber == 1 && class(data) == "workingData") { + if (moduleSequenceNumber[[1]] == 1 && + class(data) == "workingData") { stop( "Working data was passed when sequance is at step 1. Make sure to pass the starting data. Aborting operation!" ) } else if (class(data) != "workingData") { - stop( - paste( - "Non workingData was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", - moduleSequenceNumber, - " - Aborting operation!" - ) - ) - } else if (data[[pkg.globals$WorkingData.ModuleSequenceNumber]] + 1 != moduleSequenceNumber) { - stop( - paste( - "The WorkingData passed is not from the previous module please verify that the data passed is from module", - moduleSequenceNumber - 1, - " - Aborting operation!" - ) - ) - } + if (moduleSequenceNumber[[1]] != 1) { + stop( + paste( + "Non workingData was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", + moduleSequenceNumber, + " + Aborting operation!" + ) + ) + } + } else if (data[[pkg.globals$WorkingData.ModuleSequenceNumber]] + 1 != moduleSequenceNumber[[1]]) { + stop( + paste( + "The WorkingData passed is not from the previous module please verify that the data passed is from module", + moduleSequenceNumber - 1, + " + Aborting operation!" + ) + ) } + } #' @export RunModule <- @@ -58,7 +132,7 @@ RunModule <- moduleSequenceNumber, variableDetails = NULL) { #Standardize moduleSequenceNumber - if (moduleSequenceNumber == "all") { + if (moduleSequenceNumber[[1]] == "all") { moduleOrder <- modules[, pkg.globals$Modules.DefaultOrder] # Create moduleSequenceNumber out of all default modules moduleSequenceNumber <- @@ -76,7 +150,12 @@ RunModule <- workingData <- data for (sequenceElement in moduleSequenceNumber) { moduleFunctions <- - ParseModuleFunctions(moduleTable = modules, moduleSequence = sequenceElement) + ParseModuleFunctions( + moduleTable = modules, + moduleSequence = sequenceElement, + variables = variables, + variableDetails = variableDetails + ) workingData <- CreateRecipy(moduleFunctions, workingData) } diff --git a/R/strings.R b/R/strings.R index 431615dd..8e981d4b 100644 --- a/R/strings.R +++ b/R/strings.R @@ -3,6 +3,8 @@ pkg.globals <- new.env() pkg.globals$columnNames.Min <- "min" pkg.globals$columnNames.Max <- "max" pkg.globals$columnNames.Outlier <- "outlier" +pkg.globals$columnNames.Operations <- "operations" +pkg.globals$columnNames.Variable <- "variable" # Variable Details Sheet Column Names pkg.globals$argument.Data <- "data" @@ -73,5 +75,9 @@ pkg.globals$LongTable.LongTable <- "summaryData" pkg.globals$Modules.DefaultOrder <- "DefaultOrder" # WorkingData contents -pkg.globals$WorkingData.ModuleSequenceNumber <- "moduleSequenceNumber" +pkg.globals$WorkingData.ModuleSequenceNumber <- "moduleSequenceNumber" +pkg.globals$WorkingData.ModuleOperations <- "ModuleOperations" +#FunctionList contents +pkg.globals$FunctionList.Arguments <- "arguments" +pkg.globals$FunctionList.VariableArguments <- "variablesArguments" \ No newline at end of file diff --git a/inst/extdata/Meeting Version - Variables.csv b/inst/extdata/Meeting Version - Variables.csv index 06270aa6..4f43d6ae 100644 --- a/inst/extdata/Meeting Version - Variables.csv +++ b/inst/extdata/Meeting Version - Variables.csv @@ -1,6 +1,6 @@ variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,operations,centre,interaction,RCS,dummy,impute,2factor,min,max,outlier age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,2,TRUE,FALSE,4,FALSE,FALSE,FALSE,,, -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,"1,2",FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,,, +sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,"1 ,2",FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,,, bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, From 0793eb533916f6aa000c90ae466c86d2a2f7aed1 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 22 Jul 2019 15:12:13 -0400 Subject: [PATCH 029/123] [Feature] Created arg specific functions --- R/module-instruction-parsing.R | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 14776621..8f4cd002 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -75,16 +75,34 @@ ParseFunctionVariables <- } } #Create new functions in case of additional params being there + functionList <- CreateExactFunction(functionList) + return(functionList) } #Define exact functions depending on variable arguments -CreateExactFunction <- function(functionList, modelSequenceNumber){ +CreateExactFunction <- function(functionList) { #Parse out non TRUE parameters - for (funCheck in functionList) { - + for (funName in names(functionList)) { + if (!is.null(functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]])) { + for (varName in names(functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]])) { + if (functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] != TRUE) { + # create new func and move all the ones with that value there + if (is.null(functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]])) { + functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- + functionList[[funName]][[pkg.globals$FunctionList.Arguments]] + functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- + functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] + } else{ + functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- + functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] + } + } + } + } } + return(functionList) #Create new functions with the new paramev ters } From 85a5168efd7511a67e112045456ffacee19be85e Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 6 Aug 2019 10:39:33 -0400 Subject: [PATCH 030/123] [Refactor] Changed function special character from - to :: --- R/module-instruction-parsing.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 8f4cd002..c3f65dfb 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -88,13 +88,13 @@ CreateExactFunction <- function(functionList) { for (varName in names(functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]])) { if (functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] != TRUE) { # create new func and move all the ones with that value there - if (is.null(functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]])) { - functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- + if (is.null(functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]])) { + functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- functionList[[funName]][[pkg.globals$FunctionList.Arguments]] - functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- + functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] } else{ - functionList[[paste(funName, "-", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- + functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] } } From f1b8826da19e4d49e98a1c22e724ce8c2b58c050 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 19 Aug 2019 13:05:08 -0400 Subject: [PATCH 031/123] [Feature] Wrapper function skeleton --- DESCRIPTION | 3 +- R/step-function-recoding.R | 93 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 R/step-function-recoding.R diff --git a/DESCRIPTION b/DESCRIPTION index 1e054db2..fb10482d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,7 +26,8 @@ Depends: tableone, DDIwR, xml2, - stringr + stringr, + recipes Imports: rstudioapi, glue, diff --git a/R/step-function-recoding.R b/R/step-function-recoding.R new file mode 100644 index 00000000..8ba2fe48 --- /dev/null +++ b/R/step-function-recoding.R @@ -0,0 +1,93 @@ +step_bllflowMeanimpute <- + function(recipe, + ..., + role = NA, + trained = FALSE, + append = TRUE, + suffix = "MeanImpute", + means = NULL, + trim = 0, + skip = FALSE, + id = rand_id("bllflowMeanimpute")) { + add_step( + recipe, + step_bllflowMeanimpute_new( + terms = ellipse_check(...), + role = role, + trained = trained, + append = append, + suffix = suffix, + means = means, + trim = trim, + skip = skip, + id = id + ) + ) + } + +step_bllflowMeanimpute_new <- + function(terms, role, trained, means, trim, skip, id) { + step( + subclass = "bllflowMeanimpute", + terms = terms, + role = role, + trained = trained, + append = append, + suffix = suffix, + means = means, + trim = trim, + skip = skip, + id = id + ) + } + +#' @export +prep.step_bllflowMeanimpute <- function(x, training, info = NULL, ...) { + col_names <- terms_select(x$terms, info = info) + check_type(training[, col_names]) + + means <- + vapply(training[, col_names], + mean, + c(mean = 0), + trim = x$trim, + na.rm = TRUE) + step_bllflowMeanimpute_new( + terms = x$terms, + role = x$role, + trained = TRUE, + means, + trim = x$trim, + skip = x$skip, + id = x$id + ) +} + +#' @export +bake.step_bllflowMeanimpute <- function(object, new_data, ...) { + for (i in names(object$means)) { + if (any(is.na(new_data[, i]))) + new_data[is.na(new_data[, i]), i] <- object$means[i] + } + as_tibble(new_data) +} + +print.step_bllflowMeanimpute <- + function(x, width = max(20, options()$width - 30), ...) { + cat("Mean Imputation for ", sep = "") + printer(names(x$means), x$terms, x$trained, width = width) + invisible(x) + } + +#' @export +tidy.step_bllflowMeanimpute <- function(x, ...) { + if (is_trained(x)) { + res <- tibble(terms = names(x$means), + model = x$means) + } else { + term_names <- sel2char(x$terms) + res <- tibble(terms = term_names, model = na_dbl) + } + res$id <- x$id + res +} \ No newline at end of file From 5288c1596645a42a053062031ec1f41b1c19b26f Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 20 Aug 2019 14:13:55 -0400 Subject: [PATCH 032/123] [Feature] Created bllFlow meanImpute --- NAMESPACE | 3 + R/step-function-recoding.R | 219 +++++++++++++++++++++++++------------ 2 files changed, 153 insertions(+), 69 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index ff419ad7..88d60c63 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,8 +6,10 @@ S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) S3method(WriteDDIPopulatedMSW,BLLFlow) S3method(WriteDDIPopulatedMSW,BLLFlowDDI) +S3method(bake,step_meantest) S3method(clean.Max,BLLFlow) S3method(clean.Min,BLLFlow) +S3method(prep,step_meantest) S3method(print,metaDataLog) export(BLLFlow) export(CheckSmallCells) @@ -23,3 +25,4 @@ export(UpdateMSW) export(WriteDDIPopulatedMSW) export(clean.Max) export(clean.Min) +export(step_meantest) diff --git a/R/step-function-recoding.R b/R/step-function-recoding.R index 8ba2fe48..a7d54b77 100644 --- a/R/step-function-recoding.R +++ b/R/step-function-recoding.R @@ -1,34 +1,43 @@ -step_bllflowMeanimpute <- - function(recipe, - ..., - role = NA, - trained = FALSE, - append = TRUE, - suffix = "MeanImpute", - means = NULL, - trim = 0, - skip = FALSE, - id = rand_id("bllflowMeanimpute")) { - add_step( - recipe, - step_bllflowMeanimpute_new( - terms = ellipse_check(...), - role = role, - trained = trained, - append = append, - suffix = suffix, - means = means, - trim = trim, - skip = skip, - id = id - ) +#' @export +step_meantest <- function(recipe, + ..., + role = NA, + trained = FALSE, + skip = FALSE, + id = recipes::rand_id("meantest"), + append = FALSE, + suffix = "_meantest", + means = NULL, + trim = 0) { + terms <- recipes::ellipse_check(...) + recipes::add_step( + recipe, + step_meantest_new( + terms = terms, + trained = trained, + role = role, + append = append, + suffix = suffix, + means = means, + trim = trim, + skip = skip, + id = id ) - } + ) +} -step_bllflowMeanimpute_new <- - function(terms, role, trained, means, trim, skip, id) { +step_meantest_new <- + function(terms, + role, + trained, + append, + suffix, + means, + trim, + skip, + id) { step( - subclass = "bllflowMeanimpute", + subclass = "meantest", terms = terms, role = role, trained = trained, @@ -40,54 +49,126 @@ step_bllflowMeanimpute_new <- id = id ) } - #' @export -prep.step_bllflowMeanimpute <- function(x, training, info = NULL, ...) { - col_names <- terms_select(x$terms, info = info) - check_type(training[, col_names]) +prep.step_meantest <- function(x, training, info = NULL, ...) { + y <- recipes:::prep.step_meanimpute(x, training, info, ...) - means <- - vapply(training[, col_names], - mean, - c(mean = 0), - trim = x$trim, - na.rm = TRUE) - step_bllflowMeanimpute_new( - terms = x$terms, - role = x$role, - trained = TRUE, - means, - trim = x$trim, - skip = x$skip, - id = x$id + return( + step_meantest_new( + terms = x$terms, + trained = TRUE, + role = x$role, + append = x$append, + suffix = x$suffix, + means = y$means, + trim = x$trim, + skip = x$skip, + id = x$id + ) ) } #' @export -bake.step_bllflowMeanimpute <- function(object, new_data, ...) { - for (i in names(object$means)) { - if (any(is.na(new_data[, i]))) - new_data[is.na(new_data[, i]), i] <- object$means[i] +bake.step_meantest <- function(object, new_data, ...) { + require(tibble) + for (varName in names(object$means)) { + if (any(is.na(new_data[, varName]))) { + newVarName <- paste(varName, object$suffix, sep = "") + new_data[newVarName] <- new_data[varName] + new_data[is.na(new_data[, newVarName]), newVarName] <- + object$means[[varName]] + if (!object$append) { + new_data[varName] <- NULL + } + } } - as_tibble(new_data) + + return(as_tibble(new_data)) } -print.step_bllflowMeanimpute <- - function(x, width = max(20, options()$width - 30), ...) { - cat("Mean Imputation for ", sep = "") - printer(names(x$means), x$terms, x$trained, width = width) - invisible(x) - } +#' step_bllflowMeanimpute <- +#' function(recipe, +#' ..., +#' role = NA, +#' trained = FALSE, +#' append = TRUE, +#' suffix = "MeanImpute", +#' means = NULL, +#' trim = 0, +#' skip = FALSE, +#' id = rand_id("bllflowMeanimpute")) { +#' add_step( +#' recipe, +#' step_bllflowMeanimpute_new( +#' terms = ellipse_check(...), +#' role = role, +#' trained = trained, +#' append = append, +#' suffix = suffix, +#' means = means, +#' trim = trim, +#' skip = skip, +#' id = id +#' ) +#' ) +#' } +#' +#' step_bllflowMeanimpute_new <- +#' function(terms, role, trained, means, trim, skip, id) { +#' step( +#' subclass = "bllflowMeanimpute", +#' terms = terms, +#' role = role, +#' trained = trained, +#' append = append, +#' suffix = suffix, +#' means = means, +#' trim = trim, +#' skip = skip, +#' id = id +#' ) +#' } +#' +#' #' @export +#' prep.step_bllflowMeanimpute <- function(x, training, info = NULL, ...) { +#' col_names <- terms_select(x$terms, info = info) +#' check_type(training[, col_names]) +#' +#' means <- +#' vapply(training[, col_names], +#' mean, +#' c(mean = 0), +#' trim = x$trim, +#' na.rm = TRUE) +#' step_bllflowMeanimpute_new( +#' terms = x$terms, +#' role = x$role, +#' trained = TRUE, +#' means, +#' trim = x$trim, +#' skip = x$skip, +#' id = x$id +#' ) +#' } +#' -#' @export -tidy.step_bllflowMeanimpute <- function(x, ...) { - if (is_trained(x)) { - res <- tibble(terms = names(x$means), - model = x$means) - } else { - term_names <- sel2char(x$terms) - res <- tibble(terms = term_names, model = na_dbl) - } - res$id <- x$id - res -} \ No newline at end of file +#' +#' print.step_bllflowMeanimpute <- +#' function(x, width = max(20, options()$width - 30), ...) { +#' cat("Mean Imputation for ", sep = "") +#' printer(names(x$means), x$terms, x$trained, width = width) +#' invisible(x) +#' } +#' +#' #' @export +#' tidy.step_bllflowMeanimpute <- function(x, ...) { +#' if (is_trained(x)) { +#' res <- tibble(terms = names(x$means), +#' model = x$means) +#' } else { +#' term_names <- sel2char(x$terms) +#' res <- tibble(terms = term_names, model = na_dbl) +#' } +#' res$id <- x$id +#' res +#' } \ No newline at end of file From 587b32bfe55666f7323daf4ae25589b2935aebf7 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 20 Aug 2019 15:39:11 -0400 Subject: [PATCH 033/123] [Feature] Added a testing viggnette --- R/step-function-recoding.R | 7 +++++ vignettes/Recode of recipy test.Rmd | 46 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 vignettes/Recode of recipy test.Rmd diff --git a/R/step-function-recoding.R b/R/step-function-recoding.R index a7d54b77..ef9950f9 100644 --- a/R/step-function-recoding.R +++ b/R/step-function-recoding.R @@ -86,6 +86,13 @@ bake.step_meantest <- function(object, new_data, ...) { return(as_tibble(new_data)) } +print.step_meantest <- + function(x, width = max(20, options()$width - 30), ...) { + cat("Mean Imputation for ", sep = "") + recipes:::printer(names(x$means), x$terms, x$trained, width = width) + invisible(x) + } + #' step_bllflowMeanimpute <- #' function(recipe, #' ..., diff --git a/vignettes/Recode of recipy test.Rmd b/vignettes/Recode of recipy test.Rmd new file mode 100644 index 00000000..267c1688 --- /dev/null +++ b/vignettes/Recode of recipy test.Rmd @@ -0,0 +1,46 @@ +--- +title: "Recode of the recipe test" +author: "Rostyslav Vyuha" +date: "August 20, 2019" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +First the simple dataset creation make sure that the column u want to work with is a numeric + +```{r} +mockData <- data.frame(foo = c(NA, 1, 1, 6), bar = c(3, 4, 6, NA), ter = c(12, NA, 20, 9)) + +``` + +Then we create our recipy with the mock data + +```{r} +library(recipes) +library(bllflow) +testRecipy <- recipe(foo ~., data = mockData) + +``` + +Now we can add the standard meanimpute call but with my function + +```{r} +testRecipy <- step_meanimpute(testRecipy, bar) +testRecipy <- step_meantest(testRecipy, ter) +testObj <- prep(testRecipy, training = mockData) +testOut <- bake(testObj, new_data = mockData) +print(testOut) +``` + +Now for custom suffix and appending to the original variable + +```{r} +testRecipy <- recipe(foo ~., data = mockData) +testRecipy <- step_meantest(testRecipy, ter, bar, suffix = "_TheTestIsWorking", append = TRUE) +testObj <- prep(testRecipy, training = mockData) +testOut <- bake(testObj, new_data = mockData) +print(testOut) +``` \ No newline at end of file From 242edf3437fe3200eab874eff44c0ac2d219d4c0 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 9 Sep 2019 14:08:14 -0400 Subject: [PATCH 034/123] [Feature] Modification on main function loop --- R/recode-with-table.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 43c7863b..fff2f0a4 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -265,6 +265,11 @@ RecodeColumns <- log, printNote, elseDefault) { + # Split variables to process into recode map and func + mapVariablesToProcess <- variablesToProcess[grepl("",variablesToProcess[pkg.globals$argument.CatValue])] + + funcVariablesToProcess + labelList <- list() # Set interval if none is present intervalPresent <- TRUE @@ -275,7 +280,7 @@ RecodeColumns <- intervalPresent <- FALSE } - # Loop through the rows + # Loop through the rows of recode vars while (nrow(variablesToProcess) > 0) { variableBeingChecked <- as.character(variablesToProcess[1, pkg.globals$argument.Variables]) From 1aa2ec07b725217798d606e88d8cf73ab55694a8 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 9 Sep 2019 14:50:12 -0400 Subject: [PATCH 035/123] . --- R/recode-with-table.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index fff2f0a4..f3cd751f 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -266,9 +266,9 @@ RecodeColumns <- printNote, elseDefault) { # Split variables to process into recode map and func - mapVariablesToProcess <- variablesToProcess[grepl("",variablesToProcess[pkg.globals$argument.CatValue])] + mapVariablesToProcess <- variablesToProcess[grepl("map::",variablesToProcess[pkg.globals$argument.CatValue]),] - funcVariablesToProcess + funcVariablesToProcess <- variablesToProcess[grepl("func::",variablesToProcess[pkg.globals$argument.CatValue]),] labelList <- list() # Set interval if none is present From a7076c00d6c6aedf923a4bac626819f1d7871cae Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 16 Sep 2019 14:22:25 -0400 Subject: [PATCH 036/123] [Feature] Set up recursive function for Function variables --- R/recode-with-table.R | 77 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index e9284500..b59f6d1a 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -267,9 +267,14 @@ RecodeColumns <- printNote, elseDefault) { # Split variables to process into recode map and func - mapVariablesToProcess <- variablesToProcess[grepl("map::",variablesToProcess[pkg.globals$argument.CatValue]),] + mapVariablesToProcess <- + variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] - funcVariablesToProcess <- variablesToProcess[grepl("func::",variablesToProcess[pkg.globals$argument.CatValue]),] + funcVariablesToProcess <- + variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + + recVariablesToProcess <- + variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] labelList <- list() # Set interval if none is present @@ -277,18 +282,18 @@ RecodeColumns <- validIntervals <- c("[,]", "[,)", "(,]") intervalDefault <- "[,)" recodedData <- dataSource[, 0] - if (is.null(variablesToProcess[[pkg.globals$argument.Interval]])) { + if (is.null(recVariablesToProcess[[pkg.globals$argument.Interval]])) { intervalPresent <- FALSE } # Loop through the rows of recode vars - while (nrow(variablesToProcess) > 0) { + while (nrow(recVariablesToProcess) > 0) { variableBeingChecked <- - as.character(variablesToProcess[1, pkg.globals$argument.Variables]) + as.character(recVariablesToProcess[1, pkg.globals$argument.Variables]) rowsBeingChecked <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] - variablesToProcess <- - variablesToProcess[!variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] + recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] + recVariablesToProcess <- + recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] firstRow <- rowsBeingChecked[1, ] # Check for varialbe existance in data dataVariableBeingChecked <- @@ -327,11 +332,13 @@ RecodeColumns <- } # Set factor for all recode values - labelList[[variableBeingChecked]] <- CreateLabelListElement(rowsBeingChecked) + labelList[[variableBeingChecked]] <- + CreateLabelListElement(rowsBeingChecked) elseValue <- as.character(rowsBeingChecked[rowsBeingChecked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) if (length(elseValue) == 1) { - elseValue <- RecodeVariableNAFormating(elseValue, labelList[[variableBeingChecked]]$type) + elseValue <- + RecodeVariableNAFormating(elseValue, labelList[[variableBeingChecked]]$type) if (isEqual(elseValue, "copy")) { dataVariableBeingChecked <- GetDataVariableName( @@ -407,7 +414,7 @@ RecodeColumns <- } else{ if (fromValues[[1]] == fromValues[[2]]) { interval <- "[,]" - }else{ + } else{ interval <- intervalDefault } validRowIndex <- CompareValueBasedOnInterval( @@ -425,7 +432,8 @@ RecodeColumns <- logTable[row, "rowsRecoded"] <- sum(validRowIndex, na.rm = TRUE) - valueRecorded <- RecodeVariableNAFormating(valueRecorded, labelList[[variableBeingChecked]]$type) + valueRecorded <- + RecodeVariableNAFormating(valueRecorded, labelList[[variableBeingChecked]]$type) if (isEqual(valueRecorded, "copy")) { valueRecorded <- dataSource[validRowIndex, dataVariableBeingChecked] @@ -461,6 +469,17 @@ RecodeColumns <- } } + # Process funcVars + derivedReturn <- + RecodeDerivedVariables( + recodedData = recodedData, + variablesToProcess = funcVariablesToProcess, + log = log, + printNote = printNote, + elseDefault = elseDefault, + labelList = labelList, + varStack = c() + ) # Populate data Labels recodedData <- LabelData(labelList = labelList, dataToLabel = recodedData) @@ -559,11 +578,43 @@ RecodeVariableNAFormating <- function(cellValue, varType) { recodeValue <- haven::tagged_na(as.character(naValueList[[3]])) } } else{ - if (!isEqual(varType, pkg.globals$argument.CatType) && !isEqual(cellValue, "copy")) { + if (!isEqual(varType, pkg.globals$argument.CatType) && + !isEqual(cellValue, "copy")) { cellValue <- as.numeric(cellValue) } recodeValue <- cellValue } return(recodeValue) +} + +RecodeDerivedVariables <- function(recodedData, + variablesToProcess, + log, + printNote, + elseDefault, + labelList, + varStack) { + # Check for rows present + if (nrow(variablesToProcess) > 0) { + sampleRow <- variablesToProcess[1, ] + varName <- sampleRow[[pkg.globals$argument.Variables]] + feederVars <- + as.list(strsplit(sampleRow[[pkg.globals$argument.VariableStart]], "::"))[[1]][[2]] + feederVars <- gsub("\\[|\\]", "", feederVars) + feederVars <- as.list(strsplit(feederVars,","))[[1]] + feederVars <- setdiff(feederVars,names(recodedData)) + # Check for presense in varStack + if (varName %in% varStack) { + + } + }else{ + print("HMMMMMMMMM") + } + # Get one row to check for vars + + # if var not in recodeData check stack + # if in stack error in not recurse with smaller variable to process + # if not in variable to processes error + } \ No newline at end of file From bd7982366bad66718e777b61a94109491b9ba653 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 17 Sep 2019 15:37:56 -0400 Subject: [PATCH 037/123] [Feature] Got the function call working --- R/recode-with-table.R | 101 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 88 insertions(+), 13 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index b59f6d1a..575958ca 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -596,25 +596,100 @@ RecodeDerivedVariables <- function(recodedData, labelList, varStack) { # Check for rows present - if (nrow(variablesToProcess) > 0) { + while (nrow(variablesToProcess) > 0) { sampleRow <- variablesToProcess[1, ] varName <- sampleRow[[pkg.globals$argument.Variables]] + varStack <- c(varStack, varName) + # obtain rows to process and updated variables to Process + rowsToProcess <- + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == varName,] + variablesToProcess <- + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != varName,] + + # Check for presence of feeder variables in data and in the variable being processed stack feederVars <- as.list(strsplit(sampleRow[[pkg.globals$argument.VariableStart]], "::"))[[1]][[2]] feederVars <- gsub("\\[|\\]", "", feederVars) - feederVars <- as.list(strsplit(feederVars,","))[[1]] - feederVars <- setdiff(feederVars,names(recodedData)) + feederVars <- as.list(strsplit(feederVars, ","))[[1]] + usedFeederVars <- feederVars + feederVars <- setdiff(feederVars, names(recodedData)) + # Check for presense in varStack - if (varName %in% varStack) { + if (length(intersect(feederVars, varStack)) > 0) { + conflictVars <- intersect(feederVars, varStack) + stop( + paste( + conflictVars, + "is required to create", + varName, + "but", + varName, + "is needed to create", + conflictVars + ) + ) + } + + # # Update varStack and recurse to get the feeder vars + # for (oneFeeder in feederVars) { + # # Need to check recoded data again in case a recursion added it + # if (!oneFeeder %in% names(recodedData)) { + # derivedReturn <- + # RecodeDerivedVariables( + # recodedData = recodedData, + # variablesToProcess = variablesToProcess, + # log = log, + # printNote = printNote, + # elseDefault = elseDefault, + # labelList = labelList, + # varStack = varStack + # ) + # varStack <- derivedReturn$varStack + # labelList <- derivedReturn$labelList + # recodedData <- derivedReturn$recodedData + # variablesToProcess <- derivedReturn$variablesToProcess + # } + # } + + # Obtain the function for each row + for (rowNum in 1:nrow(rowsToProcess)) { + rowBeingChecked <- rowsToProcess[rowNum, ] + funcCell <- rowBeingChecked[[pkg.globals$argument.CatValue]] + functionBeingUsed <- + as.list(strsplit(funcCell, "::"))[[1]][[2]] + + # USE *list to unpack into seperate args + # Use from to calculate ranges for values + fromCell <- rowBeingChecked[[pkg.globals$argument.From]] + fromValues <- as.list(strsplit(fromCell, ","))[[1]] + # Catch default and else from values + + # Seperate the from into variables then find rows with appropriate ranges + + # Find common rows between all the sets of appropriate rows + + # Apply function on just those rows + columnValue <- + apply( + recodedData, + 1, + CalculateCustomFunctionRowValue, + variableNames = usedFeederVars, + customFunctionName = functionBeingUsed + ) } - }else{ - print("HMMMMMMMMM") } - # Get one row to check for vars - - # if var not in recodeData check stack - # if in stack error in not recurse with smaller variable to process - # if not in variable to processes error - -} \ No newline at end of file +} +CalculateCustomFunctionRowValue <- + function(row, variableNames, customFunctionName) { + rowValues <- list() + for (singleVarName in variableNames) { + rowValues <- append(rowValues, row[[singleVarName]]) + } + + customFunctionReturnValue <- + do.call(get(customFunctionName), rowValues) + + return(customFunctionReturnValue) + } \ No newline at end of file From 8389447a992dad19c75a89e3aaa8eb3cfeb9fc47 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 18 Sep 2019 15:30:14 -0400 Subject: [PATCH 038/123] [Feature] Recoded Packyears function --- R/TEMPORARY.R | 145 ++++++++++++++++++++++++++++++++++++++++++ R/recode-with-table.R | 24 ++++++- 2 files changed, 166 insertions(+), 3 deletions(-) create mode 100644 R/TEMPORARY.R diff --git a/R/TEMPORARY.R b/R/TEMPORARY.R new file mode 100644 index 00000000..99db2401 --- /dev/null +++ b/R/TEMPORARY.R @@ -0,0 +1,145 @@ +#( +# TypeOfSmoker2[SMKDSTYb], +# DHHAGE_cont, +# SMKG203, +# SMK_204b, +# tsq_ds[stpo[SMK_09A], stpoy[SMKG09C]], +# SMK_208b, +# SMK_05Bb, +# agec1[SMK_05Cb], +# s100[SMKG01C] +# ) +PackYearRecode <- + function(SMKDSTY, + DHHGAGE_cont, + SMKG203, + SMK_204, + SMK_09A_B, + SMKG09C, + SMK_208, + SMK_05B, + SMK_05C, + SMKG01C_B, + SMK_01A) { + TypeOfSmoker2 <- SMKDSTY + stpo <- ifelse((SMK_09A_B == 6), 0, + ifelse((SMK_09A_B == 7), NA, + ifelse((SMK_09A_B == 8), NA, + ifelse((SMK_09A_B == 9), NA, SMK_09A_B) + ))) + stpoy <- + ifelse((SMKG09C == 1), PUMF[PUMF$variable_start = "SMKG09C" & + PUMF$variable_start_value = "1", ]$value, + ifelse((SMKG09C == 2), PUMF[PUMF$variable_start = "SMKG09C" & + PUMF$variable_start_value = "2", ]$value, + ifelse((SMKG09C == 3), PUMF[PUMF$variable_start = + "SMKG09C" & + PUMF$variable_start_value = "3", ]$value, + ifelse((SMKG09C == 6), 0, NA) + ))) + tsq_ds <- ifelse((stpo = 1), 0.5, + ifelse((stpo = 2), 1.5, + ifelse((stpo = 3), 2.5, + ifelse((stpo = 4), stpoy, NA + )))) + agecigd <- + ifelse((SMKG203 == 1), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "1", ]$value, + ifelse((SMKG203 == 2), PUMF[PUMF$variable_start = + "SMKG203" & + PUMF$variable_start_value = "2", ]$value, + ifelse((SMKG203 == 3), PUMF[PUMF$variable_start = + "SMKG203" & + PUMF$variable_start_value = "3", ]$value, + ifelse((SMKG203 == 4), PUMF[PUMF$variable_start = + "SMKG203" & + PUMF$variable_start_value = "4", ]$value, + ifelse((SMKG203 == 5), PUMF[PUMF$variable_start = + "SMKG203" & + PUMF$variable_start_value = "5", ]$value, + ifelse((SMKG203 == 6), PUMF[PUMF$variable_start = + "SMKG203" & + PUMF$variable_start_value = "6", ]$value, + ifelse((SMKG203 == + 7), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "7", ]$value, + ifelse((SMKG203 == + 8), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "8", ]$value, + ifelse((SMKG203 == + 9), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "9", ]$value, + ifelse((SMKG203 == + 10), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "10", ]$value, + ifelse((SMKG203 == + 11), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "11", ]$value, + ifelse((SMKG203 == + 96), PUMF[PUMF$variable_start = "SMKG203" & + PUMF$variable_start_value = "12", ]$value, NA) + )) + )) + )) + )) + ))) + agec1 <- + ifelse((SMKG01C_B == 1), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "1",]$value, + ifelse((SMKG01C_B == 2), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "2",]$value, + ifelse((SMKG01C_B == 3), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "3",]$value, + ifelse((SMKG01C_B == 4), PUMF[PUMF$variable_start = + "SMKG01C" & + PUMF$variable_start_value = "4",]$value, + ifelse((SMKG01C_B == 5), PUMF[PUMF$variable_start = + "SMKG01C" & + PUMF$variable_start_value = "5",]$value, + ifelse((SMKG01C_B == 6), PUMF[PUMF$variable_start = + "SMKG01C" & + PUMF$variable_start_value = "6",]$value, + ifelse((SMKG01C_B == 7), PUMF[PUMF$variable_start = + "SMKG01C" & + PUMF$variable_start_value = "7",]$value, + ifelse((SMKG01C_B == + 8), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "8",]$value, + ifelse((SMKG01C_B == + 9), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "9",]$value, + ifelse((SMKG01C_B == + 10), + PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "10",]$value, + ifelse((SMKG01C_B == + 11), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "11",]$value, + ifelse((SMKG01C_B == + 96), PUMF[PUMF$variable_start = "SMKG01C" & + PUMF$variable_start_value = "12",]$value, NA)) + ) + )) + )) + )) + ))) + s100 <- + ifelse((SMK_01A == 7), NA, + ifelse((SMK_01A == 8), NA, + ifelse((SMK_01A == 9), NA, SMK_01A))) + + packYears <- + PackYears1.fun( + TypeOfSmoker2, + DHHGAGE_cont, + agecigd, + SMK_204, + tsq_ds, + SMK_208, + SMK_05B, + SMK_05C, + agec1, + s100 + ) + + } \ No newline at end of file diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 575958ca..0b057e45 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -663,6 +663,15 @@ RecodeDerivedVariables <- function(recodedData, # Use from to calculate ranges for values fromCell <- rowBeingChecked[[pkg.globals$argument.From]] fromValues <- as.list(strsplit(fromCell, ","))[[1]] + fromList <- list() + for (singleFrom in fromValues) { + if (grepl("::", singleFrom)) { + # Seperate From range and variable + varRange <- as.list(strsplit(singleFrom, "::"))[[1]] + fromList[[varRange[[1]]]] <- varRange[[2]] + # Create list to pass to function + } + } # Catch default and else from values # Seperate the from into variables then find rows with appropriate ranges @@ -670,21 +679,30 @@ RecodeDerivedVariables <- function(recodedData, # Find common rows between all the sets of appropriate rows # Apply function on just those rows + columnValue <- apply( recodedData, 1, CalculateCustomFunctionRowValue, variableNames = usedFeederVars, - customFunctionName = functionBeingUsed + customFunctionName = functionBeingUsed, + fromList = fromList ) + } } } CalculateCustomFunctionRowValue <- - function(row, variableNames, customFunctionName) { + function(row, + variableNames, + customFunctionName, + fromList) { rowValues <- list() for (singleVarName in variableNames) { + if (!is.null(fromList[[singleVarName]])) { + + } rowValues <- append(rowValues, row[[singleVarName]]) } @@ -692,4 +710,4 @@ CalculateCustomFunctionRowValue <- do.call(get(customFunctionName), rowValues) return(customFunctionReturnValue) - } \ No newline at end of file + } From bfd40caca89e2fcd73e625717032a7b8a150fa1b Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 23 Sep 2019 11:14:06 -0400 Subject: [PATCH 039/123] [Feature] Finished packyear recode --- R/TEMPORARY.R | 65 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/R/TEMPORARY.R b/R/TEMPORARY.R index 99db2401..343cacad 100644 --- a/R/TEMPORARY.R +++ b/R/TEMPORARY.R @@ -1,14 +1,3 @@ -#( -# TypeOfSmoker2[SMKDSTYb], -# DHHAGE_cont, -# SMKG203, -# SMK_204b, -# tsq_ds[stpo[SMK_09A], stpoy[SMKG09C]], -# SMK_208b, -# SMK_05Bb, -# agec1[SMK_05Cb], -# s100[SMKG01C] -# ) PackYearRecode <- function(SMKDSTY, DHHGAGE_cont, @@ -127,7 +116,7 @@ PackYearRecode <- ifelse((SMK_01A == 7), NA, ifelse((SMK_01A == 8), NA, ifelse((SMK_01A == 9), NA, SMK_01A))) - + packYears <- PackYears1.fun( TypeOfSmoker2, @@ -142,4 +131,54 @@ PackYearRecode <- s100 ) - } \ No newline at end of file + return(packYears) + } +PackYears1.fun <- + function(TypeOfSmoker2, + Age_cont, + agecigd, + agecigo, + cigdayd, + tsq_ds, + cigdayf, + cigdayo, + dayocc, + agec1, + s100) { + ifelse2(TypeOfSmoker2 == 1, + pmax(((Age_cont - agecigd) * (cigdayd / 20)), 0.0137), + ifelse2( + TypeOfSmoker2 == 2, + pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) + ), 0.0137) + (pmax(( + cigdayo * dayocc / 30 + ), 1) * tsq_ds), + ifelse2( + TypeOfSmoker2 == 3, + (pmax(( + cigdayo * dayocc / 30 + ), 1) / 20) * (Age_cont - agec1), + ifelse2( + TypeOfSmoker2 == 4, + pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) + ), 0.0137), + ifelse2( + TypeOfSmoker2 == 5 & s100 == 's1001', + 0.0137, + ifelse2( + TypeOfSmoker2 == 5 & s100 == 's1002', + 0.007, + ifelse2(TypeOfSmoker2 == + 6, 0, NA) + ) + ) + ) + ) + )) + } +ifelse2 <- function(x, a, b) { + falseifNA <- function(x) { + ifelse(is.na(x), FALSE, x) + } + ifelse(falseifNA(x), a, b) +} \ No newline at end of file From ce3718273dba0f3a61183915482bb91c7feff203 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 24 Sep 2019 13:41:02 -0400 Subject: [PATCH 040/123] [Feature] PackYears function --- R/TEMPORARY.R | 101 ++++-------------------------------------- R/recode-with-table.R | 22 +++++++-- 2 files changed, 28 insertions(+), 95 deletions(-) diff --git a/R/TEMPORARY.R b/R/TEMPORARY.R index 343cacad..d2edfe98 100644 --- a/R/TEMPORARY.R +++ b/R/TEMPORARY.R @@ -9,109 +9,22 @@ PackYearRecode <- SMK_05B, SMK_05C, SMKG01C_B, - SMK_01A) { + SMK_01A, + SMK_207) { TypeOfSmoker2 <- SMKDSTY stpo <- ifelse((SMK_09A_B == 6), 0, ifelse((SMK_09A_B == 7), NA, ifelse((SMK_09A_B == 8), NA, ifelse((SMK_09A_B == 9), NA, SMK_09A_B) ))) - stpoy <- - ifelse((SMKG09C == 1), PUMF[PUMF$variable_start = "SMKG09C" & - PUMF$variable_start_value = "1", ]$value, - ifelse((SMKG09C == 2), PUMF[PUMF$variable_start = "SMKG09C" & - PUMF$variable_start_value = "2", ]$value, - ifelse((SMKG09C == 3), PUMF[PUMF$variable_start = - "SMKG09C" & - PUMF$variable_start_value = "3", ]$value, - ifelse((SMKG09C == 6), 0, NA) - ))) + stpoy <- SMKG09C tsq_ds <- ifelse((stpo = 1), 0.5, ifelse((stpo = 2), 1.5, ifelse((stpo = 3), 2.5, ifelse((stpo = 4), stpoy, NA )))) - agecigd <- - ifelse((SMKG203 == 1), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "1", ]$value, - ifelse((SMKG203 == 2), PUMF[PUMF$variable_start = - "SMKG203" & - PUMF$variable_start_value = "2", ]$value, - ifelse((SMKG203 == 3), PUMF[PUMF$variable_start = - "SMKG203" & - PUMF$variable_start_value = "3", ]$value, - ifelse((SMKG203 == 4), PUMF[PUMF$variable_start = - "SMKG203" & - PUMF$variable_start_value = "4", ]$value, - ifelse((SMKG203 == 5), PUMF[PUMF$variable_start = - "SMKG203" & - PUMF$variable_start_value = "5", ]$value, - ifelse((SMKG203 == 6), PUMF[PUMF$variable_start = - "SMKG203" & - PUMF$variable_start_value = "6", ]$value, - ifelse((SMKG203 == - 7), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "7", ]$value, - ifelse((SMKG203 == - 8), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "8", ]$value, - ifelse((SMKG203 == - 9), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "9", ]$value, - ifelse((SMKG203 == - 10), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "10", ]$value, - ifelse((SMKG203 == - 11), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "11", ]$value, - ifelse((SMKG203 == - 96), PUMF[PUMF$variable_start = "SMKG203" & - PUMF$variable_start_value = "12", ]$value, NA) - )) - )) - )) - )) - ))) - agec1 <- - ifelse((SMKG01C_B == 1), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "1",]$value, - ifelse((SMKG01C_B == 2), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "2",]$value, - ifelse((SMKG01C_B == 3), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "3",]$value, - ifelse((SMKG01C_B == 4), PUMF[PUMF$variable_start = - "SMKG01C" & - PUMF$variable_start_value = "4",]$value, - ifelse((SMKG01C_B == 5), PUMF[PUMF$variable_start = - "SMKG01C" & - PUMF$variable_start_value = "5",]$value, - ifelse((SMKG01C_B == 6), PUMF[PUMF$variable_start = - "SMKG01C" & - PUMF$variable_start_value = "6",]$value, - ifelse((SMKG01C_B == 7), PUMF[PUMF$variable_start = - "SMKG01C" & - PUMF$variable_start_value = "7",]$value, - ifelse((SMKG01C_B == - 8), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "8",]$value, - ifelse((SMKG01C_B == - 9), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "9",]$value, - ifelse((SMKG01C_B == - 10), - PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "10",]$value, - ifelse((SMKG01C_B == - 11), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "11",]$value, - ifelse((SMKG01C_B == - 96), PUMF[PUMF$variable_start = "SMKG01C" & - PUMF$variable_start_value = "12",]$value, NA)) - ) - )) - )) - )) - ))) + agecigd <- SMKG203 + agec1 <- SMKG01C_B s100 <- ifelse((SMK_01A == 7), NA, ifelse((SMK_01A == 8), NA, @@ -122,6 +35,7 @@ PackYearRecode <- TypeOfSmoker2, DHHGAGE_cont, agecigd, + SMK_207, SMK_204, tsq_ds, SMK_208, @@ -130,6 +44,9 @@ PackYearRecode <- agec1, s100 ) + # print(paste("typeOfSmoker2 =",TypeOfSmoker2, "Age_cont =", DHHGAGE_cont, "agecigd =", agecigd, "agecigo =", SMK_207, "cigdayd =", SMK_204, + # "tsq_ds =", tsq_ds, "cigdayf =", SMK_208, "cigdayo =", SMK_05B, "dayocc =", SMK_05C, "agec1 =", agec1, "s100 =", s100)) + # print(paste("PACKYEARS =", packYears)) return(packYears) } diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 0b057e45..9cdb64f7 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -480,6 +480,7 @@ RecodeColumns <- labelList = labelList, varStack = c() ) + recodedData <- derivedReturn # Populate data Labels recodedData <- LabelData(labelList = labelList, dataToLabel = recodedData) @@ -689,7 +690,9 @@ RecodeDerivedVariables <- function(recodedData, customFunctionName = functionBeingUsed, fromList = fromList ) + recodedData[[varName]] <- columnValue + return(recodedData) } } } @@ -700,10 +703,23 @@ CalculateCustomFunctionRowValue <- fromList) { rowValues <- list() for (singleVarName in variableNames) { - if (!is.null(fromList[[singleVarName]])) { - + # Catch out of bounds + if (is.null(row[[singleVarName]])) { + stop( + paste( + singleVarName, + "is not in the recoded data please make sure its recoded for this cycle!!" + ) + ) + } else{ + if (isEqual(row[[singleVarName]], "NA(a)")) { + row[[singleVarName]] <- haven::tagged_na("a") + } else if (isEqual(row[[singleVarName]], "NA(b)")) { + row[[singleVarName]] <- haven::tagged_na("b") + } + rowValues <- + append(rowValues, as.numeric(row[[singleVarName]])) } - rowValues <- append(rowValues, row[[singleVarName]]) } customFunctionReturnValue <- From 06219432eb28cb1a574cdcbd86d9cb1dc16fe9ed Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 26 Sep 2019 15:36:22 -0400 Subject: [PATCH 041/123] [Feature] Added ability to pass custom functions --- R/recode-with-table.R | 53 ++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 9cdb64f7..d9c973a3 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -1,3 +1,4 @@ +# Environment for custom script functions #' @title Recode with Table #' #' @name RecWTable @@ -60,7 +61,13 @@ RecWTable.default <- log = FALSE, printNote = TRUE, variables = NULL, - varLabels = NULL) { + varLabels = NULL, + customFunctionPath = NULL) { + # If custom Functions are passed create new environment and source + if(!is.null(customFunctionPath)){ + source(customFunctionPath) + } + # ---- Step 1: Detemine if the passed data is a list or single database appendNonDBColumns <- FALSE if (class(dataSource) == "list" && @@ -680,7 +687,7 @@ RecodeDerivedVariables <- function(recodedData, # Find common rows between all the sets of appropriate rows # Apply function on just those rows - + start_time <- Sys.time() columnValue <- apply( recodedData, @@ -690,6 +697,8 @@ RecodeDerivedVariables <- function(recodedData, customFunctionName = functionBeingUsed, fromList = fromList ) + end_time <- Sys.time() + print(end_time - start_time) recodedData[[varName]] <- columnValue return(recodedData) @@ -702,25 +711,27 @@ CalculateCustomFunctionRowValue <- customFunctionName, fromList) { rowValues <- list() - for (singleVarName in variableNames) { - # Catch out of bounds - if (is.null(row[[singleVarName]])) { - stop( - paste( - singleVarName, - "is not in the recoded data please make sure its recoded for this cycle!!" - ) - ) - } else{ - if (isEqual(row[[singleVarName]], "NA(a)")) { - row[[singleVarName]] <- haven::tagged_na("a") - } else if (isEqual(row[[singleVarName]], "NA(b)")) { - row[[singleVarName]] <- haven::tagged_na("b") - } - rowValues <- - append(rowValues, as.numeric(row[[singleVarName]])) - } - } + rowValues <- as.list(row[variableNames]) + rowValues <- unname(rowValues) + # for (singleVarName in variableNames) { + # # Catch out of bounds + # if (is.null(row[[singleVarName]])) { + # stop( + # paste( + # singleVarName, + # "is not in the recoded data please make sure its recoded for this cycle!!" + # ) + # ) + # } else{ + # if (isEqual(row[[singleVarName]], "NA(a)")) { + # row[[singleVarName]] <- haven::tagged_na("a") + # } else if (isEqual(row[[singleVarName]], "NA(b)")) { + # row[[singleVarName]] <- haven::tagged_na("b") + # } + # rowValues <- + # append(rowValues, as.numeric(row[[singleVarName]])) + # } + # } customFunctionReturnValue <- do.call(get(customFunctionName), rowValues) From 41d00ebef1807a3cf2f21b77bfb4a135c0ef18b0 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 1 Oct 2019 14:51:35 -0400 Subject: [PATCH 042/123] [Feature] Dplyr function calling --- R/TEMPORARY.R | 205 +++++++++++++++++++++--------------------- R/recode-with-table.R | 39 ++++---- 2 files changed, 128 insertions(+), 116 deletions(-) diff --git a/R/TEMPORARY.R b/R/TEMPORARY.R index d2edfe98..5d2703b6 100644 --- a/R/TEMPORARY.R +++ b/R/TEMPORARY.R @@ -1,101 +1,104 @@ -PackYearRecode <- - function(SMKDSTY, - DHHGAGE_cont, - SMKG203, - SMK_204, - SMK_09A_B, - SMKG09C, - SMK_208, - SMK_05B, - SMK_05C, - SMKG01C_B, - SMK_01A, - SMK_207) { - TypeOfSmoker2 <- SMKDSTY - stpo <- ifelse((SMK_09A_B == 6), 0, - ifelse((SMK_09A_B == 7), NA, - ifelse((SMK_09A_B == 8), NA, - ifelse((SMK_09A_B == 9), NA, SMK_09A_B) - ))) - stpoy <- SMKG09C - tsq_ds <- ifelse((stpo = 1), 0.5, - ifelse((stpo = 2), 1.5, - ifelse((stpo = 3), 2.5, - ifelse((stpo = 4), stpoy, NA - )))) - agecigd <- SMKG203 - agec1 <- SMKG01C_B - s100 <- - ifelse((SMK_01A == 7), NA, - ifelse((SMK_01A == 8), NA, - ifelse((SMK_01A == 9), NA, SMK_01A))) - - packYears <- - PackYears1.fun( - TypeOfSmoker2, - DHHGAGE_cont, - agecigd, - SMK_207, - SMK_204, - tsq_ds, - SMK_208, - SMK_05B, - SMK_05C, - agec1, - s100 - ) - # print(paste("typeOfSmoker2 =",TypeOfSmoker2, "Age_cont =", DHHGAGE_cont, "agecigd =", agecigd, "agecigo =", SMK_207, "cigdayd =", SMK_204, - # "tsq_ds =", tsq_ds, "cigdayf =", SMK_208, "cigdayo =", SMK_05B, "dayocc =", SMK_05C, "agec1 =", agec1, "s100 =", s100)) - # print(paste("PACKYEARS =", packYears)) - - return(packYears) - } -PackYears1.fun <- - function(TypeOfSmoker2, - Age_cont, - agecigd, - agecigo, - cigdayd, - tsq_ds, - cigdayf, - cigdayo, - dayocc, - agec1, - s100) { - ifelse2(TypeOfSmoker2 == 1, - pmax(((Age_cont - agecigd) * (cigdayd / 20)), 0.0137), - ifelse2( - TypeOfSmoker2 == 2, - pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) - ), 0.0137) + (pmax(( - cigdayo * dayocc / 30 - ), 1) * tsq_ds), - ifelse2( - TypeOfSmoker2 == 3, - (pmax(( - cigdayo * dayocc / 30 - ), 1) / 20) * (Age_cont - agec1), - ifelse2( - TypeOfSmoker2 == 4, - pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) - ), 0.0137), - ifelse2( - TypeOfSmoker2 == 5 & s100 == 's1001', - 0.0137, - ifelse2( - TypeOfSmoker2 == 5 & s100 == 's1002', - 0.007, - ifelse2(TypeOfSmoker2 == - 6, 0, NA) - ) - ) - ) - ) - )) - } -ifelse2 <- function(x, a, b) { - falseifNA <- function(x) { - ifelse(is.na(x), FALSE, x) - } - ifelse(falseifNA(x), a, b) -} \ No newline at end of file +TestingONLY <- function(){ + source('C:/Users/DarkShadeKnight/Documents/Work/R/pblTransformations/PBLTransformations/Derived Variables RecWTable functions/FunctionIndex.R') +} +# PackYearRecode <- +# function(SMKDSTY, +# DHHGAGE_cont, +# SMKG203, +# SMK_204, +# SMK_09A_B, +# SMKG09C, +# SMK_208, +# SMK_05B, +# SMK_05C, +# SMKG01C_B, +# SMK_01A, +# SMK_207) { +# TypeOfSmoker2 <- SMKDSTY +# stpo <- ifelse((SMK_09A_B == 6), 0, +# ifelse((SMK_09A_B == 7), NA, +# ifelse((SMK_09A_B == 8), NA, +# ifelse((SMK_09A_B == 9), NA, SMK_09A_B) +# ))) +# stpoy <- SMKG09C +# tsq_ds <- ifelse((stpo = 1), 0.5, +# ifelse((stpo = 2), 1.5, +# ifelse((stpo = 3), 2.5, +# ifelse((stpo = 4), stpoy, NA +# )))) +# agecigd <- SMKG203 +# agec1 <- SMKG01C_B +# s100 <- +# ifelse((SMK_01A == 7), NA, +# ifelse((SMK_01A == 8), NA, +# ifelse((SMK_01A == 9), NA, SMK_01A))) +# +# packYears <- +# PackYears1.fun( +# TypeOfSmoker2, +# DHHGAGE_cont, +# agecigd, +# SMK_207, +# SMK_204, +# tsq_ds, +# SMK_208, +# SMK_05B, +# SMK_05C, +# agec1, +# s100 +# ) +# # print(paste("typeOfSmoker2 =",TypeOfSmoker2, "Age_cont =", DHHGAGE_cont, "agecigd =", agecigd, "agecigo =", SMK_207, "cigdayd =", SMK_204, +# # "tsq_ds =", tsq_ds, "cigdayf =", SMK_208, "cigdayo =", SMK_05B, "dayocc =", SMK_05C, "agec1 =", agec1, "s100 =", s100)) +# # print(paste("PACKYEARS =", packYears)) +# +# return(packYears) +# } +# PackYears1.fun <- +# function(TypeOfSmoker2, +# Age_cont, +# agecigd, +# agecigo, +# cigdayd, +# tsq_ds, +# cigdayf, +# cigdayo, +# dayocc, +# agec1, +# s100) { +# ifelse2(TypeOfSmoker2 == 1, +# pmax(((Age_cont - agecigd) * (cigdayd / 20)), 0.0137), +# ifelse2( +# TypeOfSmoker2 == 2, +# pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) +# ), 0.0137) + (pmax(( +# cigdayo * dayocc / 30 +# ), 1) * tsq_ds), +# ifelse2( +# TypeOfSmoker2 == 3, +# (pmax(( +# cigdayo * dayocc / 30 +# ), 1) / 20) * (Age_cont - agec1), +# ifelse2( +# TypeOfSmoker2 == 4, +# pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) +# ), 0.0137), +# ifelse2( +# TypeOfSmoker2 == 5 & s100 == 's1001', +# 0.0137, +# ifelse2( +# TypeOfSmoker2 == 5 & s100 == 's1002', +# 0.007, +# ifelse2(TypeOfSmoker2 == +# 6, 0, NA) +# ) +# ) +# ) +# ) +# )) +# } +# ifelse2 <- function(x, a, b) { +# falseifNA <- function(x) { +# ifelse(is.na(x), FALSE, x) +# } +# ifelse(falseifNA(x), a, b) +# } \ No newline at end of file diff --git a/R/recode-with-table.R b/R/recode-with-table.R index d9c973a3..e785be68 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -666,8 +666,6 @@ RecodeDerivedVariables <- function(recodedData, functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] - # USE *list to unpack into seperate args - # Use from to calculate ranges for values fromCell <- rowBeingChecked[[pkg.globals$argument.From]] fromValues <- as.list(strsplit(fromCell, ","))[[1]] @@ -688,31 +686,42 @@ RecodeDerivedVariables <- function(recodedData, # Apply function on just those rows start_time <- Sys.time() - columnValue <- - apply( - recodedData, - 1, - CalculateCustomFunctionRowValue, - variableNames = usedFeederVars, - customFunctionName = functionBeingUsed, - fromList = fromList + # columnValue <- + # apply( + # recodedData, + # 1, + # CalculateCustomFunctionRowValue, + # variableNames = usedFeederVars, + # customFunctionName = functionBeingUsed, + # fromList = fromList + # ) + assign("counter", 0, envir = .GlobalEnv) + columnValue <- recodedData %>% dplyr::rowwise(.) %>% dplyr::select(usedFeederVars) %>% + dplyr::do( + PackYears = CalculateCustomFunctionRowValue( + ., + variableNames = usedFeederVars, + customFunctionName = functionBeingUsed, + fromList = fromList,counter + ) ) + end_time <- Sys.time() print(end_time - start_time) - recodedData[[varName]] <- columnValue + print(counter) + #recodedData[[varName]] <- columnValue return(recodedData) } } } CalculateCustomFunctionRowValue <- - function(row, + function(rowValues, variableNames, customFunctionName, - fromList) { - rowValues <- list() - rowValues <- as.list(row[variableNames]) + fromList, counter) { rowValues <- unname(rowValues) + assign("counter", counter+1, envir = .GlobalEnv) # for (singleVarName in variableNames) { # # Catch out of bounds # if (is.null(row[[singleVarName]])) { From 98c8f9761ff3fc82c18de87193a4ce37f544d18f Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 3 Oct 2019 15:59:26 -0400 Subject: [PATCH 043/123] [Feature] Added vignette to test some simple functionallity --- R/recode-with-table.R | 103 +++++++++++++++------------ inst/extdata/PBC-variableDetails.csv | 62 +++++++++++----- inst/extdata/PBC-variables.csv | 29 ++++++-- vignettes/pbc-recode-with-table.Rmd | 46 ++++++++++++ 4 files changed, 168 insertions(+), 72 deletions(-) create mode 100644 vignettes/pbc-recode-with-table.Rmd diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 8c5a00bc..d2fb4124 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -64,7 +64,7 @@ RecWTable.default <- varLabels = NULL, customFunctionPath = NULL) { # If custom Functions are passed create new environment and source - if(!is.null(customFunctionPath)){ + if (!is.null(customFunctionPath)) { source(customFunctionPath) } @@ -144,7 +144,7 @@ RecodeCall <- } else { if (!is.null(variables)) { variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables,] + variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables, ] } if (is.null(variableDetails[[pkg.globals$argument.VariableLabel]])) { variableDetails[[pkg.globals$argument.VariableLabel]] <- NA @@ -173,7 +173,7 @@ RecodeCall <- allPossibleVarNames <- unique(as.character(variableDetails[[pkg.globals$argument.Variables]])) allVariablesDetected <- - variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]),] + variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]), ] recData <- RecodeColumns( @@ -275,13 +275,13 @@ RecodeColumns <- elseDefault) { # Split variables to process into recode map and func mapVariablesToProcess <- - variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] funcVariablesToProcess <- - variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] recVariablesToProcess <- - variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] labelList <- list() # Set interval if none is present @@ -298,10 +298,10 @@ RecodeColumns <- variableBeingChecked <- as.character(recVariablesToProcess[1, pkg.globals$argument.Variables]) rowsBeingChecked <- - recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] + recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] recVariablesToProcess <- - recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] - firstRow <- rowsBeingChecked[1, ] + recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] + firstRow <- rowsBeingChecked[1,] # Check for varialbe existance in data dataVariableBeingChecked <- GetDataVariableName( @@ -343,7 +343,7 @@ RecodeColumns <- CreateLabelListElement(rowsBeingChecked) elseValue <- as.character(rowsBeingChecked[rowsBeingChecked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) - if (length(elseValue) == 1) { + if (length(elseValue) == 1&& !isEqual(elseValue,"character(0)")) { elseValue <- RecodeVariableNAFormating(elseValue, labelList[[variableBeingChecked]]$type) if (isEqual(elseValue, "copy")) { @@ -374,7 +374,7 @@ RecodeColumns <- recodedData[variableBeingChecked] <- elseDefault } rowsBeingChecked <- - rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else",] + rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else", ] if (nrow(rowsBeingChecked) > 0) { logTable <- rowsBeingChecked[, 0] logTable$valueTo <- NA @@ -384,7 +384,7 @@ RecodeColumns <- c(levels(recodedData[[variableBeingChecked]]), levels(rowsBeingChecked[[pkg.globals$argument.CatValue]])) for (row in 1:nrow(rowsBeingChecked)) { - rowBeingChecked <- rowsBeingChecked[row, ] + rowBeingChecked <- rowsBeingChecked[row,] # If cat go check for label and obtain it # regardless obtain unit and attach @@ -400,12 +400,14 @@ RecodeColumns <- # Recode the variable fromValues <- list() - if (grepl(":", as.character(rowBeingChecked[[pkg.globals$argument.From]]))){ - fromValues <- - strsplit(as.character(rowBeingChecked[[pkg.globals$argument.From]]), ":")[[1]] - }else { + if (grepl(":", as.character(rowBeingChecked[[pkg.globals$argument.From]]))) { + fromValues <- + strsplit(as.character(rowBeingChecked[[pkg.globals$argument.From]]), ":")[[1]] + } else { # TODO find a more elagant way to handle in the future - fromValues[[1]] <- as.character(rowBeingChecked[[pkg.globals$argument.From]]) + tempFrom <- + as.character(rowBeingChecked[[pkg.globals$argument.From]]) + fromValues[[1]] <- tempFrom fromValues[[2]] <- fromValues[[1]] } valueRecorded <- @@ -520,26 +522,30 @@ CompareValueBasedOnInterval <- compareColumns, interval) { returnBoolean <- vector() - if (interval == "[,]") { - returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( - as.numeric(leftBoundary) <= dataSource[[compareColumns]] & - dataSource[[compareColumns]] <= as.numeric(rightBoundary) - )] - } else if (interval == "[,)") { - returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( - as.numeric(leftBoundary) <= dataSource[[compareColumns]] & - dataSource[[compareColumns]] < as.numeric(rightBoundary) - )] - } else if (interval == "(,]") { - returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( - as.numeric(leftBoundary) < dataSource[[compareColumns]] & - dataSource[[compareColumns]] <= as.numeric(rightBoundary) - )] + if (is.na(as.numeric(leftBoundary))) { + returnBoolean <- dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which(leftBoundary == dataSource[[compareColumns]])] } else{ - stop("Invalid Argument was passed") + if (interval == "[,]") { + returnBoolean <- + dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( + as.numeric(leftBoundary) <= dataSource[[compareColumns]] & + dataSource[[compareColumns]] <= as.numeric(rightBoundary) + )] + } else if (interval == "[,)") { + returnBoolean <- + dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( + as.numeric(leftBoundary) <= dataSource[[compareColumns]] & + dataSource[[compareColumns]] < as.numeric(rightBoundary) + )] + } else if (interval == "(,]") { + returnBoolean <- + dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( + as.numeric(leftBoundary) < dataSource[[compareColumns]] & + dataSource[[compareColumns]] <= as.numeric(rightBoundary) + )] + } else{ + stop("Invalid Argument was passed") + } } return(returnBoolean) @@ -550,7 +556,7 @@ UpdateVariableDetailsBasedOnVariableSheet <- function(variableSheet, variableDetails) { # remove conflicting columns from variable details variableDetails <- - variableDetails[, !( + variableDetails[,!( names(variableDetails) %in% c( pkg.globals$MSW.Variables.Columns.VariableType, pkg.globals$MSW.Variables.Columns.Label, @@ -578,7 +584,7 @@ UpdateVariableDetailsBasedOnVariableSheet <- ) # remove variables not present in variableSheet variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]],] + variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]], ] return(variableDetails) } @@ -612,14 +618,14 @@ RecodeDerivedVariables <- function(recodedData, varStack) { # Check for rows present while (nrow(variablesToProcess) > 0) { - sampleRow <- variablesToProcess[1, ] + sampleRow <- variablesToProcess[1,] varName <- sampleRow[[pkg.globals$argument.Variables]] varStack <- c(varStack, varName) # obtain rows to process and updated variables to Process rowsToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == varName,] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == varName, ] variablesToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != varName,] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != varName, ] # Check for presence of feeder variables in data and in the variable being processed stack feederVars <- @@ -668,7 +674,7 @@ RecodeDerivedVariables <- function(recodedData, # Obtain the function for each row for (rowNum in 1:nrow(rowsToProcess)) { - rowBeingChecked <- rowsToProcess[rowNum, ] + rowBeingChecked <- rowsToProcess[rowNum,] funcCell <- rowBeingChecked[[pkg.globals$argument.CatValue]] functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] @@ -703,20 +709,22 @@ RecodeDerivedVariables <- function(recodedData, # fromList = fromList # ) assign("counter", 0, envir = .GlobalEnv) - columnValue <- recodedData %>% dplyr::rowwise(.) %>% dplyr::select(usedFeederVars) %>% + columnValue <- + recodedData %>% dplyr::rowwise(.) %>% dplyr::select(usedFeederVars) %>% dplyr::do( PackYears = CalculateCustomFunctionRowValue( ., variableNames = usedFeederVars, customFunctionName = functionBeingUsed, - fromList = fromList,counter + fromList = fromList, + counter ) ) end_time <- Sys.time() print(end_time - start_time) print(counter) - #recodedData[[varName]] <- columnValue + recodedData[[varName]] <- columnValue return(recodedData) } @@ -726,9 +734,10 @@ CalculateCustomFunctionRowValue <- function(rowValues, variableNames, customFunctionName, - fromList, counter) { + fromList, + counter) { rowValues <- unname(rowValues) - assign("counter", counter+1, envir = .GlobalEnv) + assign("counter", counter + 1, envir = .GlobalEnv) # for (singleVarName in variableNames) { # # Catch out of bounds # if (is.null(row[[singleVarName]])) { diff --git a/inst/extdata/PBC-variableDetails.csv b/inst/extdata/PBC-variableDetails.csv index e1c8b508..8aac4392 100644 --- a/inst/extdata/PBC-variableDetails.csv +++ b/inst/extdata/PBC-variableDetails.csv @@ -1,18 +1,44 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file +variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval +AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" +AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" +AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" +AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" +SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" +SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" +STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" +STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" +STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" +STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" +STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" +STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" +TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" +TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" +TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" +TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" +TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/PBC-variables.csv b/inst/extdata/PBC-variables.csv index 12b92b2f..a22f2994 100644 --- a/inst/extdata/PBC-variables.csv +++ b/inst/extdata/PBC-variables.csv @@ -1,7 +1,22 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file +variable,label,labelLong,variableType,units +age,Age,Age of participent in years,cont,Year +sex,Sex,Sex of the participent,cat,NA +bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl +albumin,serum albumin,serum albumin (g/dl),cont,g/dl +protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min +edema,edema,"0 no edema, 0.5 untreated or successfully treated +1 edema despite diuretic therapy",cat,NA +alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter +ascites,presence of ascites,presence of ascites,cat,NA +ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml +chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl +copper,urine copper,urine copper (ug/day),cont,ug/day +hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA +platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood +spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA +stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA +status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA +time,number of days,"number of days between registration and the earlier of death, +transplantion, or study analysis in July, 1986",cont,days +trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA +trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/vignettes/pbc-recode-with-table.Rmd b/vignettes/pbc-recode-with-table.Rmd new file mode 100644 index 00000000..cf4da009 --- /dev/null +++ b/vignettes/pbc-recode-with-table.Rmd @@ -0,0 +1,46 @@ +--- +title: "pbc-recode-with-table" +author: "Rostyslav Vyuha" +date: "October 3, 2019" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## Import pbc msw + +```{r, results='hide',message=FALSE} +library(readr) +varDetails <- read_csv("../inst/extdata/PBC-variableDetails.csv") +variables <- read_csv("../inst/extdata/PBC-variables.csv") +``` + +## Import the pbc data + +```{r, results='hide',message=FALSE} +library(survival) +data("pbc") +``` + +## Recode data with the msw + +```{r, results='hide',message=FALSE} +library(bllflow) +recodedPBC <- RecWTable(dataSource = pbc, variableDetails = varDetails, datasetName = "survival-pbc") +``` +## Compare the recode + +```{r} +print(pbc) +print(recodedPBC[,c("TIME","STATUS","TRT","AGE","SEX","ASCITES","HEPATO","SPIDERS","EDEMA","BILI","CHOL","ALBUMIN","COPPER","ALK_PHOS","AST","TRIG","PLATELET","PROTIME","STAGE")]) +``` +## Write custom function for calculating age group + +```{r} +CustomAgeGroupCalculation <- function(age){ + # Feel free to write ur own code this is an example + return(trunc(age/10)) +} +``` \ No newline at end of file From 3674f8e07c0a18faded163cddf6249376a7e4b30 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 7 Oct 2019 13:40:32 -0400 Subject: [PATCH 044/123] [Feature] Added recusive support for multiple function variables --- R/recode-with-table.R | 205 ++++++++++++---------------- vignettes/pbc-recode-with-table.Rmd | 32 +++++ 2 files changed, 117 insertions(+), 120 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index d2fb4124..72fe6aa0 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -343,7 +343,8 @@ RecodeColumns <- CreateLabelListElement(rowsBeingChecked) elseValue <- as.character(rowsBeingChecked[rowsBeingChecked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) - if (length(elseValue) == 1&& !isEqual(elseValue,"character(0)")) { + if (length(elseValue) == 1 && + !isEqual(elseValue, "character(0)")) { elseValue <- RecodeVariableNAFormating(elseValue, labelList[[variableBeingChecked]]$type) if (isEqual(elseValue, "copy")) { @@ -486,17 +487,26 @@ RecodeColumns <- } # Process funcVars - derivedReturn <- - RecodeDerivedVariables( - recodedData = recodedData, - variablesToProcess = funcVariablesToProcess, - log = log, - printNote = printNote, - elseDefault = elseDefault, - labelList = labelList, - varStack = c() - ) - recodedData <- derivedReturn + while (nrow(funcVariablesToProcess) > 0) { + firstRow <- funcVariablesToProcess[1, ] + firstRowVariableName <- + firstRow[[pkg.globals$argument.Variables]] + # get name of var pass to + derivedReturn <- + RecodeDerivedVariables( + variableBeingProcessed = firstRowVariableName, + recodedData = recodedData, + variablesToProcess = funcVariablesToProcess, + log = log, + printNote = printNote, + elseDefault = elseDefault, + labelList = labelList, + varStack = c() + ) + labelList <- derivedReturn$labelList + recodedData <- derivedReturn$recodedData + funcVariablesToProcess <- derivedReturn$variablesToProcess + } # Populate data Labels recodedData <- LabelData(labelList = labelList, dataToLabel = recodedData) @@ -522,8 +532,9 @@ CompareValueBasedOnInterval <- compareColumns, interval) { returnBoolean <- vector() - if (is.na(as.numeric(leftBoundary))) { - returnBoolean <- dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which(leftBoundary == dataSource[[compareColumns]])] + if (suppressWarnings(is.na(as.numeric(leftBoundary)))) { + returnBoolean <- + dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which(leftBoundary == dataSource[[compareColumns]])] } else{ if (interval == "[,]") { returnBoolean <- @@ -609,29 +620,31 @@ RecodeVariableNAFormating <- function(cellValue, varType) { return(recodeValue) } -RecodeDerivedVariables <- function(recodedData, - variablesToProcess, - log, - printNote, - elseDefault, - labelList, - varStack) { - # Check for rows present - while (nrow(variablesToProcess) > 0) { - sampleRow <- variablesToProcess[1,] - varName <- sampleRow[[pkg.globals$argument.Variables]] - varStack <- c(varStack, varName) +RecodeDerivedVariables <- + function(recodedData, + variableBeingProcessed, + variablesToProcess, + log, + printNote, + elseDefault, + labelList, + varStack) { + if (nrow(variablesToProcess) <= 0) { + stop(paste(variableBeingProcessed, "is missing from variableDetails")) + } + varStack <- c(varStack, variableBeingProcessed) # obtain rows to process and updated variables to Process - rowsToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == varName, ] + variableRows <- + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingProcessed, ] variablesToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != varName, ] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != variableBeingProcessed, ] # Check for presence of feeder variables in data and in the variable being processed stack feederVars <- - as.list(strsplit(sampleRow[[pkg.globals$argument.VariableStart]], "::"))[[1]][[2]] + as.list(strsplit(variableRows[1, ][[pkg.globals$argument.VariableStart]], "::"))[[1]][[2]] feederVars <- gsub("\\[|\\]", "", feederVars) feederVars <- as.list(strsplit(feederVars, ","))[[1]] + feederVars <- sapply(feederVars, trimws) usedFeederVars <- feederVars feederVars <- setdiff(feederVars, names(recodedData)) @@ -642,122 +655,74 @@ RecodeDerivedVariables <- function(recodedData, paste( conflictVars, "is required to create", - varName, + variableBeingProcessed, "but", - varName, + variableBeingProcessed, "is needed to create", conflictVars ) ) } - # # Update varStack and recurse to get the feeder vars - # for (oneFeeder in feederVars) { - # # Need to check recoded data again in case a recursion added it - # if (!oneFeeder %in% names(recodedData)) { - # derivedReturn <- - # RecodeDerivedVariables( - # recodedData = recodedData, - # variablesToProcess = variablesToProcess, - # log = log, - # printNote = printNote, - # elseDefault = elseDefault, - # labelList = labelList, - # varStack = varStack - # ) - # varStack <- derivedReturn$varStack - # labelList <- derivedReturn$labelList - # recodedData <- derivedReturn$recodedData - # variablesToProcess <- derivedReturn$variablesToProcess - # } - # } + # Update varStack and recurse to get the feeder vars + for (oneFeeder in feederVars) { + # Need to check recoded data again in case a recursion added it + if (!oneFeeder %in% names(recodedData)) { + derivedReturn <- + RecodeDerivedVariables( + variableBeingProcessed = oneFeeder, + recodedData = recodedData, + variablesToProcess = variablesToProcess, + log = log, + printNote = printNote, + elseDefault = elseDefault, + labelList = labelList, + varStack = varStack + ) + varStack <- derivedReturn$varStack + labelList <- derivedReturn$labelList + recodedData <- derivedReturn$recodedData + variablesToProcess <- derivedReturn$variablesToProcess + } + } # Obtain the function for each row - for (rowNum in 1:nrow(rowsToProcess)) { - rowBeingChecked <- rowsToProcess[rowNum,] + append(labelList, CreateLabelListElement(variableRows)) + for (rowNum in 1:nrow(variableRows)) { + rowBeingChecked <- variableRows[rowNum,] funcCell <- rowBeingChecked[[pkg.globals$argument.CatValue]] functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] - # Use from to calculate ranges for values - fromCell <- rowBeingChecked[[pkg.globals$argument.From]] - fromValues <- as.list(strsplit(fromCell, ","))[[1]] - fromList <- list() - for (singleFrom in fromValues) { - if (grepl("::", singleFrom)) { - # Seperate From range and variable - varRange <- as.list(strsplit(singleFrom, "::"))[[1]] - fromList[[varRange[[1]]]] <- varRange[[2]] - # Create list to pass to function - } - } - # Catch default and else from values - - # Seperate the from into variables then find rows with appropriate ranges - - # Find common rows between all the sets of appropriate rows - - # Apply function on just those rows - start_time <- Sys.time() - # columnValue <- - # apply( - # recodedData, - # 1, - # CalculateCustomFunctionRowValue, - # variableNames = usedFeederVars, - # customFunctionName = functionBeingUsed, - # fromList = fromList - # ) - assign("counter", 0, envir = .GlobalEnv) columnValue <- recodedData %>% dplyr::rowwise(.) %>% dplyr::select(usedFeederVars) %>% dplyr::do( - PackYears = CalculateCustomFunctionRowValue( + columnBeingAdded = CalculateCustomFunctionRowValue( ., variableNames = usedFeederVars, - customFunctionName = functionBeingUsed, - fromList = fromList, - counter + customFunctionName = functionBeingUsed ) ) - - end_time <- Sys.time() - print(end_time - start_time) - print(counter) - recodedData[[varName]] <- columnValue - - return(recodedData) + recodedData[[variableBeingProcessed]] <- unlist(columnValue[["columnBeingAdded"]]) } + varStack <- varStack[!(varStack == variableBeingProcessed)] + + return( + list( + varStack = varStack, + labelList = labelList, + recodedData = recodedData, + variablesToProcess = variablesToProcess + ) + ) + } -} CalculateCustomFunctionRowValue <- function(rowValues, variableNames, - customFunctionName, - fromList, - counter) { + customFunctionName) { rowValues <- unname(rowValues) - assign("counter", counter + 1, envir = .GlobalEnv) - # for (singleVarName in variableNames) { - # # Catch out of bounds - # if (is.null(row[[singleVarName]])) { - # stop( - # paste( - # singleVarName, - # "is not in the recoded data please make sure its recoded for this cycle!!" - # ) - # ) - # } else{ - # if (isEqual(row[[singleVarName]], "NA(a)")) { - # row[[singleVarName]] <- haven::tagged_na("a") - # } else if (isEqual(row[[singleVarName]], "NA(b)")) { - # row[[singleVarName]] <- haven::tagged_na("b") - # } - # rowValues <- - # append(rowValues, as.numeric(row[[singleVarName]])) - # } - # } - + # TODO add ability to process ranges in from column customFunctionReturnValue <- do.call(get(customFunctionName), rowValues) diff --git a/vignettes/pbc-recode-with-table.Rmd b/vignettes/pbc-recode-with-table.Rmd index cf4da009..6561baf4 100644 --- a/vignettes/pbc-recode-with-table.Rmd +++ b/vignettes/pbc-recode-with-table.Rmd @@ -43,4 +43,36 @@ CustomAgeGroupCalculation <- function(age){ # Feel free to write ur own code this is an example return(trunc(age/10)) } +``` + +## Create a new variable that uses age group +I will use R code to create one row for the new variable, then rowbind it with existing variable details feel free to change any elements u wish just make sure its consistent with the function arguments. + +```{r} +newRow <- data.frame(variable = "Age_Group_Using_Custom_Variable", toType = "cont", databaseStart = "survival-pbc", variableStart = "DerivedVar::[AGE_GROUP, SPIDERS]", fromType = "cont", recTo = "Func::CustomRandomFunction", catLabel = "NA", catLabelLong ="NA", units = "NA", recFrom = "else", catStartLabel = NA, notes = NA, interval = NA) +varDetails <- rbind(varDetails,newRow) +``` + +## Create the other custom function + +```{r} +CustomRandomFunction <- function(ageGroup, spiders) { + # make sure to account for na since in R anything == NA equaites to NA and causes errors + if (is.na(spiders)) { + ageGroup <- ageGroup + } + else if (spiders == "1") { + ageGroup = ageGroup + 5 + } else if (spiders == "2") { + ageGroup = ageGroup - 5 + } + + return(ageGroup) +} +``` + +## Rerun the recode function to create new variable +```{r} +recodedPBC <- RecWTable(dataSource = pbc, variableDetails = varDetails, datasetName = "survival-pbc") +print(recodedPBC) ``` \ No newline at end of file From ef6a8992fd46a9b17316af71d894b97b251d1ffa Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 10 Oct 2019 12:47:41 -0400 Subject: [PATCH 045/123] [Refactor] Prepping for multi data --- R/bll-flow.R | 7 +- .../Test-1/PBC-variableDetails.csv | 62 +++++++++++++----- .../Test-1/PBC-variables.csv | 29 ++++++-- .../Test-2/PBC-variableDetails.csv | 62 +++++++++++++----- .../Test-2/PBC-variables.csv | 29 ++++++-- .../Test-3/PBC-variableDetails.csv | 62 +++++++++++++----- .../WriteDDIPopulatedMSWData.RData | Bin 54376 -> 81 bytes 7 files changed, 178 insertions(+), 73 deletions(-) diff --git a/R/bll-flow.R b/R/bll-flow.R index eec9e5fc..596532e1 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -56,12 +56,9 @@ BLLFlow <- } if (!is.null(variables)) { CheckIfDataFrame(variables, pkg.globals$argument.Variables) + # Change the columns needed for the functions CheckForColumnPresence( - c( - pkg.globals$columnNames.Min, - pkg.globals$columnNames.Max, - pkg.globals$columnNames.Outlier - ), + c(), variables, pkg.globals$argument.Variables ) diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv index 51dc8f2d..f9066827 100644 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv +++ b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv @@ -1,18 +1,44 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file +variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval +AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" +AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" +AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" +AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" +SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" +SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" +STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" +STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" +STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" +STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" +STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" +STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" +TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" +TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" +TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" +TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" +TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv index 12b92b2f..a22f2994 100644 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv +++ b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv @@ -1,7 +1,22 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file +variable,label,labelLong,variableType,units +age,Age,Age of participent in years,cont,Year +sex,Sex,Sex of the participent,cat,NA +bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl +albumin,serum albumin,serum albumin (g/dl),cont,g/dl +protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min +edema,edema,"0 no edema, 0.5 untreated or successfully treated +1 edema despite diuretic therapy",cat,NA +alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter +ascites,presence of ascites,presence of ascites,cat,NA +ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml +chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl +copper,urine copper,urine copper (ug/day),cont,ug/day +hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA +platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood +spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA +stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA +status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA +time,number of days,"number of days between registration and the earlier of death, +transplantion, or study analysis in July, 1986",cont,days +trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA +trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv index 51dc8f2d..f9066827 100644 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv +++ b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv @@ -1,18 +1,44 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file +variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval +AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" +AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" +AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" +AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" +SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" +SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" +STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" +STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" +STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" +STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" +STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" +STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" +TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" +TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" +TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" +TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" +TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv index 12b92b2f..a22f2994 100644 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv +++ b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv @@ -1,7 +1,22 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file +variable,label,labelLong,variableType,units +age,Age,Age of participent in years,cont,Year +sex,Sex,Sex of the participent,cat,NA +bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl +albumin,serum albumin,serum albumin (g/dl),cont,g/dl +protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min +edema,edema,"0 no edema, 0.5 untreated or successfully treated +1 edema despite diuretic therapy",cat,NA +alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter +ascites,presence of ascites,presence of ascites,cat,NA +ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml +chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl +copper,urine copper,urine copper (ug/day),cont,ug/day +hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA +platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood +spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA +stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA +status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA +time,number of days,"number of days between registration and the earlier of death, +transplantion, or study analysis in July, 1986",cont,days +trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA +trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv index 51dc8f2d..f9066827 100644 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv +++ b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv @@ -1,18 +1,44 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file +variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval +AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" +AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" +AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" +AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" +SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" +SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" +STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" +STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" +STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" +STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" +STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" +STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" +TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" +TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" +TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" +TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" +TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSWData.RData b/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSWData.RData index 8b18d3138a019b549e26b4440cf5a3a60313ea04..2aa0469f6f4bc2659776efd27c581f34118239fe 100644 GIT binary patch literal 81 zcmb2|=3oE=HtwQMgJ)e2k`fXU(h|~`C#`W%W1d~yuyEo^L1t!d;R(l295{4#KKYcC={_NG@bcjdb13$x0sp)1OK$8HRJ|8Op literal 54376 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 From d9934b21ba551154f9c551a225197e4bdc34cd02 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 15 Oct 2019 08:56:48 -0400 Subject: [PATCH 046/123] [Feature] List bllFlow creation support --- R/bll-flow-constructor-utility.R | 479 ++++++++++++++++--------------- R/bll-flow.R | 74 +++-- R/error-check.R | 6 +- 3 files changed, 294 insertions(+), 265 deletions(-) diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index da9dd2d2..b3d9375d 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -1,242 +1,245 @@ -#' Creates a data frame that holds additional ddi data -#' -#' @param variableDetails The dataframe that contains the variable information -#' that is used to populate the frame with relevant ddi info -#' @param ddiVariables an object that is generated by populateVariables -#' it contains the variables as well as all their value labels and min and max -#' @return returns a dataframe containing new ddi data -PopulateVariableDetails <- - function(variableDetails, - ddiVariables) { - # Used to group all the variables in the dataframe - variableDetails <- - variableDetails[order(variableDetails[[pkg.globals$argument.VariableStart]], - variableDetails[[pkg.globals$argument.CatStartValue]]),] - onlyDesiredVariables <- - variableDetails[variableDetails[[pkg.globals$argument.VariableStart]] %in% names(ddiVariables), ] - # Copy all the columns - finalFrame <- onlyDesiredVariables[0, ] - for (nameIndex in 1:length(names(ddiVariables))) { - nameBeingChecked <- names(ddiVariables)[[nameIndex]] - # All the rows for the variable being checked - rowsToCheck <- - onlyDesiredVariables[onlyDesiredVariables[[pkg.globals$argument.VariableStart]] == nameBeingChecked,] - # Writes data to relavant rows and removes them from the value object - for (rowToCheck in 1:nrow(rowsToCheck)) { - presentCatStartValue <- - rowsToCheck[rowToCheck, pkg.globals$argument.CatStartValue] - # Check if the value matches anything in the DDI object - if (presentCatStartValue %in% names(ddiVariables[[nameBeingChecked]])) { - # Populate every column with values pulled from DDI - selectedVariableCatValue <- - ddiVariables[[nameBeingChecked]][[as.character(presentCatStartValue)]] - for (columnName in names(selectedVariableCatValue)) { - if (columnName != pkg.globals$argument.CatStartValue) { - # Check if there is any data precent in the cell in order to not override anything - if (CheckIfCellIsEmpty( - rowsToCheck[rowToCheck, columnName], - rownames(rowsToCheck)[rowToCheck], - columnName, - selectedVariableCatValue[[columnName]] - )) { - # If this has not been in the dataframe upon creation that level is added - if (!selectedVariableCatValue[[columnName]] %in% levels(rowsToCheck[, columnName])) { - levels(rowsToCheck[, columnName]) <- - c(levels(rowsToCheck[, columnName]), - selectedVariableCatValue[[columnName]]) - } - rowsToCheck[rowToCheck, columnName] <- - selectedVariableCatValue[[columnName]] - } - } - } - - # Remove that value from the list to avoid repetition during new row creation - ddiVariables[[nameBeingChecked]][[as.character(presentCatStartValue)]] <- - NULL - finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck, ]) - } else if (!is.null(ddiVariables[[nameBeingChecked]][[nameBeingChecked]]) & - !is.null(rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartType]) & - !is.null(rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartHigh]) & - !is.null(rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartLow])) { - contVariableBeingChecked <- - ddiVariables[[nameBeingChecked]][[nameBeingChecked]] - if (rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartHigh] == contVariableBeingChecked[[pkg.globals$argument.VariableStartHigh]] & - rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartLow] == contVariableBeingChecked[[pkg.globals$argument.VariableStartLow]]) { - # Populate every column with values pulled from DDI - for (columnName in names(ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]])) { - # Check if there is any data precent in the cell in order to not override anything - if (CheckIfCellIsEmpty(rowsToCheck[rowToCheck, columnName], - rownames(rowsToCheck)[rowToCheck], - columnName, - ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]])) { - # If this has not been in the dataframe upon creation that level is added - if (!ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]] %in% levels(rowsToCheck[, columnName])) { - levels(rowsToCheck[, columnName]) <- - c(levels(rowsToCheck[, columnName]), ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]]) - } - rowsToCheck[rowToCheck, columnName] <- - ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]] - } - } - # Remove that value from the list to avoid repetition during new row creation - ddiVariables[[nameBeingChecked]][[nameBeingChecked]] <- - NULL - finalFrame <- - rbind(finalFrame, rowsToCheck[rowToCheck, ]) - }else{ - # leave the row untouched if no value is matched - finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck,]) - } - } else{ - # leave the row untouched if no value is matched - finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck,]) - } - } - - # Create new Rows for leftover data - for (leftOverValue in names(ddiVariables[[nameBeingChecked]])) { - rowToAdd <- onlyDesiredVariables[0, ] - for (columnName in names(ddiVariables[[nameBeingChecked]][[leftOverValue]])) { - leftOverVariableValue <- - ddiVariables[[nameBeingChecked]][[as.character(leftOverValue)]] - if (!leftOverVariableValue[[columnName]] %in% levels(rowToAdd[, columnName])) { - levels(rowToAdd[, columnName]) <- - c(levels(rowToAdd[, columnName]), leftOverVariableValue[[columnName]]) - } - rowToAdd[1, columnName] <- - leftOverVariableValue[[columnName]] - } - - rowToAdd[1, pkg.globals$argument.VariableStart] <- - nameBeingChecked - finalFrame <- rbind(finalFrame, rowToAdd) - } - } - - variablesNotRelatedToTheDDI <- - variableDetails[!variableDetails$variableStart %in% names(ddiVariables), ] - finalFrame <- rbind(finalFrame, variablesNotRelatedToTheDDI) - rownames(finalFrame) <- NULL - - return(finalFrame) - } -#' Imports DDI metadata into a variable details worksheet + +# ----------- DEPRICATE NEEDS REMAKING --------- +#' #' Creates a data frame that holds additional ddi data +#' #' +#' #' @param variableDetails The dataframe that contains the variable information +#' #' that is used to populate the frame with relevant ddi info +#' #' @param ddiVariables an object that is generated by populateVariables +#' #' it contains the variables as well as all their value labels and min and max +#' #' @return returns a dataframe containing new ddi data +#' PopulateVariableDetails <- +#' function(variableDetails, +#' ddiVariables) { +#' # Used to group all the variables in the dataframe +#' variableDetails <- +#' variableDetails[order(variableDetails[[pkg.globals$argument.VariableStart]], +#' variableDetails[[pkg.globals$argument.CatStartValue]]),] +#' onlyDesiredVariables <- +#' variableDetails[variableDetails[[pkg.globals$argument.VariableStart]] %in% names(ddiVariables), ] +#' # Copy all the columns +#' finalFrame <- onlyDesiredVariables[0, ] +#' for (nameIndex in 1:length(names(ddiVariables))) { +#' nameBeingChecked <- names(ddiVariables)[[nameIndex]] +#' # All the rows for the variable being checked +#' rowsToCheck <- +#' onlyDesiredVariables[onlyDesiredVariables[[pkg.globals$argument.VariableStart]] == nameBeingChecked,] +#' # Writes data to relavant rows and removes them from the value object +#' for (rowToCheck in 1:nrow(rowsToCheck)) { +#' presentCatStartValue <- +#' rowsToCheck[rowToCheck, pkg.globals$argument.CatStartValue] +#' # Check if the value matches anything in the DDI object +#' if (presentCatStartValue %in% names(ddiVariables[[nameBeingChecked]])) { +#' # Populate every column with values pulled from DDI +#' selectedVariableCatValue <- +#' ddiVariables[[nameBeingChecked]][[as.character(presentCatStartValue)]] +#' for (columnName in names(selectedVariableCatValue)) { +#' if (columnName != pkg.globals$argument.CatStartValue) { +#' # Check if there is any data precent in the cell in order to not override anything +#' if (CheckIfCellIsEmpty( +#' rowsToCheck[rowToCheck, columnName], +#' rownames(rowsToCheck)[rowToCheck], +#' columnName, +#' selectedVariableCatValue[[columnName]] +#' )) { +#' # If this has not been in the dataframe upon creation that level is added +#' if (!selectedVariableCatValue[[columnName]] %in% levels(rowsToCheck[, columnName])) { +#' levels(rowsToCheck[, columnName]) <- +#' c(levels(rowsToCheck[, columnName]), +#' selectedVariableCatValue[[columnName]]) +#' } +#' rowsToCheck[rowToCheck, columnName] <- +#' selectedVariableCatValue[[columnName]] +#' } +#' } +#' } +#' +#' # Remove that value from the list to avoid repetition during new row creation +#' ddiVariables[[nameBeingChecked]][[as.character(presentCatStartValue)]] <- +#' NULL +#' finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck, ]) +#' } else if (!is.null(ddiVariables[[nameBeingChecked]][[nameBeingChecked]]) & +#' !is.null(rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartType]) & +#' !is.null(rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartHigh]) & +#' !is.null(rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartLow])) { +#' contVariableBeingChecked <- +#' ddiVariables[[nameBeingChecked]][[nameBeingChecked]] +#' if (rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartHigh] == contVariableBeingChecked[[pkg.globals$argument.VariableStartHigh]] & +#' rowsToCheck[rowToCheck, pkg.globals$argument.VariableStartLow] == contVariableBeingChecked[[pkg.globals$argument.VariableStartLow]]) { +#' # Populate every column with values pulled from DDI +#' for (columnName in names(ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]])) { +#' # Check if there is any data precent in the cell in order to not override anything +#' if (CheckIfCellIsEmpty(rowsToCheck[rowToCheck, columnName], +#' rownames(rowsToCheck)[rowToCheck], +#' columnName, +#' ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]])) { +#' # If this has not been in the dataframe upon creation that level is added +#' if (!ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]] %in% levels(rowsToCheck[, columnName])) { +#' levels(rowsToCheck[, columnName]) <- +#' c(levels(rowsToCheck[, columnName]), ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]]) +#' } +#' rowsToCheck[rowToCheck, columnName] <- +#' ddiVariables[[nameBeingChecked]][[as.character(nameBeingChecked)]][[columnName]] +#' } +#' } +#' # Remove that value from the list to avoid repetition during new row creation +#' ddiVariables[[nameBeingChecked]][[nameBeingChecked]] <- +#' NULL +#' finalFrame <- +#' rbind(finalFrame, rowsToCheck[rowToCheck, ]) +#' }else{ +#' # leave the row untouched if no value is matched +#' finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck,]) +#' } +#' } else{ +#' # leave the row untouched if no value is matched +#' finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck,]) +#' } +#' } +#' +#' # Create new Rows for leftover data +#' for (leftOverValue in names(ddiVariables[[nameBeingChecked]])) { +#' rowToAdd <- onlyDesiredVariables[0, ] +#' for (columnName in names(ddiVariables[[nameBeingChecked]][[leftOverValue]])) { +#' leftOverVariableValue <- +#' ddiVariables[[nameBeingChecked]][[as.character(leftOverValue)]] +#' if (!leftOverVariableValue[[columnName]] %in% levels(rowToAdd[, columnName])) { +#' levels(rowToAdd[, columnName]) <- +#' c(levels(rowToAdd[, columnName]), leftOverVariableValue[[columnName]]) +#' } +#' rowToAdd[1, columnName] <- +#' leftOverVariableValue[[columnName]] +#' } +#' +#' rowToAdd[1, pkg.globals$argument.VariableStart] <- +#' nameBeingChecked +#' finalFrame <- rbind(finalFrame, rowToAdd) +#' } +#' } +#' +#' variablesNotRelatedToTheDDI <- +#' variableDetails[!variableDetails$variableStart %in% names(ddiVariables), ] +#' finalFrame <- rbind(finalFrame, variablesNotRelatedToTheDDI) +#' rownames(finalFrame) <- NULL +#' +#' return(finalFrame) +#' } #' -#' Updates a variable details worksheet with metadata from a DDI document. New rows -#' are added for missing categories and columns that are empty are updated with -#' values from the document. No information from the worksheet is overwritten. -#' -#' @param ddi A string that is the file path to the DDI document -#' @param variableDetails A data frame containing a variable details worksheet -#' @return A dataframe containing the updated variable details worksheet -#' @export -#' @examples -#' library(bllflow) +#' #' Imports DDI metadata into a variable details worksheet +#' #' +#' #' Updates a variable details worksheet with metadata from a DDI document. New rows +#' #' are added for missing categories and columns that are empty are updated with +#' #' values from the document. No information from the worksheet is overwritten. +#' #' +#' #' @param ddi A string that is the file path to the DDI document +#' #' @param variableDetails A data frame containing a variable details worksheet +#' #' @return A dataframe containing the updated variable details worksheet +#' #' @export +#' #' @examples +#' #' library(bllflow) +#' #' +#' #' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' #' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' +#' #' populatedDetails <- ProcessDDIVariableDetails(pbcDDI, variableDetails) +#' ProcessDDIVariableDetails <- function(ddi, variableDetails) { +#' variableValueList <- list() +#' ddiVariables <- list() +#' ddiMetaData <- ddi$variableMetaData +#' ddiObject <- ddi$ddiObject +#' # used for parsing out additional data +#' detectedVariables <- +#' unique(variableDetails[pkg.globals$argument.VariableStart]) +#' # Find extra info about the variable low and high +#' valueForHighLow <- list() +#' +#' # Need to loop through every element because the xml2 names all variables var +#' for (individualVariable in ddiObject$codeBook$dataDscr) { +#' if (!is.null(attr(individualVariable, "name", exact = TRUE))) { +#' ddiElementName <- attr(individualVariable, "name", exact = TRUE) +#' if (length(detectedVariables[detectedVariables$variableStart == ddiElementName, 1]) != 0) { +#' valueForHighLow[[ddiElementName]] <- individualVariable$valrng$range +#' valueForHighLow[[ddiElementName]][["Type"]] <- +#' ifelse(attr(individualVariable, "intrvl") == "discrete", +#' pkg.globals$ddiValueName.Cat, +#' pkg.globals$ddiValueName.Cont) +#' } +#' } +#' } +#' +#' # Loop through every unique variable found in the VariableDetails +#' for (variableToCheck in detectedVariables[, 1]) { +#' # Check if that variable is recorded in DDI +#' if (variableToCheck %in% names(ddiMetaData$dataDscr)) { +#' # Store the label for that variable +#' variableInfo <- +#' ddiMetaData$dataDscr[[variableToCheck]] +#' variableValueList <- list() +#' # Check for pressence of value and their labels +#' if (!is.null(variableInfo$values)) { +#' for (valueLabelToCheck in names(variableInfo$values)) { +#' catValue <- variableInfo$values[[valueLabelToCheck]] +#' variableValueList[[as.character(catValue)]] <- +#' AddDDIToList( +#' valueForHighLow[[variableToCheck]]$Type, +#' catValue, +#' valueLabelToCheck, +#' variableInfo$label, +#' catValue, +#' catValue +#' ) +#' } +#' } +#' if (valueForHighLow[[variableToCheck]]$Type != pkg.globals$ddiValueName.Cat){ +#' # Record variable info +#' variableValueList[[as.character(variableToCheck)]] <- +#' AddDDIToList( +#' valueForHighLow[[variableToCheck]]$Type, +#' NA, +#' NA, +#' variableInfo$label, +#' attr(valueForHighLow[[variableToCheck]], pkg.globals$ddiValue.Min), +#' attr(valueForHighLow[[variableToCheck]], pkg.globals$ddiValue.Max) +#' ) +#' } +#' # add the list of value labels to that variable +#' ddiVariables[[variableToCheck]] <- variableValueList +#' } +#' } +#' +#' if (length(ddiVariables) == 0) { +#' populatedVariableDetails <- NULL +#' } else{ +#' populatedVariableDetails <- +#' PopulateVariableDetails(variableDetails, +#' ddiVariables) +#' } +#' +#' return(populatedVariableDetails) +#' } #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' AddDDI information to a list +#' #' +#' #' @param variableStartType Variable type cont or cat +#' #' @param catStartValue value of the variable being recorded +#' #' @param catStartLabel Label for the value of the variable +#' #' @param variableStartLabel Label for the variable +#' #' @param variableStartLow Min for the variable value +#' #' @param variableStartHigh Max for the variable value +#' #' @return Returns a list containg data on the variables in varList +#' AddDDIToList <- function(variableStartType, +#' catStartValue, +#' catStartLabel, +#' variableStartLabel, +#' variableStartLow , +#' variableStartHigh) { +#' retList <- list() +#' retList[[pkg.globals$argument.VariableStartType]] <- variableStartType +#' retList[[pkg.globals$argument.CatStartValue]] <- catStartValue +#' retList[[pkg.globals$argument.CatStartLabel]] <- catStartLabel +#' retList[[pkg.globals$argument.VariableStartLabel]] <- variableStartLabel +#' retList[[pkg.globals$argument.VariableStartHighLow]] <- paste(variableStartLow, ":",variableStartHigh, sep = "") +#' +#' return(retList) +#' } #' -#' populatedDetails <- ProcessDDIVariableDetails(pbcDDI, variableDetails) -ProcessDDIVariableDetails <- function(ddi, variableDetails) { - variableValueList <- list() - ddiVariables <- list() - ddiMetaData <- ddi$variableMetaData - ddiObject <- ddi$ddiObject - # used for parsing out additional data - detectedVariables <- - unique(variableDetails[pkg.globals$argument.VariableStart]) - # Find extra info about the variable low and high - valueForHighLow <- list() - - # Need to loop through every element because the xml2 names all variables var - for (individualVariable in ddiObject$codeBook$dataDscr) { - if (!is.null(attr(individualVariable, "name", exact = TRUE))) { - ddiElementName <- attr(individualVariable, "name", exact = TRUE) - if (length(detectedVariables[detectedVariables$variableStart == ddiElementName, 1]) != 0) { - valueForHighLow[[ddiElementName]] <- individualVariable$valrng$range - valueForHighLow[[ddiElementName]][["Type"]] <- - ifelse(attr(individualVariable, "intrvl") == "discrete", - pkg.globals$ddiValueName.Cat, - pkg.globals$ddiValueName.Cont) - } - } - } - - # Loop through every unique variable found in the VariableDetails - for (variableToCheck in detectedVariables[, 1]) { - # Check if that variable is recorded in DDI - if (variableToCheck %in% names(ddiMetaData$dataDscr)) { - # Store the label for that variable - variableInfo <- - ddiMetaData$dataDscr[[variableToCheck]] - variableValueList <- list() - # Check for pressence of value and their labels - if (!is.null(variableInfo$values)) { - for (valueLabelToCheck in names(variableInfo$values)) { - catValue <- variableInfo$values[[valueLabelToCheck]] - variableValueList[[as.character(catValue)]] <- - AddDDIToList( - valueForHighLow[[variableToCheck]]$Type, - catValue, - valueLabelToCheck, - variableInfo$label, - catValue, - catValue - ) - } - } - if (valueForHighLow[[variableToCheck]]$Type != pkg.globals$ddiValueName.Cat){ - # Record variable info - variableValueList[[as.character(variableToCheck)]] <- - AddDDIToList( - valueForHighLow[[variableToCheck]]$Type, - NA, - NA, - variableInfo$label, - attr(valueForHighLow[[variableToCheck]], pkg.globals$ddiValue.Min), - attr(valueForHighLow[[variableToCheck]], pkg.globals$ddiValue.Max) - ) - } - # add the list of value labels to that variable - ddiVariables[[variableToCheck]] <- variableValueList - } - } - - if (length(ddiVariables) == 0) { - populatedVariableDetails <- NULL - } else{ - populatedVariableDetails <- - PopulateVariableDetails(variableDetails, - ddiVariables) - } - - return(populatedVariableDetails) -} - -#' AddDDI information to a list -#' -#' @param variableStartType Variable type cont or cat -#' @param catStartValue value of the variable being recorded -#' @param catStartLabel Label for the value of the variable -#' @param variableStartLabel Label for the variable -#' @param variableStartLow Min for the variable value -#' @param variableStartHigh Max for the variable value -#' @return Returns a list containg data on the variables in varList -AddDDIToList <- function(variableStartType, - catStartValue, - catStartLabel, - variableStartLabel, - variableStartLow , - variableStartHigh) { - retList <- list() - retList[[pkg.globals$argument.VariableStartType]] <- variableStartType - retList[[pkg.globals$argument.CatStartValue]] <- catStartValue - retList[[pkg.globals$argument.CatStartLabel]] <- catStartLabel - retList[[pkg.globals$argument.VariableStartLabel]] <- variableStartLabel - retList[[pkg.globals$argument.VariableStartHighLow]] <- paste(variableStartLow, ":",variableStartHigh, sep = "") - - return(retList) -} - diff --git a/R/bll-flow.R b/R/bll-flow.R index 596532e1..63eaa17e 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -1,11 +1,11 @@ #' Creates a bllflow model -#' -#' Wraps up the data, variables and variableDetails arguments in an R object, +#' +#' Wraps up the data, variables and variableDetails arguments in an R object, #' making it an instance of a bllflow class and returning the resulting object. -#' If a ddi argument is provided, all the metadata from the DDI document is +#' If a ddi argument is provided, all the metadata from the DDI document is #' imported into the R object #' -#' @param data A dataframe that represents the dataset the model will be developed +#' @param dataList A dataframe list that represents the datasets the model will be developed #' on #' @param variables A dataframe that has the specification sheet for this model. An example #' of this worksheet is available here @@ -13,28 +13,29 @@ #' @param variableDetails A dataframe that is the variable details worksheet. An example #' of this worksheet is available here #' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=1196358036}. -#' @param ddi An optinal string that contains the path to a ddi document +#' @param ddiList A named list that contains the ddi documents #' @return A named list which is an instance of the bllflow class. The items #' in the list are specified below: \cr -#' 1. data - A dataframe that contains the passed data argument \cr +#' 1. dataList - A dataframe that contains the passed dataList argument \cr #' 2. variables - A dataframe that contains the passed variables argument \cr #' 3. variableDetails - A dataframe that contains the passed variableDetails argument \cr -#' 4. ddi - A string that contains the passed ddi argument \cr +#' 4. ddiList - A named list that contains the ddi found on the passed path \cr #' 5. additionalDDIMetaData - A named list. See the return type of the \code{\link{GetDDIDescription}} function \cr #' 6. populatedVariableDetails - A dataframe that contains the rows in the variableDetails \cr #' argument but with additional data filled in using the ddi argument it's specified -#' +#' #' @export #' #' @examples +#' #TODO Update with lists #' # ALl the libraries we will be using #' library(bllflow) #' library(survival) -#' +#' #' # Read in the data we will use for this example #' data(pbc) #' -#' # Read in the variables and variable details CSV sheets which are part of the +#' # Read in the variables and variable details CSV sheets which are part of the #' # master specification workbook #' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) #' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) @@ -42,23 +43,27 @@ #' # Create a bllFlow R object for the PBC model using the above variables as args #' # and store it in the pbcModel variable #' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetails) -#' +#' #' # The pbcModel variable is an R object of instance BLLFlow #' print(attr(pbcModel, 'class')) BLLFlow <- - function(data = NULL, + function(dataList = NULL, variables = NULL, variableDetails = NULL, - ddi = NULL) { + ddiList = NULL) { + ddiHeader <- list() # Verify passed arg integrity for future functions if (!is.null(data)) { - CheckIfDataFrame(data, pkg.globals$argument.Data) + for (singleDataIndex in 1:length(dataList)) { + CheckIfDataFrame(dataList[[singleDataIndex]], names(dataList)[[singleDataIndex]]) + } + } if (!is.null(variables)) { CheckIfDataFrame(variables, pkg.globals$argument.Variables) # Change the columns needed for the functions CheckForColumnPresence( - c(), + c("variable", "label", "labelLong", "variableType", "units"), variables, pkg.globals$argument.Variables ) @@ -66,24 +71,45 @@ BLLFlow <- if (!is.null(variableDetails)) { CheckIfDataFrame(variableDetails, pkg.globals$argument.VariableDetailsSheet) + CheckForColumnPresence( + c( + "variable", + "toType", + "databaseStart", + "variableStart", + "fromType", + "recTo", + "catLabel", + "catLabelLong", + "recFrom", + "units" + ), + variableDetails, + pkg.globals$argument.VariableDetailsSheet + ) } - if (!is.null(ddi)) { - processedVariableDetails <- - ProcessDDIVariableDetails(ddi, variableDetails) - ddiHeader <- GetDDIDescription(ddi) - }else{ - processedVariableDetails <- NULL + + if (!is.null(ddiList)) { + # TODO redisign to create template rather then populate add a check to verify proper structure + # processedVariableDetails <- + # ProcessDDIVariableDetails(ddi, variableDetails) + for (ddiIndex in 1:length(ddiList)){ + CheckForExistanceOfInList(c("variableMetaData", "ddiObject"), ddiList[[ddiIndex]], paste(names(ddiList)[[ddiIndex]], "ddi")) + ddiHeader[[names(ddiIndex)[[ddiIndex]]]] <- GetDDIDescription(ddiList[[ddiIndex]]) + } + + } else{ ddiHeader <- NULL } bllFlowModel <- list( - data = data, + dataList = dataList, variables = variables, variableDetails = variableDetails, additionalDDIMetaData = ddiHeader, - populatedVariableDetails = processedVariableDetails, - ddi = ddi + populatedVariableDetails = NULL, + ddiList = ddiList ) attr(bllFlowModel, "class") <- "BLLFlow" diff --git a/R/error-check.R b/R/error-check.R index f4c6fd6b..493da462 100644 --- a/R/error-check.R +++ b/R/error-check.R @@ -11,10 +11,10 @@ CheckForColumnPresence <- function(names, frame, frameName) { } } -CheckForExistanceOfInList <- function(names, passedList) { +CheckForExistanceOfInList <- function(names, passedList, listName) { for (name.checkRow in names) { - if (!(name.checkRow["variable"] %in% passedList)) { - stop(paste("The ", name.checkRow["variable"], "column is missing from the data")) + if (!(name.checkRow %in% passedList)) { + stop(paste("The", name.checkRow, "is missing from the", listName)) } } } From 6e108e9f38a435d6a4aa7f4ecb7e4e8066456c09 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 15 Oct 2019 14:49:57 -0400 Subject: [PATCH 047/123] [Feature] Template generation --- NAMESPACE | 3 +- R/bll-flow-constructor-utility.R | 75 ++++++++++++++++++++++++++++++++ R/bll-flow.R | 2 +- R/error-check.R | 2 +- R/strings.R | 2 +- man/BLLFlow.Rd | 19 ++++---- 6 files changed, 90 insertions(+), 13 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index a48ac133..b78b3a22 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ S3method(CheckSmallCells,SummaryData) S3method(CheckSmallCells,TableOne) S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) +S3method(CreateVariableDetailsTemplate,BLLFlow) S3method(RecWTable,default) S3method(WriteDDIPopulatedMSW,BLLFlow) S3method(WriteDDIPopulatedMSW,BLLFlowDDI) @@ -13,9 +14,9 @@ S3method(print,metaDataLog) export(BLLFlow) export(CheckSmallCells) export(CreateTableOne) +export(CreateVariableDetailsTemplate) export(GetDDIDescription) export(GetDDIVariables) -export(ProcessDDIVariableDetails) export(ReadDDI) export(RecWTable) export(SetDataLabels) diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index b3d9375d..093afb70 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -1,4 +1,79 @@ +#' @export +CreateVariableDetailsTemplate <- function(x = NULL, ...) { + UseMethod("CreateVariableDetailsTemplate", x) +} +#' @export +CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { + variableDetails <- + data.frame( + variable = character(), + toType = character(), + databaseStart = character(), + variableStart = character(), + fromType = character(), + recTo = character(), + catLabel = character(), + catLabelLong = character(), + units = character(), + recFrom = character(), + catStartLabel = character(), + variableStartShortLabel = character(), + variableStartLabel = character() + ) + # Collect all the variables in MSW variables + detectedVariables <- unique(bllFlowObject[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) + + # Loop through the ddiList and add variables detected + for (singleDDI in bllFlowObject[[pkg.globals$bllFlowContent.DDI]]) { + variable <- "Please Insert RecodedVariable name" + toType <- + "Please insert desired recoded variable type supported ones are: cat, cont" + databaseStart <- + singleDDI[["ddiObject"]][["codeBook"]][["docDscr"]][["docSrc"]][["titlStmt"]][["titl"]][[1]] + # loop through detectedVariables + for (singleDetectedVariable in detectedVariables) { + if (singleDetectedVariable %in% names(singleDDI[["variableMetaData"]][["dataDscr"]])) { + variableDDI <- + singleDDI[["variableMetaData"]][["dataDscr"]][[singleDetectedVariable]] + variableStart <- + paste(databaseStart, singleDetectedVariable, sep = "::") + fromType <- variableDDI$type + recTo <- "Please insert values to recode to" + catLabel <- "Please enter the lable" + catLabelLong <- "Please enter the long label" + units <- "Specify the units" + recFrom <- "Specify range to recode from" + catStartLabel <- variableDDI$label + variableStartShortLabel <- variableDDI$label + variableStartLabel <- variableDDI$label + + newRow <- + data.frame( + variable = variable, + toType, + databaseStart, + variableStart, + fromType, + recTo, + catLabel, + catLabelLong, + units, + recFrom, + catStartLabel, + variableStartShortLabel , + variableStartLabel + ) + variableDetails <- rbind(variableDetails, newRow) + } + } + + + } + bllFlowObject$variableDetails <- variableDetails + + return(bllFlowObject) +} # ----------- DEPRICATE NEEDS REMAKING --------- #' #' Creates a data frame that holds additional ddi data diff --git a/R/bll-flow.R b/R/bll-flow.R index 63eaa17e..f815f5f8 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -96,7 +96,7 @@ BLLFlow <- # ProcessDDIVariableDetails(ddi, variableDetails) for (ddiIndex in 1:length(ddiList)){ CheckForExistanceOfInList(c("variableMetaData", "ddiObject"), ddiList[[ddiIndex]], paste(names(ddiList)[[ddiIndex]], "ddi")) - ddiHeader[[names(ddiIndex)[[ddiIndex]]]] <- GetDDIDescription(ddiList[[ddiIndex]]) + ddiHeader[[names(ddiList)[[ddiIndex]]]] <- GetDDIDescription(ddiList[[ddiIndex]]) } } else{ diff --git a/R/error-check.R b/R/error-check.R index 493da462..d5fdd66e 100644 --- a/R/error-check.R +++ b/R/error-check.R @@ -13,7 +13,7 @@ CheckForColumnPresence <- function(names, frame, frameName) { CheckForExistanceOfInList <- function(names, passedList, listName) { for (name.checkRow in names) { - if (!(name.checkRow %in% passedList)) { + if (!(name.checkRow %in% names(passedList))) { stop(paste("The", name.checkRow, "is missing from the", listName)) } } diff --git a/R/strings.R b/R/strings.R index 08889577..68f13642 100644 --- a/R/strings.R +++ b/R/strings.R @@ -41,7 +41,7 @@ pkg.globals$bllFlowContent.Data <- "data" pkg.globals$bllFlowContent.Variables <- "variables" pkg.globals$bllFlowContent.VariableDetails <- "variableDetails" pkg.globals$bllFlowContent.PopulatedVariableDetails <- "populatedVariableDetails" -pkg.globals$bllFlowContent.DDI <- "ddi" +pkg.globals$bllFlowContent.DDI <- "ddiList" pkg.globals$bllFlowContent.LongTable <- "longTable" pkg.globals$bllFlowContent.AdditionalMetaData <- "additionalDDIMetaData" diff --git a/man/BLLFlow.Rd b/man/BLLFlow.Rd index 52cb8bb1..eb27f42c 100644 --- a/man/BLLFlow.Rd +++ b/man/BLLFlow.Rd @@ -4,11 +4,11 @@ \alias{BLLFlow} \title{Creates a bllflow model} \usage{ -BLLFlow(data = NULL, variables = NULL, variableDetails = NULL, - ddi = NULL) +BLLFlow(dataList = NULL, variables = NULL, variableDetails = NULL, + ddiList = NULL) } \arguments{ -\item{data}{A dataframe that represents the dataset the model will be developed +\item{dataList}{A dataframe list that represents the datasets the model will be developed on} \item{variables}{A dataframe that has the specification sheet for this model. An example @@ -19,26 +19,27 @@ of this worksheet is available here of this worksheet is available here \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=1196358036}.} -\item{ddi}{An optinal string that contains the path to a ddi document} +\item{ddiList}{A named list that contains the ddi documents} } \value{ A named list which is an instance of the bllflow class. The items in the list are specified below: \cr -1. data - A dataframe that contains the passed data argument \cr +1. dataList - A dataframe that contains the passed dataList argument \cr 2. variables - A dataframe that contains the passed variables argument \cr 3. variableDetails - A dataframe that contains the passed variableDetails argument \cr -4. ddi - A string that contains the passed ddi argument \cr +4. ddiList - A named list that contains the ddi found on the passed path \cr 5. additionalDDIMetaData - A named list. See the return type of the \code{\link{GetDDIDescription}} function \cr 6. populatedVariableDetails - A dataframe that contains the rows in the variableDetails \cr argument but with additional data filled in using the ddi argument it's specified } \description{ -Wraps up the data, variables and variableDetails arguments in an R object, +Wraps up the data, variables and variableDetails arguments in an R object, making it an instance of a bllflow class and returning the resulting object. -If a ddi argument is provided, all the metadata from the DDI document is +If a ddi argument is provided, all the metadata from the DDI document is imported into the R object } \examples{ +#TODO Update with lists # ALl the libraries we will be using library(bllflow) library(survival) @@ -46,7 +47,7 @@ library(survival) # Read in the data we will use for this example data(pbc) -# Read in the variables and variable details CSV sheets which are part of the +# Read in the variables and variable details CSV sheets which are part of the # master specification workbook variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) From 26961cc0436acb7ea8542b93d784e45f08baa787 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 15 Oct 2019 15:13:07 -0400 Subject: [PATCH 048/123] [Bug] Fixed non character reading --- R/recode-with-table.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 72fe6aa0..32ca40cd 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -641,7 +641,7 @@ RecodeDerivedVariables <- # Check for presence of feeder variables in data and in the variable being processed stack feederVars <- - as.list(strsplit(variableRows[1, ][[pkg.globals$argument.VariableStart]], "::"))[[1]][[2]] + as.list(strsplit(as.character(variableRows[1, ][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] feederVars <- gsub("\\[|\\]", "", feederVars) feederVars <- as.list(strsplit(feederVars, ","))[[1]] feederVars <- sapply(feederVars, trimws) From c36cfed07a612e377752fbaf8cb198fd336ad0f5 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 15 Oct 2019 15:35:40 -0400 Subject: [PATCH 049/123] [Refactor] Added better warnings for derived variable creation --- R/recode-with-table.R | 60 ++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 32ca40cd..984902f9 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -144,7 +144,7 @@ RecodeCall <- } else { if (!is.null(variables)) { variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables, ] + variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables,] } if (is.null(variableDetails[[pkg.globals$argument.VariableLabel]])) { variableDetails[[pkg.globals$argument.VariableLabel]] <- NA @@ -173,7 +173,7 @@ RecodeCall <- allPossibleVarNames <- unique(as.character(variableDetails[[pkg.globals$argument.Variables]])) allVariablesDetected <- - variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]), ] + variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]),] recData <- RecodeColumns( @@ -275,13 +275,13 @@ RecodeColumns <- elseDefault) { # Split variables to process into recode map and func mapVariablesToProcess <- - variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] + variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] funcVariablesToProcess <- - variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] + variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]),] recVariablesToProcess <- - variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] + variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] labelList <- list() # Set interval if none is present @@ -298,10 +298,10 @@ RecodeColumns <- variableBeingChecked <- as.character(recVariablesToProcess[1, pkg.globals$argument.Variables]) rowsBeingChecked <- - recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] + recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] recVariablesToProcess <- - recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] - firstRow <- rowsBeingChecked[1,] + recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] + firstRow <- rowsBeingChecked[1, ] # Check for varialbe existance in data dataVariableBeingChecked <- GetDataVariableName( @@ -375,7 +375,7 @@ RecodeColumns <- recodedData[variableBeingChecked] <- elseDefault } rowsBeingChecked <- - rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else", ] + rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else",] if (nrow(rowsBeingChecked) > 0) { logTable <- rowsBeingChecked[, 0] logTable$valueTo <- NA @@ -385,7 +385,7 @@ RecodeColumns <- c(levels(recodedData[[variableBeingChecked]]), levels(rowsBeingChecked[[pkg.globals$argument.CatValue]])) for (row in 1:nrow(rowsBeingChecked)) { - rowBeingChecked <- rowsBeingChecked[row,] + rowBeingChecked <- rowsBeingChecked[row, ] # If cat go check for label and obtain it # regardless obtain unit and attach @@ -488,7 +488,7 @@ RecodeColumns <- # Process funcVars while (nrow(funcVariablesToProcess) > 0) { - firstRow <- funcVariablesToProcess[1, ] + firstRow <- funcVariablesToProcess[1,] firstRowVariableName <- firstRow[[pkg.globals$argument.Variables]] # get name of var pass to @@ -567,7 +567,7 @@ UpdateVariableDetailsBasedOnVariableSheet <- function(variableSheet, variableDetails) { # remove conflicting columns from variable details variableDetails <- - variableDetails[,!( + variableDetails[, !( names(variableDetails) %in% c( pkg.globals$MSW.Variables.Columns.VariableType, pkg.globals$MSW.Variables.Columns.Label, @@ -595,7 +595,7 @@ UpdateVariableDetailsBasedOnVariableSheet <- ) # remove variables not present in variableSheet variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]], ] + variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]],] return(variableDetails) } @@ -635,19 +635,42 @@ RecodeDerivedVariables <- varStack <- c(varStack, variableBeingProcessed) # obtain rows to process and updated variables to Process variableRows <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingProcessed, ] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingProcessed,] variablesToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != variableBeingProcessed, ] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != variableBeingProcessed,] # Check for presence of feeder variables in data and in the variable being processed stack feederVars <- - as.list(strsplit(as.character(variableRows[1, ][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] + as.list(strsplit(as.character(variableRows[1,][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] feederVars <- gsub("\\[|\\]", "", feederVars) feederVars <- as.list(strsplit(feederVars, ","))[[1]] feederVars <- sapply(feederVars, trimws) usedFeederVars <- feederVars feederVars <- setdiff(feederVars, names(recodedData)) + # Check if the variable has a function to recode + nonFuncMissingVariables <- + setdiff(feederVars, unique(as.character(variablesToProcess[[pkg.globals$argument.Variables]]))) + if (length(nonFuncMissingVariables) > 0) { + warning( + paste( + variableBeingProcessed, + "could not be calculated because", + feederVars, + "was never recoded and is not a function variable" + ) + ) + varStack <- varStack[!(varStack == variableBeingProcessed)] + + return( + list( + varStack = varStack, + labelList = labelList, + recodedData = recodedData, + variablesToProcess = variablesToProcess + ) + ) + } # Check for presense in varStack if (length(intersect(feederVars, varStack)) > 0) { conflictVars <- intersect(feederVars, varStack) @@ -689,7 +712,7 @@ RecodeDerivedVariables <- # Obtain the function for each row append(labelList, CreateLabelListElement(variableRows)) for (rowNum in 1:nrow(variableRows)) { - rowBeingChecked <- variableRows[rowNum,] + rowBeingChecked <- variableRows[rowNum, ] funcCell <- rowBeingChecked[[pkg.globals$argument.CatValue]] functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] @@ -703,7 +726,8 @@ RecodeDerivedVariables <- customFunctionName = functionBeingUsed ) ) - recodedData[[variableBeingProcessed]] <- unlist(columnValue[["columnBeingAdded"]]) + recodedData[[variableBeingProcessed]] <- + unlist(columnValue[["columnBeingAdded"]]) } varStack <- varStack[!(varStack == variableBeingProcessed)] From 55b8f5dce08aaca319b8b76c054e5b7f5e2f71a6 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 15 Oct 2019 15:56:23 -0400 Subject: [PATCH 050/123] [Bug] Reverting unsported changes --- inst/extdata/PBC-variableDetails - Copy.csv | 44 +++++++++++++++ inst/extdata/PBC-variableDetails.csv | 62 ++++++--------------- inst/extdata/PBC-variables - Copy.csv | 22 ++++++++ inst/extdata/PBC-variables.csv | 29 +++------- 4 files changed, 91 insertions(+), 66 deletions(-) create mode 100644 inst/extdata/PBC-variableDetails - Copy.csv create mode 100644 inst/extdata/PBC-variables - Copy.csv diff --git a/inst/extdata/PBC-variableDetails - Copy.csv b/inst/extdata/PBC-variableDetails - Copy.csv new file mode 100644 index 00000000..f9066827 --- /dev/null +++ b/inst/extdata/PBC-variableDetails - Copy.csv @@ -0,0 +1,44 @@ +variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval +AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" +AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" +ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" +ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" +ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" +AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" +AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" +BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" +CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" +COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" +EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" +HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" +PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" +PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" +SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" +SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" +SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" +STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" +STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" +STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" +STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" +STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" +STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" +TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" +TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" +TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" +TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" +TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" +TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" +AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/PBC-variableDetails.csv b/inst/extdata/PBC-variableDetails.csv index 8aac4392..e1c8b508 100644 --- a/inst/extdata/PBC-variableDetails.csv +++ b/inst/extdata/PBC-variableDetails.csv @@ -1,44 +1,18 @@ -variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval -AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" -AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" -AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" -AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" -SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" -SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" -STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" -STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" -STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" -STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" -STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" -STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" -TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" -TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" -TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" -TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" -TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file +variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from +sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 +sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 +sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A +age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A +age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A +age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A +age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A +age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA +edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 +edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 +edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 +edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA +ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 +ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 +ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 +ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 +ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/PBC-variables - Copy.csv b/inst/extdata/PBC-variables - Copy.csv new file mode 100644 index 00000000..a22f2994 --- /dev/null +++ b/inst/extdata/PBC-variables - Copy.csv @@ -0,0 +1,22 @@ +variable,label,labelLong,variableType,units +age,Age,Age of participent in years,cont,Year +sex,Sex,Sex of the participent,cat,NA +bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl +albumin,serum albumin,serum albumin (g/dl),cont,g/dl +protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min +edema,edema,"0 no edema, 0.5 untreated or successfully treated +1 edema despite diuretic therapy",cat,NA +alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter +ascites,presence of ascites,presence of ascites,cat,NA +ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml +chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl +copper,urine copper,urine copper (ug/day),cont,ug/day +hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA +platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood +spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA +stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA +status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA +time,number of days,"number of days between registration and the earlier of death, +transplantion, or study analysis in July, 1986",cont,days +trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA +trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/inst/extdata/PBC-variables.csv b/inst/extdata/PBC-variables.csv index a22f2994..12b92b2f 100644 --- a/inst/extdata/PBC-variables.csv +++ b/inst/extdata/PBC-variables.csv @@ -1,22 +1,7 @@ -variable,label,labelLong,variableType,units -age,Age,Age of participent in years,cont,Year -sex,Sex,Sex of the participent,cat,NA -bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl -albumin,serum albumin,serum albumin (g/dl),cont,g/dl -protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min -edema,edema,"0 no edema, 0.5 untreated or successfully treated -1 edema despite diuretic therapy",cat,NA -alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter -ascites,presence of ascites,presence of ascites,cat,NA -ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml -chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl -copper,urine copper,urine copper (ug/day),cont,ug/day -hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA -platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood -spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA -stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA -status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA -time,number of days,"number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986",cont,days -trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA -trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file +variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier +age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete +sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete +bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing +albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing +protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing +edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file From a2d328049e0ba8e140b023f94db4df082597264a Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 22 Oct 2019 13:06:13 -0400 Subject: [PATCH 051/123] [Feature] Building recipy using steps --- NAMESPACE | 2 +- R/module-instruction-parsing.R | 36 +++++++++++++++++++++++++++++++--- R/strings.R | 1 + 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index cec3cc1f..941769ef 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,8 +21,8 @@ export(CreateVariableDetailsTemplate) export(GetDDIDescription) export(GetDDIVariables) export(ReadDDI) -export(RunModule) export(RecWTable) +export(RunModule) export(SetDataLabels) export(SummaryDataLong) export(UpdateMSW) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index c3f65dfb..3d757a44 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -107,8 +107,37 @@ CreateExactFunction <- function(functionList) { } #Uses the function objects to create a recipy -CreateRecipy <- function(functionObjectList, workingData) { +CreateRecipy <- function(functionObjectList, workingData,variables) { + # Check variable roles for the recipy creation + # TODO bllflow support make this add to overall recipy + outcomeVariable <- as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome",pkg.globals$argument.Variables]) + # TODO add a function for creating a proper formula + recipeFormula <- paste(outcomeVariable, "~ .") + recipyObject <- recipes::recipe(formula = recipeFormula, data = workingData, x = workingData) + + for (singleFunction in names(functionObjectList)) { + variables <- names(functionObjectList[[singleFunction]][[pkg.globals$FunctionList.VariableArguments]]) + arguments <- functionObjectList[[singleFunction]][[pkg.globals$FunctionList.Arguments]] + stepFormula <- CreateVariableFormula(variables) + stepName <- paste("step_",singleFunction, sep = "") + recipyObject <- do.call(get(stepName),list(recipyObject, stepFormula, arguments)) + } + recipyObject <- recipes::prep(recipyObject, workingData) + + return(recipyObject) +} + +#Function for creating formula for variable selection +CreateVariableFormula <- function(varList){ + returnFormula <- character() + for (variable in varList) { + returnFormula <- paste(returnFormula, variable, "+") + } + returnFormula <- trimws(returnFormula) + returnFormula <- substr(returnFormula,1,nchar(returnFormula)-2) + + return(returnFormula) } #verify module sequence matches the passed data @@ -174,8 +203,9 @@ RunModule <- variables = variables, variableDetails = variableDetails ) - workingData <- CreateRecipy(moduleFunctions, workingData) + workingData <- CreateRecipy(moduleFunctions, workingData, variables) } + processedData <- recipes::bake(workingData, data) - return(workingData) + return(processedData) } \ No newline at end of file diff --git a/R/strings.R b/R/strings.R index dca835f4..7cfc0800 100644 --- a/R/strings.R +++ b/R/strings.R @@ -30,6 +30,7 @@ pkg.globals$argument.CatLabelLong <- "catLabelLong" pkg.globals$argument.CatLabel <- "catLabel" pkg.globals$argument.CatType <- "cat" pkg.globals$argument.VariableStartHighLow <- "from" +pkg.globals$argument.Role <- "role" # DDI object names pkg.globals$ddiValue.Min <- "min" From b3f4e879eb20689b98914d9e7fa68eff54b270a5 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 22 Oct 2019 15:03:03 -0400 Subject: [PATCH 052/123] [Feature] Passed variables as arguments --- R/module-instruction-parsing.R | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 3d757a44..f5ec592e 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -121,21 +121,19 @@ CreateRecipy <- function(functionObjectList, workingData,variables) { arguments <- functionObjectList[[singleFunction]][[pkg.globals$FunctionList.Arguments]] stepFormula <- CreateVariableFormula(variables) stepName <- paste("step_",singleFunction, sep = "") - recipyObject <- do.call(get(stepName),list(recipyObject, stepFormula, arguments)) + recipyObject <- do.call(get(stepName),list(recipe = recipyObject, unlist(stepFormula))) } - recipyObject <- recipes::prep(recipyObject, workingData) + recipyObject <- recipes::prep(recipyObject, training = workingData) return(recipyObject) } #Function for creating formula for variable selection CreateVariableFormula <- function(varList){ - returnFormula <- character() + returnFormula <- list() for (variable in varList) { - returnFormula <- paste(returnFormula, variable, "+") + returnFormula <- append(returnFormula, variable) } - returnFormula <- trimws(returnFormula) - returnFormula <- substr(returnFormula,1,nchar(returnFormula)-2) return(returnFormula) } From f0631def31942fa2ea52ba75fdac37984686a566 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 23 Oct 2019 08:44:45 -0400 Subject: [PATCH 053/123] [Feature] Reading specific columns --- R/bll-flow.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/R/bll-flow.R b/R/bll-flow.R index f815f5f8..108b82b1 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -116,3 +116,14 @@ BLLFlow <- return(bllFlowModel) } + +#' @export +ReadData <- function(bllFlow, dataName, pathToData) { + # calculate the rows to set to null + variablesToRead <- bllFlow[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.VariableStart]] + # Process out the database start using dataName + + # Read just the header of the csv to find the variables positions set rest to NULL + read.csv(file=pathToData, sep=" ", colClasses=c("NULL", NA, NA)) + # Use numeric vector to read only those specific colums +} From 843f9b5b948cd3493e3a20cbdf030590f42079f7 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 28 Oct 2019 11:57:52 -0400 Subject: [PATCH 054/123] [Feature] Parsed out variables --- NAMESPACE | 1 + R/bll-flow.R | 46 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 941769ef..04aa90b4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,6 +21,7 @@ export(CreateVariableDetailsTemplate) export(GetDDIDescription) export(GetDDIVariables) export(ReadDDI) +export(ReadData) export(RecWTable) export(RunModule) export(SetDataLabels) diff --git a/R/bll-flow.R b/R/bll-flow.R index 108b82b1..bb5468e1 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -94,9 +94,12 @@ BLLFlow <- # TODO redisign to create template rather then populate add a check to verify proper structure # processedVariableDetails <- # ProcessDDIVariableDetails(ddi, variableDetails) - for (ddiIndex in 1:length(ddiList)){ - CheckForExistanceOfInList(c("variableMetaData", "ddiObject"), ddiList[[ddiIndex]], paste(names(ddiList)[[ddiIndex]], "ddi")) - ddiHeader[[names(ddiList)[[ddiIndex]]]] <- GetDDIDescription(ddiList[[ddiIndex]]) + for (ddiIndex in 1:length(ddiList)) { + CheckForExistanceOfInList(c("variableMetaData", "ddiObject"), + ddiList[[ddiIndex]], + paste(names(ddiList)[[ddiIndex]], "ddi")) + ddiHeader[[names(ddiList)[[ddiIndex]]]] <- + GetDDIDescription(ddiList[[ddiIndex]]) } } else{ @@ -119,11 +122,42 @@ BLLFlow <- #' @export ReadData <- function(bllFlow, dataName, pathToData) { - # calculate the rows to set to null - variablesToRead <- bllFlow[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.VariableStart]] + # calculate the rows to set to null + firstRowOfData <- read.csv(file = pathToData, nrows = 1) + + varDetails <- bllFlow[[pkg.globals$bllFlowContent.Variables]] + + variablesToReadList <- + varDetails[grepl(dataName, varDetails[[pkg.globals$argument.DatabaseStart]]), pkg.globals$argument.VariableStart] + + varNamesForThisData <- list() + + for (variableToReadRow in 1:nrow(variablesToReadList)) { + variableToRead <- as.character(variablesToReadList[variableToReadRow,]) + dataVariableBeingChecked <- character() + if (grepl(dataName, variableToRead)) { + varStartNamesList <- as.list(strsplit(variableToRead, ",")[[1]]) + # Find exact var Name + for (varName in varStartNamesList) { + if (grepl(dataName, varName)) { + # seperate dataname from the var name + dataVariableBeingChecked <- + as.list(strsplit(varName, "::")[[1]])[[2]] + } + } + } else if (grepl("\\[", variableToRead)) { + dataVariableBeingChecked <- + stringr::str_match(variableToRead, "\\[(.*?)\\]")[, 2] + } + + varNamesForThisData <- append(varNamesForThisData, dataVariableBeingChecked) + } + varNamesForThisData <- unique(varNamesForThisData) # Process out the database start using dataName # Read just the header of the csv to find the variables positions set rest to NULL - read.csv(file=pathToData, sep=" ", colClasses=c("NULL", NA, NA)) + read.csv(file = pathToData, + sep = " ", + colClasses = c("NULL", NA, NA)) # Use numeric vector to read only those specific colums } From bc47645aece183518f7e8164f93bd3bbe12541c5 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 28 Oct 2019 12:35:10 -0400 Subject: [PATCH 055/123] [Feature] Only specified columns are read --- R/bll-flow.R | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/R/bll-flow.R b/R/bll-flow.R index bb5468e1..f3c3b512 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -133,31 +133,45 @@ ReadData <- function(bllFlow, dataName, pathToData) { varNamesForThisData <- list() for (variableToReadRow in 1:nrow(variablesToReadList)) { - variableToRead <- as.character(variablesToReadList[variableToReadRow,]) + variableToRead <- + as.character(variablesToReadList[variableToReadRow, ]) dataVariableBeingChecked <- character() - if (grepl(dataName, variableToRead)) { - varStartNamesList <- as.list(strsplit(variableToRead, ",")[[1]]) - # Find exact var Name - for (varName in varStartNamesList) { - if (grepl(dataName, varName)) { - # seperate dataname from the var name - dataVariableBeingChecked <- - as.list(strsplit(varName, "::")[[1]])[[2]] + if (!grepl("DerivedVar", variableToRead)) { + if (grepl(dataName, variableToRead)) { + varStartNamesList <- as.list(strsplit(variableToRead, ",")[[1]]) + # Find exact var Name + for (varName in varStartNamesList) { + if (grepl(dataName, varName)) { + # seperate dataname from the var name + dataVariableBeingChecked <- + as.list(strsplit(varName, "::")[[1]])[[2]] + } } + } else if (grepl("\\[", variableToRead)) { + dataVariableBeingChecked <- + stringr::str_match(variableToRead, "\\[(.*?)\\]")[, 2] } - } else if (grepl("\\[", variableToRead)) { - dataVariableBeingChecked <- - stringr::str_match(variableToRead, "\\[(.*?)\\]")[, 2] } - varNamesForThisData <- append(varNamesForThisData, dataVariableBeingChecked) + varNamesForThisData <- + append(varNamesForThisData, dataVariableBeingChecked) } varNamesForThisData <- unique(varNamesForThisData) - # Process out the database start using dataName - # Read just the header of the csv to find the variables positions set rest to NULL - read.csv(file = pathToData, - sep = " ", - colClasses = c("NULL", NA, NA)) + columnsToKeep <- colnames(firstRowOfData) %in% varNamesForThisData + columnClasses <- sapply(columnsToKeep, BooleanConversion) + + dataToSave <- read.csv(file = pathToData, + colClasses = columnClasses) # Use numeric vector to read only those specific colums } +BooleanConversion <- function(boolValue) { + retValue <- character() + if (boolValue) { + retValue <- NA + } else { + retValue <- "NULL" + } + + return(retValue) +} \ No newline at end of file From 8d95653d045ce1793035cff210c7eb156c5dd0e2 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 28 Oct 2019 12:44:42 -0400 Subject: [PATCH 056/123] [Bug] Fixed funcCellnon character argument --- R/recode-with-table.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 984902f9..f71d42ba 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -713,7 +713,7 @@ RecodeDerivedVariables <- append(labelList, CreateLabelListElement(variableRows)) for (rowNum in 1:nrow(variableRows)) { rowBeingChecked <- variableRows[rowNum, ] - funcCell <- rowBeingChecked[[pkg.globals$argument.CatValue]] + funcCell <- as.character(rowBeingChecked[[pkg.globals$argument.CatValue]]) functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] From f8afefebfaf919b3ce5e7c14a8543916b3a5ae31 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 28 Oct 2019 12:53:30 -0400 Subject: [PATCH 057/123] [Feature] Added ability to specify number of rows to read --- R/bll-flow.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/bll-flow.R b/R/bll-flow.R index f3c3b512..23bab3af 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -121,7 +121,7 @@ BLLFlow <- } #' @export -ReadData <- function(bllFlow, dataName, pathToData) { +ReadData <- function(bllFlow, dataName, pathToData, rowsToRead = -1) { # calculate the rows to set to null firstRowOfData <- read.csv(file = pathToData, nrows = 1) @@ -161,7 +161,7 @@ ReadData <- function(bllFlow, dataName, pathToData) { columnsToKeep <- colnames(firstRowOfData) %in% varNamesForThisData columnClasses <- sapply(columnsToKeep, BooleanConversion) - dataToSave <- read.csv(file = pathToData, + dataToSave <- read.csv(file = pathToData,nrows = rowsToRead, colClasses = columnClasses) # Use numeric vector to read only those specific colums } From 6de776afb5d600c3dd746e249ac44372eafc1a9c Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 28 Oct 2019 13:37:27 -0400 Subject: [PATCH 058/123] [Bug] Fixed null column creation --- R/recode-with-table.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index f71d42ba..d71c8754 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -490,7 +490,7 @@ RecodeColumns <- while (nrow(funcVariablesToProcess) > 0) { firstRow <- funcVariablesToProcess[1,] firstRowVariableName <- - firstRow[[pkg.globals$argument.Variables]] + as.character(firstRow[[pkg.globals$argument.Variables]]) # get name of var pass to derivedReturn <- RecodeDerivedVariables( From 685c819331fac6423537ff18c1b46c512ffbe0ec Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 29 Oct 2019 14:13:51 -0400 Subject: [PATCH 059/123] [Feature] Added directory for MSW and modified read data to take variables --- R/bll-flow.R | 7 +- .../PoRT MSW - cchsVarDetails_archived.csv | 1057 +++++++++++++++++ .../PoRT MSW - cchsVariables_archived.csv | 135 +++ vignettes/bllflow-workflow-demo.Rmd | 23 + 4 files changed, 1218 insertions(+), 4 deletions(-) create mode 100644 inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv create mode 100644 inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv create mode 100644 vignettes/bllflow-workflow-demo.Rmd diff --git a/R/bll-flow.R b/R/bll-flow.R index 23bab3af..b05fa7dc 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -121,14 +121,13 @@ BLLFlow <- } #' @export -ReadData <- function(bllFlow, dataName, pathToData, rowsToRead = -1) { +ReadData <- function(variables, dataName, pathToData) { # calculate the rows to set to null firstRowOfData <- read.csv(file = pathToData, nrows = 1) - varDetails <- bllFlow[[pkg.globals$bllFlowContent.Variables]] variablesToReadList <- - varDetails[grepl(dataName, varDetails[[pkg.globals$argument.DatabaseStart]]), pkg.globals$argument.VariableStart] + variables[grepl(dataName, variables[[pkg.globals$argument.DatabaseStart]]), pkg.globals$argument.VariableStart] varNamesForThisData <- list() @@ -161,7 +160,7 @@ ReadData <- function(bllFlow, dataName, pathToData, rowsToRead = -1) { columnsToKeep <- colnames(firstRowOfData) %in% varNamesForThisData columnClasses <- sapply(columnsToKeep, BooleanConversion) - dataToSave <- read.csv(file = pathToData,nrows = rowsToRead, + dataToSave <- read.csv(file = pathToData, colClasses = columnClasses) # Use numeric vector to read only those specific colums } diff --git a/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv b/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv new file mode 100644 index 00000000..11a139d4 --- /dev/null +++ b/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv @@ -0,0 +1,1057 @@ +variable,dummyVariable,toType,databaseStart,variableStart,fromType,recTo,numValidCat,catLabel,catLabelLong,units,recFrom,catStartLabel,variableStartShortLabel,variableStartLabel,notes +DHHGAGE_A,DHHGAGE_A_cat15_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,1,15,age (12 to 14),age (12 to 14),years,1,12 to 14 years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,2,15,age (15 to 19),age (15 to 19),years,2,15 to 19 years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,3,15,age (20 to 24),age (20 to 24),years,3,20 To 24 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,4,15,age (25 to 29),age (25 to 29),years,4,25 To 29 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,5,15,age (30 to 34),age (30 to 34),years,5,30 To 34 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,6,15,age (35 to 39),age (35 to 39),years,6,35 To 39 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,7,15,age (40 to 44),age (40 to 44),years,7,40 To 44 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,8,15,age (45 to 49),age (45 to 49),years,8,45 To 49 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,9,15,age (50 to 54),age (50 to 54),years,9,50 To 54 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,10,15,age (55 to 59),age (55 to 59),years,10,55 To 59 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_11,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,11,15,age (60 to 64),age (60 to 64),years,11,60 To 64 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_12,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,12,15,age (65 to 69),age (65 to 69),years,12,65 To 69 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_13,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,13,15,age (70 to 74),age (70 to 74),years,13,70 To 74 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_14,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,14,15,age (75 to 79),age (75 to 79),years,14,75 To 79 Years,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_15,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,15,15,age (80 plus),age (80 plus),years,15,80 Years or more,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::a,15,not applicable,not applicable,years,96,not applicable,Age,Age - (G), +DHHGAGE_A,DHHGAGE_A_cat15_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,15,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G),"Not applicable, don't know, refusal, not stated (96-99) were options only in CCHS 2003, but had zero responses" +DHHGAGE_A,DHHGAGE_A_cat15_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,15,else,else,years,else,else,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,1,16,age (12 to 14),age (12 to 14),years,1,12 To 14 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,2,16,age (15 to 17),age (15 to 17),years,2,15 To 17 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,3,16,age (18 to 19),age (18 to 19),years,3,18 To 19 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,4,16,age (20 to 24),age (20 to 24),years,4,20 To 24 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,5,16,age (25 to 29),age (25 to 29),years,5,25 To 29 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,6,16,age (30 to 34),age (30 to 34),years,6,30 To 34 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,7,16,age (35 to 39),age (35 to 39),years,7,35 To 39 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,8,16,age (40 to 44),age (40 to 44),years,8,40 To 44 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,9,16,age (45 to 49),age (45 to 49),years,9,45 To 49 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,10,16,age (50 to 54),age (50 to 54),years,10,50 To 54 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,11,16,age (55 to 59),age (55 to 59),years,11,55 To 59 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_12,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,12,16,age (60 to 64),age (60 to 64),years,12,60 To 64 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_13,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,13,16,age (65 to 69),age (65 to 69),years,13,65 To 69 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_14,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,14,16,age (70 to 74),age (70 to 74),years,14,70 To 74 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_15,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,15,16,age (75 to 79),age (75 to 79),years,15,75 To 79 Years,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_16,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,16,16,age (80 plus),age (80 plus),years,16,80 Years or more,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::a,16,not applicable,not applicable,years,96,not applicable,Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,16,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G), +DHHGAGE_B,DHHGAGE_B_cat16_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,16,else,else,years,else,else,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,13,N/A,Age,converted categorical age (12 to 14),years,1,12 to 14 years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,17,N/A,Age,converted categorical age (15 to 19),years,2,15 to 19 years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,22,N/A,Age,converted categorical age (20 to 24),years,3,20 To 24 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,27,N/A,Age,converted categorical age (25 to 29),years,4,25 To 29 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,32,N/A,Age,converted categorical age (30 to 34),years,5,30 To 34 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,37,N/A,Age,converted categorical age (35 to 39),years,6,35 To 39 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,42,N/A,Age,converted categorical age (40 to 44),years,7,40 To 44 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,47,N/A,Age,converted categorical age (45 to 49),years,8,45 To 49 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,52,N/A,Age,converted categorical age (50 to 54),years,9,50 To 54 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,57,N/A,Age,converted categorical age (55 to 59),years,10,55 To 59 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,62,N/A,Age,converted categorical age (60 to 64),years,11,60 To 64 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,67,N/A,Age,converted categorical age (65 to 69),years,12,65 To 69 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,72,N/A,Age,converted categorical age (70 to 74),years,13,70 To 74 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,77,N/A,Age,converted categorical age (75 to 79),years,14,75 To 79 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,85,N/A,Age,converted categorical age (80 plus),years,15,80 Years or more,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G),"Not applicable, don't know, refusal, not stated (96-99) were options in CCHS 2003, but had zero responses" +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,N/A,else,else,years,else,else,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,13,N/A,Age,converted categorical age (12 to 14),years,1,12 To 14 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,16,N/A,Age,converted categorical age (15 to 17),years,2,15 To 17 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,18.5,N/A,Age,converted categorical age (18 to 19),years,3,18 To 19 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,22,N/A,Age,converted categorical age (20 to 24),years,4,20 To 24 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,27,N/A,Age,converted categorical age (25 to 29),years,5,25 To 29 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,32,N/A,Age,converted categorical age (30 to 34),years,6,30 To 34 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,37,N/A,Age,converted categorical age (35 to 39),years,7,35 To 39 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,42,N/A,Age,converted categorical age (40 to 44),years,8,40 To 44 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,47,N/A,Age,converted categorical age (45 to 49),years,9,45 To 49 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,52,N/A,Age,converted categorical age (50 to 54),years,10,50 To 54 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,57,N/A,Age,converted categorical age (55 to 59),years,11,55 To 59 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,62,N/A,Age,converted categorical age (60 to 64),years,12,60 To 64 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,67,N/A,Age,converted categorical age (65 to 69),years,13,65 To 69 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,72,N/A,Age,converted categorical age (70 to 74),years,14,70 To 74 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,77,N/A,Age,converted categorical age (75 to 79),years,15,75 To 79 Years,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,85,N/A,Age,converted categorical age (80 plus),years,16,80 Years or more,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G), +DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,N/A,else,else,years,else,else,Age,Age - (G), +DHH_SEX,DHH_SEX_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,1,2,Male,Male,N/A,1,Male,Sex,Sex, +DHH_SEX,DHH_SEX_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,2,2,Female,Female,N/A,2,Female,Sex,Sex, +DHH_SEX,DHH_SEX_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Sex,Sex, +DHH_SEX,DHH_SEX_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Sex,Sex, +DHH_SEX,DHH_SEX_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,NA::b,2,else,else,N/A,else,else,Sex,Sex, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.118,N/A,Height,converted height (3'8 IN - 44 inches),meters,1,3'8 IN - 44 inches,Height,Height,"2001 and 2003 CCHS use inches, values converted to meters to 3 decimal points" +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.143,N/A,Height,converted height (3'9 IN - 45 inches),meters,2,3'9 IN - 45 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.168,N/A,Height,converted height (3'10 IN - 46 inches),meters,3,3'10 IN - 46 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.194,N/A,Height,converted height (3'11 IN - 47 inches),meters,4,3'11 IN - 47 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.219,N/A,Height,converted height (4'0 IN - 48 inches),meters,5,4'0 IN - 48 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.245,N/A,Height,converted height (4'1 IN - 49 inches),meters,6,4'1 IN - 49 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.270,N/A,Height,converted height (4'2 IN - 50 inches),meters,7,4'2 IN - 50 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.295,N/A,Height,converted height (4'3 IN - 51 inches),meters,8,4'3 IN - 51 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.321,N/A,Height,converted height (4'4 IN - 52 inches),meters,9,4'4 IN - 52 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.346,N/A,Height,converted height (4'5 IN - 53 inches),meters,10,4'5 IN - 53 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.372,N/A,Height,converted height (4'6 IN - 54 inches),meters,11,4'6 IN - 54 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.397,N/A,Height,converted height (4'7 IN - 55 inches),meters,12,4'7 IN - 55 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.422,N/A,Height,converted height (4'8 IN - 56 inches),meters,13,4'8 IN - 56 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.448,N/A,Height,converted height (4'9 IN - 57 inches),meters,14,4'9 IN - 57 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.473,N/A,Height,converted height (4'10 IN - 58 inches),meters,15,4'10 IN - 58 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.499,N/A,Height,converted height (4'11 in - 59 inches),meters,16,4'11 in - 59 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.524,N/A,Height,converted height (5'0 IN - 60 inches),meters,17,5'0 IN - 60 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.549,N/A,Height,converted height (5'1 IN - 61 inches),meters,18,5'1 IN - 61 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.575,N/A,Height,converted height (5'2 IN - 62 inches),meters,19,5'2 IN - 62 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.600,N/A,Height,converted height (5'3 IN - 63 inches),meters,20,5'3 IN - 63 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.626,N/A,Height,converted height (5'4 IN - 64 inches),meters,21,5'4 IN - 64 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.651,N/A,Height,converted height (5'5 IN - 65 inches),meters,22,5'5 IN - 65 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.676,N/A,Height,converted height (5'6 IN - 66 inches),meters,23,5'6 IN - 66 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.702,N/A,Height,converted height (5'7 IN - 67 inches),meters,24,5'7 IN - 67 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.727,N/A,Height,converted height (5'8 IN - 68 inches),meters,25,5'8 IN - 68 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.753,N/A,Height,converted height (5'9 IN - 69 inches),meters,26,5'9 IN - 69 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.778,N/A,Height,converted height (5'10 IN - 70 inches),meters,27,5'10 IN - 70 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.803,N/A,Height,converted height (5'11 IN - 71 inches),meters,28,5'11 IN - 71 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.829,N/A,Height,converted height (6'0 IN - 72 inches),meters,29,6'0 IN - 72 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.854,N/A,Height,converted height (6'1 IN - 73 inches),meters,30,6'1 IN - 73 inches,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.930,N/A,Height,converted height (6'2 IN+ - 74+ inches),meters,31,6'2 IN+ - 74+ inches,Height,Height,74+ inches converted to 76 inches +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,NA::a,N/A,not applicable,not applicable,meters,96,not applicable,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,NA::b,N/A,missing,missing,meters,99,not stated (99),Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,NA::b,N/A,else,else,meters,else,else,Height,Height, +HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,copy,N/A,Height,Height,meters,0.914:2.134,Height,Height,"Height (metres)/self-reported - (D,G)",Height is a reported in meters from 2005 CCHS onwards +HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,NA::a,N/A,not applicable,not applicable,meters,9.996,not applicable,Height,"Height (metres)/self-reported - (D,G)", +HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,NA::b,N/A,missing,missing,meters,9.997:9.999,"don't know (9.997), refusal (9.998), not stated (9.999)",Height,"Height (metres)/self-reported - (D,G)", +HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,NA::b,N/A,else,else,meters,else,else,Height,"Height (metres)/self-reported - (D,G)", +HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,copy,N/A,Weight,Weight - kilograms,kg,27.0:135.0,"Weight - kilograms (D, G)",Weight,"Weight - kilograms (D, G)", +HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,NA::a,N/A,not applicable,not applicable,kg,999.96,not applicable,Weight,"Weight - kilograms (D, G)", +HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,NA::b,N/A,missing,missing,kg,999.97:999.99,don't know (999.97); refusal (999.98); not stated (999.99),Weight,"Weight - kilograms (D, G)", +HWTGWTK,N/A,cont,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK,cont,NA::a,N/A,not applicable,not applicable,kg,996,not applicable,Weight,"Weight - kilograms (D, G)", +HWTGWTK,N/A,cont,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK,cont,NA::b,N/A,missing,missing,kg,997:999,don't know (997); refusal (998); not stated (999),Weight,"Weight - kilograms (D, G)", +HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,NA::b,N/A,else,else,kg,else,else,Weight,"Weight - kilograms (D, G)", +HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI, cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,copy,N/A,BMI,Body Mass Index,kg/m2,11.91:57.9,"BMI / self-report - (D,G)",BMI,"BMI / self-report - (D,G)",CCHS 2001 restricts BMI to ages 20-64 +HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI",cont,NA::a,N/A,not applicable,not applicable,kg/m2,999.6,Not applicable,BMI,"BMI / self-report - (D,G)","CCHS 2001 and 2003 codes not applicable and missing variables as 999.6 and 999.7-999.9 respectively, while CCHS 2005 onwards codes not applicable and missing variables as 999.96 and 999.7-999.99 respectively" +HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI",cont,NA::b,N/A,missing,missing,kg/m2,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),BMI,"BMI / self-report - (D,G)",Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +HWTGBMI,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,NA::a,N/A,not applicable,not applicable,kg/m2,999.96,Not applicable,BMI,"BMI / self-report - (D,G)", +HWTGBMI,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,NA::b,N/A,missing,missing,kg/m2,999.97:999.99,don't know (999.97); refusal (999.98); not stated (999.99),BMI,"BMI / self-report - (D,G)", +HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI, cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,NA::b,N/A,else,else,kg/m2,else,else,BMI,"BMI / self-report - (D,G)", +SMKDSTY,SMKDSTY_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,1,6,Daily,Daily smoker,N/A,1:1,Daily,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,2,6,Occassional (former daily),Former daily current occasional smoker,N/A,2:2,Occassional,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,3,6,Always occassional,Never daily current occasional smoker,N/A,3:3,Always occassional,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,4,6,Former daily,Former daily current nonsmoker,N/A,4:4,Former daily,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,5,6,Former occasional,Never daily current nonsmoker (former occasional),N/A,5:5,Former occasional,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,6,6,Never smoked,Never smoked,N/A,6:6,Never smoked,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,NA::b,6,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Smoke status,Type of smoker - (D), +SMKDSTY,SMKDSTY_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,NA::b,6,else,else,N/A,else,else,Smoke status,Type of smoker - (D), +SMKG01C_A,SMKG01C_A_cat10_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,1,10,5 To 11 Years,age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,2,10,12 To 14 Years,age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,3,10,15 To 19 Years,age smoked first whole cigarette (18 to 19),years,3,15 To 19 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,4,10,20 To 24 Years,age smoked first whole cigarette (20 to 24),years,4,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,5,10,25 To 29 Years,age smoked first whole cigarette (25 to 29),years,5,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,6,10,30 To 34 Years,age smoked first whole cigarette (30 to 34),years,6,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,7,10,35 To 39 Years,age smoked first whole cigarette (35 to 39),years,7,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,8,10,40 To 44 Years,age smoked first whole cigarette (40 to 44),years,8,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,9,10,45 To 49 Years,age smoked first whole cigarette (45 to 49),years,9,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,10,10,50 Years or more,age smoked first whole cigarette (50 plus),years,10,50 Years or more,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), +SMKG01C_A,SMKG01C_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,10,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,1,11,5 To 11 Years,age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,2,11,12 To 14 Years,age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,3,11,15 To 17 Years,age smoked first whole cigarette (15 to 17),years,3,15 To 17 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,4,11,18 To 19 Years,age smoked first whole cigarette (18 to 19),years,4,18 To 19 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,5,11,20 To 24 Years,age smoked first whole cigarette (20 to 24),years,5,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,6,11,25 To 29 Years,age smoked first whole cigarette (25 to 29),years,6,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,7,11,30 To 34 Years,age smoked first whole cigarette (30 to 34),years,7,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,8,11,35 To 39 Years,age smoked first whole cigarette (35 to 39),years,8,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,9,11,40 To 44 Years,age smoked first whole cigarette (40 to 44),years,9,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,10,11,45 To 49 Years,age smoked first whole cigarette (45 to 49),years,10,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,11,11,50 Years or more,age smoked first whole cigarette (50 plus),years,11,50 Years or more,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), +SMKG01C_B,SMKG01C_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,11,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,8,N/A,agec1,converted categorical age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,13,N/A,agec1,converted categorical age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,17,N/A,agec1,converted categorical age smoked first whole cigarette (18 to 19),years,3,15 To 19 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,22,N/A,agec1,converted categorical age smoked first whole cigarette (20 to 24),years,4,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,27,N/A,agec1,converted categorical age smoked first whole cigarette (25 to 29),years,5,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,32,N/A,agec1,converted categorical age smoked first whole cigarette (30 to 34),years,6,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,37,N/A,agec1,converted categorical age smoked first whole cigarette (35 to 39),years,7,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,42,N/A,agec1,converted categorical age smoked first whole cigarette (40 to 44),years,8,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,47,N/A,agec1,converted categorical age smoked first whole cigarette (45 to 49),years,9,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,55,N/A,agec1,converted categorical age smoked first whole cigarette (50 plus),years,10,50 Years or more,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,N/A,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,8,N/A,agec1,converted categorical age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,13,N/A,agec1,converted categorical age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,16,N/A,agec1,converted categorical age smoked first whole cigarette (15 to 17),years,3,15 To 17 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,18.5,N/A,agec1,converted categorical age smoked first whole cigarette (18 to 19),years,4,18 To 19 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,22,N/A,agec1,converted categorical age smoked first whole cigarette (20 to 24),years,5,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,27,N/A,agec1,converted categorical age smoked first whole cigarette (25 to 29),years,6,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,32,N/A,agec1,converted categorical age smoked first whole cigarette (30 to 34),years,7,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,37,N/A,agec1,converted categorical age smoked first whole cigarette (35 to 39),years,8,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,42,N/A,agec1,converted categorical age smoked first whole cigarette (40 to 44),years,9,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,47,N/A,agec1,converted categorical age smoked first whole cigarette (45 to 49),years,10,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,55,N/A,agec1,converted categorical age smoked first whole cigarette (50 plus),years,11,50 Years or more,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), +SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,N/A,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), +SMK_01A,SMK_01A_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,1,2,yes,yes,N/A,1,Yes,s100,"In lifetime, smoked 100 or more cigarettes", +SMK_01A,SMK_01A_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,2,2,no,no,N/A,2,No,s100,"In lifetime, smoked 100 or more cigarettes", +SMK_01A,SMK_01A_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,s100,"In lifetime, smoked 100 or more cigarettes", +SMK_01A,SMK_01A_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (97); refusal (98); not stated (99),s100,"In lifetime, smoked 100 or more cigarettes", +SMK_01A,SMK_01A_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,NA::b,2,else,else,N/A,else,else,s100,"In lifetime, smoked 100 or more cigarettes", +SMKG203_A,SMKG203_A_cat10_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,1,10,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,2,10,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,3,10,15 to 19 Years,age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,4,10,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,5,10,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,6,10,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,7,10,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,8,10,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,9,10,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,10,10,50 Years or more,age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_A,SMKG203_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,10,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,4,11,18 To 19 Years,age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,5,11,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,6,11,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,7,11,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,8,11,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,9,11,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,10,11,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,11,11,50 Years or more,age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::a,11,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,11,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_B,SMKG203_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,11,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,17,N/A,agecigd,converted categorical age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,55,N/A,agecigd,converted categorical age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,N/A,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,16,N/A,agecigd,converted categorical age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,18.5,N/A,agecigd,converted categorical age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,55,N/A,agecigd,converted categorical age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), +SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,N/A,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), +SMKG207_A,SMKG207_A_cat10_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,1,10,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,2,10,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,3,10,15 to 19 Years,age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,4,10,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,5,10,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,6,10,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,7,10,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,8,10,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,9,10,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,10,10,50 Years or more,age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), +SMKG207_A,SMKG207_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,10,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,4,11,18 To 19 Years,age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,5,11,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,6,11,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,7,11,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,8,11,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,9,11,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,10,11,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,11,11,50 Years or more,age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::a,11,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,11,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), +SMKG207_B,SMKG207_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,11,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,17,N/A,agecigd,converted categorical age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,55,N/A,agecigd,converted categorical age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,N/A,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,16,N/A,agecigd,converted categorical age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,18.5,N/A,agecigd,converted categorical age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,55,N/A,agecigd,converted categorical age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), +SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,N/A,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), +SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,copy,N/A,Cigarettes/day - daily ,# of cigarettes smoked daily - daily smoker,cigarettes,1:99,# of cigarettes smoked daily - daily smoker,cigdayd,# of cigarettes smoked daily - daily smoker, +SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,cigdayd,# of cigarettes smoked daily - daily smoker, +SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,NA::b,N/A,missing,missing,cigarettes,997:999,don't know (997); refusal (998); not stated (999),cigdayd,# of cigarettes smoked daily - daily smoker, +SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,NA::b,N/A,else,else,cigarettes,else,else,cigdayd,# of cigarettes smoked daily - daily smoker, +SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,copy,N/A,Cigarettes/day - occasional ,# of cigarettes smoked daily - daily smoker,cigarettes,1:60,# of cigarettes smoked daily - occasional smoker,cigdayo,# of cigarettes smoked daily - occasional smoker, +SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,cigdayo,# of cigarettes smoked daily - occasional smoker, +SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,NA::b,N/A,missing,missing,cigarettes,997:999,don't know (997); refusal (998); not stated (999),cigdayo,# of cigarettes smoked daily - occasional smoker, +SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,NA::b,N/A,else,else,cigarettes,else,else,cigdayo,# of cigarettes smoked daily - occasional smoker, +SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,copy,N/A,# days smoked at least 1 cigarette,# days smoked at least 1 cigarette,days,0:30,# days smoked at least 1 cigarette,dayocc,Number of days smoked at least one cigarette - occasional smoker, +SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,NA::a,N/A,not applicable,not applicable,days,96,not applicable,dayocc,Number of days smoked at least one cigarette - occasional smoker, +SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,NA::b,N/A,missing,missing,days,97:99,don't know (97); refusal (98); not stated (99),dayocc,Number of days smoked at least one cigarette - occasional smoker, +SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,NA::b,N/A,else,else,days,else,else,dayocc,Number of days smoked at least one cigarette - occasional smoker, +SMK_05D,SMK_05D_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,1,2,yes,Occasional smoker who previously smoked daily,N/A,1,Yes,evd,Ever smoked cigarettes daily - occasional smoker, +SMK_05D,SMK_05D_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,2,2,no,Occasional smoker never daily,N/A,2,No,evd,Ever smoked cigarettes daily - occasional smoker, +SMK_05D,SMK_05D_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,evd,Ever smoked cigarettes daily - occasional smoker, +SMK_05D,SMK_05D_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),evd,Ever smoked cigarettes daily - occasional smoker, +SMK_05D,SMK_05D_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,NA::b,2,else,else,N/A,else,else,evd,Ever smoked cigarettes daily - occasional smoker, +SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,copy,N/A,Cigarettes/day - historic daily,Cigarettes/day - historic daily,cigarettes,1:99,# of cigarettes smoke each day - former daily,cigdayf,# of cigarettes smoke each day - former daily, +SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,cigdayf,# of cigarettes smoke each day - former daily, +SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,NA::b,N/A,missing,missing,cigarettes,997:999,don't know (997); refusal (998); not stated (999),cigdayf,# of cigarettes smoke each day - former daily, +SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,NA::b,N/A,else,else,cigarettes,else,else,cigdayf,# of cigarettes smoke each day - former daily, +SMK_09A_A,SMK_09A_A_cat4_1,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,1,4,<1 year,Less than one year ago,years,1,Less than one year ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_A,SMK_09A_A_cat4_2,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,2,4,1 to 2 years,1 year to 2 years ago,years,2,1 year to 2 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_A,SMK_09A_A_cat4_3,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,3,4,3 to 5 years,3 years to 5 years ago,years,3,3 years to 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_A,SMK_09A_A_cat4_4,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,4,4,>5 years,More than 5 years ago,years,4,More than 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_A,SMK_09A_A_cat4_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_A,SMK_09A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_A,SMK_09A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,4,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,1,4,<1 year,Less than one year ago,years,1,Less than 1 year,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,2,4,1 to <2 years,1 year to less than 2 years ago,years,2,1 to <2 years,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,3,4,2 to <3 years,2 years to less than 3 years ago,years,3,2 to <3 years,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,4,4,≥3 years,3 or more years ago,years,4,3 years or more,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_B,SMK_09A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,4,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,0.5,N/A,stpo,converted age - Less than one year ago,years,1,Less than one year ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,1.5,N/A,stpo,converted age - 1 year to 2 years ago,years,2,1 year to 2 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,4,N/A,stpo,converted age - 3 years to 5 years ago,years,3,3 years to 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,6,N/A,stpo,converted age - More than 5 years ago,years,4,More than 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,N/A,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,0.5,N/A,stpo,converted age - Less than one year ago,years,1,Less than 1 year,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,1.5,N/A,stpo,converted age - 1 year to less than 2 years ago,years,2,1 to <2 years,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,2.5,N/A,stpo,converted age - 2 years to less than 3 years ago,years,3,2 to <3 years,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,4,N/A,stpo,converted age - 3 or more years ago,years,4,3 years or more,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), +SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,N/A,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), +SMKG09C,SMKG09C_cat3_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,1,3,3 to 5 years,3 to 5 years,years,1,3 to 5 years,stpdy,Years since stopped smoking daily - former daily, +SMKG09C,SMKG09C_cat3_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,2,3,6 to 10 years,6 to 10 years,years,2,6 to 10 years,stpdy,Years since stopped smoking daily - former daily, +SMKG09C,SMKG09C_cat3_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,3,3,11+ years,11 or more years,years,3,11 or more years,stpdy,Years since stopped smoking daily - former daily, +SMKG09C,SMKG09C_cat3_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,NA::a,3,not applicable,not applicable,years,6,not applicable,stpdy,Years since stopped smoking daily - former daily, +SMKG09C,SMKG09C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,NA::b,3,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpdy,Years since stopped smoking daily - former daily, +SMKG09C,SMKG09C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,NA::b,3,else,else,years,else,else,stpdy,Years since stopped smoking daily - former daily, +SMK_06A_A,SMK_06A_A_cat4_1,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,1,4,<1 year,Less than one year ago,years,1,Less than one year ago,stpn,When did you stop smoking - never daily, +SMK_06A_A,SMK_06A_A_cat4_2,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,2,4,1 to 2 years,1 year to 2 years ago,years,2,1 year to 2 years ago,stpn,When did you stop smoking - never daily, +SMK_06A_A,SMK_06A_A_cat4_3,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,3,4,3 to 5 years,3 years to 5 years ago,years,3,3 years to 5 years ago,stpn,When did you stop smoking - never daily, +SMK_06A_A,SMK_06A_A_cat4_4,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,4,4,>5 years,More than 5 years ago,years,4,More than 5 years ago,stpn,When did you stop smoking - never daily, +SMK_06A_A,SMK_06A_A_cat4_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, +SMK_06A_A,SMK_06A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, +SMK_06A_A,SMK_06A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,4,else,else,years,else,else,stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,1,4,<1 year,Less than one year ago,years,1,Less than one year ,stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,2,4,1 to 2 years,1 year to less than 2 years ago,years,2,1 year to < 2 years,stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,3,4,2 to 3 years,2 years to less than 3 years ago,years,3,2 years to < 3 years,stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,4,4,≥3 years,3 or more years ago,years,4,3 or more years,stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, +SMK_06A_B,SMK_06A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,4,else,else,years,else,else,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,0.5,N/A,stpn,converted age - Less than one year ago,years,1,Less than one year ago,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,1.5,N/A,stpn,converted age - 1 year to 2 years ago,years,2,1 year to 2 years ago,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,4,N/A,stpn,converted age - 3 years to 5 years ago,years,3,3 years to 5 years ago,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,6,N/A,stpn,converted age - More than 5 years ago,years,4,More than 5 years ago,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,N/A,else,else,years,else,else,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,0.5,N/A,stpn,converted age - Less than one year ago,years,1,Less than one year ,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,1.5,N/A,stpn,converted age - 1 year to less than 2 years ago,years,2,1 year to < 2 years,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,2.5,N/A,stpn,converted age - 2 years to less than 3 years ago,years,3,2 years to < 3 years,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,4,N/A,stpn,converted age - 3 or more years ago,years,4,3 or more years,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, +SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,N/A,else,else,years,else,else,stpn,When did you stop smoking - never daily, +SMKG06C,SMKG06C_cat3_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,1,3,3 to 5 years,3 to 5 years,years,1,3 to 5 years,stpny,Years since stopped smoking daily - never daily, +SMKG06C,SMKG06C_cat3_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,2,3,6 to 10 years,6 to 10 years,years,2,6 to 10 years,stpny,Years since stopped smoking daily - never daily, +SMKG06C,SMKG06C_cat3_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,3,3,11+ years,11 or more years,years,3,11 or more years,stpny,Years since stopped smoking daily - never daily, +SMKG06C,SMKG06C_cat3_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,NA::a,3,not applicable,not applicable,years,6,not applicable,stpny,Years since stopped smoking daily - never daily, +SMKG06C,SMKG06C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,NA::b,3,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpny,Years since stopped smoking daily - never daily, +SMKG06C,SMKG06C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,NA::b,3,else,else,years,else,else,stpny,Years since stopped smoking daily - never daily, +ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,copy,N/A,drinks/week,drinks/week,drinks/week,0:449,drinks per week,drinks/week,Weekly consumption of alcohol,shown as categorical variable in CCHS 2014 cycle +ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,NA::a,N/A,not applicable,not applicable,drinks/week,996,not applicable (996),drinks/week,Weekly consumption of alcohol, +ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,NA::b,N/A,missing,missing,drinks/week,997:999,don't know (997); refusal (998); not stated (999),drinks/week,Weekly consumption of alcohol, +ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,NA::b,N/A,else,else,drinks/week,else,else,drinks/week,Weekly consumption of alcohol, +ALW_1,ALW_1_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,1,2,yes,alcohol in the past week,N/A,1,"Past week, had any alcohol",dany,"Past week, had any alcohol", +ALW_1,ALW_1_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,2,2,no,no alcohol in past week,N/A,2,"Past week, had any alcohol",dany,"Past week, had any alcohol", +ALW_1,ALW_1_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,NA::a,2,not applicable,not applicable,N/A,6,Not applicable,dany,"Past week, had any alcohol", +ALW_1,ALW_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),dany,"Past week, had any alcohol", +ALW_1,ALW_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,NA::b,2,else,else,N/A,else,else,dany,"Past week, had any alcohol", +ALC_1,ALC_1_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,1,2,yes,alcohol in the past year,N/A,1,"Past year, have you drank alcohol",d12,"Past year, have you drank alcohol", +ALC_1,ALC_1_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,2,2,no,no alcohol in past week,N/A,2,"Past year, have you drank alcohol",d12,"Past year, have you drank alcohol", +ALC_1,ALC_1_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,NA::a,2,not applicable,not applicable,N/A,6,Not applicable,d12,"Past year, have you drank alcohol", +ALC_1,ALC_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),d12,"Past year, have you drank alcohol", +ALC_1,ALC_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,NA::b,2,else,else,N/A,else,else,d12,"Past year, have you drank alcohol", +ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,copy,N/A,# of drinks - Sunday,Number of drinks on Sunday,drinks,0:100,Number of drinks on Sunday,DailyConsumptionSunday,Number of drinks on Sunday, +ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionSunday,Number of drinks on Sunday, +ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionSunday,Number of drinks on Sunday, +ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionSunday,Number of drinks on Sunday, +ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,copy,N/A,# of drinks - Monday,Number of drinks on Monday,drinks,0:100,Number of drinks on Monday,DailyConsumptionMonday,Number of drinks on Monday, +ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionMonday,Number of drinks on Monday, +ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionMonday,Number of drinks on Monday, +ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionMonday,Number of drinks on Monday, +ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,copy,N/A,# of drinks - Tuesday,Number of drinks on Tuesday,drinks,0:100,Number of drinks on Tuesday,DailyConsumptionTuesday,Number of drinks on Tuesday, +ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionTuesday,Number of drinks on Tuesday, +ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionTuesday,Number of drinks on Tuesday, +ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionTuesday,Number of drinks on Tuesday, +ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,copy,N/A,# of drinks - Wednesday,Number of drinks on Wednesday,drinks,0:100,Number of drinks on Wednesday,DailyConsumptionWednesday,Number of drinks on Wednesday, +ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionWednesday,Number of drinks on Wednesday, +ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionWednesday,Number of drinks on Wednesday, +ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionWednesday,Number of drinks on Wednesday, +ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,copy,N/A,# of drinks - Thursday,Number of drinks on Thursday,drinks,0:100,Number of drinks on Thursday,DailyConsumptionThursday,Number of drinks on Thursday, +ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionThursday,Number of drinks on Thursday, +ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionThursday,Number of drinks on Thursday, +ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionThursday,Number of drinks on Thursday, +ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,copy,N/A,# of drinks - Friday,Number of drinks on Friday,drinks,0:100,Number of drinks on Friday,DailyConsumptionFriday,Number of drinks on Friday, +ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionFriday,Number of drinks on Friday, +ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionFriday,Number of drinks on Friday, +ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionFriday,Number of drinks on Friday, +ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,copy,N/A,# of drinks - Saturday,Number of drinks on Saturday,drinks,0:100,Number of drinks on Saturday,DailyConsumptionSaturday,Number of drinks on Saturday, +ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionSaturday,Number of drinks on Saturday, +ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionSaturday,Number of drinks on Saturday, +ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionSaturday,Number of drinks on Saturday, +ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,copy,N/A,drinks/day,drinks/day,drinks/day,0:64,drinks per day,AverageDailyConsumption,Average daily alcohol consumption,"2007-08, 09-10, 2010, 2012 cycles are categorical" +ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,NA::a,N/A,not applicable,not applicable,drinks/day,996,Not applicable,AverageDailyConsumption,Average daily alcohol consumption, +ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,NA::b,N/A,missing,missing,drinks/day,997:999,don't know (997); refusal (998); not stated (9),AverageDailyConsumption,Average daily alcohol consumption, +ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,NA::b,N/A,else,else,drinks/day,else,else,AverageDailyConsumption,Average daily alcohol consumption, +ALCDTYP,ALCDTYP_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,1,4,Regular,Regular drinker,N/A,1,Regular drinker,DrinkerType,Type of drinker - (D), +ALCDTYP,ALCDTYP_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,2,4,Occasional,Occasional drinker,N/A,2,Occasional drinker,DrinkerType,Type of drinker - (D), +ALCDTYP,ALCDTYP_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,3,4,Former,Former drinker,N/A,3,Former drinker,DrinkerType,Type of drinker - (D), +ALCDTYP,ALCDTYP_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,4,4,Never drank,Never drank,N/A,4,Never drank,DrinkerType,Type of drinker - (D), +ALCDTYP,ALCDTYP_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,NA::a,4,Not applicable,not applicable,N/A,6,not applicable,DrinkerType,Type of drinker - (D), +ALCDTYP,ALCDTYP_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),DrinkerType,Type of drinker - (D),Don't know (7) and refusal (8) not included in 2001 CCHS +ALCDTYP,ALCDTYP_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,NA::b,4,else,else,N/A,else,else,DrinkerType,Type of drinker - (D), +ALCDTTM,ALCDTTM_cat3_1,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,1,3,Regular,Regular Drinker,N/A,1,Regular Drinker,DrinkType12M,Type of drinker (12 months), +ALCDTTM,ALCDTTM_cat3_2,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,2,3,Occasional,Occasional Drinker,N/A,2,Occasional drinker,DrinkType12M,Type of drinker (12 months), +ALCDTTM,ALCDTTM_cat3_3,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,3,3,No drink 12M,No drink in last 12 months,N/A,3,No drink in the last 12 months,DrinkType12M,Type of drinker (12 months), +ALCDTTM,ALCDTTM_cat3_NA::a,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,DrinkType12M,Type of drinker (12 months), +ALCDTTM,ALCDTTM_cat3_NA::b,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),DrinkType12M,Type of drinker (12 months), +ALCDTTM,ALCDTTM_cat3_NA::b,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,NA::b,3,else,else,N/A,else,else,DrinkType12M,Type of drinker (12 months), +FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,copy,N/A,Daily juice,Daily juice,N/A,0:20,Daily consumption - fruit juice - (D),Daily juice,Daily consumption - fruit juice - (D), +FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily juice,Daily consumption - fruit juice - (D), +FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily juice,Daily consumption - fruit juice - (D),Don't know (7) and refusal (8) not included in 2001 CCHS +FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,NA::b,N/A,else,else,N/A,else,else,Daily juice,Daily consumption - fruit juice - (D), +FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,copy,N/A,Daily fruit,Daily fruit,N/A,0:20,Daily consumption - fruit - (D),Daily fruit,Daily consumption - fruit - (D), +FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily fruit,Daily consumption - fruit - (D), +FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily fruit,Daily consumption - fruit - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,NA::b,N/A,else,else,N/A,else,else,Daily fruit,Daily consumption - fruit - (D), +FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,copy,N/A,Daily salad,Daily salad,N/A,0:20,Daily consumption - green salad - (D),Daily salad,Daily consumption - green salad - (D), +FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily salad,Daily consumption - green salad - (D), +FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily salad,Daily consumption - green salad - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,NA::b,N/A,else,else,N/A,else,else,Daily salad,Daily consumption - green salad - (D), +FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,copy,N/A,Daily potatoes,Daily potatoes,N/A,0:20,Daily consumption - potatoes - (D),Daily potatoes,Daily consumption - potatoes - (D), +FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily potatoes,Daily consumption - potatoes - (D), +FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily potatoes,Daily consumption - potatoes - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,NA::b,N/A,else,else,N/A,else,else,Daily potatoes,Daily consumption - potatoes - (D), +FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,copy,N/A,Daily carrots,Daily carrots,N/A,0:20,Daily consumption - carrots - (D),Daily carrots,Daily consumption - carrots - (D), +FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily carrots,Daily consumption - carrots - (D), +FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily carrots,Daily consumption - carrots - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,NA::b,N/A,else,else,N/A,else,else,Daily carrots,Daily consumption - carrots - (D), +FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,copy,N/A,Daily other vegetables,Daily other vegetables,N/A,0:20,Daily consumption other vegetables - (D),Daily other vegetables,Daily consumption other vegetables - (D), +FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily other vegetables,Daily consumption other vegetables - (D), +FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily other vegetables,Daily consumption other vegetables - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,NA::b,N/A,else,else,N/A,else,else,Daily other vegetables,Daily consumption other vegetables - (D), +FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,copy,N/A,Daily total fruits and vegetables,Daily total fruits and vegetables,N/A,0:47.3,Daily consumption - total fruits and veg. - (D),Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D), +FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D), +FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS +FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,NA::b,N/A,else,else,N/A,else,else,Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D), +PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,copy,N/A,Physical Activity,Average daily leisure time energy expenditure in METs,METS,0:43.5,Daily energy expenditure - (D),Physical Activity,Daily energy expenditure - (D), +PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,NA::a,N/A,not applicable,not applicable,METS,99.6,Not applicable,Physical Activity,Daily energy expenditure - (D), +PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,NA::b,N/A,missing,missing,METS,99.7:99.9,don't know (99.7); refusal (99.8); not stated (99.9),Physical Activity,Daily energy expenditure - (D),Don't know (99.7) and refusal (99.8) not included in 2001 CCHS +PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,NA::b,N/A,else,else,METS,else,else,Physical Activity,Daily energy expenditure - (D), +CCC_031,CCC_031_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,1,2,Asthma,Asthma,N/A,1,Yes (Do you have asthma?),Asthma,Do you have asthma?, +CCC_031,CCC_031_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,2,2,No asthma,No asthma,N/A,2,No (Do you have asthma?),Asthma,Do you have asthma?, +CCC_031,CCC_031_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Asthma,Do you have asthma?, +CCC_031,CCC_031_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Asthma,Do you have asthma?, +CCC_031,CCC_031_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,NA::b,2,else,else,N/A,else,else,Asthma,Do you have asthma?, +CCC_051,CCC_051_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,1,2,Arthritis/Rheumatism,Arthritis/Rheumatism,N/A,1,Yes (Do you have arthritis or rheumatism?),Arthritis/Rheumatism,Do you have arthritis or rheumatism?, +CCC_051,CCC_051_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,2,2,No Arthritis/Rheumatism,No Arthritis/Rheumatism,N/A,2,No (Do you have arthritis or rheumatism?),Arthritis/Rheumatism,Do you have arthritis or rheumatism?, +CCC_051,CCC_051_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Arthritis/Rheumatism,Do you have arthritis or rheumatism?, +CCC_051,CCC_051_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Arthritis/Rheumatism,Do you have arthritis or rheumatism?, +CCC_051,CCC_051_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,NA::b,2,else,else,N/A,else,else,Arthritis/Rheumatism,Do you have arthritis or rheumatism?, +CCC_131,CCC_131_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,1,2,Cancer,Cancer,N/A,1,Yes (Do you have cancer?),Cancer,Do you have cancer, +CCC_131,CCC_131_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,2,2,No Cancer,No Cancer,N/A,2,No (Do you have cancer?),Cancer,Do you have cancer, +CCC_131,CCC_131_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Cancer,Do you have cancer, +CCC_131,CCC_131_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Cancer,Do you have cancer, +CCC_131,CCC_131_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,NA::b,2,else,else,N/A,else,else,Cancer,Do you have cancer, +CCC_101,CCC_101_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,1,2,Diabetes,Diabetes,N/A,1,Yes (Do you have diabetes?),Diabetes,Do you have diabetes, +CCC_101,CCC_101_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,2,2,No Diabetes,No Diabetes,N/A,2,No (Do you have diabetes?),Diabetes,Do you have diabetes, +CCC_101,CCC_101_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Diabetes,Do you have diabetes, +CCC_101,CCC_101_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Diabetes,Do you have diabetes, +CCC_101,CCC_101_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,NA::b,2,else,else,N/A,else,else,Diabetes,Do you have diabetes, +CCC_121,CCC_121_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,1,2,Heart Disease,Heart Disease,N/A,1,Yes (Do you have heart disease?),Heart Disease,Do you have heart disease, +CCC_121,CCC_121_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,2,2,No Heart Disease,No Heart Disease,N/A,2,No (Do you have heart disease?),Heart Disease,Do you have heart disease, +CCC_121,CCC_121_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable ,Heart Disease,Do you have heart disease, +CCC_121,CCC_121_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Heart Disease,Do you have heart disease, +CCC_121,CCC_121_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,NA::b,2,else,else,N/A,else,else,Heart Disease,Do you have heart disease, +CCC_151,CCC_151_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,1,2,Stroke,Stroke,N/A,1,Yes (Do you suffer from the effects of stroke?),Stroke,Do you suffer from effects of stroke, +CCC_151,CCC_151_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,2,2,No Stroke,No Stroke,N/A,2,No (Do you suffer from the effects of stroke?),Stroke,Do you suffer from effects of stroke, +CCC_151,CCC_151_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Stroke,Do you suffer from effects of stroke, +CCC_151,CCC_151_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Stroke,Do you suffer from effects of stroke, +CCC_151,CCC_151_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,NA::b,2,else,else,N/A,else,else,Stroke,Do you suffer from effects of stroke, +CCC_071,CCC_071_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,1,2,Hypertension,Hypertension,N/A,1,Yes (Do you have high blood pressure?),Hypertension,Do you have high blood pressure, +CCC_071,CCC_071_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,2,2,No Hypertension,No Hypertension,N/A,2,No (Do you have high blood pressure?),Hypertension,Do you have high blood pressure, +CCC_071,CCC_071_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Hypertension,Do you have high blood pressure, +CCC_071,CCC_071_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Hypertension,Do you have high blood pressure, +CCC_071,CCC_071_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,NA::b,2,else,else,N/A,else,else,Hypertension,Do you have high blood pressure, +CCC_280,CCC_280_cat2_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,1,2,Has a mood disorder,Has a mood disorder,N/A,1,Yes (Do you have a mood disorder?),Mood disorder,Do you have a mood disorder, +CCC_280,CCC_280_cat2_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,2,2,Does not have a mood disorder,Does not have a mood disorder,N/A,2,No (Do you have a mood disorder?),Mood disorder,Do you have a mood disorder, +CCC_280,CCC_280_cat2_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Mood disorder,Do you have a mood disorder, +CCC_280,CCC_280_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Mood disorder,Do you have a mood disorder, +CCC_280,CCC_280_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,NA::b,2,else,else,N/A,else,else,Mood disorder,Do you have a mood disorder, +CCC_091,CCC_091_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,1,2,COPD/emphysema,COPD/emphysema,N/A,1,"Yes (Do you have COPD(eg bronchitis,emphysema)?)",COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", +CCC_091,CCC_091_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,2,2,No COPD/emphysema,No COPD/emphysema,N/A,2,"No (Do you have COPD(eg bronchitis,emphysema)?)",COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", +CCC_091,CCC_091_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", +CCC_091,CCC_091_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", +CCC_091,CCC_091_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,NA::b,2,else,else,N/A,else,else,COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", +CCC_91E,CCC_91E_cat2_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,1,2,Emphysema,Emphysema,N/A,1,Yes (Do you have emphysema?),emphysema,Do you have emphysema?, +CCC_91E,CCC_91E_cat2_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,2,2,No emphysema,No emphysema,N/A,2,No (Do you have emphysema?),emphysema,Do you have emphysema?, +CCC_91E,CCC_91E_cat2_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,emphysema,Do you have emphysema?, +CCC_91E,CCC_91E_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),emphysema,Do you have emphysema?, +CCC_91E,CCC_91E_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,NA::b,2,else,else,N/A,else,else,emphysema,Do you have emphysema?, +CCC_91F,CCC_91F_cat2_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,1,2,COPD,COPD,N/A,1,Yes (Do you have COPD?),COPD,Do you have COPD?, +CCC_91F,CCC_91F_cat2_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,2,2,No COPD,No COPD,N/A,2,No (Do you have COPD?),COPD,Do you have COPD?, +CCC_91F,CCC_91F_cat2_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,COPD,Do you have COPD?, +CCC_91F,CCC_91F_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),COPD,Do you have COPD?, +CCC_91F,CCC_91F_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,NA::b,2,else,else,N/A,else,else,COPD,Do you have COPD?, +CCC_111,CCC_111_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,1,2,Epilepsy,Epilepsy,N/A,1,Yes (Do you have epilepsy?),Epilepsy,Do you have epilepsy?, +CCC_111,CCC_111_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,2,2,No Epilepsy,No Epilepsy,N/A,2,No (Do you have epilepsy?),Epilepsy,Do you have epilepsy?, +CCC_111,CCC_111_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Epilepsy,Do you have epilepsy?, +CCC_111,CCC_111_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Epilepsy,Do you have epilepsy?, +CCC_111,CCC_111_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,NA::b,2,else,else,N/A,else,else,Epilepsy,Do you have epilepsy?, +CCC_171,CCC_171_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,1,2,Bowel disorder,Bowel disorder,N/A,1,Yes (Do you have a bowel disorder?),Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, +CCC_171,CCC_171_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,2,2,No bowel disorder,No bowel disorder,N/A,2,No (Do you have a bowel disorder?),Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, +CCC_171,CCC_171_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, +CCC_171,CCC_171_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, +CCC_171,CCC_171_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,NA::b,2,else,else,N/A,else,else,Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, +CCC_251,CCC_251_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,1,2,Chronic fatigue,Chronic fatigue,N/A,1,Yes (Do you have chronic fatigue syndrome?),Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, +CCC_251,CCC_251_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,2,2,No chronic fatigue,No chronic fatigue,N/A,2,No (Do you have chronic fatigue syndrome?),Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, +CCC_251,CCC_251_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, +CCC_251,CCC_251_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, +CCC_251,CCC_251_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,NA::b,2,else,else,N/A,else,else,Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, +GEN_01,GEN_01_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,1,5,Excellent,Excellent,N/A,1,Excellent,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,2,5,Very good,Very good,N/A,2,Very good,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,3,5,Good,Good,N/A,3,Good ,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,4,5,Fair,Fair,N/A,4,Fair ,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,5,5,Poor,Poor,N/A,5,Poor,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_01,GEN_01_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", +GEN_02A,GEN_02A_cat5_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,1,5,Very satisfied,Very satisfied,N/A,1,Very satisfied,Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,2,5,Satisfied,Satisfied,N/A,2,Satisfied,Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,3,5,Neither satisfied or dissatisfied,Neither satisfied or dissatisfied,N/A,3,Neither satisfied or dissatisfied,Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,4,5,Dissatisfied,Dissatisfied,N/A,4,Dissatisfied,Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_5,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,5,5,Very dissatisfied,Very dissatisfied,N/A,5,Very dissatisfied,Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Satisfication with life,How satisfied are you with your life in general, +GEN_02A,GEN_02A_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,NA::b,5,else,else,N/A,else,else,Satisfication with life,How satisfied are you with your life in general, +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,0,11,Very dissatisfied,Very dissatisfied,N/A,0,Very dissatisfied,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,1,11,1,1,N/A,1,1,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,2,11,2,2,N/A,2,2,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,3,11,3,3,N/A,3,3,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,4,11,4,4,N/A,4,4,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,5,11,5,5,N/A,5,5,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,6,11,6,6,N/A,6,6,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,7,11,7,7,N/A,7,7,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,8,11,8,8,N/A,8,8,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,9,11,9,9,N/A,9,9,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,10,11,Very satisfied,Very satisfied,N/A,10,Very satisfied,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,NA::a,11,not applicable,not applicable,N/A,96,not applicable ,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,NA::b,11,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,NA::b,11,else,else,N/A,else,else,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", +GEN_02B,GEN_02B_cat5_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,1,5,Excellent,Excellent,N/A,1,Excellent,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,2,5,Very good,Very good,N/A,2,Very good,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,3,5,Good,Good,N/A,3,Good,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,4,5,Fair,Fair,N/A,4,Fair,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_5,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,5,5,Poor,Poor,N/A,5,Poor,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_02B,GEN_02B_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", +GEN_07,GEN_07_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,1,5,Not at all,Not at all,N/A,1,Not at all,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,2,5,Not very,Not very,N/A,2,Not very,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,3,5,A bit,A bit,N/A,3,A bit,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,4,5,Quite a bit,Quite a bit,N/A,4,Quite a bit,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,5,5,Extremely,Extremely,N/A,5,Extremely,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_07,GEN_07_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,1,5,Not at all,Not at all,N/A,1,Not at all,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,2,5,Not very,Not very,N/A,2,Not very,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,3,5,A bit,A bit,N/A,3,A bit,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,4,5,Quite a bit,Quite a bit,N/A,4,Quite a bit,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,5,5,Extremely,Extremely,N/A,5,Extremely,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_09,GEN_09_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", +GEN_10,GEN_10_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,1,4,Very strong,Very strong,N/A,1,Very strong,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, +GEN_10,GEN_10_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,2,4,Somewhat strong,Somewhat strong,N/A,2,Somewhat strong,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, +GEN_10,GEN_10_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,3,4,Somewhat weak,Somewhat weak,N/A,3,Somewhat weak,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, +GEN_10,GEN_10_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,4,4,Very weak,Very weak,N/A,4,Very weak,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, +GEN_10,GEN_10_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, +GEN_10,GEN_10_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Sense of belonging in the community,How would you describe your sense of belonging to your local community?, +ADL_01,ADL_01_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", +ADL_01,ADL_01_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,2,2,No,No,N/A,2,No,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", +ADL_01,ADL_01_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", +ADL_01,ADL_01_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", +ADL_01,ADL_01_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,NA::b,2,else,else,N/A,else,else,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", +ADL_02,ADL_02_cat2_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", +ADL_02,ADL_02_cat2_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,2,2,No,No,N/A,2,No,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", +ADL_02,ADL_02_cat2_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", +ADL_02,ADL_02_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", +ADL_02,ADL_02_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,NA::b,2,else,else,N/A,else,else,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", +ADL_03,ADL_03_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", +ADL_03,ADL_03_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,2,2,No,No,N/A,2,No,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", +ADL_03,ADL_03_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", +ADL_03,ADL_03_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", +ADL_03,ADL_03_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,NA::b,2,else,else,N/A,else,else,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", +ADL_04,ADL_04_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", +ADL_04,ADL_04_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,2,2,No,No,N/A,2,No,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", +ADL_04,ADL_04_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", +ADL_04,ADL_04_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", +ADL_04,ADL_04_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,NA::b,2,else,else,N/A,else,else,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", +ADL_05,ADL_05_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", +ADL_05,ADL_05_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,2,2,No,No,N/A,2,No,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", +ADL_05,ADL_05_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", +ADL_05,ADL_05_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", +ADL_05,ADL_05_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,NA::b,2,else,else,N/A,else,else,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", +ADL_06,ADL_06_cat2_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", +ADL_06,ADL_06_cat2_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,2,2,No,No,N/A,2,No,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", +ADL_06,ADL_06_cat2_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", +ADL_06,ADL_06_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", +ADL_06,ADL_06_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,NA::b,2,else,else,N/A,else,else,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", +ADLF6R,ADLF6R_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help with at least one task - (F),Needs help with at least one task - (F), +ADLF6R,ADLF6R_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,2,2,No,No,N/A,2,No,Needs help with at least one task - (F),Needs help with at least one task - (F), +ADLF6R,ADLF6R_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help with at least one task - (F),Needs help with at least one task - (F), +ADLF6R,ADLF6R_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help with at least one task - (F),Needs help with at least one task - (F), +ADLF6R,ADLF6R_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,NA::b,2,else,else,N/A,else,else,Needs help with at least one task - (F),Needs help with at least one task - (F), +RAC_1,RAC_1_cat3_1,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?",CCHS 2003 codes N/A as 96 and missing as 97-99 +RAC_1,RAC_1_cat3_2,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,2,3,Often,Often,N/A,2,Often,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_3,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,3,3,Never ,Never ,N/A,3,Never ,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_NA::a,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,NA::a,3,not applicable,not applicable,N/A,96,not applicable,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_NA::b,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,NA::b,3,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_NA::b,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,NA::b,3,else,else,N/A,else,else,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,2,3,Often,Often,N/A,2,Often,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,3,3,Never ,Never ,N/A,3,Never ,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_1,RAC_1_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,NA::b,3,else,else,N/A,else,else,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", +RAC_2A,RAC_2A_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, +RAC_2A,RAC_2A_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,2,3,Often,Often,N/A,2,Often,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, +RAC_2A,RAC_2A_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,3,3,Never ,Never ,N/A,3,Never ,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, +RAC_2A,RAC_2A_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, +RAC_2A,RAC_2A_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, +RAC_2A,RAC_2A_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,NA::b,3,else,else,N/A,else,else,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, +RAC_2B1,RAC_2B1_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,1,4,Sometimes,Sometimes,N/A,1,Sometimes,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B1,RAC_2B1_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,2,4,Often,Often,N/A,2,Often,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B1,RAC_2B1_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,3,4,Never ,Never ,N/A,3,Never ,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B1,RAC_2B1_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,4,4,Not attend school,Not attend school,N/A,4,Not attend school,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B1,RAC_2B1_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B1,RAC_2B1_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B1,RAC_2B1_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,NA::b,4,else,else,N/A,else,else,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", +RAC_2B2,RAC_2B2_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,1,4,Sometimes,else,N/A,1,Sometimes,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2B2,RAC_2B2_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,2,4,Often,Often,N/A,2,Often,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2B2,RAC_2B2_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,3,4,Never ,Never ,N/A,3,Never ,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2B2,RAC_2B2_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,4,4,Has no job,Has no job,N/A,4,Has no job,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2B2,RAC_2B2_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2B2,RAC_2B2_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2B2,RAC_2B2_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,NA::b,4,else,else,N/A,else,else,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", +RAC_2C,RAC_2C_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", +RAC_2C,RAC_2C_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,2,3,Often,Often,N/A,2,Often,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", +RAC_2C,RAC_2C_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,3,3,Never ,Never ,N/A,3,Never ,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", +RAC_2C,RAC_2C_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", +RAC_2C,RAC_2C_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", +RAC_2C,RAC_2C_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,NA::b,3,else,else,N/A,else,else,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", +RACAG5,RACAG5_cat4_1,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,1,4,Injury,Injury,N/A,1,Injury,Cause of health problem - (G),Cause of health problem - (G),"CCHS 2001 has different categories from other cycles, hence a new variable created" +RACAG5,RACAG5_cat4_2,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,2,4,Disease/illness,Disease/illness,N/A,2,Disease/illness,Cause of health problem - (G),Cause of health problem - (G), +RACAG5,RACAG5_cat4_3,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,3,4,Aging,Aging,N/A,3,Aging,Cause of health problem - (G),Cause of health problem - (G), +RACAG5,RACAG5_cat4_4,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,4,4,Other,Other,N/A,4,Other,Cause of health problem - (G),Cause of health problem - (G), +RACAG5,RACAG5_cat4_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Cause of health problem - (G),Cause of health problem - (G), +RACAG5,RACAG5_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Cause of health problem - (G),Cause of health problem - (G), +RACAG5,RACAG5_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,NA::b,4,else,else,N/A,else,else,Cause of health problem - (G),Cause of health problem - (G), +RACG5,RACG5_cat6_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,1,6,Injury,Injury,N/A,1,Injury,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,2,6,Disease/illness,Disease/illness,N/A,2,Disease/illness,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,3,6,Aging,Aging,N/A,3,Aging,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,4,6,Existed at birth,Existed at birth,N/A,4,Existed at birth,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_5,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,5,6,Work conditions,Work conditions,N/A,5,Work conditions,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_6,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,6,6,Other,Other,N/A,6,Other,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,NA::b,6,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Cause of health problem,Cause of health problem, +RACG5,RACG5_cat6_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,NA::b,6,else,else,N/A,else,else,Cause of health problem,Cause of health problem, +RACDIMP,RACDIMP_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Impact of health problems,Impact of health problems, +RACDIMP,RACDIMP_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,2,3,Often,Often,N/A,2,Often,Impact of health problems,Impact of health problems, +RACDIMP,RACDIMP_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,3,3,Never ,Never ,N/A,3,Never ,Impact of health problems,Impact of health problems, +RACDIMP,RACDIMP_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Impact of health problems,Impact of health problems, +RACDIMP,RACDIMP_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Impact of health problems,Impact of health problems, +RACDIMP,RACDIMP_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,NA::b,3,else,else,N/A,else,else,Impact of health problems,Impact of health problems, +RACDPAL,RACDPAL_cat3_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Participation and activity limitation,Participation and activity limitation, +RACDPAL,RACDPAL_cat3_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,2,3,Often,Often,N/A,2,Often,Participation and activity limitation,Participation and activity limitation, +RACDPAL,RACDPAL_cat3_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,3,3,Never ,Never ,N/A,3,Never ,Participation and activity limitation,Participation and activity limitation, +RACDPAL,RACDPAL_cat3_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Participation and activity limitation,Participation and activity limitation, +RACDPAL,RACDPAL_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Participation and activity limitation,Participation and activity limitation, +RACDPAL,RACDPAL_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,NA::b,3,else,else,N/A,else,else,Participation and activity limitation,Participation and activity limitation, +EDUDR04,EDUDR04_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,1,4,Less than high school,Less than High School,N/A,1,< Than Secondary,Education,Highest level/education - respondent 4 levels - (D),Slight change in wording of categories from CCHS 2011 onwards +EDUDR04,EDUDR04_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,2,4,High school graduate,High School Graduate,N/A,2,Secondary grad,Education,Highest level/education - respondent 4 levels - (D), +EDUDR04,EDUDR04_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,3,4,Some post-secondary education,Some post-secondary education,N/A,3,Other post-sec.,Education,Highest level/education - respondent 4 levels - (D), +EDUDR04,EDUDR04_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,4,4,Post-secondary graduate,Post-secondary graduate,N/A,4,Post-sec. grad,Education,Highest level/education - respondent 4 levels - (D), +EDUDR04,EDUDR04_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Education,Highest level/education - respondent 4 levels - (D), +EDUDR04,EDUDR04_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Education,Highest level/education - respondent 4 levels - (D),CCHS 2001 does not have don't know (7) or refusal (8) +EDUDR04,EDUDR04_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,NA::b,4,else,else,N/A,else,else,Education,Highest level/education - respondent 4 levels - (D), +SDCGCBG ,SDCGCBG _cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,1,2,Canada,Canada,N/A,1,Canada,Country of birth - (G),Country of birth - (G), +SDCGCBG ,SDCGCBG _cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,2,2,Other,Other,N/A,2,Other,Country of birth - (G),Country of birth - (G), +SDCGCBG ,SDCGCBG _cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Country of birth - (G),Country of birth - (G), +SDCGCBG ,SDCGCBG _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Country of birth - (G),Country of birth - (G),CCHS 2001 does not have don't know (7) or refusal (8) +SDCGCBG ,SDCGCBG _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,NA::b,2,else,else,N/A,else,else,Country of birth - (G),Country of birth - (G), +SDCFIMM,SDCFIMM_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,1,2,Yes,Yes,N/A,1,Yes,Immigrant status (D),Are you an immigrant?, +SDCFIMM,SDCFIMM_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,2,2,No,No,N/A,2,No,Immigrant status (D),Are you an immigrant?, +SDCFIMM,SDCFIMM_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Immigrant status (D),Are you an immigrant?, +SDCFIMM,SDCFIMM_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Immigrant status (D),Are you an immigrant?, +SDCFIMM,SDCFIMM_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,NA::b,2,else,else,N/A,else,else,Immigrant status (D),Are you an immigrant?, +SDCGRES ,SDCGRES _cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,1,2,0 to 9 years,0 to 9 years,N/A,1,0 to 9 years,Length in Canada,"Length/time in Canada since imm. (D, G)", +SDCGRES ,SDCGRES _cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,2,2,10 years or more,10 years or more,N/A,2,10 years or more,Length in Canada,"Length/time in Canada since imm. (D, G)", +SDCGRES ,SDCGRES _cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Length in Canada,"Length/time in Canada since imm. (D, G)", +SDCGRES ,SDCGRES _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Length in Canada,"Length/time in Canada since imm. (D, G)","CCHS 2001 missing don't know (7), refusal (8)" +SDCGRES ,SDCGRES _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,NA::b,2,else,else,N/A,else,else,Length in Canada,"Length/time in Canada since imm. (D, G)", +SDCGCGT,SDCGCGT_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,1,2,White,White,N/A,1,White,Ethnicity,"Cultural or racial origin - (D, G)", +SDCGCGT,SDCGCGT_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,2,2,Non-white,Non-white,N/A,2,Visible minority,Ethnicity,"Cultural or racial origin - (D, G)", +SDCGCGT,SDCGCGT_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Ethnicity,"Cultural or racial origin - (D, G)", +SDCGCGT,SDCGCGT_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Ethnicity,"Cultural or racial origin - (D, G)","CCHS 2001 missing don't know (7), refusal (8)" +SDCGCGT,SDCGCGT_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,NA::b,2,else,else,N/A,else,else,Ethnicity,"Cultural or racial origin - (D, G)", +DHHGMS,DHHGMS_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,1,4,Married,Married,N/A,1,Married,Marital Status,Marital status - (G), +DHHGMS,DHHGMS_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,2,4,Common-law,Common-law,N/A,2,Common-law,Marital Status,Marital status - (G), +DHHGMS,DHHGMS_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,3,4,Widow/Sep/Div,Widow/Sep/Div,N/A,3,Widow/separated/divorced,Marital Status,Marital status - (G), +DHHGMS,DHHGMS_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,4,4,Single/Never mar.,Single,N/A,4,Single/never married,Marital Status,Marital status - (G), +DHHGMS,DHHGMS_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Marital Status,Marital status - (G), +DHHGMS,DHHGMS_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Marital Status,Marital status - (G),"CCHS 2001 missing not applicable (6), don't know (7)" +DHHGMS,DHHGMS_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,NA::b,4,else,else,N/A,else,else,Marital Status,Marital status - (G), +DHH_OWN,DHH_OWN_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,1,2,Yes,Yes,N/A,1,Yes,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?,"In 2011, CCHS changed wording of responses to (1) owner and (2) renter" +DHH_OWN,DHH_OWN_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,2,2,No,No,N/A,2,No,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, +DHH_OWN,DHH_OWN_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, +DHH_OWN,DHH_OWN_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, +DHH_OWN,DHH_OWN_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,NA::b,2,else,else,N/A,else,else,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, +FINF1,FINF1_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,1,2,Yes,Yes,N/A,1,Yes,Some food insecurity in past 12 months,Some food insecurity in past 12 months, +FINF1,FINF1_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,2,2,No,No,N/A,2,No,Some food insecurity in past 12 months,Some food insecurity in past 12 months, +FINF1,FINF1_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Some food insecurity in past 12 months,Some food insecurity in past 12 months, +FINF1,FINF1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Some food insecurity in past 12 months,Some food insecurity in past 12 months, +FINF1,FINF1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,NA::b,2,else,else,N/A,else,else,Some food insecurity in past 12 months,Some food insecurity in past 12 months, +FSCDHFS,FSCDHFS_cat4_0,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,0,4,Secure,Secure,N/A,0,Secure,Food security,Household food security status - (D),CCHS 2005 has different categories from other CCHS cycles so new variable created +FSCDHFS,FSCDHFS_cat4_1,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,1,4,Without hunger,Without hunger,N/A,1,Without hunger,Food security,Household food security status - (D), +FSCDHFS,FSCDHFS_cat4_2,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,2,4,W/mod. hunger,With moderate hunger,N/A,2,With moderate hunger,Food security,Household food security status - (D), +FSCDHFS,FSCDHFS_cat4_3,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,3,4,W/severe hunger,With severe hunger,N/A,3,With severe hunger,Food security,Household food security status - (D), +FSCDHFS,FSCDHFS_cat4_NA::a,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Food security,Household food security status - (D), +FSCDHFS,FSCDHFS_cat4_NA::b,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Food security,Household food security status - (D), +FSCDHFS,FSCDHFS_cat4_NA::b,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,NA::b,4,else,else,N/A,else,else,Food security,Household food security status - (D), +FSCDHFS2,FSCDHFS2_cat3_0,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,0,3,Food secure,Food secure,N/A,0,Food secure,Food security,Household Food Security Status (HC), +FSCDHFS2,FSCDHFS2_cat3_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,1,3,Mod. food insec.,Mod. food insec.,N/A,1,Moderate food insecurity,Food security,Household Food Security Status (HC), +FSCDHFS2,FSCDHFS2_cat3_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,2,3,Sev. food insec.,Sev. food insec.,N/A,2,Severe food insecurity,Food security,Household Food Security Status (HC), +FSCDHFS2,FSCDHFS2_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Food security,Household Food Security Status (HC), +FSCDHFS2,FSCDHFS2_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Food security,Household Food Security Status (HC), +FSCDHFS2,FSCDHFS2_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,NA::b,3,else,else,N/A,else,else,Food security,Household Food Security Status (HC), +INCGPER,INCGPER_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,1,6,No income,No income,Dollars,1,No income,Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,2,6,"Less than $15,000","Less than $15,000",Dollars,2,"Less than $15,000",Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,3,6,"$15,000-$29,999","$15,000-$29,1000",Dollars,3,"$15,000-$29,999",Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,4,6,"$30,000-$49,999","$30,000-$49,1000",Dollars,4,"$30,000-$49,999",Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,5,6,"$50,000-$79,999","$50,000-$79,1000",Dollars,5,"$50,000-$79,999",Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,6,6,"$80,000 or more","$80,000 or more",Dollars,6,"$80,000 or more",Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,NA::a,6,not applicable,not applicable,Dollars,96,not applicable,Personal income,"Total pers. inc. from all sources (D, G)", +INCGPER,INCGPER_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,NA::b,6,missing,missing,Dollars,97:99,don't know (97); refusal (98); not stated (99),Personal income,"Total pers. inc. from all sources (D, G)",CCHS 2001 missing 97 (don't know) and 98 (refusal) +INCGPER,INCGPER_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,NA::b,6,else,else,Dollars,else,else,Personal income,"Total pers. inc. from all sources (D, G)", +INCDRCA,INCDRCA_cat10_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,1,10,Decile 1,Decile 2,N/A,1,Decile 1,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,2,10,Decile 2,Decile 3,N/A,2,Decile 2,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,3,10,Decile 3,Decile 4,N/A,3,Decile 3,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,4,10,Decile 4,Decile 5,N/A,4,Decile 4,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,5,10,Decile 5,Decile 6,N/A,5,Decile 5,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,6,10,Decile 6,Decile 7,N/A,6,Decile 6,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,7,10,Decile 7,Decile 8,N/A,7,Decile 7,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,8,10,Decile 8,Decile 9,N/A,8,Decile 8,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,9,10,Decile 9,Decile 10,N/A,9,Decile 9,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,10,10,Decile 10,Decile 11,N/A,10,Decile 10,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,NA::a,10,not applicable,not applicable,N/A,96,not applicable,Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,NA::b,10,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Household income distribution,Household income distribution - (D), +INCDRCA,INCDRCA_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,NA::b,10,else,else,N/A,else,else,Household income distribution,Household income distribution - (D), +INCDRPR,INCDRPR_cat10_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,1,10,Decile 1,Decile 2,N/A,1,Decile 1,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,2,10,Decile 2,Decile 3,N/A,2,Decile 2,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,3,10,Decile 3,Decile 4,N/A,3,Decile 3,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,4,10,Decile 4,Decile 5,N/A,4,Decile 4,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,5,10,Decile 5,Decile 6,N/A,5,Decile 5,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,6,10,Decile 6,Decile 7,N/A,6,Decile 6,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,7,10,Decile 7,Decile 8,N/A,7,Decile 7,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,8,10,Decile 8,Decile 9,N/A,8,Decile 8,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,9,10,Decile 9,Decile 10,N/A,9,Decile 9,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,10,10,Decile 10,Decile 11,N/A,10,Decile 10,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,NA::a,10,not applicable,not applicable,N/A,96,not applicable,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,NA::b,10,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRPR,INCDRPR_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,NA::b,10,else,else,N/A,else,else,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), +INCDRRS,INCDRRS_cat10_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,1,10,Decile 1,Decile 2,N/A,1,Decile 1,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,2,10,Decile 2,Decile 3,N/A,2,Decile 2,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,3,10,Decile 3,Decile 4,N/A,3,Decile 3,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,4,10,Decile 4,Decile 5,N/A,4,Decile 4,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,5,10,Decile 5,Decile 6,N/A,5,Decile 5,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,6,10,Decile 6,Decile 7,N/A,6,Decile 6,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,7,10,Decile 7,Decile 8,N/A,7,Decile 7,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,8,10,Decile 8,Decile 9,N/A,8,Decile 8,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,9,10,Decile 9,Decile 10,N/A,9,Decile 9,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,10,10,Decile 10,Decile 11,N/A,10,Decile 10,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,NA::a,10,not applicable,not applicable,N/A,96,not applicable,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,NA::b,10,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Household income distribution health region level,Hhld inc. distribution- hr level - (D), +INCDRRS,INCDRRS_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,NA::b,10,else,else,N/A,else,else,Household income distribution health region level,Hhld inc. distribution- hr level - (D), +SLPG01_A,SLPG01_A_cat12_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,1,12,<2 hours,<2 hours,Hours,1,<2 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,2,12,2-<3 hours,2-<3 hours,Hours,2,2-<3 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,3,12,3-<4 hours,3-<4 hours,Hours,3,3-<4 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,4,12,4-<5 hours,4-<5 hours,Hours,4,4-<5 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,5,12,5-<6 hours,5-<6 hours,Hours,5,5-<6 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,6,12,6-<7 hours,6-<7 hours,Hours,6,6-<7 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,7,12,7-<8 hours,7-<8 hours,Hours,7,7-<8 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,8,12,8-<9 hours,8-<9 hours,Hours,8,8-<9 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,9,12,9-<10 hours,9-<10 hours,Hours,9,9-<10 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,10,12,10-<11 hours,10-<11 hours,Hours,10,10-<11 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_11,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,11,12,11-<12 hours,11-<12 hours,Hours,11,11-<12 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_12,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,12,12,>= 12 hours,>= 12 hours,Hours,12,>= 12 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::a,12,not applicable,not applicable,Hours,96,not applicable,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,12,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_A,SLPG01_A_cat12_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,12,else,else,Hours,else,else,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_1,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,1,11,<2 hours,<2 hours,Hours,1,<2 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?,CCHS 2011-2012 onwards omitted 2-<3 hours category +SLPG01,SLPG01_cat11_2,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,2,11,3-<4 hours,3-<4 hours,Hours,2,3-<4 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_3,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,3,11,4-<5 hours,4-<5 hours,Hours,3,4-<5 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_4,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,4,11,5-<6 hours,5-<6 hours,Hours,4,5-<6 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_5,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,5,11,6-<7 hours,6-<7 hours,Hours,5,6-<7 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_6,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,6,11,7-<8 hours,7-<8 hours,Hours,6,7-<8 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_7,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,7,11,8-<9 hours,8-<9 hours,Hours,7,8-<9 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_8,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,8,11,9-<10 hours,9-<10 hours,Hours,8,9-<10 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_9,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,9,11,10-<11 hours,10-<11 hours,Hours,9,10-<11 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_10,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,10,11,11-<12 hours,11-<12 hours,Hours,10,11-<12 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_11,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,11,11,>= 12 hours,>= 12 hours,Hours,11,>= 12 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_NA::a,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::a,11,not applicable,not applicable,Hours,96,not applicable,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_NA::b,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01,SLPG01_cat11_NA::b,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,else,else,Hours,else,else,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,1,N/A,Hours,converted hours (<2 hours),Hours,1,converted hours (<2 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,2.5,N/A,Hours,convereted hours (2-<3 hours),Hours,2,convereted hours (2-<3 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,3.5,N/A,Hours,converted hours (3-<4 hours),Hours,3,converted hours (3-<4 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,4.5,N/A,Hours,converted hours (4-<5 hours),Hours,4,converted hours (4-<5 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,5.5,N/A,Hours,converted hours (5-<6 hours),Hours,5,converted hours (5-<6 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,6.5,N/A,Hours,converted hours (6-<7 hours),Hours,6,converted hours (6-<7 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,7.5,N/A,Hours,converted hours (7-<8 hours),Hours,7,converted hours (7-<8 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,8.5,N/A,Hours,converted hours (8-<9 hours),Hours,8,converted hours (8-<9 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,9.5,N/A,Hours,converted hours (9-<10 hours),Hours,9,converted hours (9-<10 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,10.5,N/A,Hours,converted hours (10-<11 hours),Hours,10,converted hours (10-<11 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,11.5,N/A,Hours,converted hours (11-<12 hours),Hours,11,converted hours (11-<12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,13,N/A,Hours,converted hours (>= 12 hours),Hours,12,converted hours (>= 12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::a,N/A,not applicable,not applicable,Hours,96,not applicable,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,N/A,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,N/A,else,else,Hours,else,else,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,1,11,<2 hours,converted hours (<2 hours),Hours,1,converted hours (<2 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,3.5,11,3-<4 hours,converted hours (3-<4 hours),Hours,2,converted hours (3-<4 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,4.5,11,4-<5 hours,converted hours (4-<5 hours),Hours,3,converted hours (4-<5 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,5.5,11,5-<6 hours,converted hours (5-<6 hours),Hours,4,converted hours (5-<6 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,6.5,11,6-<7 hours,converted hours (6-<7 hours),Hours,5,converted hours (6-<7 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,7.5,11,7-<8 hours,converted hours (7-<8 hours),Hours,6,converted hours (7-<8 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,8.5,11,8-<9 hours,converted hours (8-<9 hours),Hours,7,converted hours (8-<9 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,9.5,11,9-<10 hours,converted hours (9-<10 hours),Hours,8,converted hours (9-<10 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,10.5,11,10-<11 hours,converted hours (10-<11 hours),Hours,9,converted hours (10-<11 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,11.5,11,11-<12 hours,converted hours (11-<12 hours),Hours,10,converted hours (11-<12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,13,11,>= 12 hours,converted hours (>= 12 hours),Hours,11,converted hours (>= 12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::a,11,not applicable,not applicable,Hours,96,not applicable,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,else,else,Hours,else,else,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, +SLP_02_A,SLP_02_A_cat3_1,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,1,3,Most of the time,Most of the time,N/A,1,Most of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?,CCHS 2001 has different categories from other cycles +SLP_02_A,SLP_02_A_cat3_2,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,2,3,Sometimes,Sometimes,N/A,2,Sometimes,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02_A,SLP_02_A_cat3_3,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,3,3,Never ,Never ,N/A,3,Never ,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02_A,SLP_02_A_cat3_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02_A,SLP_02_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02_A,SLP_02_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,NA::b,3,else,else,N/A,else,else,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_1,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,1,5,None of the time,None of the time,N/A,1,None of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_2,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,2,5,Little of the time,Little of the time,N/A,2,Little of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_3,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,3,5,Some of the time,Some of the time,N/A,3,Some of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_4,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,4,5,Most of the time,Most of the time,N/A,4,Most of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_5,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,5,5,All the time,All the time,N/A,5,All the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_02,SLP_02_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,NA::b,5,else,else,N/A,else,else,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, +SLP_03_A,SLP_03_A_cat3_1,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,1,3,Most of the time,Most of the time,N/A,1,Most of the time,Freq. - find sleep refreshing,How often do you find your sleep refreshing?,CCHS 2001 has different categories from other cycles +SLP_03_A,SLP_03_A_cat3_2,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,2,3,Sometimes,Sometimes,N/A,2,Sometimes,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03_A,SLP_03_A_cat3_3,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,3,3,Never ,Never ,N/A,3,Never ,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03_A,SLP_03_A_cat3_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03_A,SLP_03_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03_A,SLP_03_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,NA::b,3,else,else,N/A,else,else,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat5_1,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,1,5,None of the time,None of the time,N/A,1,None of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat5_2,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,2,5,Little of the time,Little of the time,N/A,2,Little of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat5_3,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,3,5,Some of the time,Some of the time,N/A,3,Some of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat5_4,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,4,5,Most of the time,Most of the time,N/A,4,Most of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat5_5,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,5,5,All the time,All the time,N/A,5,All the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_03,SLP_03_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,NA::b,3,else,else,N/A,else,else,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, +SLP_04_A,SLP_04_A_cat3_1,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,1,3,Most of the time,Most of the time,N/A,1,Most of the time,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?,CCHS 2001 has different categories from other cycles +SLP_04_A,SLP_04_A_cat3_2,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,2,3,Sometimes,Sometimes,N/A,2,Sometimes,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04_A,SLP_04_A_cat3_3,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,3,3,Never ,Never ,N/A,3,Never ,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04_A,SLP_04_A_cat3_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04_A,SLP_04_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04_A,SLP_04_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,NA::b,3,else,else,N/A,else,else,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_1,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,1,5,None of the time,None of the time,N/A,1,None of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_2,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,2,5,Little of the time,Little of the time,N/A,2,Little of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_3,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,3,5,Some of the time,Some of the time,N/A,3,Some of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_4,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,4,5,Most of the time,Most of the time,N/A,4,Most of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_5,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,5,5,All the time,All the time,N/A,5,All the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +SLP_04,SLP_04_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,NA::b,5,else,else,N/A,else,else,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, +MED_1P,MED_1P_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,1,2,Yes,Yes,N/A,1,Yes,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?",CCHS 2001 does not provide examples of sleeping pills in its literal question +MED_1P,MED_1P_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,2,2,No,No,N/A,2,No,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", +MED_1P,MED_1P_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", +MED_1P,MED_1P_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", +MED_1P,MED_1P_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,NA::b,2,else,else,N/A,else,else,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", +PAC_7,PAC_7_cat3_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,1,3,Yes,Yes,N/A,1,Yes,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, +PAC_7,PAC_7_cat3_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,2,3,No,No,N/A,2,No,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, +PAC_7,PAC_7_cat3_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,3,3,No work/no school,No work/no school,N/A,3,No work/no school,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, +PAC_7,PAC_7_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, +PAC_7,PAC_7_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, +PAC_7,PAC_7_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,NA::b,3,else,else,N/A,else,else,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, +PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,copy,N/A,No. of times/3 mo./walking work/school,No. of times walking work/school,N/A,1:270,No. of times walking work/school,No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, +PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,NA::a,N/A,not applicable,not applicable,N/A,996,not applicable,No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, +PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,NA::b,N/A,missing,missing,N/A,997:999,don't know (997); refusal (998); not stated (999),No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, +PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,NA::b,N/A,else,else,N/A,else,else,No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, +PAC_4A,PAC_4A_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,1,6,None,None,hours/week,1,None,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,2,6,Less than one hour,Less than one hour,hours/week,2,Less than one hour,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,3,6,1-5 hours,1-5 hours,hours/week,3,1-5 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,4,6,6-10 hours,6-10 hours,hours/week,4,6-10 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,5,6,11-20 hours,11-20 hours,hours/week,5,11-20 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,6,6,More than 20 hours,More than 20 hours,hours/week,6,More than 20 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,NA::a,6,not applicable,not applicable,hours/week,96,not applicable,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,NA::b,6,missing,missing,hours/week,97:99,don't know (97); refusal (98); not stated (99),No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_4A,PAC_4A_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,NA::b,6,else,else,hours/week,else,else,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", +PAC_7B,PAC_7B_cat4_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,1,4,1 to 15 minutes,1 to 15 minutes,mins,1,1 to 15 minutes,Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_7B,PAC_7B_cat4_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,2,4,16 to 30 minutes,16 to 30 minutes,mins,2,16 to 30 minutes,Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_7B,PAC_7B_cat4_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,3,4,31 to 60 minutes,31 to 60 minutes,mins,3,31 to 60 minutes,Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_7B,PAC_7B_cat4_4,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,4,4,More than 1 hour,More than 1 hour,mins,4,More than 1 hour,Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_7B,PAC_7B_cat4_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,NA::a,4,not applicable,not applicable,mins,6,not applicable,Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_7B,PAC_7B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,NA::b,4,missing,missing,mins,7:9,don't know (7); refusal (8); not stated (9),Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_7B,PAC_7B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,NA::b,4,else,else,mins,else,else,Time spent - walking to go work/school,About how much time did you spend on each occasion?, +PAC_8,PAC_8_cat3_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,1,3,Yes,Yes,N/A,1,Yes,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, +PAC_8,PAC_8_cat3_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,2,3,No,No,N/A,2,No,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, +PAC_8,PAC_8_cat3_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,3,3,No work/no school,No work/no school,N/A,3,No work/no school,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, +PAC_8,PAC_8_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, +PAC_8,PAC_8_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, +PAC_8,PAC_8_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,NA::b,3,else,else,N/A,else,else,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, +PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,copy,N/A,No. of times/3 mo./biking work/school,No. of times biking work/school,times/3 mos.,1:200,No. of times biking work/school,No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, +PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,NA::a,N/A,not applicable,not applicable,times/3 mos.,996,not applicable,No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, +PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,NA::b,N/A,missing,missing,times/3 mos.,997:999,don't know (997); refusal (998); not stated (999),No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, +PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,NA::b,N/A,else,else,times/3 mos.,else,else,No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, +PAC_4B,PAC_4B_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,1,6,None,None,hours/week,1,None,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,2,6,Less than one hour,Less than one hour,hours/week,2,Less than one hour,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,3,6,1-5 hours,1-5 hours,hours/week,3,1-5 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,4,6,6-10 hours,6-10 hours,hours/week,4,6-10 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,5,6,11-20 hours,11-20 hours,hours/week,5,11-20 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,6,6,More than 20 hours,More than 20 hours,hours/week,6,More than 20 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,NA::a,6,not applicable,not applicable,hours/week,96,not applicable,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,NA::b,6,missing,missing,hours/week,97:99,don't know (97); refusal (98); not stated (99),No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_4B,PAC_4B_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,NA::b,6,else,else,hours/week,else,else,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", +PAC_8B,PAC_8B_cat4_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,1,4,1 to 15 minutes,1 to 15 minutes,mins,1,1 to 15 minutes,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +PAC_8B,PAC_8B_cat4_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,2,4,16 to 30 minutes,16 to 30 minutes,mins,2,16 to 30 minutes,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +PAC_8B,PAC_8B_cat4_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,3,4,31 to 60 minutes,31 to 60 minutes,mins,3,31 to 60 minutes,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +PAC_8B,PAC_8B_cat4_4,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,4,4,More than 1 hour,More than 1 hour,mins,4,More than 1 hour,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +PAC_8B,PAC_8B_cat4_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,NA::a,4,not applicable,not applicable,mins,6,not applicable,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +PAC_8B,PAC_8B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,NA::b,4,missing,missing,mins,7:9,don't know (7); refusal (8); not stated (9),Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +PAC_8B,PAC_8B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,NA::b,4,else,else,mins,else,else,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, +HUIGVIS,HUIGVIS_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,1,5,No visual probl.,No visual problems,N/A,1,No visual probl.,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGVIS,HUIGVIS_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,2,5,Corr. by lenses,Corrected by lenses,N/A,2,Corr. by lenses,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGVIS,HUIGVIS_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,3,5,Hypermet/n corr,Hypermetropia/no correction,N/A,3,Hypermet/n corr,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGVIS,HUIGVIS_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,4,5,Myopia/n corr,Myopia/no correction,N/A,4,Myopia/n corr,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGVIS,HUIGVIS_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,5,5,Myopia & hypermet,Myopia & hypermetropia,N/A,5,Myopia & hypermet,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGVIS,HUIGVIS_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGVIS,HUIGVIS_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) +HUIGVIS,HUIGVIS_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,NA::b,5,else,else,N/A,else,else,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", +HUIGHER,HUIGHER_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,1,3,No hearing prob,No hearing problem,N/A,1,No hearing prob,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", +HUIGHER,HUIGHER_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,2,3,Hear corrected,Hearing corrected,N/A,2,Hear corrected,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", +HUIGHER,HUIGHER_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,3,3,Hear n-corrected,Hearing not-corrected,N/A,3,Hear n-corrected,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", +HUIGHER,HUIGHER_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", +HUIGHER,HUIGHER_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) +HUIGHER,HUIGHER_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,NA::b,3,else,else,N/A,else,else,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", +HUIGSPE,HUIGSPE_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,1,2,No speech prob,No speech problem,N/A,1,No speech prob,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", +HUIGSPE,HUIGSPE_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,2,2,Part/not underst,Part/not underst,N/A,2,Part/not underst,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", +HUIGSPE,HUIGSPE_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", +HUIGSPE,HUIGSPE_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) +HUIGSPE,HUIGSPE_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,NA::b,2,else,else,N/A,else,else,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", +HUIGMOB,HUIGMOB_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,1,4,No mobil. Prob.,No mobil. Prob.,N/A,1,No mobil. Prob.,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", +HUIGMOB,HUIGMOB_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,2,4,Mob-no aid req.,Mob-no aid req.,N/A,2,Mob-no aid req.,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", +HUIGMOB,HUIGMOB_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,3,4,Need mech supp.,Need mech supp.,N/A,3,Need mech supp.,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", +HUIGMOB,HUIGMOB_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,4,4,Can't walk,Can't walk,N/A,4,Can't walk,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", +HUIGMOB,HUIGMOB_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", +HUIGMOB,HUIGMOB_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) +HUIGMOB,HUIGMOB_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,NA::b,4,else,else,N/A,else,else,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", +HUIGDEX,HUIGDEX_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,1,3,No dext prob,No problems,N/A,1,No dext prob,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", +HUIGDEX,HUIGDEX_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,2,3,Dext/no help,No help needed,N/A,2,Dext/no help,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", +HUIGDEX,HUIGDEX_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,3,3,Dext/need help,Needs help,N/A,3,Dext/need help,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", +HUIGDEX,HUIGDEX_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", +HUIGDEX,HUIGDEX_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) +HUIGDEX,HUIGDEX_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,NA::b,3,else,else,N/A,else,else,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", +HUIDEMO,HUIDEMO_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,1,5,Happy in life,Happy in life,N/A,1,Happy in life,Emotional problems - function code - (D),Emotional problems - function code - (D),CCHS 2007 onwards uses emotional levels which coincide with HUI Mark 3 +HUIDEMO,HUIDEMO_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,2,5,Somewhat happy,Somewhat happy,N/A,2,Somewhat happy,Emotional problems - function code - (D),Emotional problems - function code - (D), +HUIDEMO,HUIDEMO_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,3,5,Somewhat unhappy,Somewhat unhappy,N/A,3,Somewhat unhappy,Emotional problems - function code - (D),Emotional problems - function code - (D), +HUIDEMO,HUIDEMO_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,4,5,Very unhappy,Very unhappy,N/A,4,Very unhappy,Emotional problems - function code - (D),Emotional problems - function code - (D), +HUIDEMO,HUIDEMO_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,5,5,Life not worth,Life not worth,N/A,5,Life not worth,Emotional problems - function code - (D),Emotional problems - function code - (D), +HUIDEMO,HUIDEMO_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Emotional problems - function code - (D),Emotional problems - function code - (D), +HUIDEMO,HUIDEMO_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Emotional problems - function code - (D),Emotional problems - function code - (D),CCHS 2001 does not include don't know (7) or refusal (8) +HUIDEMO,HUIDEMO_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,NA::b,5,else,else,N/A,else,else,Emotional problems - function code - (D),Emotional problems - function code - (D), +HUIDCOG,HUIDCOG_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,1,6,No cognit prob,No cognition problems,N/A,1,No cognit prob,Cognition prob. - function code - (D),Cognition prob. - function code - (D),CCHS 2007 onwards uses cognition levels which coincide with HUI Mark 3 +HUIDCOG,HUIDCOG_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,2,6,Little difficult,Little difficulty,N/A,2,Little difficulty,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUIDCOG,HUIDCOG_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,3,6,Some forgetful,Some forgetful,N/A,3,Some forgetful,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUIDCOG,HUIDCOG_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,4,6,Forget/dif think,Forgetful/difficulty thinking,N/A,4,Forget/dif think,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUIDCOG,HUIDCOG_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,5,6,Very forgetful,Very forgetful,N/A,5,Very forgetful,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUIDCOG,HUIDCOG_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,6,6,Can't remember,Can't remember,N/A,6,Can't remember,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUIDCOG,HUIDCOG_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUIDCOG,HUIDCOG_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,NA::b,6,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Cognition prob. - function code - (D),Cognition prob. - function code - (D),CCHS 2001 does not include don't know (97) or refusal (98) +HUIDCOG,HUIDCOG_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,NA::b,6,else,else,N/A,else,else,Cognition prob. - function code - (D),Cognition prob. - function code - (D), +HUPDPAD,HUPDPAD_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,1,5,No pain/discomf,No pain/discomf,N/A,1,No pain/discomf,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUPDPAD,HUPDPAD_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,2,5,Doesn't prev act,Doesn't prev act,N/A,2,Doesn't prev act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUPDPAD,HUPDPAD_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,3,5,Prevents few act,Prevents few act,N/A,3,Prevents few act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUPDPAD,HUPDPAD_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,4,5,Prev. some act,Prev. some act,N/A,4,Prev. some act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUPDPAD,HUPDPAD_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,5,5,Prev. most act,Prev. most act,N/A,5,Prev. most act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUPDPAD,HUPDPAD_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUPDPAD,HUPDPAD_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D),CCHS 2001 does not include don't know (7) or refusal (8) +HUPDPAD,HUPDPAD_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,NA::b,5,else,else,N/A,else,else,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), +HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,copy,N/A,HUI score,Health Utility Index (HUI3) - (D),N/A,-0.359:1,Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), +HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,NA::a,N/A,not applicable,not applicable,N/A,99.996,not applicable (99.996),Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), +HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,NA::b,N/A,missing,missing,N/A,99.997:99.999,"don't know (99.997), refusal (99.998), not stated (99.999)",Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), +HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,NA::b,N/A,else,else,N/A,else,else,Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), +GEOGPRV,GEOGPRV_cat11_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,1,11,NL,Nfld. & Labrador,N/A,10,Nfld. & Labrador,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,2,11,PEI,Prince Edward Island,N/A,11,Prince Edward Island,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,3,11,NS,Nova Scotia,N/A,12,Nova Scotia,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,4,11,NB,New Brunswick,N/A,13,New Brunswick,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,5,11,QC,Quebec,N/A,24,Quebec,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,6,11,ON,Ontario,N/A,35,Ontario,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,7,11,MB,Manitoba,N/A,46,Manitoba,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,8,11,SK,Saskatchewan,N/A,47,Saskatchewan,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,9,11,AB,Alberta,N/A,48,Alberta,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,10,11,BC,British Columbia,N/A,59,British Columbia,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_11,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,11,11,YT/NT/NU,Yukon/NWT/Nunavut,N/A,60,Yukon/NWT/Nunavut,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,NA::a,11,not applicable,not applicable,N/A,96,not applicable,Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,NA::b,11,missing,missing,N/A,97:99,"don't know (97), refusal (98), not stated (99)",Province,Province of residence of respondent - (G), +GEOGPRV,GEOGPRV_cat11_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,NA::b,11,else,else,N/A,else,else,Province,Province of residence of respondent - (G), +HWTGBMI_derived,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","DerivedVar::[HWTGHTM, HWTGWTK]",N/A,Func::BMI_derived,N/A,N/A,N/A,kg/m2,N/A,N/A,Derived BMI,Derived Body Mass Index,BMI variable derived from the harmonized height and weight variables +PackYears_derived,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","DerivedVar::[SMKDSTY, DHHGAGE_cont, SMK_09A_B, SMKG09C, SMKG203_cont, SMKG207_cont, SMK_204, SMK_05B, SMK_208, SMK_05C, SMKG01C_cont, SMK_01A]",N/A,Func::PackYears_fun,N/A,N/A,N/A,Years,N/A,N/A,PackYears,Smoking pack-years,PackYears variable derived from various harmonized smoking variables +Pct_time_derived,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","DerivedVar::[DHHGAGE_cont, SDCGCBG, SDCGRES]",N/A,Func::Pct_time_fun,N/A,N/A,N/A,%,N/A,N/A,PctTime,Percentage of time in Canada,"Percent time in Canada derived from Age, immigration status, and time in Canada variables " \ No newline at end of file diff --git a/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv b/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv new file mode 100644 index 00000000..1dc92257 --- /dev/null +++ b/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv @@ -0,0 +1,135 @@ +variable,label,labelLong,section,subject,variableType,units +ADL_01,Help preparing meals,Needs help - preparing meals,health behaviour,Assistance/Difficulty,Categorical,N/A +ADL_02,Help appointments/errands,Needs help - getting to appointments/errands,health behaviour,Assistance/Difficulty,Categorical,N/A +ADL_03,Help housework,Needs help - doing housework,Health behaviour,Assistance/Difficulty,Categorical,N/A +ADL_04,Help personal care,Needs help - personal care,Health behaviour,Assistance/Difficulty,Categorical,N/A +ADL_05,Help move inside house,Needs help - moving about inside house,Health behaviour,Assistance/Difficulty,Categorical,N/A +ADL_06,Help personal finances,Needs help - looking after finances,Health behaviour,Assistance/Difficulty,Categorical,N/A +ADLF6R,Help tasks,Needs help with at least one task - (F),Health behaviour,Assistance/Difficulty,Categorical,N/A +ALC_1,Alcohol past year,"Past year, have you drank alcohol",health behaviour,Alcohol,Categorical,N/A +ALCDTTM,Drinker type 12M,Type of drinker (12 months),health behaviour,Alcohol,Categorical,N/A +ALCDTYP,Drinker type,Type of drinker - (D),health behaviour,Alcohol,Categorical,N/A +ALW_1,Any alcohol past week,"Past week, had any alcohol",health behaviour,Alcohol,Categorical,N/A +ALW_5A1,DailyConsumptionSunday,Number of drinks on Sunday,health behaviour,Alcohol,Continuous,drinks +ALW_5A2,# of drinks - Monday,Number of drinks on Monday,health behaviour,Alcohol,Continuous,drinks +ALW_5A3,# of drinks - Sunday,Number of drinks on Tuesday,health behaviour,Alcohol,Continuous,drinks +ALW_5A4,# of drinks - Sunday,Number of drinks on Wednesday,health behaviour,Alcohol,Continuous,drinks +ALW_5A5,# of drinks - Sunday,Number of drinks on Thursday,health behaviour,Alcohol,Continuous,drinks +ALW_5A6,# of drinks - Sunday,Number of drinks on Friday,health behaviour,Alcohol,Continuous,drinks +ALW_5A7,# of drinks - Sunday,Number of drinks on Saturday,health behaviour,Alcohol,Continuous,drinks +ALWDDLY,Average daily consumption,Average daily alcohol consumption,health behaviour,Alcohol,Continuous,drinks/day +ALWDWKY,Drinks last week,Weekly consumption of alcohol,health behaviour,Alcohol,Continuous,drinks/week +CCC_031,Asthma,Do you have asthma?,chronic disease,Asthma,Categorical,N/A +CCC_051,Arthritis/Rheumatism,Do you have arthritis or rheumatism?,chronic disease,Arthritis/Rheumatism,Categorical,N/A +CCC_071,Hypertension,Do you have high blood pressure,chronic disease,Hypertension,Categorical,N/A +CCC_091,COPD/Emphysema,"Do you have COPD (eg bronchitis, emphysema)",chronic disease,COPD/emphysema,Categorical,N/A +CCC_101,Diabetes,Do you have diabetes,chronic disease,Diabetes,Categorical,N/A +CCC_111,Epilepsy,Do you have epilepsy?,chronic disease,Epilepsy,Categorical,N/A +CCC_121,Heart Disease,Do you have heart disease,chronic disease,Heart Disease,Categorical,N/A +CCC_131,Active Cancer,Do you have cancer,chronic disease,Cancer,Categorical,N/A +CCC_151,Stroke,Do you suffer from effects of stroke,chronic disease,Stroke,Categorical,N/A +CCC_171,Bowel disorder,Do you have a bowel disorder such as Crohn's disease or colitis?,chronic disease,Bowel disorder,Categorical,N/A +CCC_251,Chronic fatigue,Do you have chronic fatigue syndrome?,chronic disease,Chronic fatigue syndrome,Categorical,N/A +CCC_280,Mood disorder,Do you have a mood disorder,chronic disease,Mood disorder,Categorical,N/A +CCC_91E,Emphysema,Do you have emphysema?,chronic disease,Emphysema,Categorical,N/A +CCC_91F,COPD,Do you have COPD?,chronic disease,COPD,Categorical,N/A +DHH_OWN,Home ownership,Dwelling - owned by a member of hsld,Sociodemographic,Home ownership,Categorical,N/A +DHH_SEX,Sex,Sex,demographic,Sex,Categorical,N/A +DHHGAGE_A,Age,Age,demographic,Age,Categorical,Years +DHHGAGE_B,Age,Age,demographic,Age,Categorical,Years +DHHGAGE_cont,Age,Converted categorical age,demographic,Age,Continuous,Years +DHHGMS,Marital status,Marital status - (G),Sociodemographic,Marital Status,Categorical,N/A +EDUDR04,Highest education,Highest level/education,Sociodemographic,Education,Categorical,N/A +FINF1,Food insecurity 12M,Some food insecurity in past 12 months,Sociodemographic,Food security,Categorical,N/A +FSCDHFS,Food security,Household food security status - (D),Sociodemographic,Food security,Categorical,N/A +FSCDHFS2,HC food security,Household food security status - (HC),Sociodemographic,Food security,Categorical,N/A +FVCDCAR,Carrot consumption,Daily consumption - carrots (D),health behaviour,Fruits/vegetables,Continuous,N/A +FVCDFRU,Fruit consumption,Daily consumption - fruit - (D),health behaviour,Fruits/vegetables,Continuous,N/A +FVCDJUI,Juice consumption,Daily consumption - fruit juice (D),health behaviour,Fruits/vegetables,Continuous,N/A +FVCDPOT,Potato consumption,Daily consumption - potatoes (D),health behaviour,Fruits/vegetables,Continuous,N/A +FVCDSAL,Salad consumption,Daily consumption - green salad - (D),health behaviour,Fruits/vegetables,Continuous,N/A +FVCDTOT,Total fruit/veg consumption,Daily consumptoin - total fruits and veg. - (D),health behaviour,Fruits/vegetables,Continuous,N/A +FVCDVEG,Other veg consumption,Daily consumption other vegetables - (D),health behaviour,Fruits/vegetables,Continuous,N/A +GEN_01,Self perceived health,Self perceived health,health behaviour,Self-perceived health,Categorical,N/A +GEN_02A,Life satisfaction_cat,Satisfaction with life,health behaviour,Satisfaction with life,Categorical,N/A +GEN_02A2,Life satisfaction_cont,Satisfaction with life in general,health behaviour,Satisfaction with life,Continuous,N/A +GEN_02B,Self-perceived mental health,Self-perceived mental health,health behaviour,Mental health,Categorical,N/A +GEN_07,Self-perceived life stress,Self perceived life stress,health behaviour,Mental health,Categorical,N/A +GEN_09,Self-perceived work stress,Self perceived work stress,health behaviour,Mental health,Categorical,N/A +GEN_10,Sense of belonging ,Sense of belonging in the community,health behaviour,Mental health,Categorical,N/A +GEOGPRV,Province,Province of residence of respondent (G),Demographics,Province,Categorical,N/A +HUIDCOG,HUI Cognition,Cognition prob. - function code - (D),Health behaviour,Health utility index,Categorical,N/A +HUIDEMO,HUI Emotion,Emotional problems - function code - (D),Health behaviour,Health utility index,Categorical,N/A +HUIDHSI,Overall HUI,Health Utility Index (HUI3) - (D),Health behaviour,Health utility index,Continuous,N/A +HUIGDEX,HUI Dexterity,"Dexterity trouble - function code (D, G)",Health behaviour,Health utility index,Categorical,N/A +HUIGHER,HUI Hearing,"Hearing problems - function code (D, G)",Health behaviour,Health utility index,Categorical,N/A +HUIGMOB,HUI Mobility,"Mobility trouble - function code (D, G)",Health behaviour,Health utility index,Categorical,N/A +HUIGSPE,HUI Speech,"Speech trouble - function code - (D, G)",Health behaviour,Health utility index,Categorical,N/A +HUIGVIS,HUI Vision,"Vision trouble - function code - (D, G)",Health behaviour,Health utility index,Categorical,N/A +HUPDPAD,HUI Pain,Act. prevent/pain - function code - (D),Health behaviour,Health utility index,Categorical,N/A +HWTGHTM,Height,"Height (metres)/self-reported - (D,G)",Sociodemographic,Height,Continuous,meters +HWTGWTK,Weight,"Weight - kilograms (D, G)",Sociodemographic,Weight,Continuous,kg +HWTGBMI,BMI,"BMI / self-report - (D,G)",health behaviour,BMI,Continuous,kg/m2 +HWTGBMI_derived,Derived BMI,Derived Body Mass Index,health behaviour,BMI,Continuous,kg/m2 +INCDRCA,Household income distribution,Household income distribution - (D),Sociodemographic,Income,Categorical,N/A +INCDRPR,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D),Sociodemographic,Income,Categorical,N/A +INCDRRS,Household income distribution health region level,Hhld inc. distribution- hr level - (D),Sociodemographic,Income,Categorical,N/A +INCGPER,Personal Income,"Total pers. inc. from all sources (D, G)",Sociodemographic,Income,Categorical,N/A +MED_1P,Sleeping pills,"In the past month, did you take sleeping pills",Health behaviour,Sleep,Categorical,N/A +PAC_4A,Time walk work/school in week,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands",Health behaviour,Exercise,Categorical,hours/week +PAC_4B,Time bike work/school in week,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands",Health behaviour,Exercise,Categorical,hours/week +PAC_7,Walk to work/school,Walked to work or school / last 3 mo.,Health behaviour,Exercise,Categorical,N/A +PAC_7A,Number times walk work/school,No. of times/3 mo./walking work/school,Health behaviour,Exercise,Continuous,N/A +PAC_7B,Time walk work/school,Time spent - walking to go work/school,Health behaviour,Exercise,Categorical,mins +PAC_8,Bike to work/school,Bicycled to work or school / last 3 mo.,Health behaviour,Exercise,Categorical,N/A +PAC_8A,Number times bike work/school,No. of times/3 mo./bicycl. work/school,Health behaviour,Exercise,Continuous,times/3 mos. +PAC_8B,Time bike work/school,Time spent - walking to go work/school,Health behaviour,Exercise,Categorical,N/A +PACDEE,Physical activity,Daily energy expenditure - (D),health behaviour,Exercise,Continuous,METS +RAC_1,Difficulty activities,Has difficulty with activities,Health behaviour,Assistance/Difficulty,Categorical,N/A +RAC_2A,Reduction activities at home,Reduction - activities at home,Health behaviour,Assistance/Difficulty,Categorical,N/A +RAC_2B1,Reduction activities at school,Long-term cond. reduces act. - school,Health behaviour,Assistance/Difficulty,Categorical,N/A +RAC_2B2,Reduction activities at work,Reduction kind/amount act. - at work,Health behaviour,Assistance/Difficulty,Categorical,N/A +RAC_2C,Reduction other activities,Reduction - other activities,Health behaviour,Assistance/Difficulty,Categorical,N/A +RACAG5,Cause health problem,Cause of Health problem,Health behaviour,Health problems,Categorical,N/A +RACDIMP,Impact health problem,Impact of health problems,Health behaviour,Health problems,Categorical,N/A +RACDPAL,Particpation/activity limitation,Participation and activity limitation,Health behaviour,Health problems,Categorical,N/A +RACG5,Cause health problem,Cause of Health problem,Health behaviour,Health problems,Categorical,N/A +SDCFIMM,Immigrant status,Immigrant Status (D),Sociodemographic,Migration,Categorical,N/A +SDCGCBG ,Country of birth,Country of birth - (G),Sociodemographic,Migration,Categorical,N/A +SDCGCGT,Ethnicity,"Cultural or racial origin - (D, G)",Sociodemographic,Ethnicity,Categorical,N/A +SDCGRES ,Time in Canada,"Length/time in Canada since imm. (D, G)",Sociodemographic,Migration,Categorical,N/A +SLP_02,Trouble sleeping,Freq. - trouble sleeping,Health behaviour,Sleep,Categorical,N/A +SLP_02_A,Trouble sleeping,Freq. - trouble sleeping,Health behaviour,Sleep,Categorical,N/A +SLP_03,Sleep refreshing,Freq. - find sleep refreshing,Health behaviour,Sleep,Categorical,N/A +SLP_03_A,Sleep refreshing,Freq. - find sleep refreshing,Health behaviour,Sleep,Categorical,N/A +SLP_04,Difficulty awake,Freq. - diffficult to stay awake,Health behaviour,Sleep,Categorical,N/A +SLP_04_A,Difficulty awake,Freq. - diffficult to stay awake,Health behaviour,Sleep,Categorical,N/A +SLPG01,Hours sleep,No./hours spent sleeping each night,Health behaviour,Sleep,Categorical,N/A +SLPG01_A,Hours sleep,No./hours spent sleeping each night,Health behaviour,Sleep,Categorical,N/A +SLPG01_cont,Hours sleep,No./hours spent sleeping each night,Health behaviour,Sleep,Continuous,N/A +SMK_01A,s100,"In lifetime, smoked 100 or more cigarettes",health behaviour,Smoking,Categorical,N/A +SMK_05C,dayocc,# days smoked at least 1 cigarette,health behaviour,Smoking,Continuous,days +SMK_05D,evd,Ever smoked cigarettes daily - occasional smoker,health behaviour,Smoking,Categorical,N/A +SMK_06A_A,stpn,When did you stop smoking daily - never daily,health behaviour,Smoking,Categorical,Years +SMK_06A_B,stpn,When did you stop smoking daily - occasional,health behaviour,Smoking,Categorical,Years +SMK_06A_cont,stpn,When did you stop smoking daily - occasional,health behaviour,Smoking,Continuous,Years +SMK_09A_A,stpd,When did you stop smoking daily - former daily,health behaviour,Smoking,Categorical,Years +SMK_09A_B,stpd,When did you stop smoking daily - former daily,health behaviour,Smoking,Categorical,Years +SMK_09A_cont,stpd,When did you stop smoking daily - former daily,health behaviour,Smoking,Continuous,Years +SMK_204,cigdayd,# of cigarettes smoked daily - daily smoker,health behaviour,Smoking,Continuous,cigarettes +SMK_05B,cigdayo,# of cigarettes smoked daily - occasional smoker,health behaviour,Smoking,Continuous,cigarettes +SMK_208,cigdayf,# of cigarettes smoke each day - former daily,health behaviour,Smoking,Continuous,cigarettes +SMKDSTY,Smoking status,Type of smoker,health behaviour,Smoking,Categorical,N/A +SMKG01C_A,agec1 ,Age smoked first cigarette,health behaviour,Smoking,Categorical,Years +SMKG01C_B,agec1 ,Age smoked first cigarette,health behaviour,Smoking,Categorical,Years +SMKG01C_cont,agec1,Age smoked first cigarette,health behaviour,Smoking,Continuous,Years +SMKG06C,stpny,Years since stopped smoking daily - never daily,health behaviour,Smoking,Categorical,Years +SMKG09C,stpdy,Years since stopped smoking daily - former daily,health behaviour,Smoking,Categorical,Years +SMKG203_A,agecigd,Age started to smoke daily - daily smoker (G),health behaviour,Smoking,Categorical,Years +SMKG203_B,agecigd,Age started to smoke daily - daily smoker (G),health behaviour,Smoking,Categorical,Years +SMKG203_cont,agecigd,Age started to smoke daily - daily smoker (G),health behaviour,Smoking,Continuous,Years +SMKG207_A,agecigfd,Age started to smoke daily - former daily smoker,health behaviour,Smoking,Categorical,Years +SMKG207_B,agecigfd,Age started to smoke daily - former daily smoker,health behaviour,Smoking,Categorical,Years +SMKG207_cont,agecigfd,Age started to smoke daily - former daily smoker,health behaviour,Smoking,Continuous,Years +PackYears_derived,PackYears,Smoking pack-years,health behaviour,Smoking,Continuous,Years +Pct_time_derived,PctTime,Percentage of time in Canada,Sociodemographic,Migration,Continuous,% \ No newline at end of file diff --git a/vignettes/bllflow-workflow-demo.Rmd b/vignettes/bllflow-workflow-demo.Rmd new file mode 100644 index 00000000..6b99bd12 --- /dev/null +++ b/vignettes/bllflow-workflow-demo.Rmd @@ -0,0 +1,23 @@ +--- +title: "bllflow-workflow-demo" +author: "Rostyslav Vyuha" +date: "October 29, 2019" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## Creating the initial bllflow object with study specifications +Importing study specifications + read_csv("../inst/extdata/PBC-variableDetails.csv") +```{r} +variablesMSW <- read.csv("../inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv") +varDetails <- read.csv("../inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv") +``` + +```{r} +library(bllflow) +cchsBllFlow <- BLLFlow(variables = variablesMSW) +``` \ No newline at end of file From d208dfd9b923d4808963cc262fa17c5000146866 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 31 Oct 2019 15:22:29 -0400 Subject: [PATCH 060/123] [Feature] Added variable extraction functions --- NAMESPACE | 3 ++ R/bll-flow.R | 56 ++++++++++++++++++----------- R/recode-with-table.R | 5 +++ vignettes/bllflow-workflow-demo.Rmd | 2 +- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 04aa90b4..087486a2 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,6 +5,8 @@ S3method(CheckSmallCells,TableOne) S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) S3method(CreateVariableDetailsTemplate,BLLFlow) +S3method(GetVariables,BLLFlow) +S3method(GetVariables,default) S3method(RecWTable,default) S3method(WriteDDIPopulatedMSW,BLLFlow) S3method(WriteDDIPopulatedMSW,BLLFlowDDI) @@ -20,6 +22,7 @@ export(CreateTableOne) export(CreateVariableDetailsTemplate) export(GetDDIDescription) export(GetDDIVariables) +export(GetVariables) export(ReadDDI) export(ReadData) export(RecWTable) diff --git a/R/bll-flow.R b/R/bll-flow.R index b05fa7dc..685d1280 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -53,7 +53,7 @@ BLLFlow <- ddiList = NULL) { ddiHeader <- list() # Verify passed arg integrity for future functions - if (!is.null(data)) { + if (!is.null(dataList)) { for (singleDataIndex in 1:length(dataList)) { CheckIfDataFrame(dataList[[singleDataIndex]], names(dataList)[[singleDataIndex]]) } @@ -125,15 +125,46 @@ ReadData <- function(variables, dataName, pathToData) { # calculate the rows to set to null firstRowOfData <- read.csv(file = pathToData, nrows = 1) + varNamesForThisData <- GetVariables.default(variables, dataName) - variablesToReadList <- - variables[grepl(dataName, variables[[pkg.globals$argument.DatabaseStart]]), pkg.globals$argument.VariableStart] + columnsToKeep <- colnames(firstRowOfData) %in% varNamesForThisData + columnClasses <- sapply(columnsToKeep, BooleanConversion) + + dataToSave <- read.csv(file = pathToData, + colClasses = columnClasses) + + return(dataToSave) +} +BooleanConversion <- function(boolValue) { + retValue <- character() + if (boolValue) { + retValue <- NA + } else { + retValue <- "NULL" + } + + return(retValue) +} +#' @export +GetVariables <- function(variableSource = NULL, ...){ + UseMethod("GetVariables", variableSource) +} +#' @export +GetVariables.BLLFlow <- function(bllFlow, dataName){ + variables <- bllFlow[[pkg.globals$bllFlowContent.Variables]] + return(GetVariables.default(variables, dataName)) +} +#' @export +GetVariables.default <- function(variables, dataName){ + variablesToReadList <- + variables[grepl(dataName, variables[[pkg.globals$argument.DatabaseStart]]), ] + varNamesForThisData <- list() for (variableToReadRow in 1:nrow(variablesToReadList)) { variableToRead <- - as.character(variablesToReadList[variableToReadRow, ]) + as.character(variablesToReadList[variableToReadRow, pkg.globals$argument.VariableStart]) dataVariableBeingChecked <- character() if (!grepl("DerivedVar", variableToRead)) { if (grepl(dataName, variableToRead)) { @@ -157,20 +188,5 @@ ReadData <- function(variables, dataName, pathToData) { } varNamesForThisData <- unique(varNamesForThisData) - columnsToKeep <- colnames(firstRowOfData) %in% varNamesForThisData - columnClasses <- sapply(columnsToKeep, BooleanConversion) - - dataToSave <- read.csv(file = pathToData, - colClasses = columnClasses) - # Use numeric vector to read only those specific colums -} -BooleanConversion <- function(boolValue) { - retValue <- character() - if (boolValue) { - retValue <- NA - } else { - retValue <- "NULL" - } - - return(retValue) + return(varNamesForThisData) } \ No newline at end of file diff --git a/R/recode-with-table.R b/R/recode-with-table.R index d71c8754..e577ec50 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -145,6 +145,11 @@ RecodeCall <- if (!is.null(variables)) { variableDetails <- variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables,] + varsBeingRecoded <- as.character(unique(variableDetails[[pkg.globals$argument.Variables]])) + if (length(varsBeingRecoded) != length(variables)){ + missingVars <- setdiff(variables,varsBeingRecoded ) + warning(paste(missingVars),"is missing from variable details therefore cannot be recoded") + } } if (is.null(variableDetails[[pkg.globals$argument.VariableLabel]])) { variableDetails[[pkg.globals$argument.VariableLabel]] <- NA diff --git a/vignettes/bllflow-workflow-demo.Rmd b/vignettes/bllflow-workflow-demo.Rmd index 6b99bd12..43f22dfb 100644 --- a/vignettes/bllflow-workflow-demo.Rmd +++ b/vignettes/bllflow-workflow-demo.Rmd @@ -19,5 +19,5 @@ varDetails <- read.csv("../inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - ```{r} library(bllflow) -cchsBllFlow <- BLLFlow(variables = variablesMSW) +cchsBllFlow <- BLLFlow(variables = variablesMSW, variableDetails = varDetails) ``` \ No newline at end of file From e3aed08510efef335cc5d27f6951112a51bc4b92 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 4 Nov 2019 11:00:26 -0500 Subject: [PATCH 061/123] [Bug] Fixed different functions on same variable in same cycle --- R/recode-with-table.R | 188 ++++++++++++++++++++++-------------------- 1 file changed, 97 insertions(+), 91 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index e577ec50..761f1411 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -144,11 +144,15 @@ RecodeCall <- } else { if (!is.null(variables)) { variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables,] - varsBeingRecoded <- as.character(unique(variableDetails[[pkg.globals$argument.Variables]])) - if (length(varsBeingRecoded) != length(variables)){ - missingVars <- setdiff(variables,varsBeingRecoded ) - warning(paste(missingVars),"is missing from variable details therefore cannot be recoded") + variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables, ] + varsBeingRecoded <- + as.character(unique(variableDetails[[pkg.globals$argument.Variables]])) + if (length(varsBeingRecoded) != length(variables)) { + missingVars <- setdiff(variables, varsBeingRecoded) + warning( + paste(missingVars), + "is missing from variable details therefore cannot be recoded" + ) } } if (is.null(variableDetails[[pkg.globals$argument.VariableLabel]])) { @@ -178,7 +182,7 @@ RecodeCall <- allPossibleVarNames <- unique(as.character(variableDetails[[pkg.globals$argument.Variables]])) allVariablesDetected <- - variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]),] + variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]), ] recData <- RecodeColumns( @@ -280,13 +284,13 @@ RecodeColumns <- elseDefault) { # Split variables to process into recode map and func mapVariablesToProcess <- - variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] funcVariablesToProcess <- - variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] recVariablesToProcess <- - variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]),] + variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] labelList <- list() # Set interval if none is present @@ -303,10 +307,10 @@ RecodeColumns <- variableBeingChecked <- as.character(recVariablesToProcess[1, pkg.globals$argument.Variables]) rowsBeingChecked <- - recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] + recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] recVariablesToProcess <- - recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked,] - firstRow <- rowsBeingChecked[1, ] + recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] + firstRow <- rowsBeingChecked[1,] # Check for varialbe existance in data dataVariableBeingChecked <- GetDataVariableName( @@ -380,7 +384,7 @@ RecodeColumns <- recodedData[variableBeingChecked] <- elseDefault } rowsBeingChecked <- - rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else",] + rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else", ] if (nrow(rowsBeingChecked) > 0) { logTable <- rowsBeingChecked[, 0] logTable$valueTo <- NA @@ -390,7 +394,7 @@ RecodeColumns <- c(levels(recodedData[[variableBeingChecked]]), levels(rowsBeingChecked[[pkg.globals$argument.CatValue]])) for (row in 1:nrow(rowsBeingChecked)) { - rowBeingChecked <- rowsBeingChecked[row, ] + rowBeingChecked <- rowsBeingChecked[row,] # If cat go check for label and obtain it # regardless obtain unit and attach @@ -493,7 +497,7 @@ RecodeColumns <- # Process funcVars while (nrow(funcVariablesToProcess) > 0) { - firstRow <- funcVariablesToProcess[1,] + firstRow <- funcVariablesToProcess[1, ] firstRowVariableName <- as.character(firstRow[[pkg.globals$argument.Variables]]) # get name of var pass to @@ -572,7 +576,7 @@ UpdateVariableDetailsBasedOnVariableSheet <- function(variableSheet, variableDetails) { # remove conflicting columns from variable details variableDetails <- - variableDetails[, !( + variableDetails[,!( names(variableDetails) %in% c( pkg.globals$MSW.Variables.Columns.VariableType, pkg.globals$MSW.Variables.Columns.Label, @@ -600,7 +604,7 @@ UpdateVariableDetailsBasedOnVariableSheet <- ) # remove variables not present in variableSheet variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]],] + variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]], ] return(variableDetails) } @@ -640,85 +644,86 @@ RecodeDerivedVariables <- varStack <- c(varStack, variableBeingProcessed) # obtain rows to process and updated variables to Process variableRows <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingProcessed,] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingProcessed, ] variablesToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != variableBeingProcessed,] - - # Check for presence of feeder variables in data and in the variable being processed stack - feederVars <- - as.list(strsplit(as.character(variableRows[1,][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] - feederVars <- gsub("\\[|\\]", "", feederVars) - feederVars <- as.list(strsplit(feederVars, ","))[[1]] - feederVars <- sapply(feederVars, trimws) - usedFeederVars <- feederVars - feederVars <- setdiff(feederVars, names(recodedData)) - - # Check if the variable has a function to recode - nonFuncMissingVariables <- - setdiff(feederVars, unique(as.character(variablesToProcess[[pkg.globals$argument.Variables]]))) - if (length(nonFuncMissingVariables) > 0) { - warning( - paste( - variableBeingProcessed, - "could not be calculated because", - feederVars, - "was never recoded and is not a function variable" - ) - ) - varStack <- varStack[!(varStack == variableBeingProcessed)] + variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != variableBeingProcessed, ] + for (rowNum in 1:nrow(variableRows)) { + # Check for presence of feeder variables in data and in the variable being processed stack + feederVars <- + as.list(strsplit(as.character(variableRows[rowNum, ][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] + feederVars <- gsub("\\[|\\]", "", feederVars) + feederVars <- as.list(strsplit(feederVars, ","))[[1]] + feederVars <- sapply(feederVars, trimws) + usedFeederVars <- feederVars + feederVars <- setdiff(feederVars, names(recodedData)) - return( - list( - varStack = varStack, - labelList = labelList, - recodedData = recodedData, - variablesToProcess = variablesToProcess - ) - ) - } - # Check for presense in varStack - if (length(intersect(feederVars, varStack)) > 0) { - conflictVars <- intersect(feederVars, varStack) - stop( - paste( - conflictVars, - "is required to create", - variableBeingProcessed, - "but", - variableBeingProcessed, - "is needed to create", - conflictVars + # Check if the variable has a function to recode + nonFuncMissingVariables <- + setdiff(feederVars, unique(as.character(variablesToProcess[[pkg.globals$argument.Variables]]))) + if (length(nonFuncMissingVariables) > 0) { + warning( + paste( + variableBeingProcessed, + "could not be calculated because", + feederVars, + "was never recoded and is not a function variable" + ) ) - ) - } - - # Update varStack and recurse to get the feeder vars - for (oneFeeder in feederVars) { - # Need to check recoded data again in case a recursion added it - if (!oneFeeder %in% names(recodedData)) { - derivedReturn <- - RecodeDerivedVariables( - variableBeingProcessed = oneFeeder, - recodedData = recodedData, - variablesToProcess = variablesToProcess, - log = log, - printNote = printNote, - elseDefault = elseDefault, + varStack <- varStack[!(varStack == variableBeingProcessed)] + + return( + list( + varStack = varStack, labelList = labelList, - varStack = varStack + recodedData = recodedData, + variablesToProcess = variablesToProcess ) - varStack <- derivedReturn$varStack - labelList <- derivedReturn$labelList - recodedData <- derivedReturn$recodedData - variablesToProcess <- derivedReturn$variablesToProcess + ) } - } - - # Obtain the function for each row - append(labelList, CreateLabelListElement(variableRows)) - for (rowNum in 1:nrow(variableRows)) { - rowBeingChecked <- variableRows[rowNum, ] - funcCell <- as.character(rowBeingChecked[[pkg.globals$argument.CatValue]]) + # Check for presense in varStack + if (length(intersect(feederVars, varStack)) > 0) { + conflictVars <- intersect(feederVars, varStack) + stop( + paste( + conflictVars, + "is required to create", + variableBeingProcessed, + "but", + variableBeingProcessed, + "is needed to create", + conflictVars + ) + ) + } + + # Update varStack and recurse to get the feeder vars + for (oneFeeder in feederVars) { + # Need to check recoded data again in case a recursion added it + if (!oneFeeder %in% names(recodedData)) { + derivedReturn <- + RecodeDerivedVariables( + variableBeingProcessed = oneFeeder, + recodedData = recodedData, + variablesToProcess = variablesToProcess, + log = log, + printNote = printNote, + elseDefault = elseDefault, + labelList = labelList, + varStack = varStack + ) + varStack <- derivedReturn$varStack + labelList <- derivedReturn$labelList + recodedData <- derivedReturn$recodedData + variablesToProcess <- derivedReturn$variablesToProcess + } + } + + # Obtain the function for each row + append(labelList, CreateLabelListElement(variableRows)) + + rowBeingChecked <- variableRows[rowNum,] + funcCell <- + as.character(rowBeingChecked[[pkg.globals$argument.CatValue]]) functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] @@ -733,8 +738,9 @@ RecodeDerivedVariables <- ) recodedData[[variableBeingProcessed]] <- unlist(columnValue[["columnBeingAdded"]]) + + varStack <- varStack[!(varStack == variableBeingProcessed)] } - varStack <- varStack[!(varStack == variableBeingProcessed)] return( list( From 92913e2f0b31d56a2f1332a7b036910012561c66 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 4 Nov 2019 15:38:51 -0500 Subject: [PATCH 062/123] [Feature] Got long table working as well as summary table --- R/recode-with-table.R | 7 ++--- R/strings.R | 1 + R/table-one-long.R | 2 +- vignettes/bllflow-workflow-demo.Rmd | 41 ++++++++++++++++++++++++++++- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 761f1411..483b697e 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -138,20 +138,21 @@ RecodeCall <- appendNonDBColumns, log, varLabels) { + variableDetails[[pkg.globals$argument.Variables]] <- trimws(variableDetails[[pkg.globals$argument.Variables]]) if (!is.null(variables) && "data.frame" %in% class(variables)) { variableDetails <- UpdateVariableDetailsBasedOnVariableSheet(variableSheet = variables, variableDetails = variableDetails) } else { if (!is.null(variables)) { variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variables, ] + variableDetails[trimws(variableDetails[[pkg.globals$argument.Variables]]) %in% variables, ] varsBeingRecoded <- as.character(unique(variableDetails[[pkg.globals$argument.Variables]])) if (length(varsBeingRecoded) != length(variables)) { missingVars <- setdiff(variables, varsBeingRecoded) warning( - paste(missingVars), - "is missing from variable details therefore cannot be recoded" + paste(missingVars, + "is missing from variable details therefore cannot be recoded") ) } } diff --git a/R/strings.R b/R/strings.R index 7cfc0800..32cd5fee 100644 --- a/R/strings.R +++ b/R/strings.R @@ -47,6 +47,7 @@ pkg.globals$bllFlowContent.PopulatedVariableDetails <- "populatedVariableDetails pkg.globals$bllFlowContent.DDI <- "ddiList" pkg.globals$bllFlowContent.LongTable <- "longTable" pkg.globals$bllFlowContent.AdditionalMetaData <- "additionalDDIMetaData" +pkg.globals$bllFlowContent.WorkingData <- "workingData" # MSW Column Names pkg.globals$MSW.Variables.Columns.Variable <- "variable" diff --git a/R/table-one-long.R b/R/table-one-long.R index b117b54f..5bfdf9b8 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -124,7 +124,7 @@ CreateTableOne.BLLFlow <- function(bllFlowModel, # ----Step 2: Create the tableone ---- if (is.null(strata)) { finalTable <- - tableone::CreateTableOne(data = bllFlowModel[[pkg.globals$bllFlowContent.Data]], + tableone::CreateTableOne(data = bllFlowModel[[pkg.globals$bllFlowContent.WorkingData]], vars = vars, factorVars = factorVars) } else{ diff --git a/vignettes/bllflow-workflow-demo.Rmd b/vignettes/bllflow-workflow-demo.Rmd index 43f22dfb..bdd1d6bb 100644 --- a/vignettes/bllflow-workflow-demo.Rmd +++ b/vignettes/bllflow-workflow-demo.Rmd @@ -15,9 +15,48 @@ Importing study specifications ```{r} variablesMSW <- read.csv("../inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv") varDetails <- read.csv("../inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv") +cchs2001 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2001-c1-1-general-file_F1.csv", nrows = 200) +cchs2003 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2003-c2-1-GeneralFile_F1.csv", nrows = 200) +cchs2005 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2005-c3-1-main-file_F1.csv", nrows = 200) +cchs2007 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-E-2007-2008-AnnualComponent_F1.csv", nrows = 200) +cchs2009 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/CCHS-82M0013-E-2009-2010-Annualcomponent_F1.csv", nrows = 200) +cchs2010 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/CCHS-82M0013-E-2010-AnnualComponent_F1.csv", nrows = 200) +cchs2011 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2011-2012-Annual-component_F1.csv", nrows = 200) +cchs2012 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2012-Annual-component_F1.csv", nrows = 200) +cchs2013 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2013-2014-Annual-component_F1.csv", nrows = 200) +cchs2014 <- read.csv("~/Work/R/bllFlow/OneDrive_1_8-9-2019/cchs-82M0013-E-2014-Annual-component_F1.csv", nrows = 200) +``` +## Recode the data +```{r} +cchs2001Recoded <- RecWTable(dataSource = cchs2001, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2001-c1-1-general-file", printNote = FALSE) +cchs2003Recoded <- RecWTable(dataSource = cchs2003, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2003-c2-1-General File", printNote = FALSE) +cchs2005Recoded <- RecWTable(dataSource = cchs2005, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2005-c3-1-main-file", printNote = FALSE) +cchs2007Recoded <- RecWTable(dataSource = cchs2007, variableDetails = varDetails, datasetName = "cchs-E-2007-2008-AnnualComponent", printNote = FALSE) +cchs2009Recoded <- RecWTable(dataSource = cchs2009, variableDetails = varDetails, datasetName = "CCHS-82M0013-E-2009-2010-Annualcomponent", printNote = FALSE) +cchs2010Recoded <- RecWTable(dataSource = cchs2010, variableDetails = varDetails, datasetName = "CCHS-82M0013-E-2010-AnnualComponent", printNote = FALSE) +cchs2011Recoded <- RecWTable(dataSource = cchs2011, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2011-2012-Annual-component", printNote = FALSE) +cchs2012Recoded <- RecWTable(dataSource = cchs2012, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2012-Annual-component", printNote = FALSE) +cchs2013Recoded <- RecWTable(dataSource = cchs2013, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2013-2014-Annual-component", printNote = FALSE) +cchs2014Recoded <- RecWTable(dataSource = cchs2014, variableDetails = varDetails, datasetName = "cchs-82M0013-E-2014-Annual-component", printNote = FALSE) + +``` +## Combine Data +```{r, warning=FALSE} +workingData <- bind_rows(cchs2001Recoded, cchs2003Recoded) +workingData <- bind_rows(workingData, cchs2005Recoded) +workingData <- bind_rows(workingData, cchs2007Recoded) +workingData <- bind_rows(workingData, cchs2009Recoded) +workingData <- bind_rows(workingData, cchs2010Recoded) +workingData <- bind_rows(workingData, cchs2011Recoded) +workingData <- bind_rows(workingData, cchs2012Recoded) +workingData <- bind_rows(workingData, cchs2013Recoded) +workingData <- bind_rows(workingData, cchs2014Recoded) ``` ```{r} library(bllflow) cchsBllFlow <- BLLFlow(variables = variablesMSW, variableDetails = varDetails) -``` \ No newline at end of file +cchsBllFlow[["workingData"]] <- workingData +tmpTable <- CreateTableOne(cchsBllFlow) +longTable <- SummaryDataLong(tmpTable) +``` From 0024671cad147bd6fc4156924bcd852e9d24d6be Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Fri, 8 Nov 2019 11:10:44 -0500 Subject: [PATCH 063/123] add role (#65) * [feature] proposal for 'role' * edits to roles * Update PBC-variables.csv * [feature] clarified how roles can be used * [feature] update description of 'role' --- inst/extdata/PBC-variables.csv | 24 +++++++++++++++++------- vignettes/b_model_specification.Rmd | 15 ++++++++++++++- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/inst/extdata/PBC-variables.csv b/inst/extdata/PBC-variables.csv index a2f7b2b0..99b4b214 100644 --- a/inst/extdata/PBC-variables.csv +++ b/inst/extdata/PBC-variables.csv @@ -1,7 +1,17 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier,operations -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete,"data cleaning, finish data cleaning, impute missing data, transform data" -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete,"transform data" -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing,"finish data cleaning,transform data" \ No newline at end of file +variable,dataStart,labelLong,label,units,type,variableType,algorithm,role,required,centre,interaction,RCS,dummy,impute,min,max,outlier,operations +age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,"predictor, table1",TRUE,TRUE,NA,4,NA,FALSE,40,70,delete,"data cleaning, finish data cleaning, impute missing data, transform data" +sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,"strata, table1-strata",TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete,transform data +bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,"predictor, table1",FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" +albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,"predictor, table2",FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" +protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,"predictor, table3",FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" +edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,"predictor, table4",FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing,"finish data cleaning,transform data" +alk.phos,pbc,alkaline phosphotase,alkaline phosphotase (U/liter),,U/liter,cont,,"intermdiate, table1",,,,,,,,,, +ascites,pbc,presence of ascites,presence of ascites,,NA,cat,,table1,,,,,,,,,, +hepato,pbc,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,,NA,cat,,table1,,,,,,,,,, +platelet,pbc,platelet count,platelet count in thousadnds per microliter of blood,,thousand/microliter of blood,cont,,table1,,,,,,,,,, +spiders,pbc,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,,NA,cat,,table1,,,,,,,,,, +stage,pbc,histologic stage of disease,histologic stage of disease (needs biopsy),,NA,cat,,table1,,,,,,,,,, +status,pbc,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",,NA,cat,,,,,,,,,,,, +time,pbc,number of days,"number of days between registration and the earlier of death, +transplantion, or study analysis in July, 1986",,days,cont,PBC_demo,outcome,,,,,,,,,, +trt,pbc,trt,"1/2/NA for D-penicillmain, placebo, not randomised",,NA,cat,,filer,,,,,,,,,, \ No newline at end of file diff --git a/vignettes/b_model_specification.Rmd b/vignettes/b_model_specification.Rmd index 732ec061..dc0be435 100644 --- a/vignettes/b_model_specification.Rmd +++ b/vignettes/b_model_specification.Rmd @@ -61,6 +61,19 @@ _bllflow_ supports importing metadata into the workbook from: similar packages); or, - manually added added to the MSW. +### Variable roles +`bllflow` can assign one or more roles to each variable in the data. We add at least one role for each variable that is used in our studies. Roles can be defined for any purpose, and once defined they can be re-used. For example, building a new model using the role 'predictor' to select variables, or generating a Table 1 using a newly defined role 'table-1'. You can define your own role or use suggested roles below. + +Suggested roles include: + +- predictor - a variable or feature used in a model +- outcome-primary - there should be only one primary outcome +- outcome-secondary - a secondary outcome +- strata - used to stratify the data for development of a model, e.g., create different models for males and females, or split the sample into development and validation sub-samples. +- descriptor - used to describe a study population, as in Table 1 or 2, or report the performance of a model +- intermediate - used only to create other (derived) variables +- filter - inclusion or exclusion criteria to create a study population + ### Example 2: Variable details The `variableDetails.csv` contains additional variable details. For categorical variables there are rows for each category (factor). Included for each row are factor levels and lablels. Again, this information can be added through helper functions if there is a DDI file or the labels are already in your data. @@ -94,4 +107,4 @@ pbcModel <- BLLFlow(pbc, variables, variableDetails) The `pbcModel` contains `pbc`, `variables` and `variableDetails` along with three additional objects used to support model building. ```{r the pbcModel} attributes(pbcModel) -``` \ No newline at end of file +``` From 69096d965b028e58bf7ae4f90d2957d25f400969 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 12 Nov 2019 11:24:03 -0500 Subject: [PATCH 064/123] [Feature] Readded ReadData nrow argument --- R/bll-flow.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/bll-flow.R b/R/bll-flow.R index 685d1280..a9302d4f 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -121,7 +121,7 @@ BLLFlow <- } #' @export -ReadData <- function(variables, dataName, pathToData) { +ReadData <- function(variables, dataName, pathToData, nrows = -1) { # calculate the rows to set to null firstRowOfData <- read.csv(file = pathToData, nrows = 1) @@ -131,7 +131,7 @@ ReadData <- function(variables, dataName, pathToData) { columnClasses <- sapply(columnsToKeep, BooleanConversion) dataToSave <- read.csv(file = pathToData, - colClasses = columnClasses) + colClasses = columnClasses, nrows = nrows) return(dataToSave) } From afe8667d68a0a702c4c7725f45acd0d977627482 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 18 Nov 2019 10:23:18 -0500 Subject: [PATCH 065/123] [Feature] Skeleton for recipy get and set --- NAMESPACE | 2 ++ NEWS.md | 3 +++ R/bll-flow.R | 2 +- R/recipy-utility.R | 16 ++++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 R/recipy-utility.R diff --git a/NAMESPACE b/NAMESPACE index 087486a2..94a144fc 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -22,12 +22,14 @@ export(CreateTableOne) export(CreateVariableDetailsTemplate) export(GetDDIDescription) export(GetDDIVariables) +export(GetRecipy) export(GetVariables) export(ReadDDI) export(ReadData) export(RecWTable) export(RunModule) export(SetDataLabels) +export(SetRecipy) export(SummaryDataLong) export(UpdateMSW) export(WriteDDIPopulatedMSW) diff --git a/NEWS.md b/NEWS.md index d3f20a43..52caf592 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,7 @@ # bllFlow (development version) +## Temp dump of changes +- ReadData function +- changed table one to use working data # bllflow 0.1.2 (current build) diff --git a/R/bll-flow.R b/R/bll-flow.R index a9302d4f..64fd90bc 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -189,4 +189,4 @@ GetVariables.default <- function(variables, dataName){ varNamesForThisData <- unique(varNamesForThisData) return(varNamesForThisData) -} \ No newline at end of file +} diff --git a/R/recipy-utility.R b/R/recipy-utility.R new file mode 100644 index 00000000..ee3dbd09 --- /dev/null +++ b/R/recipy-utility.R @@ -0,0 +1,16 @@ +#' Returns a recipy attached to bllflow if one is not attached constructs one +#' based on variables sheet +#' @export +GetRecipy <- function(){ + +} +#' Sets the recipy for the bllflow object +#' TODO add a way to verify that the recipy works with the bllflow object +#' @export +SetRecipy <- function(){ + +} +#' Creates recipy from variable sheet +ConstructRecipy <- function(){ + +} \ No newline at end of file From ab2dc5d2db993cca8297178aadc3a06d1e196f8d Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 18 Nov 2019 14:30:01 -0500 Subject: [PATCH 066/123] [Feature] Partial snake_case variable and function name conversion --- NEWS.md | 4 + R/recode-with-table.R | 546 +++++++++++++++++++++--------------------- R/small-cell-check.R | 228 +++++++++--------- R/table-one-long.R | 416 ++++++++++++++++---------------- R/util-funcs.R | 108 ++++----- 5 files changed, 653 insertions(+), 649 deletions(-) diff --git a/NEWS.md b/NEWS.md index 52caf592..d543af45 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,6 +2,10 @@ ## Temp dump of changes - ReadData function - changed table one to use working data +- changed naming convention to snake case in recode-wit-table.R +- changed naming convention to snake case in small-cell-check.R +- changed naming convention to snake case in table-one-long.R +- changed naming convention to snake case in util-funcs.R # bllflow 0.1.2 (current build) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 483b697e..6aa7344c 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -1,21 +1,21 @@ # Environment for custom script functions #' @title Recode with Table #' -#' @name RecWTable +#' @name rec_w_table #' -#' @description \code{RecWTable()} recodes values of variable, where vaiable selection and recoding rules are describe in a reference table (variableDetails). Similar to \code{sjmisc::rec()}. Uses the same rule syntax as \code{sjmisc::rec()}, except rules are in a table as opposed to arguments in the function. +#' @description \code{rec_w_table()} recodes values of variable, where vaiable selection and recoding rules are describe in a reference table (variable_details). Similar to \code{sjmisc::rec()}. Uses the same rule syntax as \code{sjmisc::rec()}, except rules are in a table as opposed to arguments in the function. #' #' @seealso \code{sjmisc::rec()} #' @export -RecWTable <- function(dataSource = NULL, ...) { - UseMethod("RecWTable", dataSource) +rec_w_table <- function(data_source = NULL, ...) { + UseMethod("rec_w_table", data_source) } #' @title Recode with Table #' -#' @name RecWTable.default +#' @name rec_w_table.default #' -#' @details The \code{variableDetails} dataframe has the following variables: +#' @details The \code{variable_details} dataframe has the following variables: #' \describe{ #' \item{variable}{name of new (mutated) variable that is recoded} #' \item{databaseStart}{name of dataframe with original variables (\code{variableStart}) to be recoded} @@ -25,7 +25,7 @@ RecWTable <- function(dataSource = NULL, ...) { #' \item{... add remaining variables (headers) here} #' } #' -#' Each row in \code{variableDetails} comprises one category in a newly transformed variable. The rules for each category the new variable are a string in \code{recFrom} and value in \code{recTo}. These recode pairs are the same syntax as \code{sjmisc::rec()}, except in \code{sjmisc::rec()} the pairs are a string for the function attibute \code{rec =}, separated by '\code{=}'. For example in \code{RecWTable} \code{variableDetails$recFrom = 2; variableDetails$recTo = 4} is the same as \code{sjmisc::rec(rec = "2=4")}. +#' Each row in \code{variable_details} comprises one category in a newly transformed variable. The rules for each category the new variable are a string in \code{recFrom} and value in \code{recTo}. These recode pairs are the same syntax as \code{sjmisc::rec()}, except in \code{sjmisc::rec()} the pairs are a string for the function attibute \code{rec =}, separated by '\code{=}'. For example in \code{rec_w_table} \code{variable_details$recFrom = 2; variable_details$recTo = 4} is the same as \code{sjmisc::rec(rec = "2=4")}. #' #' the pairs are obtained from the RecFrom and RecTo columns #' \describe{ @@ -39,79 +39,79 @@ RecWTable <- function(dataSource = NULL, ...) { #' \item{\code{NA}'s}{\code{\link{NA}} values are allowed both as old and new value, e.g. \code{recFrom "NA"; recTo = 1. or "recFrom = "3:5"; recTo = "NA"} (recodes all NA into 1, and all values from 3 to 5 into NA in the new variable)} #' #' -#' @param dataSource A dataframe containing the variables to be recoded. -#' @param variableDetails A dataframe containing the specifications (rules) for recoding. -#' @param datasetName String, the name of the dataset containing the variables to be recoded. -#' @param elseValue Value (string, number, integer, logical or NA) that is used to replace any values that are outside the specified ranges (no rules for recoding). -#' @param appendToData Logical, if \code{TRUE} (default), recoded variables will be appended to the dataSource. +#' @param data_source A dataframe containing the variables to be recoded. +#' @param variable_details A dataframe containing the specifications (rules) for recoding. +#' @param dataset_name String, the name of the dataset containing the variables to be recoded. +#' @param else_value Value (string, number, integer, logical or NA) that is used to replace any values that are outside the specified ranges (no rules for recoding). +#' @param append_to_data Logical, if \code{TRUE} (default), recoded variables will be appended to the data_source. #' @param log Logical, if \code{FALSE} (default), a log of recoding will not be printed. -#' @param printNote Logical, if \code{FALSE} (default), will not print the content inside the `Note`` column of the variable beinng recoded. -#' @param appendNonDBColumns Logical, if \code{FALSE} (default), will not append variables if missing in `dataSource`` but present in `variableDetails`. +#' @param print_note Logical, if \code{FALSE} (default), will not print the content inside the `Note`` column of the variable beinng recoded. +#' @param append_non_DB_columns Logical, if \code{FALSE} (default), will not append variables if missing in `data_source`` but present in `variable_details`. #' @param variables character vector containing variable names to recode or a variables csv containing additional variable info #' @param labels named character vector of variable and their label #' -#' @return a dataframe that is recoded according to rules in variableDetails. +#' @return a dataframe that is recoded according to rules in variable_details. #' @export -RecWTable.default <- - function(dataSource, - variableDetails, - datasetName, - elseValue = NA, - appendToData = FALSE, +rec_w_table.default <- + function(data_source, + variable_details, + dataset_name, + else_value = NA, + append_to_data = FALSE, log = FALSE, - printNote = TRUE, + print_note = TRUE, variables = NULL, - varLabels = NULL, - customFunctionPath = NULL) { + var_labels = NULL, + custom_function_path = NULL) { # If custom Functions are passed create new environment and source - if (!is.null(customFunctionPath)) { - source(customFunctionPath) + if (!is.null(custom_function_path)) { + source(custom_function_path) } # ---- Step 1: Detemine if the passed data is a list or single database - appendNonDBColumns <- FALSE - if (class(dataSource) == "list" && - length(datasetName) == length(dataSource)) { - for (dataName in datasetName) { + append_non_DB_columns <- FALSE + if (class(data_source) == "list" && + length(dataset_name) == length(data_source)) { + for (data_name in dataset_name) { # ---- Step 2A: Verify that the passed name exists in the passed data - if (!is.null(dataSource[[dataName]])) { - dataSource[[dataName]] <- RecodeCall( + if (!is.null(data_source[[data_name]])) { + data_source[[data_name]] <- recode_call( variables = variables, - dataSource = dataSource[[dataName]], - datasetName = datasetName, - printNote = printNote, - elseValue = elseValue, - variableDetails = variableDetails, - appendToData = appendToData, - appendNonDBColumns = appendNonDBColumns, + data_source = data_source[[data_name]], + dataset_name = dataset_name, + print_note = print_note, + else_value = else_value, + variable_details = variable_details, + append_to_data = append_to_data, + append_non_DB_columns = append_non_DB_columns, log = log, - varLabels = varLabels + var_labels = var_labels ) } else{ stop( paste( "The data", - dataName, - "is missing from the passed list please verify the names are correct in the dataSource list and the datasetName list" + data_name, + "is missing from the passed list please verify the names are correct in the data_source list and the dataset_name list" ) ) } } - } else if ("data.frame" %in% class(dataSource) && - length(datasetName) == 1) { - dataSource <- RecodeCall( + } else if ("data.frame" %in% class(data_source) && + length(dataset_name) == 1) { + data_source <- recode_call( variables = variables, - dataSource = dataSource, - datasetName = datasetName, - printNote = printNote, - elseValue = elseValue, - variableDetails = variableDetails, - appendToData = appendToData, - appendNonDBColumns = appendNonDBColumns, + data_source = data_source, + dataset_name = dataset_name, + print_note = print_note, + else_value = else_value, + variable_details = variable_details, + append_to_data = append_to_data, + append_non_DB_columns = append_non_DB_columns, log = log, - varLabels = varLabels + var_labels = var_labels ) } else{ stop( @@ -123,127 +123,127 @@ RecWTable.default <- ) } - return(dataSource) + return(data_source) } # Creates inputs and runs recode functions -RecodeCall <- +recode_call <- function(variables, - dataSource, - datasetName, - printNote, - elseValue, - variableDetails, - appendToData , - appendNonDBColumns, + data_source, + dataset_name, + print_note, + else_value, + variable_details, + append_to_data , + append_non_DB_columns, log, - varLabels) { - variableDetails[[pkg.globals$argument.Variables]] <- trimws(variableDetails[[pkg.globals$argument.Variables]]) + var_labels) { + variable_details[[pkg.globals$argument.Variables]] <- trimws(variable_details[[pkg.globals$argument.Variables]]) if (!is.null(variables) && "data.frame" %in% class(variables)) { - variableDetails <- - UpdateVariableDetailsBasedOnVariableSheet(variableSheet = variables, variableDetails = variableDetails) + variable_details <- + update_variable_details_based_on_variable_sheet(variableSheet = variables, variable_details = variable_details) } else { if (!is.null(variables)) { - variableDetails <- - variableDetails[trimws(variableDetails[[pkg.globals$argument.Variables]]) %in% variables, ] - varsBeingRecoded <- - as.character(unique(variableDetails[[pkg.globals$argument.Variables]])) - if (length(varsBeingRecoded) != length(variables)) { - missingVars <- setdiff(variables, varsBeingRecoded) + variable_details <- + variable_details[trimws(variable_details[[pkg.globals$argument.Variables]]) %in% variables, ] + vars_being_recoded <- + as.character(unique(variable_details[[pkg.globals$argument.Variables]])) + if (length(vars_being_recoded) != length(variables)) { + missing_vars <- setdiff(variables, vars_being_recoded) warning( - paste(missingVars, + paste(missing_vars, "is missing from variable details therefore cannot be recoded") ) } } - if (is.null(variableDetails[[pkg.globals$argument.VariableLabel]])) { - variableDetails[[pkg.globals$argument.VariableLabel]] <- NA + if (is.null(variable_details[[pkg.globals$argument.VariableLabel]])) { + variable_details[[pkg.globals$argument.VariableLabel]] <- NA } - if (is.null(variableDetails[[pkg.globals$argument.VariableLabelShort]])) { - variableDetails[[pkg.globals$argument.VariableLabelShort]] <- NA + if (is.null(variable_details[[pkg.globals$argument.VariableLabelShort]])) { + variable_details[[pkg.globals$argument.VariableLabelShort]] <- NA } } - if (!is.null(varLabels)) { - if (is.null(names(varLabels))) { + if (!is.null(var_labels)) { + if (is.null(names(var_labels))) { stop( - "The passed labels was not a named vector please follow the c(varName = varLalbel) format" + "The passed labels was not a named vector please follow the c(var_name = varLalbel) format" ) } else{ - if (is.factor(variableDetails[[pkg.globals$argument.VariableLabelShort]])) { - variableDetails[[pkg.globals$argument.VariableLabelShort]] <- - as.character(variableDetails[[pkg.globals$argument.VariableLabelShort]]) + if (is.factor(variable_details[[pkg.globals$argument.VariableLabelShort]])) { + variable_details[[pkg.globals$argument.VariableLabelShort]] <- + as.character(variable_details[[pkg.globals$argument.VariableLabelShort]]) } - for (varName in names(varLabels)) { - variableDetails[variableDetails[[pkg.globals$argument.Variables]] == varName, pkg.globals$argument.VariableLabelShort] <- - varLabels[[varName]] + for (var_name in names(var_labels)) { + variable_details[variable_details[[pkg.globals$argument.Variables]] == var_name, pkg.globals$argument.VariableLabelShort] <- + var_labels[[var_name]] } } } - allPossibleVarNames <- - unique(as.character(variableDetails[[pkg.globals$argument.Variables]])) - allVariablesDetected <- - variableDetails[grepl(datasetName , variableDetails[[pkg.globals$argument.DatabaseStart]]), ] + all_possible_var_names <- + unique(as.character(variable_details[[pkg.globals$argument.Variables]])) + all_variables_detected <- + variable_details[grepl(dataset_name , variable_details[[pkg.globals$argument.DatabaseStart]]), ] - recData <- - RecodeColumns( - dataSource = dataSource, - variablesToProcess = allVariablesDetected, - dataName = datasetName, + rec_data <- + recode_columns( + data_source = data_source, + variables_to_process = all_variables_detected, + data_name = dataset_name, log = log, - printNote = printNote, - elseDefault = elseValue + print_note = print_note, + else_default = else_value ) - if (appendNonDBColumns) { - missedVariables <- - allPossibleVarNames[!allPossibleVarNames %in% unique(as.character(allVariablesDetected[, pkg.globals$argument.Variables]))] - for (missedVariableName in missedVariables) { - recData[[missedVariableName]] <- NA + if (append_non_DB_columns) { + missed_variables <- + all_possible_var_names[!all_possible_var_names %in% unique(as.character(all_variables_detected[, pkg.globals$argument.Variables]))] + for (missed_variable_name in missed_variables) { + rec_data[[missed_variable_name]] <- NA } } - if (appendToData) { - dataSource <- cbind(dataSource, recData) + if (append_to_data) { + data_source <- cbind(data_source, rec_data) } else{ - dataSource <- recData + data_source <- rec_data } - return(dataSource) + return(data_source) } #' @title Get Data Variable Name #' -#' @name GetDataVariableName +#' @name get_data_variable_name #' -#' @description Retrieves the name of the column inside dataSource to use for calculations +#' @description Retrieves the name of the column inside data_source to use for calculations #' -#' @param dataName name of the database being checked -#' @param rowBeingChecked the row from variable details that contains information on this variables -#' @param variableBeingChecked the name of the recoded variable +#' @param data_name name of the database being checked +#' @param row_being_checked the row from variable details that contains information on this variables +#' @param variable_being_checked the name of the recoded variable #' -#' @return the dataSource equivalant of variableBeingChecked -GetDataVariableName <- - function(dataName, +#' @return the data_source equivalant of variable_being_checked +get_data_variable_name <- + function(data_name, data, - rowBeingChecked, - variableBeingChecked) { - dataVariableBeingChecked <- character() - varStartNames <- - as.character(rowBeingChecked[[pkg.globals$argument.VariableStart]]) + row_being_checked, + variable_being_checked) { + data_variable_being_checked <- character() + var_start_names <- + as.character(row_being_checked[[pkg.globals$argument.VariableStart]]) - if (grepl(dataName, varStartNames)) { - varStartNamesList <- as.list(strsplit(varStartNames, ",")[[1]]) + if (grepl(data_name, var_start_names)) { + var_start_names_list <- as.list(strsplit(var_start_names, ",")[[1]]) # Find exact var Name - for (varName in varStartNamesList) { - if (grepl(dataName, varName)) { + for (var_name in var_start_names_list) { + if (grepl(data_name, var_name)) { # seperate dataname from the var name - dataVariableBeingChecked <- - as.list(strsplit(varName, "::")[[1]])[[2]] + data_variable_being_checked <- + as.list(strsplit(var_name, "::")[[1]])[[2]] } } - } else if (grepl("\\[", varStartNames)) { - dataVariableBeingChecked <- - stringr::str_match(varStartNames, "\\[(.*?)\\]")[, 2] + } else if (grepl("\\[", var_start_names)) { + data_variable_being_checked <- + stringr::str_match(var_start_names, "\\[(.*?)\\]")[, 2] } else{ stop( paste( @@ -251,82 +251,82 @@ GetDataVariableName <- ", row, "for the variable", - variableBeingChecked, + variable_being_checked, " Does not contain the database being checked(", - dataName, + data_name, ") in its variable start the default is also missing. Please double check if this variable should have this", - dataName, + data_name, "included in its databaseStart" ) ) } - return(dataVariableBeingChecked) + return(data_variable_being_checked) } -#' RecodeColumns +#' recode_columns #' -#' Recodes columns from passed row returns just table with those columns and same rows as the dataSource +#' Recodes columns from passed row returns just table with those columns and same rows as the data_source #' -#' @param dataSource The source database -#' @param variablesToProcess rows from variable details that are applicable to this DB +#' @param data_source The source database +#' @param variables_to_process rows from variable details that are applicable to this DB #' @param log The option of printing log -#' @param printNote the option of printing the note columns +#' @param print_note the option of printing the note columns #' #' @return Returns recoded and labeled data -RecodeColumns <- - function(dataSource, - variablesToProcess, - dataName, +recode_columns <- + function(data_source, + variables_to_process, + data_name, log, - printNote, - elseDefault) { + print_note, + else_default) { # Split variables to process into recode map and func - mapVariablesToProcess <- - variablesToProcess[grepl("map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] + map_variables_to_process <- + variables_to_process[grepl("map::", variables_to_process[[pkg.globals$argument.CatValue]]), ] - funcVariablesToProcess <- - variablesToProcess[grepl("Func::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] + func_variables_to_process <- + variables_to_process[grepl("Func::", variables_to_process[[pkg.globals$argument.CatValue]]), ] - recVariablesToProcess <- - variablesToProcess[!grepl("Func::|map::", variablesToProcess[[pkg.globals$argument.CatValue]]), ] + rec_variables_to_process <- + variables_to_process[!grepl("Func::|map::", variables_to_process[[pkg.globals$argument.CatValue]]), ] - labelList <- list() + label_list <- list() # Set interval if none is present intervalPresent <- TRUE validIntervals <- c("[,]", "[,)", "(,]") intervalDefault <- "[,)" - recodedData <- dataSource[, 0] - if (is.null(recVariablesToProcess[[pkg.globals$argument.Interval]])) { + recodedData <- data_source[, 0] + if (is.null(rec_variables_to_process[[pkg.globals$argument.Interval]])) { intervalPresent <- FALSE } # Loop through the rows of recode vars - while (nrow(recVariablesToProcess) > 0) { - variableBeingChecked <- - as.character(recVariablesToProcess[1, pkg.globals$argument.Variables]) + while (nrow(rec_variables_to_process) > 0) { + variable_being_checked <- + as.character(rec_variables_to_process[1, pkg.globals$argument.Variables]) rowsBeingChecked <- - recVariablesToProcess[recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] - recVariablesToProcess <- - recVariablesToProcess[!recVariablesToProcess[[pkg.globals$argument.Variables]] == variableBeingChecked, ] + rec_variables_to_process[rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked, ] + rec_variables_to_process <- + rec_variables_to_process[!rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked, ] firstRow <- rowsBeingChecked[1,] # Check for varialbe existance in data - dataVariableBeingChecked <- - GetDataVariableName( - dataName = dataName, - rowBeingChecked = firstRow, - variableBeingChecked = variableBeingChecked, - data = dataSource + data_variable_being_checked <- + get_data_variable_name( + data_name = data_name, + row_being_checked = firstRow, + variable_being_checked = variable_being_checked, + data = data_source ) - if (is.null(dataSource[[dataVariableBeingChecked]])) { + if (is.null(data_source[[data_variable_being_checked]])) { warning( paste( "Data", - dataName, + data_name, "does not contain the variable", - dataVariableBeingChecked + data_variable_being_checked ) ) } else{ @@ -340,7 +340,7 @@ RecodeColumns <- paste( singleFrom, "was detected more then once in", - variableBeingChecked, + variable_being_checked, "please make sure only one from value is being recoded" ) ) @@ -349,40 +349,40 @@ RecodeColumns <- } # Set factor for all recode values - labelList[[variableBeingChecked]] <- + label_list[[variable_being_checked]] <- CreateLabelListElement(rowsBeingChecked) - elseValue <- + else_value <- as.character(rowsBeingChecked[rowsBeingChecked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) - if (length(elseValue) == 1 && - !isEqual(elseValue, "character(0)")) { - elseValue <- - RecodeVariableNAFormating(elseValue, labelList[[variableBeingChecked]]$type) - if (isEqual(elseValue, "copy")) { - dataVariableBeingChecked <- - GetDataVariableName( - dataName = dataName, - rowBeingChecked = firstRow, - variableBeingChecked = variableBeingChecked, - data = dataSource + if (length(else_value) == 1 && + !isEqual(else_value, "character(0)")) { + else_value <- + RecodeVariableNAFormating(else_value, label_list[[variable_being_checked]]$type) + if (isEqual(else_value, "copy")) { + data_variable_being_checked <- + get_data_variable_name( + data_name = data_name, + row_being_checked = firstRow, + variable_being_checked = variable_being_checked, + data = data_source ) - recodedData[variableBeingChecked] <- - dataSource[dataVariableBeingChecked] + recodedData[variable_being_checked] <- + data_source[data_variable_being_checked] } else { - recodedData[variableBeingChecked] <- elseValue + recodedData[variable_being_checked] <- else_value } # Catch multiple else rows - } else if (length(elseValue) > 1) { + } else if (length(else_value) > 1) { stop( paste( - variableBeingChecked, + variable_being_checked, " contains", - length(elseValue), + length(else_value), "rows of else only one else value is allowed" ) ) } else{ - recodedData[variableBeingChecked] <- elseDefault + recodedData[variable_being_checked] <- else_default } rowsBeingChecked <- rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else", ] @@ -391,40 +391,40 @@ RecodeColumns <- logTable$valueTo <- NA logTable$From <- NA logTable$rowsRecoded <- NA - levels(recodedData[[variableBeingChecked]]) <- - c(levels(recodedData[[variableBeingChecked]]), levels(rowsBeingChecked[[pkg.globals$argument.CatValue]])) + levels(recodedData[[variable_being_checked]]) <- + c(levels(recodedData[[variable_being_checked]]), levels(rowsBeingChecked[[pkg.globals$argument.CatValue]])) for (row in 1:nrow(rowsBeingChecked)) { - rowBeingChecked <- rowsBeingChecked[row,] + row_being_checked <- rowsBeingChecked[row,] # If cat go check for label and obtain it # regardless obtain unit and attach # find var name for this database - dataVariableBeingChecked <- - GetDataVariableName( - dataName = dataName, - rowBeingChecked = rowBeingChecked, - variableBeingChecked = variableBeingChecked, - data = dataSource + data_variable_being_checked <- + get_data_variable_name( + data_name = data_name, + row_being_checked = row_being_checked, + variable_being_checked = variable_being_checked, + data = data_source ) # Recode the variable fromValues <- list() - if (grepl(":", as.character(rowBeingChecked[[pkg.globals$argument.From]]))) { + if (grepl(":", as.character(row_being_checked[[pkg.globals$argument.From]]))) { fromValues <- - strsplit(as.character(rowBeingChecked[[pkg.globals$argument.From]]), ":")[[1]] + strsplit(as.character(row_being_checked[[pkg.globals$argument.From]]), ":")[[1]] } else { # TODO find a more elagant way to handle in the future tempFrom <- - as.character(rowBeingChecked[[pkg.globals$argument.From]]) + as.character(row_being_checked[[pkg.globals$argument.From]]) fromValues[[1]] <- tempFrom fromValues[[2]] <- fromValues[[1]] } valueRecorded <- - as.character(rowBeingChecked[[pkg.globals$argument.CatValue]]) + as.character(row_being_checked[[pkg.globals$argument.CatValue]]) if (intervalPresent) { - interval = as.character(rowBeingChecked[[pkg.globals$argument.Interval]]) + interval = as.character(row_being_checked[[pkg.globals$argument.Interval]]) if (!interval %in% validIntervals) { interval <- intervalDefault } @@ -432,8 +432,8 @@ RecodeColumns <- interval <- "[,]" } validRowIndex <- CompareValueBasedOnInterval( - compareColumns = dataVariableBeingChecked, - dataSource = dataSource, + compareColumns = data_variable_being_checked, + data_source = data_source, leftBoundary = fromValues[[1]], rightBoundary = fromValues[[2]], interval = interval @@ -445,8 +445,8 @@ RecodeColumns <- interval <- intervalDefault } validRowIndex <- CompareValueBasedOnInterval( - compareColumns = dataVariableBeingChecked, - dataSource = dataSource, + compareColumns = data_variable_being_checked, + data_source = data_source, leftBoundary = fromValues[[1]], rightBoundary = fromValues[[2]], interval = interval @@ -455,23 +455,23 @@ RecodeColumns <- # Start construction of dataframe for log logTable[row, "valueTo"] <- valueRecorded logTable[row, "From"] <- - as.character(rowBeingChecked[[pkg.globals$argument.From]]) + as.character(row_being_checked[[pkg.globals$argument.From]]) logTable[row, "rowsRecoded"] <- sum(validRowIndex, na.rm = TRUE) valueRecorded <- - RecodeVariableNAFormating(valueRecorded, labelList[[variableBeingChecked]]$type) + RecodeVariableNAFormating(valueRecorded, label_list[[variable_being_checked]]$type) if (isEqual(valueRecorded, "copy")) { valueRecorded <- - dataSource[validRowIndex, dataVariableBeingChecked] + data_source[validRowIndex, data_variable_being_checked] } - recodedData[validRowIndex, variableBeingChecked] <- + recodedData[validRowIndex, variable_being_checked] <- valueRecorded - if (printNote && - !is.null(rowBeingChecked[[pkg.globals$argument.Notes]]) && - !isEqual(rowBeingChecked[[pkg.globals$argument.Notes]], "") && - !is.na(rowBeingChecked[[pkg.globals$argument.Notes]])) { - print(paste("NOTE:", as.character(rowBeingChecked[[pkg.globals$argument.Notes]]))) + if (print_note && + !is.null(row_being_checked[[pkg.globals$argument.Notes]]) && + !isEqual(row_being_checked[[pkg.globals$argument.Notes]], "") && + !is.na(row_being_checked[[pkg.globals$argument.Notes]])) { + print(paste("NOTE:", as.character(row_being_checked[[pkg.globals$argument.Notes]]))) } } # if log was requested print it @@ -479,11 +479,11 @@ RecodeColumns <- print( paste( "The variable", - dataVariableBeingChecked, + data_variable_being_checked, "was recoded into", - variableBeingChecked, + variable_being_checked, "for the database", - dataName, + data_name, "the following recodes were made:" ) ) @@ -497,8 +497,8 @@ RecodeColumns <- } # Process funcVars - while (nrow(funcVariablesToProcess) > 0) { - firstRow <- funcVariablesToProcess[1, ] + while (nrow(func_variables_to_process) > 0) { + firstRow <- func_variables_to_process[1, ] firstRowVariableName <- as.character(firstRow[[pkg.globals$argument.Variables]]) # get name of var pass to @@ -506,20 +506,20 @@ RecodeColumns <- RecodeDerivedVariables( variableBeingProcessed = firstRowVariableName, recodedData = recodedData, - variablesToProcess = funcVariablesToProcess, + variables_to_process = func_variables_to_process, log = log, - printNote = printNote, - elseDefault = elseDefault, - labelList = labelList, + print_note = print_note, + else_default = else_default, + label_list = label_list, varStack = c() ) - labelList <- derivedReturn$labelList + label_list <- derivedReturn$label_list recodedData <- derivedReturn$recodedData - funcVariablesToProcess <- derivedReturn$variablesToProcess + func_variables_to_process <- derivedReturn$variables_to_process } # Populate data Labels recodedData <- - LabelData(labelList = labelList, dataToLabel = recodedData) + LabelData(label_list = label_list, dataToLabel = recodedData) return(recodedData) } @@ -530,39 +530,39 @@ RecodeColumns <- #' #' @param leftBoundary the min value #' @param rightBoundary the max value -#' @param dataSource the data that contains values being compared -#' @param compareColumns The columns inside dataSource being checked +#' @param data_source the data that contains values being compared +#' @param compareColumns The columns inside data_source being checked #' @param interval The scientific notation interval #' #' @return a boolean vector containing true for rows where the comparison is true CompareValueBasedOnInterval <- function(leftBoundary, rightBoundary, - dataSource, + data_source, compareColumns, interval) { returnBoolean <- vector() if (suppressWarnings(is.na(as.numeric(leftBoundary)))) { returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which(leftBoundary == dataSource[[compareColumns]])] + data_source[[compareColumns]] %in% data_source[[compareColumns]][which(leftBoundary == data_source[[compareColumns]])] } else{ if (interval == "[,]") { returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( - as.numeric(leftBoundary) <= dataSource[[compareColumns]] & - dataSource[[compareColumns]] <= as.numeric(rightBoundary) + data_source[[compareColumns]] %in% data_source[[compareColumns]][which( + as.numeric(leftBoundary) <= data_source[[compareColumns]] & + data_source[[compareColumns]] <= as.numeric(rightBoundary) )] } else if (interval == "[,)") { returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( - as.numeric(leftBoundary) <= dataSource[[compareColumns]] & - dataSource[[compareColumns]] < as.numeric(rightBoundary) + data_source[[compareColumns]] %in% data_source[[compareColumns]][which( + as.numeric(leftBoundary) <= data_source[[compareColumns]] & + data_source[[compareColumns]] < as.numeric(rightBoundary) )] } else if (interval == "(,]") { returnBoolean <- - dataSource[[compareColumns]] %in% dataSource[[compareColumns]][which( - as.numeric(leftBoundary) < dataSource[[compareColumns]] & - dataSource[[compareColumns]] <= as.numeric(rightBoundary) + data_source[[compareColumns]] %in% data_source[[compareColumns]][which( + as.numeric(leftBoundary) < data_source[[compareColumns]] & + data_source[[compareColumns]] <= as.numeric(rightBoundary) )] } else{ stop("Invalid Argument was passed") @@ -573,12 +573,12 @@ CompareValueBasedOnInterval <- } # Parse out variables csv -UpdateVariableDetailsBasedOnVariableSheet <- - function(variableSheet, variableDetails) { +update_variable_details_based_on_variable_sheet <- + function(variableSheet, variable_details) { # remove conflicting columns from variable details - variableDetails <- - variableDetails[,!( - names(variableDetails) %in% c( + variable_details <- + variable_details[,!( + names(variable_details) %in% c( pkg.globals$MSW.Variables.Columns.VariableType, pkg.globals$MSW.Variables.Columns.Label, pkg.globals$MSW.Variables.Columns.LabelLong, @@ -595,19 +595,19 @@ UpdateVariableDetailsBasedOnVariableSheet <- pkg.globals$MSW.Variables.Columns.Units )] # merge the labels and data - variableDetails <- + variable_details <- merge( - variableDetails, + variable_details, variableSheet, by.x = pkg.globals$argument.Variables, by.y = pkg.globals$MSW.Variables.Columns.Variable, all.x = TRUE ) # remove variables not present in variableSheet - variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]], ] + variable_details <- + variable_details[variable_details[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]], ] - return(variableDetails) + return(variable_details) } RecodeVariableNAFormating <- function(cellValue, varType) { @@ -633,21 +633,21 @@ RecodeVariableNAFormating <- function(cellValue, varType) { RecodeDerivedVariables <- function(recodedData, variableBeingProcessed, - variablesToProcess, + variables_to_process, log, - printNote, - elseDefault, - labelList, + print_note, + else_default, + label_list, varStack) { - if (nrow(variablesToProcess) <= 0) { - stop(paste(variableBeingProcessed, "is missing from variableDetails")) + if (nrow(variables_to_process) <= 0) { + stop(paste(variableBeingProcessed, "is missing from variable_details")) } varStack <- c(varStack, variableBeingProcessed) # obtain rows to process and updated variables to Process variableRows <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] == variableBeingProcessed, ] - variablesToProcess <- - variablesToProcess[variablesToProcess[[pkg.globals$argument.Variables]] != variableBeingProcessed, ] + variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] == variableBeingProcessed, ] + variables_to_process <- + variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] != variableBeingProcessed, ] for (rowNum in 1:nrow(variableRows)) { # Check for presence of feeder variables in data and in the variable being processed stack feederVars <- @@ -660,7 +660,7 @@ RecodeDerivedVariables <- # Check if the variable has a function to recode nonFuncMissingVariables <- - setdiff(feederVars, unique(as.character(variablesToProcess[[pkg.globals$argument.Variables]]))) + setdiff(feederVars, unique(as.character(variables_to_process[[pkg.globals$argument.Variables]]))) if (length(nonFuncMissingVariables) > 0) { warning( paste( @@ -675,9 +675,9 @@ RecodeDerivedVariables <- return( list( varStack = varStack, - labelList = labelList, + label_list = label_list, recodedData = recodedData, - variablesToProcess = variablesToProcess + variables_to_process = variables_to_process ) ) } @@ -705,26 +705,26 @@ RecodeDerivedVariables <- RecodeDerivedVariables( variableBeingProcessed = oneFeeder, recodedData = recodedData, - variablesToProcess = variablesToProcess, + variables_to_process = variables_to_process, log = log, - printNote = printNote, - elseDefault = elseDefault, - labelList = labelList, + print_note = print_note, + else_default = else_default, + label_list = label_list, varStack = varStack ) varStack <- derivedReturn$varStack - labelList <- derivedReturn$labelList + label_list <- derivedReturn$label_list recodedData <- derivedReturn$recodedData - variablesToProcess <- derivedReturn$variablesToProcess + variables_to_process <- derivedReturn$variables_to_process } } # Obtain the function for each row - append(labelList, CreateLabelListElement(variableRows)) + append(label_list, CreateLabelListElement(variableRows)) - rowBeingChecked <- variableRows[rowNum,] + row_being_checked <- variableRows[rowNum,] funcCell <- - as.character(rowBeingChecked[[pkg.globals$argument.CatValue]]) + as.character(row_being_checked[[pkg.globals$argument.CatValue]]) functionBeingUsed <- as.list(strsplit(funcCell, "::"))[[1]][[2]] @@ -746,9 +746,9 @@ RecodeDerivedVariables <- return( list( varStack = varStack, - labelList = labelList, + label_list = label_list, recodedData = recodedData, - variablesToProcess = variablesToProcess + variables_to_process = variables_to_process ) ) diff --git a/R/small-cell-check.R b/R/small-cell-check.R index 75abad6c..4a653fbc 100644 --- a/R/small-cell-check.R +++ b/R/small-cell-check.R @@ -1,36 +1,35 @@ -#' CheckSmallCells +#' check_small_cells #' #' Checks for presence of small cells within the passed table #' -#' @param passedTable Table to check currently supported is LongTable and TableOne -#' @param smallSize Preffered small cell size default <6 +#' @param passed_table Table to check currently supported is LongTable and TableOne +#' @param small_size Preffered small cell size default <6 #' @param print Option to print the smallCell table #' @return Returns passed table with smallcells attached inside MetaData$smallCells #' @export -CheckSmallCells <- function(passedTable, ...) { - UseMethod("CheckSmallCells", passedTable) +check_small_cells <- function(passed_table, ...) { + UseMethod("check_small_cells", passed_table) } -#' CheckSmallCells for Summary Data +#' check_small_cells for Summary Data #' #' Checks for presence of small cells within Summary Data #' -#' @param passedTable Table to check currently supported is LongTable and TableOne -#' @param smallSize Preffered small cell size default <6 +#' @param passed_table Table to check currently supported is LongTable and TableOne +#' @param small_size Preffered small cell size default <6 #' @param print Option to print the smallCell table #' @return Returns passed table with smallcells attached inside MetaData$smallCells #'@export -CheckSmallCells.SummaryData <- function(passedTable, - - smallSize = 6, - print = FALSE) { - passedTable[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]] <- - passedTable$summaryData[passedTable$summaryData[, pkg.globals$LongTable.Frequency] < smallSize,] - print(paste(nrow(passedTable[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]), "Small cells were found")) +check_small_cells.SummaryData <- function(passed_table, + small_size = 6, + print = FALSE) { + passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]] <- + passed_table$summaryData[passed_table$summaryData[, pkg.globals$LongTable.Frequency] < small_size,] + print(paste(nrow(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]), "Small cells were found")) if (print) { - print(passedTable[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]) + print(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]) } - return(passedTable) + return(passed_table) } #' Check for Small Cells @@ -40,20 +39,20 @@ CheckSmallCells.SummaryData <- function(passedTable, #' #' Checks the categorical table within the TableOne param (CatTable field) for #' small cells. A small cell is a category where the number of people -#' in the category (n) is less than the value specified by the smallSize param. +#' in the category (n) is less than the value specified by the small_size param. #' The freq field within each variable has the n values. #' -#' @param passedTable The object outputted by the CreateTableOne function of the tableone package. +#' @param passed_table The object outputted by the CreateTableOne function of the tableone package. #' The documentation is available here #' https://cran.r-project.org/web/packages/tableone/index.html. -#' @param smallSize What value constitutes a small size cell. Default value is 6. -#' @param print If TRUE prints the smallSize metadata in a human readable format -#' @param tableType Specifies the type of the table that is passed to the function +#' @param small_size What value constitutes a small size cell. Default value is 6. +#' @param print If TRUE prints the small_size metadata in a human readable format +#' @param table_type Specifies the type of the table that is passed to the function #' -#' @return The passedTable object with a new object in the Metadata object called smallCells. +#' @return The passed_table object with a new object in the Metadata object called smallCells. #' smallCells is a dataframe with 4 columns -#' stratifiedBy : the categeries the table was stratified by -#' strataValues : the strata value where the small cell is present +#' stratified_by : the categeries the table was stratified by +#' strata_values : the strata value where the small cell is present #' variableName and factors and the rows are all the categorical variables #' whose one or more factors have small cells. #' @@ -74,31 +73,32 @@ CheckSmallCells.SummaryData <- function(passedTable, #' # create table 1 object #' TableOne <- CreateTableOne(data = pbc,strata = c("trt","stage"), factorVars = catVars) #' -#' # by default smallSize is 6 print is set to true and tableType is TableOne -#' tmp <- CheckSmallCells(TableOne) +#' # by default small_size is 6 print is set to true and table_type is TableOne +#' tmp <- check_small_cells(TableOne) #' -#' # increasing the smallSize threshold to 10 -#' tmp <- CheckSmallCells(TableOne, smallSize=10) +#' # increasing the small_size threshold to 10 +#' tmp <- check_small_cells(TableOne, small_size=10) #' -#' # currently only TableOne is supported so tableType != TableOne will throw error -#' #tmp <- CheckSmallCells(TableOne, tableType="TableTwo") +#' # currently only TableOne is supported so table_type != TableOne will throw error +#' #tmp <- check_small_cells(TableOne, table_type="TableTwo") #' #' @export -CheckSmallCells.TableOne <- function(passedTable, - smallSize = 6, - print = FALSE, - tableType = "TableOne") { +check_small_cells.TableOne <- function(passed_table, + small_size = 6, + print = FALSE, + table_type = "TableOne") { # Chosing Table procesing function ------------------------------------------- # Handles TableOne type tables - if (tableType == "TableOne") { - smallSizeTable <- CheckSmallCellsInTableOne(passedTable, smallSize) + if (table_type == "TableOne") { + small_size_table <- + check_small_cells_in_table_one(passed_table, small_size) # In case an unsupported table type is used this error is thrown } else { stop( cat( "Table type ", - tableType, + table_type, " is not a valid table type or is not yet supported " ), "Unsupported Type" @@ -109,39 +109,39 @@ CheckSmallCells.TableOne <- function(passedTable, # Writes the created table into the MetaData object of the passed table # Appends to smallCells if previous reccord exists - if ("smallCells" %in% names(passedTable$MetaData)) { - passedTable$MetaData$smallCells <- - rbind(passedTable$MetaData$smallCells, smallSizeTable) - # Sort the small cells table by variable, stratifiedBy, strataValues - passedTable$MetaData$smallCells <- - passedTable$MetaData$smallCells[order( - passedTable$MetaData$smallCells$variable, - passedTable$MetaData$smallCells$stratifiedBy, - passedTable$MetaData$smallCells$strataValues + if ("smallCells" %in% names(passed_table$MetaData)) { + passed_table$MetaData$smallCells <- + rbind(passed_table$MetaData$smallCells, small_size_table) + # Sort the small cells table by variable, stratified_by, strata_values + passed_table$MetaData$smallCells <- + passed_table$MetaData$smallCells[order( + passed_table$MetaData$smallCells$variable, + passed_table$MetaData$smallCells$stratified_by, + passed_table$MetaData$smallCells$strata_values ), ] # reset rowcount - rownames(passedTable$MetaData$smallCells) <- NULL + rownames(passed_table$MetaData$smallCells) <- NULL } else { - # Sort the small cells table by variable, stratifiedBy, strataValues - passedTable$MetaData$smallCells <- - smallSizeTable[order( - smallSizeTable$variable, - smallSizeTable$stratifiedBy, - smallSizeTable$strataValues + # Sort the small cells table by variable, stratified_by, strata_values + passed_table$MetaData$smallCells <- + small_size_table[order( + small_size_table$variable, + small_size_table$stratified_by, + small_size_table$strata_values ), ] # reset rowcount - rownames(passedTable$MetaData$smallCells) <- NULL + rownames(passed_table$MetaData$smallCells) <- NULL } # Prints the table if the print is requested if (print) { - if (nrow(passedTable$MetaData$smallCells) == 0) { + if (nrow(passed_table$MetaData$smallCells) == 0) { cat("No small cells are present") } else{ - print(passedTable$MetaData$smallCells) + print(passed_table$MetaData$smallCells) } } - return(passedTable) + return(passed_table) } # Table Parsing Functions ----------------------------------------------------------------------- @@ -154,102 +154,102 @@ CheckSmallCells.TableOne <- function(passedTable, #' all levels similar to showAllLevels in the CatTable from TableOne #' documentation available here: #' -#' @param tableOne The object outputted by the CreateTableOne function of the +#' @param table_one The object outputted by the CreateTableOne function of the #' tableone package. The documentation is available here #' https://cran.r-project.org/web/packages/tableone/index.html. -#' @param smallSize What value constitutes a small size cell. Default value is 6. +#' @param small_size What value constitutes a small size cell. Default value is 6. #' -#' @return data frame with 4 columns: stratifiedBy, strataValues, variableName, factors. +#' @return data frame with 4 columns: stratified_by, strata_values, variableName, factors. #' This only adds the variables that contain small cells for easy identification. #' It returns an empty table when no small cells are present -CheckSmallCellsInTableOne <- function(tableOne, - smallSize = 6) { +check_small_cells_in_table_one <- function(table_one, + small_size = 6) { # Variable declaration ------------------------------------------------------- - strataChecked <- 0 - levelsChecked <- 0 - variablesFound <- 0 - levelsFound <- 0 - variablesCheckedNum <- 0 - smallCellFound <- FALSE - varNames <- attr(tableOne$CatTable[[1]], "names") + strata_checked <- 0 + levels_checked <- 0 + variables_found <- 0 + levels_found <- 0 + variables_checked_num <- 0 + small_cell_found <- FALSE + var_names <- attr(table_one$CatTable[[1]], "names") counter <- 1 - freqVector <- character() - dimNames <- attr(tableOne$CatTable, "dimnames") - strataCounter <- 1 + freq_vector <- character() + dim_names <- attr(table_one$CatTable, "dimnames") + strata_counter <- 1 # This turns the strata arrays into one single array # Then creates all possible combinations and seperates them with : # Then all the combinations are combined into a single string array - strataAllCombinationsDataFrame <- expand.grid(dimNames) - strataArgs <- c(strataAllCombinationsDataFrame, sep = ":") - strataValues <- do.call(paste, strataArgs) + strata_all_combinations_data_frame <- expand.grid(dim_names) + strata_args <- c(strata_all_combinations_data_frame, sep = ":") + strata_values <- do.call(paste, strata_args) # Inserts values if not stratified - if (is.null(attr(tableOne$CatTable, "strataVarName"))) { - stratifiedBy <- NA - strataValues <- NA + if (is.null(attr(table_one$CatTable, "strataVarName"))) { + stratified_by <- NA + strata_values <- NA } else { - stratifiedBy <- attr(tableOne$CatTable, "strataVarName") + stratified_by <- attr(table_one$CatTable, "strataVarName") } # Creates a first row in a data frame # due to rbind function not working on an empty dataframe # A dummy row is used because first row is unknown at time of creation - detectedSmallCells <- + detected_small_cells <- data.frame( variable = character(), - stratifiedBy = character(), - strataValues = character() + stratified_by = character(), + strata_values = character() ) - detectedSmallCells$factors <- list() + detected_small_cells$factors <- list() # Small Cell detection ------------------------------------------------------- # Loop through the tables for each column - for (strataCounter in 1:length(tableOne$CatTable)) { - variablesCheckedNum <- 0 + for (strata_counter in 1:length(table_one$CatTable)) { + variables_checked_num <- 0 # Loop through the tables of each variable - for (selectedVariable in tableOne$CatTable[[strataCounter]]) { - variablesCheckedNum <- variablesCheckedNum + 1 - strataChecked <- strataChecked + 1 + for (selected_variable in table_one$CatTable[[strata_counter]]) { + variables_checked_num <- variables_checked_num + 1 + strata_checked <- strata_checked + 1 # Loop through the levels of each variable - for (row in 1:nrow(selectedVariable)) { - levelsChecked <- levelsChecked + 1 - frequency <- selectedVariable[row, "freq"] - levName <- selectedVariable[row, "level"] - if (frequency < smallSize) { - smallCellFound <- TRUE - levelsFound <- levelsFound + 1 - freqVector <- c(freqVector, levName) + for (row in 1:nrow(selected_variable)) { + levels_checked <- levels_checked + 1 + frequency <- selected_variable[row, "freq"] + lev_name <- selected_variable[row, "level"] + if (frequency < small_size) { + small_cell_found <- TRUE + levels_found <- levels_found + 1 + freq_vector <- c(freq_vector, lev_name) } } - if (smallCellFound) { - variablesFound <- variablesFound + 1 + if (small_cell_found) { + variables_found <- variables_found + 1 # Creates a temporary dataframe with data for the table that was read # Then that dataframe is added - newSmallCellRow <- + new_small_cell_row <- data.frame( - variable = varNames[counter], - stratifiedBy = stratifiedBy, - strataValues = strataValues[[strataCounter]] + variable = var_names[counter], + stratified_by = stratified_by, + strata_values = strata_values[[strata_counter]] ) - newSmallCellRow$factors <- list(freqVector) - detectedSmallCells <- - rbind(detectedSmallCells, newSmallCellRow) - smallCellFound <- FALSE + new_small_cell_row$factors <- list(freq_vector) + detected_small_cells <- + rbind(detected_small_cells, new_small_cell_row) + small_cell_found <- FALSE } counter <- counter + 1 - freqVector <- NULL + freq_vector <- NULL } counter <- 1 } - cat(variablesCheckedNum, + cat(variables_checked_num, " variables with ", - levelsChecked, + levels_checked, " levels checked.\n\n") cat( - length(levels(detectedSmallCells$variable)), + length(levels(detected_small_cells$variable)), " variables with ", - levelsFound, + levels_found, " levels have cells <", - smallSize, + small_size, " counts.\n\n" ) - return(detectedSmallCells) + return(detected_small_cells) } diff --git a/R/table-one-long.R b/R/table-one-long.R index 5bfdf9b8..b9275a2b 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -4,10 +4,10 @@ #' Its primary use is to convert Table one tables into a long table. #' The optional arguments allow appending to long table as well as addition of labels #' -#' @param tableOne the table one object to be converted into a long table -#' @param longTable the optional long table to append the table one information to -#' @param bllFlowModel The optional bllFlow object containing labels and extra information on the variables -#' @return Returns the long table or the bllFlowModel with long table attached +#' @param table_one the table one object to be converted into a long table +#' @param long_table the optional long table to append the table one information to +#' @param bll_flow_model The optional bllFlow object containing labels and extra information on the variables +#' @return Returns the long table or the bll_flow_model with long table attached #' #' @examples #' library(survival) @@ -19,49 +19,49 @@ #' ifelse(pbc$age >= 80, 4, NA)))) #' #' library(bllflow) -#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbcModel <- BLLFlow(pbc, variablesSheet, variableDetails, ddi) +#' pbcModel <- BLLFlow(pbc, variables_sheet, variable_details, ddi) #' #' pbcTableOne <- CreateTableOne(pbcModel, strata = "edema") -#' pbcSummaryTableNoLabels <- SummaryDataLong(pbcTableOne) -#' pbcLongTableWithLabel <- SummaryDataLong(pbcTableOne, bllFlowModel = pbcModel, longTable = pbcSummaryTableNoLabels) +#' pbcSummaryTableNoLabels <- summary_data_long(pbcTableOne) +#' pbcLongTableWithLabel <- summary_data_long(pbcTableOne, bll_flow_model = pbcModel, long_table = pbcSummaryTableNoLabels) #'@export -SummaryDataLong <- - function(tableOne, - longTable = NULL, - bllFlowModel = NULL) { - if (is.null(tableOne) & is.null(longTable)) { - warning("No table one or long table was passed to SummaryDataLong", +summary_data_long <- + function(table_one, + long_table = NULL, + bll_flow_model = NULL) { + if (is.null(table_one) & is.null(long_table)) { + warning("No table one or long table was passed to summary_data_long", call. = FALSE) } - if (is.null(longTable)) { - longTable <- data.frame(stringsAsFactors = FALSE) - longTable[[pkg.globals$LongTable.VariableCategory]] <- + if (is.null(long_table)) { + long_table <- data.frame(stringsAsFactors = FALSE) + long_table[[pkg.globals$LongTable.VariableCategory]] <- character() - longTable[[pkg.globals$LongTable.Variable]] <- character() - longTable[[pkg.globals$LongTable.Prevalence]] <- numeric() - longTable[[pkg.globals$LongTable.Frequency]] <- numeric() - longTable[[pkg.globals$LongTable.NMissing]] <- numeric() - longTable[[pkg.globals$LongTable.Mean]] <- numeric() - longTable[[pkg.globals$LongTable.SD]] <- numeric() - longTable[[pkg.globals$LongTable.Percentile25]] <- numeric() - longTable[[pkg.globals$LongTable.Percentile75]] <- numeric() + long_table[[pkg.globals$LongTable.Variable]] <- character() + long_table[[pkg.globals$LongTable.Prevalence]] <- numeric() + long_table[[pkg.globals$LongTable.Frequency]] <- numeric() + long_table[[pkg.globals$LongTable.NMissing]] <- numeric() + long_table[[pkg.globals$LongTable.Mean]] <- numeric() + long_table[[pkg.globals$LongTable.SD]] <- numeric() + long_table[[pkg.globals$LongTable.Percentile25]] <- numeric() + long_table[[pkg.globals$LongTable.Percentile75]] <- numeric() } else{ - longTable <- longTable[[pkg.globals$LongTable.LongTable]] + long_table <- long_table[[pkg.globals$LongTable.LongTable]] } - returnTable <- - AddToLongTable(tableOne, longTable, bllFlowModel[[pkg.globals$bllFlowContent.PopulatedVariableDetails]]) - if (!pkg.globals$LongTable.ClassName %in% class(returnTable)) { - class(returnTable) <- - append(class(returnTable), pkg.globals$LongTable.ClassName) + return_table <- + add_to_long_table(table_one, long_table, bll_flow_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]]) + if (!pkg.globals$LongTable.ClassName %in% class(return_table)) { + class(return_table) <- + append(class(return_table), pkg.globals$LongTable.ClassName) } - returnTable <- unique(returnTable) - returnSummaryData <- list(summaryData = returnTable) - class(returnSummaryData) <- "SummaryData" + return_table <- unique(return_table) + return_summary_data <- list(summary_data = return_table) + class(return_summary_data) <- "SummaryData" - return(returnSummaryData) + return(return_summary_data) } @@ -79,10 +79,10 @@ CreateTableOne <- function(x = NULL, ...) { #' additional arguments can be passed to create a specific table one. #' However if no optional args are passed the variable info stored in variables MSW is used. #' -#' @param bllFlowModel The bllflow object +#' @param bll_flow_model The bllflow object #' @param vars The optional vars to use in creation of table one if no vars are passed then vars in MSW variables is used #' @param strata The optional strata to use in creation of table one if no strata is passed no strata is used -#' @param factorVars The optional factorVars (categorical variables) used in creation of table one if nothing is passed +#' @param factor_vars The optional factor_vars (categorical variables) used in creation of table one if nothing is passed #' the MSW variables sheet is used to determine variable types #' #' @return returns a table one tableOne object @@ -97,293 +97,293 @@ CreateTableOne <- function(x = NULL, ...) { #' ifelse(pbc$age >= 80, 4, NA)))) #' #' library(bllflow) -#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbcModel <- BLLFlow(pbc, variablesSheet, variableDetails, ddi) +#' pbcModel <- BLLFlow(pbc, variables_sheet, variable_details, ddi) #' #' pbcTableOne <- CreateTableOne(pbcModel, strata = "edema") #' #' @export -CreateTableOne.BLLFlow <- function(bllFlowModel, +CreateTableOne.BLLFlow <- function(bll_flow_model, vars = NULL, strata = NULL, - factorVars = NULL) { - # ----Step 1: pull from variables in bllFlowModel ---- - variablesSheet <- - bllFlowModel[[pkg.globals$bllFlowContent.Variables]] + factor_vars = NULL) { + # ----Step 1: pull from variables in bll_flow_model ---- + variables_sheet <- + bll_flow_model[[pkg.globals$bllFlowContent.Variables]] if (is.null(vars)) { vars <- - as.character(bllFlowModel[[pkg.globals$bllFlowContent.Variables]][, pkg.globals$MSW.Variables.Columns.Variable]) + as.character(bll_flow_model[[pkg.globals$bllFlowContent.Variables]][, pkg.globals$MSW.Variables.Columns.Variable]) } - if (is.null(factorVars)) { - factorVars <- - as.character(variablesSheet[isEqual(variablesSheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable]) + if (is.null(factor_vars)) { + factor_vars <- + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable]) } # ----Step 2: Create the tableone ---- if (is.null(strata)) { - finalTable <- - tableone::CreateTableOne(data = bllFlowModel[[pkg.globals$bllFlowContent.WorkingData]], + final_table <- + tableone::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], vars = vars, - factorVars = factorVars) + factorVars = factor_vars) } else{ - finalTable <- + final_table <- tableone::CreateTableOne( - data = bllFlowModel[[pkg.globals$bllFlowContent.Data]], + data = bll_flow_model[[pkg.globals$bllFlowContent.Data]], vars = vars, - factorVars = factorVars, + factorVars = factor_vars, strata = strata ) } - return(finalTable) + return(final_table) } #' @export CreateTableOne.default <- tableone::CreateTableOne # Function to create a long table one for one tableOne -AddToLongTable <- - function(passedTable, longTable, variableDetails) { +add_to_long_table <- + function(passed_table, long_table, variable_details) { # ----Step 1: Populate long table from cont and cat tableone tables ---- # Call Cont table extraction if tableOne contains ContTable - returnedLongTables <- list() - # tableCount is used to populate list and avoid list append issues - tableCount <- 0 - if (!is.null(passedTable$ContTable)) { - dimNames <- attr(passedTable$ContTable, "dimnames") - strataValues <- CleanStrataValues(dimNames) - tableCount <- tableCount + 1 - contTableLongTable <- - ExtractDataFromContTable( - passedTable$ContTable, + returned_long_tables <- list() + # table_count is used to populate list and avoid list append issues + table_count <- 0 + if (!is.null(passed_table$ContTable)) { + dim_names <- attr(passed_table$ContTable, "dimnames") + strata_values <- clean_strata_values(dim_names) + table_count <- table_count + 1 + cont_table_long_table <- + extract_data_from_cont_table( + passed_table$ContTable, attr( - passedTable$ContTable, + passed_table$ContTable, pkg.globals$tableOne.StrataVarName ), - strataValues, - longTable, - variableDetails + strata_values, + long_table, + variable_details ) - returnedLongTables[[tableCount]] <- contTableLongTable + returned_long_tables[[table_count]] <- cont_table_long_table } # Call Cat table extraction if tableOne contains CatTable - if (!is.null(passedTable$CatTable)) { - dimNames <- attr(passedTable$CatTable, "dimnames") - strataValues <- CleanStrataValues(dimNames) - tableCount <- tableCount + 1 - catTableLongTable <- - ExtractDataFromCatTable( - passedTable$CatTable, + if (!is.null(passed_table$CatTable)) { + dim_names <- attr(passed_table$CatTable, "dimnames") + strata_values <- clean_strata_values(dim_names) + table_count <- table_count + 1 + cat_table_long_table <- + extract_data_from_cat_table( + passed_table$CatTable, attr( - passedTable$CatTable, + passed_table$CatTable, pkg.globals$tableOne.StrataVarName ), - strataValues, - longTable, - variableDetails + strata_values, + long_table, + variable_details ) - returnedLongTables[[tableCount]] <- catTableLongTable + returned_long_tables[[table_count]] <- cat_table_long_table } # ----Step 2: Add any missing columns to the newly created tables---- - for (tableToAppend in returnedLongTables) { - for (columnMissing in colnames(longTable)) { - if (!columnMissing %in% colnames(tableToAppend)) { - tableToAppend[[columnMissing]] <- NA + for (table_to_append in returned_long_tables) { + for (column_missing in colnames(long_table)) { + if (!column_missing %in% colnames(table_to_append)) { + table_to_append[[column_missing]] <- NA } } # synchronizing columns to avoid binding issues - for (columnMissing in colnames(tableToAppend)) { - if (!columnMissing %in% colnames(longTable)) { + for (column_missing in colnames(table_to_append)) { + if (!column_missing %in% colnames(long_table)) { # in case of zero row table columns need to be declared in columns <- dataType() # Set data type of missing column to type of append table - if (nrow(longTable) == 0) { - class(longTable[[columnMissing]]) <- - class(tableToAppend[[columnMissing]]) + if (nrow(long_table) == 0) { + class(long_table[[column_missing]]) <- + class(table_to_append[[column_missing]]) } else { - longTable[[columnMissing]] <- NA + long_table[[column_missing]] <- NA } } } - longTable <- - rbind(longTable, tableToAppend, stringsAsFactors = FALSE) + long_table <- + rbind(long_table, table_to_append, stringsAsFactors = FALSE) } - return(longTable) + return(long_table) } # Create long table from contTable -ExtractDataFromContTable <- - function(contTable, - strataName, - strataValues, - longTable, - variableDetails) { - strataSplitName <- character() +extract_data_from_cont_table <- + function(cont_table, + strata_name, + strata_values, + long_table, + variable_details) { + strata_split_name <- character() # ----Step 1: Split the strata name into the two variables ---- - if (!is.null(strataName)) { - strataSplitName <- - unlist(strsplit(as.character(strataName), split = ":")) + if (!is.null(strata_name)) { + strata_split_name <- + unlist(strsplit(as.character(strata_name), split = ":")) } else{ - strataSplitName <- strataName + strata_split_name <- strata_name } # ----Step 2: Add columns to long table - longTableRows <- data.frame() + long_table_rows <- data.frame() # loop through each strata columns # ----Step 3: Extract information for each new row of the longtable ---- - for (strataIndex in 1:length(contTable)) { - variables <- (row.names(contTable[[strataIndex]])) - for (row in 1:nrow(contTable[[strataIndex]])) { - strataSplitValues <- - unlist(strsplit(as.character(strataValues[[strataIndex]]), split = ":")) + for (strata_index in 1:length(cont_table)) { + variables <- (row.names(cont_table[[strata_index]])) + for (row in 1:nrow(cont_table[[strata_index]])) { + strata_split_values <- + unlist(strsplit(as.character(strata_values[[strata_index]]), split = ":")) # extract all the information for that row - num <- contTable[[strataIndex]][row, pkg.globals$tableOne.N] - nMiss <- - contTable[[strataIndex]][row, pkg.globals$tableOne.Miss] - rowMean <- - contTable[[strataIndex]][row, pkg.globals$tableOne.Mean] - rowSD <- - contTable[[strataIndex]][row, pkg.globals$tableOne.SD] - rowPercentile25 <- - contTable[[strataIndex]][row, pkg.globals$tableOne.p25] - rowPercentile75 <- - contTable[[strataIndex]][row, pkg.globals$tableOne.p75] + num <- cont_table[[strata_index]][row, pkg.globals$tableOne.N] + n_miss <- + cont_table[[strata_index]][row, pkg.globals$tableOne.Miss] + row_mean <- + cont_table[[strata_index]][row, pkg.globals$tableOne.Mean] + row_SD <- + cont_table[[strata_index]][row, pkg.globals$tableOne.SD] + row_percentile25 <- + cont_table[[strata_index]][row, pkg.globals$tableOne.p25] + row_percentile75 <- + cont_table[[strata_index]][row, pkg.globals$tableOne.p75] # create the row to add to tableOne Long - groupByList <- list() - if (length(strataSplitName) > 0) { - groupByList <- - FillInGroupByColumns(strataSplitName, - strataSplitValues, - groupByList, - variableDetails) + group_by_list <- list() + if (length(strata_split_name) > 0) { + group_by_list <- + fill_in_group_by_columns(strata_split_name, + strata_split_values, + group_by_list, + variable_details) } # ----Step 4: Create long table row ---- - longTableRow <- list() - longTableRow[[pkg.globals$LongTable.VariableCategory]] <- NA - longTableRow[[pkg.globals$LongTable.Variable]] <- + long_table_row <- list() + long_table_row[[pkg.globals$LongTable.VariableCategory]] <- NA + long_table_row[[pkg.globals$LongTable.Variable]] <- variables[[row]] - longTableRow[[pkg.globals$LongTable.Prevalence]] <- NA - longTableRow[[pkg.globals$LongTable.Frequency]] <- num - longTableRow[[pkg.globals$LongTable.NMissing]] <- nMiss - longTableRow[[pkg.globals$LongTable.Mean]] <- rowMean - longTableRow[[pkg.globals$LongTable.SD]] <- rowSD - longTableRow[[pkg.globals$LongTable.Percentile25]] <- - rowPercentile25 - longTableRow[[pkg.globals$LongTable.Percentile75]] <- - rowPercentile75 - longTableRow <- append(longTableRow, groupByList) + long_table_row[[pkg.globals$LongTable.Prevalence]] <- NA + long_table_row[[pkg.globals$LongTable.Frequency]] <- num + long_table_row[[pkg.globals$LongTable.NMissing]] <- n_miss + long_table_row[[pkg.globals$LongTable.Mean]] <- row_mean + long_table_row[[pkg.globals$LongTable.SD]] <- row_SD + long_table_row[[pkg.globals$LongTable.Percentile25]] <- + row_percentile25 + long_table_row[[pkg.globals$LongTable.Percentile75]] <- + row_percentile75 + long_table_row <- append(long_table_row, group_by_list) # ----Step 5: Clean the row - for (eachElementIndex in 1:length(longTableRow)) { + for (each_element_index in 1:length(long_table_row)) { # remove empty classes to avoid bind conflicts # example character(0) - if (length(longTableRow[[eachElementIndex]]) == 0) { - longTableRow[[eachElementIndex]] <- NA + if (length(long_table_row[[each_element_index]]) == 0) { + long_table_row[[each_element_index]] <- NA } } # ----Step 6: Add row to the rest of the rows---- - longTableRows <- - rbind(longTableRows, longTableRow, stringsAsFactors = FALSE) + long_table_rows <- + rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) } } - return(longTableRows) + return(long_table_rows) } # Create long table from CatTable -ExtractDataFromCatTable <- - function(catTable, - strataName, - strataValues, - longTable, - variableDetails) { +extract_data_from_cat_table <- + function(cat_table, + strata_name, + strata_values, + long_table, + variable_details) { # ----Step 1: Split the strata name into the two variables ---- - variablesChecked <- 0 - varNames <- attr(catTable[[1]], "names") - strataSplitName <- - unlist(strsplit(as.character(strataName), split = ":")) + variables_checked <- 0 + var_names <- attr(cat_table[[1]], "names") + strata_split_name <- + unlist(strsplit(as.character(strata_name), split = ":")) # Adds group by columns not found in the long table # ----Step 2: Add columns to long table - longTableRows <- data.frame() + long_table_rows <- data.frame() # ----Step 3: Extract information for each new row of the longtable ---- - for (strataCounter in 1:length(catTable)) { - strataSplitValues <- - unlist(strsplit(as.character(strataValues[[strataCounter]]), split = ":")) + for (strata_counter in 1:length(cat_table)) { + strata_split_values <- + unlist(strsplit(as.character(strata_values[[strata_counter]]), split = ":")) # Loop through the tables of each variable - for (selectedVariableTable in catTable[[strataCounter]]) { + for (selected_variable_table in cat_table[[strata_counter]]) { # Used to specify the variable being writen - variablesChecked <- variablesChecked + 1 + variables_checked <- variables_checked + 1 # Loop through the levels of each variable - for (row in 1:nrow(selectedVariableTable)) { - nMiss <- selectedVariableTable[row, pkg.globals$tableOne.Miss] + for (row in 1:nrow(selected_variable_table)) { + n_miss <- selected_variable_table[row, pkg.globals$tableOne.Miss] frequency <- - selectedVariableTable[row, pkg.globals$tableOne.Freq] - levName <- - selectedVariableTable[row, pkg.globals$tableOne.Level] + selected_variable_table[row, pkg.globals$tableOne.Freq] + lev_name <- + selected_variable_table[row, pkg.globals$tableOne.Level] prevalence <- - selectedVariableTable[row, pkg.globals$tableOne.Percent] - groupByList <- list() - if (length(strataSplitName) > 0) { - groupByList <- - FillInGroupByColumns(strataSplitName, - strataSplitValues, - groupByList, - variableDetails) - if (!is.null(variableDetails)) { - groupByList[[pkg.globals$LongTable.VariableCategoryLabel]] <- - variableDetails[isEqual(variableDetails[[pkg.globals$argument.VariableStart]], varNames[[variablesChecked]]) & - isEqual(variableDetails[[pkg.globals$argument.CatStartValue]], as.character(levName)), pkg.globals$argument.CatStartLabel] + selected_variable_table[row, pkg.globals$tableOne.Percent] + group_by_list <- list() + if (length(strata_split_name) > 0) { + group_by_list <- + fill_in_group_by_columns(strata_split_name, + strata_split_values, + group_by_list, + variable_details) + if (!is.null(variable_details)) { + group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]] <- + variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], var_names[[variables_checked]]) & + is_equal(variable_details[[pkg.globals$argument.CatStartValue]], as.character(lev_name)), pkg.globals$argument.CatStartLabel] # If empty add NA - if (length(groupByList[[pkg.globals$LongTable.VariableCategoryLabel]]) == 0) { - groupByList[[pkg.globals$LongTable.VariableCategoryLabel]] <- NA + if (length(group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]]) == 0) { + group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]] <- NA } } } # ----Step 4: Create long table row ---- - longTableRow <- list() - longTableRow[[pkg.globals$LongTable.VariableCategory]] <- - levName - longTableRow[[pkg.globals$LongTable.Variable]] <- - varNames[variablesChecked] - longTableRow[[pkg.globals$LongTable.Prevalence]] <- + long_table_row <- list() + long_table_row[[pkg.globals$LongTable.VariableCategory]] <- + lev_name + long_table_row[[pkg.globals$LongTable.Variable]] <- + var_names[variables_checked] + long_table_row[[pkg.globals$LongTable.Prevalence]] <- prevalence - longTableRow[[pkg.globals$LongTable.Frequency]] <- + long_table_row[[pkg.globals$LongTable.Frequency]] <- frequency - longTableRow[[pkg.globals$LongTable.NMissing]] <- nMiss - longTableRow[[pkg.globals$LongTable.Mean]] <- NA - longTableRow[[pkg.globals$LongTable.SD]] <- NA - longTableRow[[pkg.globals$LongTable.Percentile25]] <- NA - longTableRow[[pkg.globals$LongTable.Percentile75]] <- NA - longTableRow <- append(longTableRow, groupByList) + long_table_row[[pkg.globals$LongTable.NMissing]] <- n_miss + long_table_row[[pkg.globals$LongTable.Mean]] <- NA + long_table_row[[pkg.globals$LongTable.SD]] <- NA + long_table_row[[pkg.globals$LongTable.Percentile25]] <- NA + long_table_row[[pkg.globals$LongTable.Percentile75]] <- NA + long_table_row <- append(long_table_row, group_by_list) # ----Step 5: Clean the row - for (eachElementIndex in 1:length(longTableRow)) { - if (length(longTableRow[[eachElementIndex]]) == 0) { - longTableRow[[eachElementIndex]] <- NA + for (each_element_index in 1:length(long_table_row)) { + if (length(long_table_row[[each_element_index]]) == 0) { + long_table_row[[each_element_index]] <- NA } } # ----Step 6: Add row to the rest of the rows---- - longTableRows <- - rbind(longTableRows, longTableRow, stringsAsFactors = FALSE) + long_table_rows <- + rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) } } - variablesChecked <- 0 + variables_checked <- 0 } - return(longTableRows) + return(long_table_rows) } \ No newline at end of file diff --git a/R/util-funcs.R b/R/util-funcs.R index 86a7590d..d2e514e7 100644 --- a/R/util-funcs.R +++ b/R/util-funcs.R @@ -1,7 +1,7 @@ # Function to compare even with NA present # This function returns TRUE wherever elements are the same, including NA's, # and false everywhere else. -isEqual <- function(v1, v2) { +is_equal <- function(v1, v2) { same <- (v1 == v2) | (is.na(v1) & is.na(v2)) # anything compared to NA equals NA # replaces all instanses of NA with FALSE @@ -11,86 +11,86 @@ isEqual <- function(v1, v2) { } # Adds the column to the list as well as the dataframe that is passed -AddColumn <- - function(columnName, - tableToAddTo) { - if (!columnName %in% colnames(tableToAddTo)) { - if (nrow(tableToAddTo) == 0) { - tableToAddTo[, columnName] <- character() +add_column <- + function(column_name, + table_to_add_to) { + if (!column_name %in% colnames(table_to_add_to)) { + if (nrow(table_to_add_to) == 0) { + table_to_add_to[, column_name] <- character() } else { - tableToAddTo[, columnName] <- NA + table_to_add_to[, column_name] <- NA } } - return(tableToAddTo) + return(table_to_add_to) } # Adds groupBy columns to long table -AddGroupByColumns <- - function(strataSplitName, - longTable, - variableDetails) { - for (groupByIndex in 1:length(strataSplitName)) { - longTable <- - AddColumn(paste(pkg.globals$LongTable.GroupBy, groupByIndex, sep = ""), - longTable) - longTable <- - AddColumn(paste(pkg.globals$LongTable.GroupByValue, groupByIndex, sep = ""), - longTable) +add_group_by_columns <- + function(strata_split_name, + long_table, + variable_details) { + for (group_by_index in 1:length(strata_split_name)) { + long_table <- + add_column(paste(pkg.globals$LongTable.GroupBy, group_by_index, sep = ""), + long_table) + long_table <- + add_column(paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = ""), + long_table) - if (!is.null(variableDetails)) { - longTable <- - AddColumn(paste(pkg.globals$LongTable.GroupByLabel, groupByIndex, sep = ""), - longTable) - longTable <- - AddColumn( + if (!is.null(variable_details)) { + long_table <- + add_column(paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = ""), + long_table) + long_table <- + add_column( paste( pkg.globals$LongTable.GroupByValueLabel, - groupByIndex, + group_by_index, sep = "" ), - longTable + long_table ) } } - return(longTable) + return(long_table) } # Fills group by columns with information from variable details -FillInGroupByColumns <- - function(strataSplitName, - strataSplitValues, - longTableRow, - variableDetails) { - for (groupByIndex in 1:length(strataSplitName)) { - longTableRow[[paste(pkg.globals$LongTable.GroupBy, groupByIndex, sep = "")]] <- - strataSplitName[[groupByIndex]] - longTableRow[[paste(pkg.globals$LongTable.GroupByValue, groupByIndex, sep = "")]] <- - strataSplitValues[[groupByIndex]] +fill_in_group_by_columns <- + function(strata_split_name, + strata_split_values, + long_table_row, + variable_details) { + for (group_by_index in 1:length(strata_split_name)) { + long_table_row[[paste(pkg.globals$LongTable.GroupBy, group_by_index, sep = "")]] <- + strata_split_name[[group_by_index]] + long_table_row[[paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = "")]] <- + strata_split_values[[group_by_index]] - if (!is.null(variableDetails)) { - longTableRow[[paste(pkg.globals$LongTable.GroupByLabel, groupByIndex, sep = "")]] <- - variableDetails[isEqual(variableDetails[[pkg.globals$argument.VariableStart]], strataSplitName[[groupByIndex]]) & - isEqual(variableDetails[[pkg.globals$argument.CatStartValue]], strataSplitValues[[groupByIndex]]), pkg.globals$argument.VariableStartLabel] - longTableRow[[paste(pkg.globals$LongTable.GroupByValueLabel, - groupByIndex, + if (!is.null(variable_details)) { + long_table_row[[paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = "")]] <- + variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & + is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.VariableStartLabel] + long_table_row[[paste(pkg.globals$LongTable.GroupByValueLabel, + group_by_index, sep = "")]] <- - variableDetails[isEqual(variableDetails[[pkg.globals$argument.VariableStart]], strataSplitName[[groupByIndex]]) & - isEqual(variableDetails[[pkg.globals$argument.CatStartValue]], strataSplitValues[[groupByIndex]]), pkg.globals$argument.CatStartLabel] + variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & + is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.CatStartLabel] } } - return(longTableRow) + return(long_table_row) } # Cleans strata values -CleanStrataValues <- - function(dimNames) { - strataAllCombinationsDataFrame <- expand.grid(dimNames) - strataArgs <- c(strataAllCombinationsDataFrame, sep = ":") - strataValues <- do.call(paste, strataArgs) +clean_strata_values <- + function(dim_names) { + strata_all_combinations_data_frame <- expand.grid(dim_names) + strata_args <- c(strata_all_combinations_data_frame, sep = ":") + strata_values <- do.call(paste, strata_args) - return(strataValues) + return(strata_values) } From 2d37af94f690e069a39fea635e87d981759a47b0 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 9 Jan 2020 10:47:11 -0500 Subject: [PATCH 067/123] [Feature] snake_case_update and test removal --- DESCRIPTION | 6 +- NAMESPACE | 66 +- R/TEMPORARY.R | 104 -- R/bll-flow-constructor-utility.R | 60 +- R/bll-flow.R | 162 +- R/clean.R | 177 ++- R/create-reference.R | 84 +- R/ddi-utils.R | 216 +-- R/error-check.R | 54 +- R/label-utils.R | 154 +- R/module-instruction-parsing.R | 234 +-- R/recipy-utility.R | 6 +- R/recode-with-table.R | 523 +++--- R/small-cell-check.R | 48 +- R/table-one-long.R | 19 +- data/cchs2001.RData | Bin 0 -> 21548 bytes data/cchs2003.RData | Bin 0 -> 31988 bytes data/cchs2005.RData | Bin 0 -> 30332 bytes data/cchs2007_2008.RData | Bin 0 -> 31344 bytes data/cchs2009_2010.RData | Bin 0 -> 31952 bytes data/cchs2010.RData | Bin 0 -> 34484 bytes data/cchs2011_2012.RData | Bin 0 -> 31200 bytes data/cchs2012.RData | Bin 0 -> 34064 bytes data/cchs2013_2014.RData | Bin 0 -> 30128 bytes data/cchs2014.RData | Bin 0 -> 31400 bytes data/variableDetails.RData | Bin 0 -> 23247 bytes data/variables.RData | Bin 0 -> 5864 bytes .../testdata/BLLFlow/BLLFlow-Generator.R | 88 - .../testdata/BLLFlow/BLLFlowData.RData | Bin 74037 -> 0 bytes .../BLLFlow/Test-2/PBC-variableDetails.csv | 18 - .../testdata/BLLFlow/Test-2/PBC-variables.csv | 7 - .../BLLFlow/Test-3/PBC-variableDetails.csv | 18 - .../testdata/BLLFlow/Test-3/PBC-variables.csv | 7 - .../testdata/BLLFlow/Test-3/pbcDDI.xml | 1412 ----------------- .../CheckSmallCells-Generator.R | 40 - .../CheckSmallCells/CheckSmallCellsData.RData | Bin 29835 -> 0 bytes .../testdata/CleanMax/CleanMax-Generator.R | 51 - .../testdata/CleanMax/CleanMaxData.RData | Bin 46788 -> 0 bytes .../CleanMax/Test-1/PBC-variableDetails.csv | 18 - .../CleanMax/Test-1/PBC-variables.csv | 7 - .../testdata/CleanMax/Test-1/pbcDDI.xml | 1412 ----------------- .../testdata/CleanMin/CleanMin-Generator.R | 51 - .../testdata/CleanMin/CleanMinData.RData | Bin 45030 -> 0 bytes .../CleanMin/Test-1/PBC-variableDetails.csv | 18 - .../CleanMin/Test-1/PBC-variables.csv | 7 - .../testdata/CleanMin/Test-1/pbcDDI.xml | 1412 ----------------- .../CreateTableOne/CreateTableOne-Generator.R | 127 -- .../CreateTableOne/CreateTableOneData.RData | Bin 72098 -> 0 bytes .../Test-1/PBC-variableDetails.csv | 18 - .../CreateTableOne/Test-1/PBC-variables.csv | 7 - .../testdata/CreateTableOne/Test-1/pbcDDI.xml | 1412 ----------------- .../Test-2/PBC-variableDetails.csv | 18 - .../CreateTableOne/Test-2/PBC-variables.csv | 7 - .../testdata/CreateTableOne/Test-2/pbcDDI.xml | 1412 ----------------- .../Test-3/PBC-variableDetails.csv | 18 - .../CreateTableOne/Test-3/PBC-variables.csv | 7 - .../testdata/CreateTableOne/Test-3/pbcDDI.xml | 1412 ----------------- .../GetDDIDescription-Generator.R | 31 - .../GetDDIDescriptionData.RData | Bin 8341 -> 0 bytes .../GetDDIDescription/Test-1/pbcDDI.xml | 1412 ----------------- .../GetDDIVariables-Generator.R | 31 - .../GetDDIVariables/GetDDIVariablesData.RData | Bin 8126 -> 0 bytes .../GetDDIVariables/Test-1/pbcDDI.xml | 1412 ----------------- .../Integration/Integration-Generator.R | 150 -- .../Integration/IntegrationData.RData | Bin 24817 -> 0 bytes .../Test-1/PBC-variableDetails.csv | 18 - .../Integration/Test-1/PBC-variables.csv | 7 - .../testdata/Integration/Test-1/pbcDDI.xml | 1412 ----------------- .../Test-2/PBC-variableDetails.csv | 18 - .../Integration/Test-2/PBC-variables.csv | 7 - .../testdata/Integration/Test-2/pbcDDI.xml | 1412 ----------------- .../Test-3/PBC-variableDetails.csv | 18 - .../Integration/Test-3/PBC-variables.csv | 7 - .../testdata/Integration/Test-3/pbcDDI.xml | 1412 ----------------- .../testdata/ReadDDI/ReadDDI-Generator.R | 30 - .../testdata/ReadDDI/ReadDDIData.RData | Bin 8170 -> 0 bytes .../testdata/ReadDDI/Test-1/pbcDDI.xml | 1412 ----------------- .../SummaryDataLong-Generator.R | 124 -- .../SummaryDataLong/SummaryDataLongData.RData | Bin 88077 -> 0 bytes .../Test-3/PBC-variableDetails.csv | 18 - .../SummaryDataLong/Test-3/PBC-variables.csv | 7 - .../SummaryDataLong/Test-3/pbcDDI.xml | 1412 ----------------- .../Test-4/PBC-variableDetails.csv | 18 - .../SummaryDataLong/Test-4/PBC-variables.csv | 7 - .../SummaryDataLong/Test-4/pbcDDI.xml | 1412 ----------------- .../UpdateMSW/Test-1/PBC-variableDetails.csv | 18 - .../UpdateMSW/Test-1/PBC-variables.csv | 7 - .../Test-1/PBC-variablesUpdateTest.csv | 2 - .../testdata/UpdateMSW/Test-1/pbcDDI.xml | 1412 ----------------- .../UpdateMSW/Test-2/PBC-variableDetails.csv | 18 - .../Test-2/PBC-variableDetailsUpdateTest.csv | 5 - .../UpdateMSW/Test-2/PBC-variables.csv | 7 - .../testdata/UpdateMSW/Test-2/pbcDDI.xml | 1412 ----------------- .../UpdateMSW/Test-3/PBC-variableDetails.csv | 18 - .../UpdateMSW/Test-3/PBC-variables.csv | 7 - .../testdata/UpdateMSW/Test-3/pbcDDI.xml | 1412 ----------------- .../UpdateMSW/Test-3/pbcDDIUpdateTest.xml | 1412 ----------------- .../testdata/UpdateMSW/UpdateMSW-Generator.R | 154 -- .../testdata/UpdateMSW/UpdateMSWData.RData | Bin 72 -> 0 bytes .../Test-1/PBC-variableDetails.csv | 44 - .../Test-1/PBC-variables.csv | 22 - .../WriteDDIPopulatedMSW/Test-1/pbcDDI.xml | 1412 ----------------- .../Test-1/standardWriteOutput.csv | 21 - .../Test-2/PBC-variableDetails.csv | 44 - .../Test-2/PBC-variables.csv | 22 - .../WriteDDIPopulatedMSW/Test-2/pbcDDI.xml | 1412 ----------------- .../Test-2/standardWriteOutput.csv | 21 - .../Test-3/PBC-variableDetails.csv | 44 - .../WriteDDIPopulatedMSW/Test-3/pbcDDI.xml | 1412 ----------------- .../Test-3/standardWriteOutput.csv | 21 - .../WriteDDIPopulatedMSW-Generator.R | 139 -- .../WriteDDIPopulatedMSWData.RData | Bin 81 -> 0 bytes man/BLLFlow.Rd | 30 +- man/CheckSmallCellsInTableOne.Rd | 28 - man/LogFunctionActivity.Rd | 13 +- man/clean.Max.Rd | 64 - man/clean.Min.Rd | 64 - tests/testthat.R | 4 - tests/testthat/test-CheckSmallCells.R | 38 - tests/testthat/test-Clean.Max.R | 25 - tests/testthat/test-Clean.Min.R | 25 - tests/testthat/test-CreateTableOne.R | 39 - tests/testthat/test-GetDDIDescription.R | 26 - tests/testthat/test-GetDDIVariables.R | 29 - tests/testthat/test-Integration.R | 126 -- tests/testthat/test-ReadDDI.R | 25 - tests/testthat/test-SummaryDataLong.R | 58 - tests/testthat/test-UpdateMSW.R | 49 - tests/testthat/test-WriteDDIPopulatedMSW.R | 99 -- tests/testthat/test-bllFlow.R | 46 - 130 files changed, 964 insertions(+), 33026 deletions(-) delete mode 100644 R/TEMPORARY.R create mode 100644 data/cchs2001.RData create mode 100644 data/cchs2003.RData create mode 100644 data/cchs2005.RData create mode 100644 data/cchs2007_2008.RData create mode 100644 data/cchs2009_2010.RData create mode 100644 data/cchs2010.RData create mode 100644 data/cchs2011_2012.RData create mode 100644 data/cchs2012.RData create mode 100644 data/cchs2013_2014.RData create mode 100644 data/cchs2014.RData create mode 100644 data/variableDetails.RData create mode 100644 data/variables.RData delete mode 100644 inst/extdata/testdata/BLLFlow/BLLFlow-Generator.R delete mode 100644 inst/extdata/testdata/BLLFlow/BLLFlowData.RData delete mode 100644 inst/extdata/testdata/BLLFlow/Test-2/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/BLLFlow/Test-2/PBC-variables.csv delete mode 100644 inst/extdata/testdata/BLLFlow/Test-3/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/BLLFlow/Test-3/PBC-variables.csv delete mode 100644 inst/extdata/testdata/BLLFlow/Test-3/pbcDDI.xml delete mode 100644 inst/extdata/testdata/CheckSmallCells/CheckSmallCells-Generator.R delete mode 100644 inst/extdata/testdata/CheckSmallCells/CheckSmallCellsData.RData delete mode 100644 inst/extdata/testdata/CleanMax/CleanMax-Generator.R delete mode 100644 inst/extdata/testdata/CleanMax/CleanMaxData.RData delete mode 100644 inst/extdata/testdata/CleanMax/Test-1/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/CleanMax/Test-1/PBC-variables.csv delete mode 100644 inst/extdata/testdata/CleanMax/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/CleanMin/CleanMin-Generator.R delete mode 100644 inst/extdata/testdata/CleanMin/CleanMinData.RData delete mode 100644 inst/extdata/testdata/CleanMin/Test-1/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/CleanMin/Test-1/PBC-variables.csv delete mode 100644 inst/extdata/testdata/CleanMin/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/CreateTableOne/CreateTableOne-Generator.R delete mode 100644 inst/extdata/testdata/CreateTableOne/CreateTableOneData.RData delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-1/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-1/PBC-variables.csv delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-2/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-2/PBC-variables.csv delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-2/pbcDDI.xml delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-3/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-3/PBC-variables.csv delete mode 100644 inst/extdata/testdata/CreateTableOne/Test-3/pbcDDI.xml delete mode 100644 inst/extdata/testdata/GetDDIDescription/GetDDIDescription-Generator.R delete mode 100644 inst/extdata/testdata/GetDDIDescription/GetDDIDescriptionData.RData delete mode 100644 inst/extdata/testdata/GetDDIDescription/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/GetDDIVariables/GetDDIVariables-Generator.R delete mode 100644 inst/extdata/testdata/GetDDIVariables/GetDDIVariablesData.RData delete mode 100644 inst/extdata/testdata/GetDDIVariables/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/Integration/Integration-Generator.R delete mode 100644 inst/extdata/testdata/Integration/IntegrationData.RData delete mode 100644 inst/extdata/testdata/Integration/Test-1/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/Integration/Test-1/PBC-variables.csv delete mode 100644 inst/extdata/testdata/Integration/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/Integration/Test-2/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/Integration/Test-2/PBC-variables.csv delete mode 100644 inst/extdata/testdata/Integration/Test-2/pbcDDI.xml delete mode 100644 inst/extdata/testdata/Integration/Test-3/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/Integration/Test-3/PBC-variables.csv delete mode 100644 inst/extdata/testdata/Integration/Test-3/pbcDDI.xml delete mode 100644 inst/extdata/testdata/ReadDDI/ReadDDI-Generator.R delete mode 100644 inst/extdata/testdata/ReadDDI/ReadDDIData.RData delete mode 100644 inst/extdata/testdata/ReadDDI/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/SummaryDataLong/SummaryDataLong-Generator.R delete mode 100644 inst/extdata/testdata/SummaryDataLong/SummaryDataLongData.RData delete mode 100644 inst/extdata/testdata/SummaryDataLong/Test-3/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/SummaryDataLong/Test-3/PBC-variables.csv delete mode 100644 inst/extdata/testdata/SummaryDataLong/Test-3/pbcDDI.xml delete mode 100644 inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variables.csv delete mode 100644 inst/extdata/testdata/SummaryDataLong/Test-4/pbcDDI.xml delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-1/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-1/PBC-variables.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-1/PBC-variablesUpdateTest.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetailsUpdateTest.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-2/PBC-variables.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-2/pbcDDI.xml delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-3/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-3/PBC-variables.csv delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-3/pbcDDI.xml delete mode 100644 inst/extdata/testdata/UpdateMSW/Test-3/pbcDDIUpdateTest.xml delete mode 100644 inst/extdata/testdata/UpdateMSW/UpdateMSW-Generator.R delete mode 100644 inst/extdata/testdata/UpdateMSW/UpdateMSWData.RData delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/pbcDDI.xml delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/standardWriteOutput.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/pbcDDI.xml delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/standardWriteOutput.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/pbcDDI.xml delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/standardWriteOutput.csv delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSW-Generator.R delete mode 100644 inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSWData.RData delete mode 100644 man/CheckSmallCellsInTableOne.Rd delete mode 100644 man/clean.Max.Rd delete mode 100644 man/clean.Min.Rd delete mode 100644 tests/testthat.R delete mode 100644 tests/testthat/test-CheckSmallCells.R delete mode 100644 tests/testthat/test-Clean.Max.R delete mode 100644 tests/testthat/test-Clean.Min.R delete mode 100644 tests/testthat/test-CreateTableOne.R delete mode 100644 tests/testthat/test-GetDDIDescription.R delete mode 100644 tests/testthat/test-GetDDIVariables.R delete mode 100644 tests/testthat/test-Integration.R delete mode 100644 tests/testthat/test-ReadDDI.R delete mode 100644 tests/testthat/test-SummaryDataLong.R delete mode 100644 tests/testthat/test-UpdateMSW.R delete mode 100644 tests/testthat/test-WriteDDIPopulatedMSW.R delete mode 100644 tests/testthat/test-bllFlow.R diff --git a/DESCRIPTION b/DESCRIPTION index 63b7079c..d9a1a125 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,7 +29,9 @@ Depends: stringr, recipes, sjlabelled, - haven + haven, + magrittr, + rms Imports: rstudioapi, glue, @@ -52,5 +54,5 @@ Maintainer: Rostyslav Vyuha License: MIT + file LICENSE Encoding: UTF-8 LazyData: true -RoxygenNote: 6.1.1 +RoxygenNote: 7.0.0 VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index 94a144fc..a1787707 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,38 +1,42 @@ # Generated by roxygen2: do not edit by hand -S3method(CheckSmallCells,SummaryData) -S3method(CheckSmallCells,TableOne) S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) -S3method(CreateVariableDetailsTemplate,BLLFlow) -S3method(GetVariables,BLLFlow) -S3method(GetVariables,default) -S3method(RecWTable,default) -S3method(WriteDDIPopulatedMSW,BLLFlow) -S3method(WriteDDIPopulatedMSW,BLLFlowDDI) -S3method(bake,step_meantest) -S3method(clean.Max,BLLFlow) -S3method(clean.Min,BLLFlow) -S3method(prep,step_meantest) +S3method(check_small_cells,Default) +S3method(check_small_cells,SummaryData) +S3method(check_small_cells,TableOne) +S3method(clean_max,BLLFlow) +S3method(clean_min,BLLFlow) +S3method(create_variable_details_template,BLLFlow) +S3method(get_variables,BLLFlow) +S3method(get_variables,default) S3method(print,metaDataLog) +S3method(write_DDI_populated_MSW,BLLFlow) +S3method(write_DDI_populated_MSW,BLLFlowDDI) export(BLLFlow) -export(CheckSmallCells) -export(CreateBLLModelObject) export(CreateTableOne) -export(CreateVariableDetailsTemplate) -export(GetDDIDescription) -export(GetDDIVariables) -export(GetRecipy) -export(GetVariables) -export(ReadDDI) -export(ReadData) -export(RecWTable) -export(RunModule) -export(SetDataLabels) -export(SetRecipy) -export(SummaryDataLong) -export(UpdateMSW) -export(WriteDDIPopulatedMSW) -export(clean.Max) -export(clean.Min) -export(step_meantest) +export(check_small_cells) +export(clean_max) +export(clean_min) +export(create_BLL_model_object) +export(create_variable_details_template) +export(get_DDI_description) +export(get_DDI_variables) +export(get_recipy) +export(get_variables) +export(is_equal) +export(read_DDI) +export(read_data) +export(rec_with_table) +export(run_module) +export(set_data_labels) +export(set_recipy) +export(summary_data_long) +export(update_MSW) +export(write_DDI_populated_MSW) +importFrom(dplyr,do) +importFrom(dplyr,rowwise) +importFrom(dplyr,select) +importFrom(haven,tagged_na) +importFrom(magrittr,"%>%") +importFrom(stringr,str_match) diff --git a/R/TEMPORARY.R b/R/TEMPORARY.R deleted file mode 100644 index 5d2703b6..00000000 --- a/R/TEMPORARY.R +++ /dev/null @@ -1,104 +0,0 @@ -TestingONLY <- function(){ - source('C:/Users/DarkShadeKnight/Documents/Work/R/pblTransformations/PBLTransformations/Derived Variables RecWTable functions/FunctionIndex.R') -} -# PackYearRecode <- -# function(SMKDSTY, -# DHHGAGE_cont, -# SMKG203, -# SMK_204, -# SMK_09A_B, -# SMKG09C, -# SMK_208, -# SMK_05B, -# SMK_05C, -# SMKG01C_B, -# SMK_01A, -# SMK_207) { -# TypeOfSmoker2 <- SMKDSTY -# stpo <- ifelse((SMK_09A_B == 6), 0, -# ifelse((SMK_09A_B == 7), NA, -# ifelse((SMK_09A_B == 8), NA, -# ifelse((SMK_09A_B == 9), NA, SMK_09A_B) -# ))) -# stpoy <- SMKG09C -# tsq_ds <- ifelse((stpo = 1), 0.5, -# ifelse((stpo = 2), 1.5, -# ifelse((stpo = 3), 2.5, -# ifelse((stpo = 4), stpoy, NA -# )))) -# agecigd <- SMKG203 -# agec1 <- SMKG01C_B -# s100 <- -# ifelse((SMK_01A == 7), NA, -# ifelse((SMK_01A == 8), NA, -# ifelse((SMK_01A == 9), NA, SMK_01A))) -# -# packYears <- -# PackYears1.fun( -# TypeOfSmoker2, -# DHHGAGE_cont, -# agecigd, -# SMK_207, -# SMK_204, -# tsq_ds, -# SMK_208, -# SMK_05B, -# SMK_05C, -# agec1, -# s100 -# ) -# # print(paste("typeOfSmoker2 =",TypeOfSmoker2, "Age_cont =", DHHGAGE_cont, "agecigd =", agecigd, "agecigo =", SMK_207, "cigdayd =", SMK_204, -# # "tsq_ds =", tsq_ds, "cigdayf =", SMK_208, "cigdayo =", SMK_05B, "dayocc =", SMK_05C, "agec1 =", agec1, "s100 =", s100)) -# # print(paste("PACKYEARS =", packYears)) -# -# return(packYears) -# } -# PackYears1.fun <- -# function(TypeOfSmoker2, -# Age_cont, -# agecigd, -# agecigo, -# cigdayd, -# tsq_ds, -# cigdayf, -# cigdayo, -# dayocc, -# agec1, -# s100) { -# ifelse2(TypeOfSmoker2 == 1, -# pmax(((Age_cont - agecigd) * (cigdayd / 20)), 0.0137), -# ifelse2( -# TypeOfSmoker2 == 2, -# pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) -# ), 0.0137) + (pmax(( -# cigdayo * dayocc / 30 -# ), 1) * tsq_ds), -# ifelse2( -# TypeOfSmoker2 == 3, -# (pmax(( -# cigdayo * dayocc / 30 -# ), 1) / 20) * (Age_cont - agec1), -# ifelse2( -# TypeOfSmoker2 == 4, -# pmax(((Age_cont - agecigo - tsq_ds) * (cigdayf / 20) -# ), 0.0137), -# ifelse2( -# TypeOfSmoker2 == 5 & s100 == 's1001', -# 0.0137, -# ifelse2( -# TypeOfSmoker2 == 5 & s100 == 's1002', -# 0.007, -# ifelse2(TypeOfSmoker2 == -# 6, 0, NA) -# ) -# ) -# ) -# ) -# )) -# } -# ifelse2 <- function(x, a, b) { -# falseifNA <- function(x) { -# ifelse(is.na(x), FALSE, x) -# } -# ifelse(falseifNA(x), a, b) -# } \ No newline at end of file diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index 093afb70..327503f1 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -1,11 +1,11 @@ #' @export -CreateVariableDetailsTemplate <- function(x = NULL, ...) { - UseMethod("CreateVariableDetailsTemplate", x) +create_variable_details_template <- function(x = NULL, ...) { + UseMethod("create_variable_details_template", x) } #' @export -CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { - variableDetails <- +create_variable_details_template.BLLFlow <- function(bllFlow_object) { + variable_details <- data.frame( variable = character(), toType = character(), @@ -22,20 +22,20 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { variableStartLabel = character() ) # Collect all the variables in MSW variables - detectedVariables <- unique(bllFlowObject[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) + detected_variables <- unique(bllFlow_object[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) # Loop through the ddiList and add variables detected - for (singleDDI in bllFlowObject[[pkg.globals$bllFlowContent.DDI]]) { + for (single_DDI in bllFlow_object[[pkg.globals$bllFlowContent.DDI]]) { variable <- "Please Insert RecodedVariable name" toType <- "Please insert desired recoded variable type supported ones are: cat, cont" databaseStart <- - singleDDI[["ddiObject"]][["codeBook"]][["docDscr"]][["docSrc"]][["titlStmt"]][["titl"]][[1]] - # loop through detectedVariables - for (singleDetectedVariable in detectedVariables) { - if (singleDetectedVariable %in% names(singleDDI[["variableMetaData"]][["dataDscr"]])) { + single_DDI[["ddiObject"]][["codeBook"]][["docDscr"]][["docSrc"]][["titlStmt"]][["titl"]][[1]] + # loop through detected_variables + for (singleDetectedVariable in detected_variables) { + if (singleDetectedVariable %in% names(single_DDI[["variableMetaData"]][["dataDscr"]])) { variableDDI <- - singleDDI[["variableMetaData"]][["dataDscr"]][[singleDetectedVariable]] + single_DDI[["variableMetaData"]][["dataDscr"]][[singleDetectedVariable]] variableStart <- paste(databaseStart, singleDetectedVariable, sep = "::") fromType <- variableDDI$type @@ -64,34 +64,34 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { variableStartShortLabel , variableStartLabel ) - variableDetails <- rbind(variableDetails, newRow) + variable_details <- rbind(variable_details, newRow) } } } - bllFlowObject$variableDetails <- variableDetails + bllFlow_object$variable_details <- variable_details - return(bllFlowObject) + return(bllFlow_object) } # ----------- DEPRICATE NEEDS REMAKING --------- #' #' Creates a data frame that holds additional ddi data #' #' -#' #' @param variableDetails The dataframe that contains the variable information +#' #' @param variable_details The dataframe that contains the variable information #' #' that is used to populate the frame with relevant ddi info #' #' @param ddiVariables an object that is generated by populateVariables #' #' it contains the variables as well as all their value labels and min and max #' #' @return returns a dataframe containing new ddi data #' PopulateVariableDetails <- -#' function(variableDetails, +#' function(variable_details, #' ddiVariables) { #' # Used to group all the variables in the dataframe -#' variableDetails <- -#' variableDetails[order(variableDetails[[pkg.globals$argument.VariableStart]], -#' variableDetails[[pkg.globals$argument.CatStartValue]]),] +#' variable_details <- +#' variable_details[order(variable_details[[pkg.globals$argument.VariableStart]], +#' variable_details[[pkg.globals$argument.CatStartValue]]),] #' onlyDesiredVariables <- -#' variableDetails[variableDetails[[pkg.globals$argument.VariableStart]] %in% names(ddiVariables), ] +#' variable_details[variable_details[[pkg.globals$argument.VariableStart]] %in% names(ddiVariables), ] #' # Copy all the columns #' finalFrame <- onlyDesiredVariables[0, ] #' for (nameIndex in 1:length(names(ddiVariables))) { @@ -193,7 +193,7 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { #' } #' #' variablesNotRelatedToTheDDI <- -#' variableDetails[!variableDetails$variableStart %in% names(ddiVariables), ] +#' variable_details[!variable_details$variableStart %in% names(ddiVariables), ] #' finalFrame <- rbind(finalFrame, variablesNotRelatedToTheDDI) #' rownames(finalFrame) <- NULL #' @@ -207,24 +207,24 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { #' #' values from the document. No information from the worksheet is overwritten. #' #' #' #' @param ddi A string that is the file path to the DDI document -#' #' @param variableDetails A data frame containing a variable details worksheet +#' #' @param variable_details A data frame containing a variable details worksheet #' #' @return A dataframe containing the updated variable details worksheet #' #' @export #' #' @examples #' #' library(bllflow) #' #' #' #' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' #' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' #' -#' #' populatedDetails <- ProcessDDIVariableDetails(pbcDDI, variableDetails) -#' ProcessDDIVariableDetails <- function(ddi, variableDetails) { +#' #' populatedDetails <- ProcessDDIVariableDetails(pbcDDI, variable_details) +#' ProcessDDIVariableDetails <- function(ddi, variable_details) { #' variableValueList <- list() #' ddiVariables <- list() #' ddiMetaData <- ddi$variableMetaData #' ddiObject <- ddi$ddiObject #' # used for parsing out additional data -#' detectedVariables <- -#' unique(variableDetails[pkg.globals$argument.VariableStart]) +#' detected_variables <- +#' unique(variable_details[pkg.globals$argument.VariableStart]) #' # Find extra info about the variable low and high #' valueForHighLow <- list() #' @@ -232,7 +232,7 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { #' for (individualVariable in ddiObject$codeBook$dataDscr) { #' if (!is.null(attr(individualVariable, "name", exact = TRUE))) { #' ddiElementName <- attr(individualVariable, "name", exact = TRUE) -#' if (length(detectedVariables[detectedVariables$variableStart == ddiElementName, 1]) != 0) { +#' if (length(detected_variables[detected_variables$variableStart == ddiElementName, 1]) != 0) { #' valueForHighLow[[ddiElementName]] <- individualVariable$valrng$range #' valueForHighLow[[ddiElementName]][["Type"]] <- #' ifelse(attr(individualVariable, "intrvl") == "discrete", @@ -243,7 +243,7 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { #' } #' #' # Loop through every unique variable found in the VariableDetails -#' for (variableToCheck in detectedVariables[, 1]) { +#' for (variableToCheck in detected_variables[, 1]) { #' # Check if that variable is recorded in DDI #' if (variableToCheck %in% names(ddiMetaData$dataDscr)) { #' # Store the label for that variable @@ -286,7 +286,7 @@ CreateVariableDetailsTemplate.BLLFlow <- function(bllFlowObject) { #' populatedVariableDetails <- NULL #' } else{ #' populatedVariableDetails <- -#' PopulateVariableDetails(variableDetails, +#' PopulateVariableDetails(variable_details, #' ddiVariables) #' } #' diff --git a/R/bll-flow.R b/R/bll-flow.R index 64fd90bc..23fb31a9 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -1,27 +1,27 @@ #' Creates a bllflow model #' -#' Wraps up the data, variables and variableDetails arguments in an R object, +#' Wraps up the data, variables and variable_details arguments in an R object, #' making it an instance of a bllflow class and returning the resulting object. #' If a ddi argument is provided, all the metadata from the DDI document is #' imported into the R object #' -#' @param dataList A dataframe list that represents the datasets the model will be developed +#' @param data_list A dataframe list that represents the datasets the model will be developed #' on #' @param variables A dataframe that has the specification sheet for this model. An example #' of this worksheet is available here #' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=0}. -#' @param variableDetails A dataframe that is the variable details worksheet. An example +#' @param variable_details A dataframe that is the variable details worksheet. An example #' of this worksheet is available here #' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=1196358036}. -#' @param ddiList A named list that contains the ddi documents +#' @param ddi_list A named list that contains the ddi documents #' @return A named list which is an instance of the bllflow class. The items #' in the list are specified below: \cr -#' 1. dataList - A dataframe that contains the passed dataList argument \cr +#' 1. data_list - A dataframe that contains the passed data_list argument \cr #' 2. variables - A dataframe that contains the passed variables argument \cr -#' 3. variableDetails - A dataframe that contains the passed variableDetails argument \cr -#' 4. ddiList - A named list that contains the ddi found on the passed path \cr -#' 5. additionalDDIMetaData - A named list. See the return type of the \code{\link{GetDDIDescription}} function \cr -#' 6. populatedVariableDetails - A dataframe that contains the rows in the variableDetails \cr +#' 3. variable_details - A dataframe that contains the passed variable_details argument \cr +#' 4. ddi_list - A named list that contains the ddi found on the passed path \cr +#' 5. additional_DDI_meta_data - A named list. See the return type of the \code{\link{get_DDI_description}} function \cr +#' 6. populated_variable_details - A dataframe that contains the rows in the variable_details \cr #' argument but with additional data filled in using the ddi argument it's specified #' #' @export @@ -38,40 +38,40 @@ #' # Read in the variables and variable details CSV sheets which are part of the #' # master specification workbook #' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' #' # Create a bllFlow R object for the PBC model using the above variables as args #' # and store it in the pbcModel variable -#' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetails) +#' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variable_details) #' #' # The pbcModel variable is an R object of instance BLLFlow #' print(attr(pbcModel, 'class')) BLLFlow <- - function(dataList = NULL, + function(data_list = NULL, variables = NULL, - variableDetails = NULL, - ddiList = NULL) { - ddiHeader <- list() + variable_details = NULL, + ddi_list = NULL) { + ddi_header <- list() # Verify passed arg integrity for future functions - if (!is.null(dataList)) { - for (singleDataIndex in 1:length(dataList)) { - CheckIfDataFrame(dataList[[singleDataIndex]], names(dataList)[[singleDataIndex]]) + if (!is.null(data_list)) { + for (single_data_index in 1:length(data_list)) { + check_if_data_frame(data_list[[single_data_index]], names(data_list)[[single_data_index]]) } } if (!is.null(variables)) { - CheckIfDataFrame(variables, pkg.globals$argument.Variables) + check_if_data_frame(variables, pkg.globals$argument.Variables) # Change the columns needed for the functions - CheckForColumnPresence( + check_for_column_presence( c("variable", "label", "labelLong", "variableType", "units"), variables, pkg.globals$argument.Variables ) } - if (!is.null(variableDetails)) { - CheckIfDataFrame(variableDetails, + if (!is.null(variable_details)) { + check_if_data_frame(variable_details, pkg.globals$argument.VariableDetailsSheet) - CheckForColumnPresence( + check_for_column_presence( c( "variable", "toType", @@ -84,109 +84,109 @@ BLLFlow <- "recFrom", "units" ), - variableDetails, + variable_details, pkg.globals$argument.VariableDetailsSheet ) } - if (!is.null(ddiList)) { + if (!is.null(ddi_list)) { # TODO redisign to create template rather then populate add a check to verify proper structure # processedVariableDetails <- - # ProcessDDIVariableDetails(ddi, variableDetails) - for (ddiIndex in 1:length(ddiList)) { - CheckForExistanceOfInList(c("variableMetaData", "ddiObject"), - ddiList[[ddiIndex]], - paste(names(ddiList)[[ddiIndex]], "ddi")) - ddiHeader[[names(ddiList)[[ddiIndex]]]] <- - GetDDIDescription(ddiList[[ddiIndex]]) + # ProcessDDIVariableDetails(ddi, variable_details) + for (ddi_index in 1:length(ddi_list)) { + check_for_existance_of_in_list(c("variableMetaData", "ddiObject"), + ddi_list[[ddi_index]], + paste(names(ddi_list)[[ddi_index]], "ddi")) + ddi_header[[names(ddi_list)[[ddi_index]]]] <- + get_DDI_description(ddi_list[[ddi_index]]) } } else{ - ddiHeader <- NULL + ddi_header <- NULL } - bllFlowModel <- + bll_flow_model <- list( - dataList = dataList, + data_list = data_list, variables = variables, - variableDetails = variableDetails, - additionalDDIMetaData = ddiHeader, - populatedVariableDetails = NULL, - ddiList = ddiList + variable_details = variable_details, + additional_DDI_meta_data = ddi_header, + populated_variable_details = NULL, + ddi_list = ddi_list ) - attr(bllFlowModel, "class") <- "BLLFlow" + attr(bll_flow_model, "class") <- "BLLFlow" - return(bllFlowModel) + return(bll_flow_model) } #' @export -ReadData <- function(variables, dataName, pathToData, nrows = -1) { +read_data <- function(variables, data_name, path_to_data, nrows = -1) { # calculate the rows to set to null - firstRowOfData <- read.csv(file = pathToData, nrows = 1) + first_row_of_data <- read.csv(file = path_to_data, nrows = 1) - varNamesForThisData <- GetVariables.default(variables, dataName) + var_names_for_this_data <- get_variables.default(variables, data_name) - columnsToKeep <- colnames(firstRowOfData) %in% varNamesForThisData - columnClasses <- sapply(columnsToKeep, BooleanConversion) + columns_to_keep <- colnames(first_row_of_data) %in% var_names_for_this_data + column_classes <- sapply(columns_to_keep, boolean_conversion) - dataToSave <- read.csv(file = pathToData, - colClasses = columnClasses, nrows = nrows) + data_to_save <- read.csv(file = path_to_data, + colClasses = column_classes, nrows = nrows) - return(dataToSave) + return(data_to_save) } -BooleanConversion <- function(boolValue) { - retValue <- character() - if (boolValue) { - retValue <- NA +boolean_conversion <- function(bool_value) { + ret_value <- character() + if (bool_value) { + ret_value <- NA } else { - retValue <- "NULL" + ret_value <- "NULL" } - return(retValue) + return(ret_value) } #' @export -GetVariables <- function(variableSource = NULL, ...){ - UseMethod("GetVariables", variableSource) +get_variables <- function(variable_source = NULL, ...){ + UseMethod("get_variables", variable_source) } #' @export -GetVariables.BLLFlow <- function(bllFlow, dataName){ +get_variables.BLLFlow <- function(bllFlow, data_name){ variables <- bllFlow[[pkg.globals$bllFlowContent.Variables]] - return(GetVariables.default(variables, dataName)) + return(get_variables.default(variables, data_name)) } #' @export -GetVariables.default <- function(variables, dataName){ - variablesToReadList <- - variables[grepl(dataName, variables[[pkg.globals$argument.DatabaseStart]]), ] +get_variables.default <- function(variables, data_name){ + variables_to_read_list <- + variables[grepl(data_name, variables[[pkg.globals$argument.DatabaseStart]]), ] - varNamesForThisData <- list() + var_names_for_this_data <- list() - for (variableToReadRow in 1:nrow(variablesToReadList)) { - variableToRead <- - as.character(variablesToReadList[variableToReadRow, pkg.globals$argument.VariableStart]) - dataVariableBeingChecked <- character() - if (!grepl("DerivedVar", variableToRead)) { - if (grepl(dataName, variableToRead)) { - varStartNamesList <- as.list(strsplit(variableToRead, ",")[[1]]) + for (variable_to_read_row in 1:nrow(variables_to_read_list)) { + variable_to_read <- + as.character(variables_to_read_list[variable_to_read_row, pkg.globals$argument.VariableStart]) + data_variable_being_checked <- character() + if (!grepl("DerivedVar", variable_to_read)) { + if (grepl(data_name, variable_to_read)) { + var_start_names_list <- as.list(strsplit(variable_to_read, ",")[[1]]) # Find exact var Name - for (varName in varStartNamesList) { - if (grepl(dataName, varName)) { + for (var_name in var_start_names_list) { + if (grepl(data_name, var_name)) { # seperate dataname from the var name - dataVariableBeingChecked <- - as.list(strsplit(varName, "::")[[1]])[[2]] + data_variable_being_checked <- + as.list(strsplit(var_name, "::")[[1]])[[2]] } } - } else if (grepl("\\[", variableToRead)) { - dataVariableBeingChecked <- - stringr::str_match(variableToRead, "\\[(.*?)\\]")[, 2] + } else if (grepl("\\[", variable_to_read)) { + data_variable_being_checked <- + stringr::str_match(variable_to_read, "\\[(.*?)\\]")[, 2] } } - varNamesForThisData <- - append(varNamesForThisData, dataVariableBeingChecked) + var_names_for_this_data <- + append(var_names_for_this_data, data_variable_being_checked) } - varNamesForThisData <- unique(varNamesForThisData) + var_names_for_this_data <- unique(var_names_for_this_data) - return(varNamesForThisData) + return(var_names_for_this_data) } diff --git a/R/clean.R b/R/clean.R index c2b60ae9..f4fd242b 100644 --- a/R/clean.R +++ b/R/clean.R @@ -1,14 +1,14 @@ #' Clean a dataset by updating values below a certain minimum #' -#' @param bllFlowModel The bllflow model we will clean +#' @param bll_flow_model The bllflow model we will clean #' @param ... Arguments to the next method in the chain #' #' @export -clean.Min <- function(bllFlowModel, ...) { - UseMethod("clean.Min") +clean_min <- function(bll_flow_model, ...) { + UseMethod("clean_min") } -#' @describeIn clean.Min Cleans the data using the min and outlier columns in the variables sheet of +#' @describeIn clean_min Cleans the data using the min and outlier columns in the variables sheet of #' the MSW. Outlier method is applied on a row if any of the variable #' values for that row is less than the min value as specified in the variables #' sheet. Outlier checking for the column is not applied if min value is NA. @@ -21,7 +21,7 @@ clean.Min <- function(bllFlowModel, ...) { #' not meet the criteria is set to NA. \cr #' 3. \strong{Not Applicable} - TODO. \cr #' 4. \strong{Set to value} - Specified as a number value in MSW. Column value for the row is -#' set to the value specified in the outlier column. +#' set to the value specified in the outlier column. #' #' @param print A boolean which when set to TRUE prints logs of what the operation did #' @@ -32,7 +32,7 @@ clean.Min <- function(bllFlowModel, ...) { #' # Load packages #' library(survival) #' library(bllflow) -#' +#' #' # Read in the data we will use #' data(pbc) #' @@ -44,39 +44,39 @@ clean.Min <- function(bllFlowModel, ...) { #' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) #' #' # Clean the data -#' cleanedPbcModel <- bllflow::clean.Min(pbcModel) +#' cleanedPbcModel <- bllflow::clean_min(pbcModel) #' #' # If you wish to be updated in the log on what the function does set print to true -#' cleanedPbcModel <- bllflow::clean.Min(cleanedPbcModel, print=TRUE) -#' -clean.Min.BLLFlow <- function(bllFlowModel, print = FALSE, ...) { - bllFlowModel <- - ProcessMinOrMax(bllFlowModel, - pkg.globals$columnNames.Min, - print, - CheckLessThen) +#' cleanedPbcModel <- bllflow::clean_min(cleanedPbcModel, print=TRUE) +#' +clean_min.BLLFlow <- function(bll_flow_model, print = FALSE, ...) { + bll_flow_model <- + process_min_or_max(bll_flow_model, + pkg.globals$columnNames.Min, + print, + check_less_then) - return(bllFlowModel) + return(bll_flow_model) } # Less then comparing function -CheckLessThen <- - function(operatorBasedCompareValue, - valueBeingCompare) { - return(operatorBasedCompareValue < valueBeingCompare) +check_less_then <- + function(operator_based_compare_value, + value_being_compare) { + return(operator_based_compare_value < value_being_compare) } #' Cleans a dataset by updating values above a certain maximum #' -#' @param bllFlowModel The bllFlowModel we will clean +#' @param bll_flow_model The bll_flow_model we will clean #' @param ... Arguments to the next method in the chain #' #' @export -clean.Max <- function(bllFlowModel, ...) { - UseMethod("clean.Max") +clean_max <- function(bll_flow_model, ...) { + UseMethod("clean_max") } -#' @describeIn clean.Max Cleans the data using the max and outlier columns in the variables sheet of +#' @describeIn clean_max Cleans the data using the max and outlier columns in the variables sheet of #' the MSW. Outlier method is applied on a row if any of the variable #' values for that row is greater than the max value as specified in the variables #' sheet. Outlier checking for the column is not applied if max value is NA. @@ -92,7 +92,7 @@ clean.Max <- function(bllFlowModel, ...) { #' #' @param print A boolean which when set to TRUE prints logs of what the operation did #' -#' @return bllFlowModel that has had its data modified by the paramaters located in +#' @return bll_flow_model that has had its data modified by the paramaters located in #' the variables object #' @export #' @@ -100,7 +100,7 @@ clean.Max <- function(bllFlowModel, ...) { #' # Load packages #' library(survival) #' library(bllflow) -#' +#' #' # Read in the data we will use #' data(pbc) #' @@ -112,39 +112,39 @@ clean.Max <- function(bllFlowModel, ...) { #' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) #' #' # Clean the data -#' cleanedPbcModel <- bllflow::clean.Max(pbcModel) +#' cleanedPbcModel <- bllflow::clean_max(pbcModel) #' #' # If you wish to be updated in the log on what the function does set print to true -#' cleanedPbcModel <- bllflow::clean.Max(cleanedPbcModel, print=TRUE) -#' -clean.Max.BLLFlow <- function(bllFlowModel, print = FALSE, ...) { - bllFlowModel <- - ProcessMinOrMax(bllFlowModel, - pkg.globals$columnNames.Max, - print, - CheckGreaterThen) +#' cleanedPbcModel <- bllflow::clean_max(cleanedPbcModel, print=TRUE) +#' +clean_max.BLLFlow <- function(bll_flow_model, print = FALSE, ...) { + bll_flow_model <- + process_min_or_max(bll_flow_model, + pkg.globals$columnNames.Max, + print, + check_greater_then) - return(bllFlowModel) + return(bll_flow_model) } # Greater then comparing function -CheckGreaterThen <- - function(operatorBasedCompareValue, - valueBeingCompare) { - return(operatorBasedCompareValue > valueBeingCompare) +check_greater_then <- + function(operator_based_compare_value, + value_being_compare) { + return(operator_based_compare_value > value_being_compare) } # Internal helper functions ------------------------------------------------------------------ # Function for actually manipulating the data -ProcessMinOrMax <- - function(bllFlowModel, +process_min_or_max <- + function(bll_flow_model, operation, print, - PerformRowCheck) { + perform_row_check) { # This is to only store rows which contain instructions for the Operator # This is done to avoid parsing through unafected variables - variablesToCheck <- - apply(bllFlowModel$variables, 1, function(y) + variables_to_check <- + apply(bll_flow_model$variables, 1, function(y) if (!is.na(y[operation])) { return(list( variable = y[["variable"]], @@ -153,76 +153,85 @@ ProcessMinOrMax <- )) }) # Apply creates list of length of all rows it checks this removes the ones that had no data added - variablesToCheck[sapply(variablesToCheck, is.null)] <- NULL + variables_to_check[sapply(variables_to_check, is.null)] <- NULL # Check if all the variables from variables to check exist in the data - CheckForExistanceOfInList(variablesToCheck, colnames(bllFlowModel$data)) + check_for_existance_of_in_list(variables_to_check, colnames(bll_flow_model$data)) # Clean the affected rows - for (variableRowBeingChecked in variablesToCheck) { - numTotalRows <- nrow(bllFlowModel$data) - numAffectedRows <- 0 + for (variable_row_being_checked in variables_to_check) { + num_total_rows <- nrow(bll_flow_model$data) + num_affected_rows <- 0 # Does not remove NA rows only less then or greater then # Handling for the delete outlier - if (variableRowBeingChecked[[pkg.globals$columnNames.Outlier]] == "delete") { + if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "delete") { # Remove all rows that pass the rowCheck - bllFlowModel$data <- - bllFlowModel$data[!( - PerformRowCheck(bllFlowModel$data[variableRowBeingChecked$variable], variableRowBeingChecked$operation) & - !is.na(bllFlowModel$data[variableRowBeingChecked$variable]) - ), ] + bll_flow_model$data <- + bll_flow_model$data[!( + perform_row_check( + bll_flow_model$data[variable_row_being_checked$variable], + variable_row_being_checked$operation + ) & + !is.na(bll_flow_model$data[variable_row_being_checked$variable]) + ),] - numAffectedRows <- numTotalRows - nrow(bllFlowModel$data) + num_affected_rows <- + num_total_rows - nrow(bll_flow_model$data) # Handle missing outlier - } else if (variableRowBeingChecked[[pkg.globals$columnNames.Outlier]] == "missing") { + } else if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "missing") { # this checks how many rows contained missing before the function was ran to calculate how many were changed - numPreContainRows <- - length(which(is.na(bllFlowModel$data[variableRowBeingChecked$variable]))) - bllFlowModel$data[variableRowBeingChecked$variable][PerformRowCheck(bllFlowModel$data[variableRowBeingChecked$variable], variableRowBeingChecked$operation)] <- + num_pre_contain_rows <- + length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) + bll_flow_model$data[variable_row_being_checked$variable][perform_row_check(bll_flow_model$data[variable_row_being_checked$variable], + variable_row_being_checked$operation)] <- NA - numPostRows <- - length(which(is.na(bllFlowModel$data[variableRowBeingChecked$variable]))) - numAffectedRows <- numPostRows - numPreContainRows + num_post_rows <- + length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) + num_affected_rows <- num_post_rows - num_pre_contain_rows # Handle the replace with outlier - } else if (!is.na(as.numeric(variableRowBeingChecked[[pkg.globals$columnNames.Outlier]]))) { + } else if (!is.na(as.numeric(variable_row_being_checked[[pkg.globals$columnNames.Outlier]]))) { # Check how many rows already contained the number that is being changed too to give exact number of changed rows - numPreContainRows <- - length(which(bllFlowModel$data[variableRowBeingChecked$variable] == variableRowBeingChecked[[pkg.globals$columnNames.Outlier]])) - bllFlowModel$data[variableRowBeingChecked$variable][PerformRowCheck(bllFlowModel$data[variableRowBeingChecked$variable], variableRowBeingChecked$operation)] <- - variableRowBeingChecked[[pkg.globals$columnNames.Outlier]] - numPostRows <- - length(which(bllFlowModel$data[variableRowBeingChecked$variable] == variableRowBeingChecked[[pkg.globals$columnNames.Outlier]])) - numAffectedRows <- numPostRows - numPreContainRows + num_pre_contain_rows <- + length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) + bll_flow_model$data[variable_row_being_checked$variable][perform_row_check(bll_flow_model$data[variable_row_being_checked$variable], + variable_row_being_checked$operation)] <- + variable_row_being_checked[[pkg.globals$columnNames.Outlier]] + num_post_rows <- + length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) + num_affected_rows <- num_post_rows - num_pre_contain_rows # Handle non supported outlier } else { - stop(paste("Unsupported outlier method ", variableRowBeingChecked[[pkg.globals$columnNames.Outlier]])) + stop(paste( + "Unsupported outlier method ", + variable_row_being_checked[[pkg.globals$columnNames.Outlier]] + )) } # Log the the activity of this outlier - bllFlowModel <- - LogFunctionActivity( - bllFlowModel, - numTotalRows, - numAffectedRows, - variableRowBeingChecked[[pkg.globals$columnNames.Outlier]], + bll_flow_model <- + log_function_activity( + bll_flow_model, + num_total_rows, + num_affected_rows, + variable_row_being_checked[[pkg.globals$columnNames.Outlier]], paste( - variableRowBeingChecked$variable, + variable_row_being_checked$variable, " ", operation, " at ", - variableRowBeingChecked$operation, + variable_row_being_checked$operation, sep = "" ), paste("clean.", operation, ".BLLFlow", sep = ""), - variableRowBeingChecked$variable, - variableRowBeingChecked$operation, + variable_row_being_checked$variable, + variable_row_being_checked$operation, print ) } - return(bllFlowModel) + return(bll_flow_model) } diff --git a/R/create-reference.R b/R/create-reference.R index 77d95b01..414b9c2c 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -2,44 +2,44 @@ #' #' This object is used to generate the PMML file, for manuscript figures and other uses. #' -#' @param modelObject The object that is returned when a model is created. -#' @param modelType values = crr, NULL. The class name of the modelObject. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. -#' @param tableOne The object returned by createTableOne(). -#' @param modelData The data used to generate the model. -#' @param calculateMean default = TRUE. If the means should be included in the table -#' @param baselineRiskTimeFrame default = 5. The time for the baseline risk make sure to only use years as input +#' @param model_object The object that is returned when a model is created. +#' @param model_type values = crr, NULL. The class name of the model_object. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. +#' @param table_one The object returned by createTableOne(). +#' @param model_data The data used to generate the model. +#' @param calculate_mean default = TRUE. If the means should be included in the table +#' @param baseline_risk_time_frame default = 5. The time for the baseline risk make sure to only use years as input #' @export -CreateBLLModelObject <- - function(modelData, - modelObject, - tableOne = NULL, - modelType = NULL, - calculateMean = TRUE, - baselineRiskTimeFrame = 5) { +create_BLL_model_object <- + function(model_data, + model_object, + table_one = NULL, + model_type = NULL, + calculate_mean = TRUE, + baseline_risk_time_frame = 5) { # ----Step 1: verify input/create not passed input---- - supportedModelTypes <- c("crr") - varNames <- attr(modelObject$coef, "names") + supported_model_types <- c("crr") + var_names <- attr(model_object$coef, "names") - if (!class(modelObject) %in% supportedModelTypes) { + if (!class(model_object) %in% supported_model_types) { stop("Passed model type is not yet supported. Aborting!") } - if (is.null(tableOne)) { - tableOne <- - tableone::CreateTableOne(data = modelData, vars = varNames) + if (is.null(table_one)) { + table_one <- + tableone::CreateTableOne(data = model_data, vars = var_names) } else { - for (varName in varNames) { - if (!varName %in% tableOne[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { + for (var_name in var_names) { + if (!var_name %in% table_one[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { # Issue warning before creating table one warning( "Passed table one does not contain the vars in the passed model. Creating new TableOne \n" ) - # Verify data contains the varNames - varInData <- varNames %in% colnames(modelData) - if (all(varInData)) { - tableOne <- - tableone::CreateTableOne(data = modelData, vars = varNames) + # Verify data contains the var_names + var_in_data <- var_names %in% colnames(model_data) + if (all(var_in_data)) { + table_one <- + tableone::CreateTableOne(data = model_data, vars = var_names) } else { - stop("The modelData does not contain all the variables from the model. Aborting!") + stop("The model_data does not contain all the variables from the model. Aborting!") } break() } @@ -48,30 +48,30 @@ CreateBLLModelObject <- # ----Step 2: Generate model object ---- # Obtain the beta coefficient - betaCoefficient <- modelObject$coef - allStrataVarMeans <- list() - retTable <- - data.frame(betaCoefficient = betaCoefficient, row.names = varNames) + beta_coefficient <- model_object$coef + all_strata_var_means <- list() + ret_table <- + data.frame(beta_coefficient = beta_coefficient, row.names = var_names) # Obtain the means - if (calculateMean) { - if (!is.null(tableOne$ContTable)) { - for (strataVar in length(tableOne$ContTable)) { - allStrataVarMeans[[strataVar]] <- - tableOne$ContTable[[strataVar]][varNames, pkg.globals$tableOne.Mean] - retTable[[pkg.globals$tableOne.Mean]] <- - allStrataVarMeans[[strataVar]] + if (calculate_mean) { + if (!is.null(table_one$ContTable)) { + for (strataVar in length(table_one$ContTable)) { + all_strata_var_means[[strataVar]] <- + table_one$ContTable[[strataVar]][var_names, pkg.globals$tableOne.Mean] + ret_table[[pkg.globals$tableOne.Mean]] <- + all_strata_var_means[[strataVar]] } } else { - warning("The tableOne does not contain cont table therefore means were not calculated") + warning("The table_one does not contain cont table therefore means were not calculated") } } - baselineRisk <- CalculateBaselineRisk(modelObject, (365.25*baselineRiskTimeFrame)) + baseline_risk <- calculate_baseline_risk(model_object, (365.25*baseline_risk_time_frame)) - return(list(reference = retTable, baseline = baselineRisk)) + return(list(reference = ret_table, baseline = baseline_risk)) } -CalculateBaselineRisk <- function(model, time) { +calculate_baseline_risk <- function(model, time) { jumps <- data.frame(time = model$uftime, bfitj = model$bfitj) jumps_time <- jumps[jumps$time <= time, ] b0 <- sum(jumps_time$bfitj) diff --git a/R/ddi-utils.R b/R/ddi-utils.R index c54499ab..b9b86d97 100644 --- a/R/ddi-utils.R +++ b/R/ddi-utils.R @@ -5,47 +5,47 @@ #' 1. Variables info as well as values labels for categorical variables \cr #' 2. Study Related Metadata #' -#' @param ddiPath A string containing the path to the directory that has the +#' @param ddi_path A string containing the path to the directory that has the #' DDI document -#' @param ddiFile A string containing the name of the DDI document +#' @param ddi_file A string containing the name of the DDI document #' @return A named list which is an instance of a BLLFlowDDI class. The list #' contains the following members: \cr -#' 1. variableMetaData - A named list. It's value comes from calling the \cr +#' 1. variable_meta_data - A named list. It's value comes from calling the \cr #' \link[DDIwR]{getMetadata} function \cr -#' 2. additionalDDIMetaData - A named list containig the remaining nodes in the DDI document +#' 2. additional_DDI_meta_data - A named list containig the remaining nodes in the DDI document #' #' @export #' @examples #' library(bllflow) #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -ReadDDI <- function(ddiPath, ddiFile) { +#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +read_DDI <- function(ddi_path, ddi_file) { # DDwR crates lots of cat outputs that are suppressed - ddiMetaData <- - SuppressFunctionOutput(DDIwR::getMetadata(paste(ddiPath, ddiFile, sep = "/"))) - additionalDDIMetaData <- - xml2::as_list(xml2::read_xml(paste(ddiPath, ddiFile, sep = "/"))) - for (singleVariableIndex in 1:length(additionalDDIMetaData$codeBook$dataDscr)) { - if (!is.null(attr(additionalDDIMetaData$codeBook$dataDscr[[singleVariableIndex]], "name", exact = TRUE))) { - varName <- - attr(additionalDDIMetaData$codeBook$dataDscr[[singleVariableIndex]], + ddi_meta_data <- + suppress_function_output(DDIwR::getMetadata(paste(ddi_path, ddi_file, sep = "/"))) + additional_DDI_meta_data <- + xml2::as_list(xml2::read_xml(paste(ddi_path, ddi_file, sep = "/"))) + for (single_variable_index in 1:length(additional_DDI_meta_data$codeBook$dataDscr)) { + if (!is.null(attr(additional_DDI_meta_data$codeBook$dataDscr[[single_variable_index]], "name", exact = TRUE))) { + var_name <- + attr(additional_DDI_meta_data$codeBook$dataDscr[[single_variable_index]], "name", exact = TRUE) - names(additionalDDIMetaData$codeBook$dataDscr)[singleVariableIndex] <- - varName + names(additional_DDI_meta_data$codeBook$dataDscr)[single_variable_index] <- + var_name } } - ddiObject <- - list(variableMetaData = ddiMetaData, ddiObject = additionalDDIMetaData) - attr(ddiObject, "class") <- - c(attr(ddiObject, "class"), "BLLFlowDDI") + ddi_object <- + list(variable_meta_data = ddi_meta_data, ddi_object = additional_DDI_meta_data) + attr(ddi_object, "class") <- + c(attr(ddi_object, "class"), "BLLFlowDDI") - return(ddiObject) + return(ddi_object) } # Prevents function from writing Cat to console -SuppressFunctionOutput <- function(x) { +suppress_function_output <- function(x) { sink(tempfile()) on.exit(sink()) invisible(force(x)) @@ -56,7 +56,7 @@ SuppressFunctionOutput <- function(x) { #' Retreives the docDscr, stdyDscr and fileDscr nodes from a DDI document, storing #' them in a named list and returning the list #' -#' @param ddi A named list created using the \code{\link{ReadDDI}} function +#' @param ddi A named list created using the \code{\link{read_DDI}} function #' @return Returns a named list with the following members: \cr #' docDscr - Contains the docDscr node in the DDI document \cr #' stdyDscr - Contains the stdyDscr node in the DDI document \cr @@ -66,19 +66,19 @@ SuppressFunctionOutput <- function(x) { #' @examples #' library(bllflow) #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") #' -#' pbcDDIHeaders <- bllflow::GetDDIDescription(pbcDDI) +#' pbcDDIHeaders <- bllflow::get_DDI_description(pbcDDI) #' print(names(pbcDDIHeaders)) -GetDDIDescription <- function(ddi) { - ddiObject <- ddi$ddiObject - additionalDDIMetaData <- list( - docDscr = ddiObject$codeBook$docDscr, - stdyDscr = ddiObject$codeBook$stdyDscr, - fileDscr = ddiObject$codeBook$fileDscr +get_DDI_description <- function(ddi) { + ddi_object <- ddi$ddi_object + additional_DDI_meta_data <- list( + docDscr = ddi_object$codeBook$docDscr, + stdyDscr = ddi_object$codeBook$stdyDscr, + fileDscr = ddi_object$codeBook$fileDscr ) - return(additionalDDIMetaData) + return(additional_DDI_meta_data) } #' Writes a variable details CSV sheet to file @@ -86,16 +86,16 @@ GetDDIDescription <- function(ddi) { #' @param ... The next method in the chain #' #' @export -WriteDDIPopulatedMSW <- function(x, ...) { - UseMethod("WriteDDIPopulatedMSW", x) +write_DDI_populated_MSW <- function(x, ...) { + UseMethod("write_DDI_populated_MSW", x) } -#' @describeIn WriteDDIPopulatedMSW The populatedVariableDetails data frame within a bllflow model is written +#' @describeIn write_DDI_populated_MSW The populated_variable_details data frame within a bllflow model is written #' as a CSV file #' -#' @param pathToWriteTo A string containing the path to the directory +#' @param path_to_write_to A string containing the path to the directory #' where the file should be writtem -#' @param newFileName A string containing the name of the written file +#' @param new_file_name A string containing the name of the written file #' #' @export #' @examples @@ -108,41 +108,41 @@ WriteDDIPopulatedMSW <- function(x, ...) { #' #' data(pbc) #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") #' #' # Read the MSW files #' variables <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' #' # Create a BLLFlow object and add labels. -#' pbcModel <- bllflow::BLLFlow(pbc, variables, variableDetails, pbcDDI) +#' pbcModel <- bllflow::BLLFlow(pbc, variables, variable_details, pbcDDI) #' #' -#' bllflow::WriteDDIPopulatedMSW(pbcModel, "../../inst/extdata/", "newMSWvariableDetails.csv") +#' bllflow::write_DDI_populated_MSW(pbcModel, "../../inst/extdata/", "newMSWvariableDetails.csv") #' } #' -WriteDDIPopulatedMSW.BLLFlow <- - function(x, pathToWriteTo, newFileName, ...) { +write_DDI_populated_MSW.BLLFlow <- + function(x, path_to_write_to, new_file_name, ...) { bllFlow <- x # create new directory if one does not exist - if (!dir.exists(pathToWriteTo)) { - dir.create(file.path(getwd(), pathToWriteTo)) + if (!dir.exists(path_to_write_to)) { + dir.create(file.path(getwd(), path_to_write_to)) } write.csv(bllFlow[[pkg.globals$bllFlowContent.PopulatedVariableDetails]], - file = file.path(pathToWriteTo, newFileName), + file = file.path(path_to_write_to, new_file_name), row.names = FALSE) } -#' @describeIn WriteDDIPopulatedMSW Updates an existing variable details worksheet +#' @describeIn write_DDI_populated_MSW Updates an existing variable details worksheet #' with metadata from a ddi document and then writes the new variable details #' sheet to file. The new sheet is saved in the same directory as the old sheet. The -#' first argument should be an object returned by the \code{\link{ReadDDI}} function. +#' first argument should be an object returned by the \code{\link{read_DDI}} function. #' -#' @param pathToMSW A string containing the path to the directory with the variable details sheet -#' @param mswName A string containing the name of the variable details sheet -#' @param newName A string containing the name of the new variable details sheet +#' @param path_to_MSW A string containing the path to the directory with the variable details sheet +#' @param msw_name A string containing the name of the variable details sheet +#' @param new_name A string containing the name of the new variable details sheet #' #' @export #' @examples @@ -152,34 +152,34 @@ WriteDDIPopulatedMSW.BLLFlow <- #' #' library(bllflow) #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") #' -#' bllflow::WriteDDIPopulatedMSW(pbcDDI, "../../inst/extdata/", "PBC-variableDetails.csv", "newName.csv") +#' bllflow::write_DDI_populated_MSW(pbcDDI, "../../inst/extdata/", "PBC-variableDetails.csv", "new_name.csv") #' } -WriteDDIPopulatedMSW.BLLFlowDDI <- - function(x, pathToMSW, mswName, newName = NULL, ...) { +write_DDI_populated_MSW.BLLFlowDDI <- + function(x, path_to_MSW, msw_name, new_name = NULL, ...) { ddi <- x - if (!file.exists(file.path(pathToMSW, mswName))) { - stop(paste("The MSW file is not present in", pathToMSW), call. = FALSE) + if (!file.exists(file.path(path_to_MSW, msw_name))) { + stop(paste("The MSW file is not present in", path_to_MSW), call. = FALSE) } - variableDetails <- read.csv(file.path(pathToMSW, mswName)) - populatedVariableDetails <- - ProcessDDIVariableDetails(ddi, variableDetails) + variable_details <- read.csv(file.path(path_to_MSW, msw_name)) + populated_variable_details <- + process_DDI_variable_details(ddi, variable_details) # create new directory if one does not exist - if (!dir.exists(pathToMSW)) { - dir.create(file.path(getwd(), pathToMSW)) + if (!dir.exists(path_to_MSW)) { + dir.create(file.path(getwd(), path_to_MSW)) } # generate name for new file name if one is not provided - if (is.null(newName)) { - newName <- paste(mswName, "DDIPopulated.csv", sep = "") + if (is.null(new_name)) { + new_name <- paste(msw_name, "DDIPopulated.csv", sep = "") } write.csv( - populatedVariableDetails, - file = file.path(pathToMSW, newName), + populated_variable_details, + file = file.path(path_to_MSW, new_name), row.names = FALSE ) } @@ -187,39 +187,39 @@ WriteDDIPopulatedMSW.BLLFlowDDI <- #' Retreives variables in a DDI document #' #' Returns a list of dataDscr nodes from a DDI document which represent -#' variables provided in the varList argument +#' variables provided in the var_list argument #' -#' @param ddi A named list returned by the \code{\link{ReadDDI}} function -#' @param varList A list of strings that represents variable names +#' @param ddi A named list returned by the \code{\link{read_DDI}} function +#' @param var_list A list of strings that represents variable names #' @return Returns a list containing the dataDscr nodes from the DDI document, -#' each one of which matches with an entry in the varList argument +#' each one of which matches with an entry in the var_list argument #' @export #' @examples #' library(bllflow) #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") #' -#' varsForPBC <- bllflow::GetDDIVariables(pbcDDI, c("age", "sex")) +#' varsForPBC <- bllflow::get_DDI_variables(pbcDDI, c("age", "sex")) #' print(attr(varsForPBC[[1]], 'name')) #' print(varsForPBC[[1]]$labl) -GetDDIVariables <- function(ddi, varList) { - ddiVariables <- list() - requestedVariableIndexes <- - which(names(ddi$ddiObject$codeBook$dataDscr) %in% varList) - ddiVariables <- - ddi$ddiObject$codeBook$dataDscr[requestedVariableIndexes] +get_DDI_variables <- function(ddi, var_list) { + ddi_variables <- list() + requested_variable_indexes <- + which(names(ddi$ddi_object$codeBook$dataDscr) %in% var_list) + ddi_variables <- + ddi$ddi_object$codeBook$dataDscr[requested_variable_indexes] - return(ddiVariables) + return(ddi_variables) } #' Updates the model specification worksheet (MSW) of a bllflow model. Also updates #' the variable details sheet with metadata from a ddi document from the original #' bllflow model if it exists. #' -#' @param bllModel A bllflow instance whose MSW will be updated -#' @param newMSWVariables A dataframe containing the new MSW variables sheet -#' @param newMSWVariableDeatails A dataframe containing the new MSW variable details sheet -#' @param newDDI A ddi object to add to bllModel +#' @param bll_model A bllflow instance whose MSW will be updated +#' @param new_MSW_variables A dataframe containing the new MSW variables sheet +#' @param new_MSW_variable_deatails A dataframe containing the new MSW variable details sheet +#' @param new_DDI A ddi object to add to bll_model #' @return bllflow model with it's respective MSW members updated. #' #' @export @@ -229,39 +229,39 @@ GetDDIVariables <- function(ddi, varList) { #' #' data(pbc) #' -#' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") #' #' # Read the MSW files #' variables <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' #' # Create a BLLFlow object and add labels. -#' pbcModel <- bllflow::BLLFlow(pbc, variables, variableDetails, pbcDDI) -#' -#' pbcModel <- bllflow::UpdateMSW(pbcModel, variables, variableDetails) -#' pbcModel <- bllflow::UpdateMSW(pbcModel, variables) -#' pbcModel <- bllflow::UpdateMSW(pbcModel, newMSWVariableDeatails = variableDetails) -UpdateMSW <- function(bllModel, - newMSWVariables = NULL, - newMSWVariableDeatails = NULL, - newDDI = NULL) { - if (!is.null(newDDI)) { - bllModel[[pkg.globals$bllFlowContent.DDI]] <- newDDI - bllModel[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- - ProcessDDIVariableDetails(bllModel[[pkg.globals$bllFlowContent.DDI]], bllModel[[pkg.globals$bllFlowContent.VariableDetails]]) - bllModel[[pkg.globals$bllFlowContent.AdditionalMetaData]] <- GetDDIDescription(newDDI) +#' pbcModel <- bllflow::BLLFlow(pbc, variables, variable_details, pbcDDI) +#' +#' pbcModel <- bllflow::update_MSW(pbcModel, variables, variable_details) +#' pbcModel <- bllflow::update_MSW(pbcModel, variables) +#' pbcModel <- bllflow::update_MSW(pbcModel, new_MSW_variable_deatails = variable_details) +update_MSW <- function(bll_model, + new_MSW_variables = NULL, + new_MSW_variable_deatails = NULL, + new_DDI = NULL) { + if (!is.null(new_DDI)) { + bll_model[[pkg.globals$bllFlowContent.DDI]] <- new_DDI + bll_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- + process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], bll_model[[pkg.globals$bllFlowContent.VariableDetails]]) + bll_model[[pkg.globals$bllFlowContent.AdditionalMetaData]] <- get_DDI_description(new_DDI) } - if (!is.null(newMSWVariables)) { - bllModel[[pkg.globals$bllFlowContent.Variables]] <- newMSWVariables + if (!is.null(new_MSW_variables)) { + bll_model[[pkg.globals$bllFlowContent.Variables]] <- new_MSW_variables } - if (!is.null(newMSWVariableDeatails)) { - bllModel[[pkg.globals$bllFlowContent.VariableDetails]] <- - newMSWVariableDeatails - if (!is.null(bllModel[[pkg.globals$bllFlowContent.DDI]])) { - bllModel[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- - ProcessDDIVariableDetails(bllModel[[pkg.globals$bllFlowContent.DDI]], newMSWVariableDeatails) + if (!is.null(new_MSW_variable_deatails)) { + bll_model[[pkg.globals$bllFlowContent.VariableDetails]] <- + new_MSW_variable_deatails + if (!is.null(bll_model[[pkg.globals$bllFlowContent.DDI]])) { + bll_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- + process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], new_MSW_variable_deatails) } } - return(bllModel) + return(bll_model) } \ No newline at end of file diff --git a/R/error-check.R b/R/error-check.R index d5fdd66e..5307720e 100644 --- a/R/error-check.R +++ b/R/error-check.R @@ -1,56 +1,56 @@ -CheckForColumnPresence <- function(names, frame, frameName) { - missingColNames <- names[names %in% colnames(frame) == FALSE] - if (length(missingColNames) != 0) { +check_for_column_presence <- function(names, frame, frame_name) { + missing_col_names <- names[names %in% colnames(frame) == FALSE] + if (length(missing_col_names) != 0) { stop(paste( "Column(s)", - missingColNames, + missing_col_names, "are missing from ", - frameName, + frame_name, "\n" )) } } -CheckForExistanceOfInList <- function(names, passedList, listName) { - for (name.checkRow in names) { - if (!(name.checkRow %in% names(passedList))) { - stop(paste("The", name.checkRow, "is missing from the", listName)) +check_for_existance_of_in_list <- function(names, passed_list, list_name) { + for (name.check_row in names) { + if (!(name.check_row %in% names(passed_list))) { + stop(paste("The", name.check_row, "is missing from the", list_name)) } } } -CheckIfDataFrame <- function(passedFrame, passedName) { - if (!is.data.frame(passedFrame)) { - stop(paste("The ", passedName, " object is not a data frame")) +check_if_data_frame <- function(passed_frame, passed_name) { + if (!is.data.frame(passed_frame)) { + stop(paste("The ", passed_name, " object is not a data frame")) } } -CheckIfCellIsEmpty <- - function(cellContent, - rowNumber, - columnName, - ddiValue) { - isEmpty <- TRUE - if (!is.null(cellContent) && - !is.na(cellContent) && - cellContent != "" && cellContent != ddiValue) { +check_if_cell_is_empty <- + function(cell_content, + row_number, + column_name, + ddi_value) { + is_empty <- TRUE + if (!is.null(cell_content) && + !is.na(cell_content) && + cell_content != "" && cell_content != ddi_value) { warning( paste( "Row ", - rowNumber, + row_number, ":", - columnName, + column_name, " column has value \"", - cellContent, + cell_content, "\" but DDI value is \"", - ddiValue, + ddi_value, "\". Not overwriting" ), call. = FALSE, immediate. = TRUE ) - isEmpty <- FALSE + is_empty <- FALSE } - return(isEmpty) + return(is_empty) } \ No newline at end of file diff --git a/R/label-utils.R b/R/label-utils.R index ae5d71ab..a6def3d8 100644 --- a/R/label-utils.R +++ b/R/label-utils.R @@ -1,60 +1,60 @@ #' @export -SetDataLabels <- - function(dataToLabel, - variableDetails, - variablesSheet = NULL) { +set_data_labels <- + function(data_to_label, + variable_details, + variables_sheet = NULL) { # Extract variables in the data - variableNames <- unique(colnames(dataToLabel)) + variable_names <- unique(colnames(data_to_label)) # extract only relevant variable info - if (!is.null(variableDetails)) { - variableDetails <- - variableDetails[variableDetails[[pkg.globals$argument.Variables]] %in% variableNames,] - if (is.null(variablesSheet)){ - variableDetails[[pkg.globals$MSW.Variables.Columns.Label]] <- NA - variableDetails[[pkg.globals$MSW.Variables.Columns.LabelLong]] <- NA + if (!is.null(variable_details)) { + variable_details <- + variable_details[variable_details[[pkg.globals$argument.Variables]] %in% variable_names,] + if (is.null(variables_sheet)){ + variable_details[[pkg.globals$MSW.Variables.Columns.Label]] <- NA + variable_details[[pkg.globals$MSW.Variables.Columns.LabelLong]] <- NA } } - if (!is.null(variablesSheet)) { - variablesSheet <- - variablesSheet[variablesSheet[[pkg.globals$argument.Variables]] %in% variableNames,] - variableDetails <- UpdateVariableDetailsBasedOnVariableSheet(variableSheet = variablesSheet, variableDetails = variableDetails) + if (!is.null(variables_sheet)) { + variables_sheet <- + variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% variable_names,] + variable_details <- UpdateVariableDetailsBasedOnVariableSheet(variableSheet = variables_sheet, variable_details = variable_details) } - labelList <- NULL - for (variableName in variableNames) { - rowsToProcess <- variableDetails[variableDetails[[pkg.globals$argument.Variables]] == variableName,] - labelList[[variableName]] <- CreateLabelListElement(rowsToProcess) + label_list <- NULL + for (variable_name in variable_names) { + rows_to_process <- variable_details[variable_details[[pkg.globals$argument.Variables]] == variable_name,] + label_list[[variable_name]] <- create_label_list_element(rows_to_process) } - dataToLabel <- LabelData(labelList, dataToLabel) + data_to_label <- label_data(label_list, data_to_label) - return(dataToLabel) + return(data_to_label) } -CreateLabelListElement <- function(variableRows) { - retList <- list( +create_label_list_element <- function(variable_rows) { + ret_list <- list( type = NULL, unit = NULL, - labelLong = NULL, + label_long = NULL, label = NULL, values = c(), - valuesLong = c() + values_long = c() ) - firstRow <- variableRows[1, ] - retList$type <- - as.character(firstRow[[pkg.globals$argument.ToType]]) - retList$unit <- - as.character(firstRow[[pkg.globals$argument.Units]]) - retList$labelLong <- - as.character(firstRow[[pkg.globals$argument.VariableLabel]]) - retList$label <- - as.character(firstRow[[pkg.globals$argument.VariableLabelShort]]) - if (isEqual(retList$type, pkg.globals$ddiValueName.Cat)) { - for (rowIndex in 1:nrow(variableRows)) { - singleRow <- variableRows[rowIndex, ] + first_row <- variable_rows[1, ] + ret_list$type <- + as.character(first_row[[pkg.globals$argument.ToType]]) + ret_list$unit <- + as.character(first_row[[pkg.globals$argument.Units]]) + ret_list$label_long <- + as.character(first_row[[pkg.globals$argument.VariableLabel]]) + ret_list$label <- + as.character(first_row[[pkg.globals$argument.VariableLabelShort]]) + if (is_equal(ret_list$type, pkg.globals$ddiValueName.Cat)) { + for (row_index in 1:nrow(variable_rows)) { + single_row <- variable_rows[row_index, ] # Verify type stays the same - if (!isEqual(retList$type, as.character(singleRow[[pkg.globals$argument.ToType]]))) { + if (!is_equal(ret_list$type, as.character(single_row[[pkg.globals$argument.ToType]]))) { stop( paste( - as.character(singleRow[[pkg.globals$argument.Variables]]), + as.character(single_row[[pkg.globals$argument.Variables]]), "does not contain all identical", pkg.globals$argument.ToType, "variable cant change variable type for different values" @@ -62,10 +62,10 @@ CreateLabelListElement <- function(variableRows) { ) } # Verify unit is identical - if (!isEqual(retList$unit, as.character(singleRow[[pkg.globals$argument.Units]]))) { + if (!is_equal(ret_list$unit, as.character(single_row[[pkg.globals$argument.Units]]))) { stop( paste( - as.character(singleRow[[pkg.globals$argument.Variables]]), + as.character(single_row[[pkg.globals$argument.Variables]]), "does not contain all identical", pkg.globals$argument.Units, "variable cant change unit type for different values" @@ -73,66 +73,66 @@ CreateLabelListElement <- function(variableRows) { ) } # Verify variable label is identical - if (!isEqual(retList$labelLong, - as.character(singleRow[[pkg.globals$argument.VariableLabel]]))) { + if (!is_equal(ret_list$label_long, + as.character(single_row[[pkg.globals$argument.VariableLabel]]))) { stop( paste( - as.character(singleRow[[pkg.globals$argument.Variables]]), + as.character(single_row[[pkg.globals$argument.Variables]]), "does not contain all identical", pkg.globals$argument.VariableLabel, "variable cant change variableLabel for different values. VAL1:", - retList$labelLong, + ret_list$label_long, "VAL2:", - as.character(singleRow[[pkg.globals$argument.VariableLabel]]) + as.character(single_row[[pkg.globals$argument.VariableLabel]]) ) ) } - valueBeingLabeled <- as.character(singleRow[[pkg.globals$argument.CatValue]]) - valueBeingLabeled <- RecodeVariableNAFormating(valueBeingLabeled, retList$type) - retList$values[[as.character(singleRow[[pkg.globals$argument.CatLabel]])]] <- - valueBeingLabeled - retList$valuesLong[[as.character(singleRow[[pkg.globals$argument.CatLabelLong]])]] <- - valueBeingLabeled + value_being_labeled <- as.character(single_row[[pkg.globals$argument.CatValue]]) + value_being_labeled <- recode_variable_NA_formating(value_being_labeled, ret_list$type) + ret_list$values[[as.character(single_row[[pkg.globals$argument.CatLabel]])]] <- + value_being_labeled + ret_list$values_long[[as.character(single_row[[pkg.globals$argument.CatLabelLong]])]] <- + value_being_labeled } } - return(retList) + return(ret_list) } -#' LabelData +#' label_data #' #' Attaches labels to the DataToLabel to preserve metadata #' -#' @param labelList the label list object that contains extracted labels from variable details -#' @param dataToLabel The data that is to be labeled +#' @param label_list the label list object that contains extracted labels from variable details +#' @param data_to_label The data that is to be labeled #' #' @return Returns labeled data -LabelData <- function(labelList, dataToLabel) { - for (variableName in names(labelList)) { - if (labelList[[variableName]]$type == pkg.globals$argument.CatType) { - if (class(dataToLabel[[variableName]]) != "factor") { - dataToLabel[[variableName]] <- factor(dataToLabel[[variableName]]) +label_data <- function(label_list, data_to_label) { + for (variable_name in names(label_list)) { + if (label_list[[variable_name]]$type == pkg.globals$argument.CatType) { + if (class(data_to_label[[variable_name]]) != "factor") { + data_to_label[[variable_name]] <- factor(data_to_label[[variable_name]]) } - dataToLabel[[variableName]] <- - sjlabelled::set_labels(dataToLabel[[variableName]], labels = labelList[[variableName]]$values) - attr(dataToLabel[[variableName]], "labelsLong") <- - labelList[[variableName]]$valuesLong + data_to_label[[variable_name]] <- + sjlabelled::set_labels(data_to_label[[variable_name]], labels = label_list[[variable_name]]$values) + attr(data_to_label[[variable_name]], "labels_long") <- + label_list[[variable_name]]$values_long } else{ - if (class(dataToLabel[[variableName]]) == "factor") { - dataToLabel[[variableName]] <- - as.numeric(levels(dataToLabel[[variableName]])[dataToLabel[[variableName]]]) + if (class(data_to_label[[variable_name]]) == "factor") { + data_to_label[[variable_name]] <- + as.numeric(levels(data_to_label[[variable_name]])[data_to_label[[variable_name]]]) } else{ - dataToLabel[[variableName]] <- - as.numeric(dataToLabel[[variableName]]) + data_to_label[[variable_name]] <- + as.numeric(data_to_label[[variable_name]]) } } - sjlabelled::set_label(dataToLabel[[variableName]]) <- - labelList[[variableName]]$label - attr(dataToLabel[[variableName]], "unit") <- - labelList[[variableName]]$unit - attr(dataToLabel[[variableName]], "labelLong") <- - labelList[[variableName]]$labelLong + sjlabelled::set_label(data_to_label[[variable_name]]) <- + label_list[[variable_name]]$label + attr(data_to_label[[variable_name]], "unit") <- + label_list[[variable_name]]$unit + attr(data_to_label[[variable_name]], "label_long") <- + label_list[[variable_name]]$label_long } - return(dataToLabel) + return(data_to_label) } diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index f5ec592e..ad021f55 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -1,73 +1,73 @@ #Parse out the functions inside each module returning a list of the functions in it -ParseModuleFunctions <- - function(moduleTable, - moduleSequence, +parse_module_functions <- + function(module_table, + module_sequence, variables, - variableDetails) { + variable_details) { #Check row with module sequence - rawFunc <- - as.character(moduleTable[moduleTable[[pkg.globals$Modules.DefaultOrder]] == moduleSequence, pkg.globals$WorkingData.ModuleOperations]) + raw_func <- + as.character(module_table[module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, pkg.globals$WorkingData.ModuleOperations]) - funcList <- strsplit(rawFunc, "],")[[1]] - #print(funcList) + func_list <- strsplit(raw_func, "],")[[1]] + #print(func_list) #Seperate each function into seperate list element with 2 elements function name and its arguments - refactoredFuncsWithArgs <- list() + refactored_funcs_with_args <- list() - for (singleFunc in funcList) { - funcWithArgs <- as.list(strsplit(singleFunc, "::")[[1]]) - funcWithArgs[[2]] <- - stringr::str_remove_all(funcWithArgs[[2]], "[\\[\\]]") - funcWithArgs[[2]] <- - as.list(strsplit(funcWithArgs[[2]], ",")[[1]]) + for (single_func in func_list) { + func_with_args <- as.list(strsplit(single_func, "::")[[1]]) + func_with_args[[2]] <- + stringr::str_remove_all(func_with_args[[2]], "[\\[\\]]") + func_with_args[[2]] <- + as.list(strsplit(func_with_args[[2]], ",")[[1]]) - funcName <- funcWithArgs[[1]] - refactoredFuncsWithArgs[[funcName]] <- list() + func_name <- func_with_args[[1]] + refactored_funcs_with_args[[func_name]] <- list() - for (argument in funcWithArgs[[2]]) { - tmpArg <- as.list(strsplit(argument, "=")[[1]]) - tmpArg[[2]] <- - stringr::str_remove_all(tmpArg[[2]], "[\"\"]") - refactoredFuncsWithArgs[[funcName]][[pkg.globals$FunctionList.Arguments]][[tmpArg[[1]]]] <- - tmpArg[[2]] + for (argument in func_with_args[[2]]) { + tmp_arg <- as.list(strsplit(argument, "=")[[1]]) + tmp_arg[[2]] <- + stringr::str_remove_all(tmp_arg[[2]], "[\"\"]") + refactored_funcs_with_args[[func_name]][[pkg.globals$FunctionList.Arguments]][[tmp_arg[[1]]]] <- + tmp_arg[[2]] } } - refactoredFuncsWithArgsAndVars <- - ParseFunctionVariables( - functionList = refactoredFuncsWithArgs, + refactored_funcs_with_args_and_vars <- + parse_function_variables( + function_list = refactored_funcs_with_args, variables = variables, - moduleSequenceNumber = moduleSequence + module_sequence_number = module_sequence ) - return(refactoredFuncsWithArgsAndVars) + return(refactored_funcs_with_args_and_vars) } #Uses the function object to find the variables for it and find all the applicable variables -ParseFunctionVariables <- - function(functionList, +parse_function_variables <- + function(function_list, variables, - moduleSequenceNumber) { + module_sequence_number) { #Check which rows contain the module currently being ran - affectedRows <- - variables[grepl(moduleSequenceNumber, variables[[pkg.globals$columnNames.Operations]]),] + affected_rows <- + variables[grepl(module_sequence_number, variables[[pkg.globals$columnNames.Operations]]), ] #Check the additional params for the operations and add to function - for (currentFuncName in names(functionList)) { - if (currentFuncName %in% colnames(affectedRows)) { - columnsToCheck <- - affectedRows[affectedRows[[currentFuncName]] != FALSE, c(currentFuncName, pkg.globals$columnNames.Variable)] + for (current_func_name in names(function_list)) { + if (current_func_name %in% colnames(affected_rows)) { + columns_to_check <- + affected_rows[affected_rows[[current_func_name]] != FALSE, c(current_func_name, pkg.globals$columnNames.Variable)] - for (row in 1:nrow(columnsToCheck)) { - functionList[[currentFuncName]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columnsToCheck[row, pkg.globals$columnNames.Variable])]] <- - columnsToCheck[row, currentFuncName] + for (row in 1:nrow(columns_to_check)) { + function_list[[current_func_name]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columns_to_check[row, pkg.globals$columnNames.Variable])]] <- + columns_to_check[row, current_func_name] } } else{ warning( paste( "Requested function", - currentFuncName, + current_func_name, "is not present in variables please verify the function name is correct" ), call. = FALSE @@ -75,93 +75,104 @@ ParseFunctionVariables <- } } #Create new functions in case of additional params being there - functionList <- CreateExactFunction(functionList) + function_list <- create_exact_function(function_list) - return(functionList) + return(function_list) } #Define exact functions depending on variable arguments -CreateExactFunction <- function(functionList) { +create_exact_function <- function(function_list) { #Parse out non TRUE parameters - for (funName in names(functionList)) { - if (!is.null(functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]])) { - for (varName in names(functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]])) { - if (functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] != TRUE) { + for (fun_name in names(function_list)) { + if (!is.null(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { + for (var_name in names(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { + if (function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] != TRUE) { # create new func and move all the ones with that value there - if (is.null(functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]])) { - functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- - functionList[[funName]][[pkg.globals$FunctionList.Arguments]] - functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- - functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] + if (is.null(function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]])) { + function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- + function_list[[fun_name]][[pkg.globals$FunctionList.Arguments]] + function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- + function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] } else{ - functionList[[paste(funName, "::", functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[varName]] <- - functionList[[funName]][[pkg.globals$FunctionList.VariableArguments]][[varName]] + function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- + function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] } } } } } - return(functionList) + return(function_list) #Create new functions with the new paramev ters } #Uses the function objects to create a recipy -CreateRecipy <- function(functionObjectList, workingData,variables) { - # Check variable roles for the recipy creation - # TODO bllflow support make this add to overall recipy - outcomeVariable <- as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome",pkg.globals$argument.Variables]) - # TODO add a function for creating a proper formula - recipeFormula <- paste(outcomeVariable, "~ .") - - recipyObject <- recipes::recipe(formula = recipeFormula, data = workingData, x = workingData) - - for (singleFunction in names(functionObjectList)) { - variables <- names(functionObjectList[[singleFunction]][[pkg.globals$FunctionList.VariableArguments]]) - arguments <- functionObjectList[[singleFunction]][[pkg.globals$FunctionList.Arguments]] - stepFormula <- CreateVariableFormula(variables) - stepName <- paste("step_",singleFunction, sep = "") - recipyObject <- do.call(get(stepName),list(recipe = recipyObject, unlist(stepFormula))) +create_recipy <- + function(function_object_list, + working_data, + variables) { + # Check variable roles for the recipy creation + # TODO bllflow support make this add to overall recipy + outcome_variable <- + as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome", pkg.globals$argument.Variables]) + # TODO add a function for creating a proper formula + recipe_formula <- paste(outcome_variable, "~ .") + + recipy_object <- + recipes::recipe(formula = recipe_formula, + data = working_data, + x = working_data) + + for (single_function in names(function_object_list)) { + variables <- + names(function_object_list[[single_function]][[pkg.globals$FunctionList.VariableArguments]]) + arguments <- + function_object_list[[single_function]][[pkg.globals$FunctionList.Arguments]] + step_formula <- create_variable_formula(variables) + step_name <- paste("step_", single_function, sep = "") + recipy_object <- + do.call(get(step_name), list(recipe = recipy_object, unlist(step_formula))) + } + recipy_object <- + recipes::prep(recipy_object, training = working_data) + + return(recipy_object) } - recipyObject <- recipes::prep(recipyObject, training = workingData) - - return(recipyObject) -} #Function for creating formula for variable selection -CreateVariableFormula <- function(varList){ - returnFormula <- list() - for (variable in varList) { - returnFormula <- append(returnFormula, variable) +create_variable_formula <- function(var_list) { + return_formula <- list() + for (variable in var_list) { + return_formula <- append(return_formula, variable) } - return(returnFormula) + return(return_formula) } #verify module sequence matches the passed data -VerifyDataAndSequenceMatch <- function(moduleSequenceNumber, data) { - if (moduleSequenceNumber[[1]] == 1 && - class(data) == "workingData") { +verify_data_and_sequence_match <- function(module_sequence_number, data) { + if (module_sequence_number[[1]] == 1 && + class(data) == "working_data") { stop( "Working data was passed when sequance is at step 1. Make sure to pass the starting data. Aborting operation!" ) - } else if (class(data) != "workingData") { - if (moduleSequenceNumber[[1]] != 1) { + } else if (class(data) != "working_data") { + if (module_sequence_number[[1]] != 1) { stop( paste( - "Non workingData was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", - moduleSequenceNumber, + "Non working_data was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", + module_sequence_number, " Aborting operation!" ) ) } - } else if (data[[pkg.globals$WorkingData.ModuleSequenceNumber]] + 1 != moduleSequenceNumber[[1]]) { + } else if (data[[pkg.globals$WorkingData.ModuleSequenceNumber]] + 1 != module_sequence_number[[1]]) { stop( paste( "The WorkingData passed is not from the previous module please verify that the data passed is from module", - moduleSequenceNumber - 1, + module_sequence_number - 1, " Aborting operation!" ) @@ -170,40 +181,41 @@ VerifyDataAndSequenceMatch <- function(moduleSequenceNumber, data) { } #' @export -RunModule <- +run_module <- function(variables, modules, data, - moduleSequenceNumber, - variableDetails = NULL) { - #Standardize moduleSequenceNumber - if (moduleSequenceNumber[[1]] == "all") { - moduleOrder <- modules[, pkg.globals$Modules.DefaultOrder] - # Create moduleSequenceNumber out of all default modules - moduleSequenceNumber <- - min(moduleOrder, na.rm = TRUE):max(moduleOrder, na.rm = TRUE) - } else if (!is.numeric(moduleSequenceNumber)) { + module_sequence_number, + variable_details = NULL) { + #Standardize module_sequence_number + if (module_sequence_number[[1]] == "all") { + module_order <- modules[, pkg.globals$Modules.DefaultOrder] + # Create module_sequence_number out of all default modules + module_sequence_number <- + min(module_order, na.rm = TRUE):max(module_order, na.rm = TRUE) + } else if (!is.numeric(module_sequence_number)) { stop( - "Invalid moduleSequenceNumberPassed please make sure its either the word all or numeric. + "Invalid module_sequence_numberPassed please make sure its either the word all or numeric. Aborting operation!", call. = FALSE ) } - VerifyDataAndSequenceMatch(moduleSequenceNumber, data) + verify_data_and_sequence_match(module_sequence_number, data) - workingData <- data - for (sequenceElement in moduleSequenceNumber) { - moduleFunctions <- - ParseModuleFunctions( - moduleTable = modules, - moduleSequence = sequenceElement, + working_data <- data + for (sequence_element in module_sequence_number) { + module_functions <- + parse_module_functions( + module_table = modules, + module_sequence = sequence_element, variables = variables, - variableDetails = variableDetails + variable_details = variable_details ) - workingData <- CreateRecipy(moduleFunctions, workingData, variables) + working_data <- + create_recipy(module_functions, working_data, variables) } - processedData <- recipes::bake(workingData, data) + processed_data <- recipes::bake(working_data, data) - return(processedData) + return(processed_data) } \ No newline at end of file diff --git a/R/recipy-utility.R b/R/recipy-utility.R index ee3dbd09..a7b413b9 100644 --- a/R/recipy-utility.R +++ b/R/recipy-utility.R @@ -1,16 +1,16 @@ #' Returns a recipy attached to bllflow if one is not attached constructs one #' based on variables sheet #' @export -GetRecipy <- function(){ +get_recipy <- function(){ } #' Sets the recipy for the bllflow object #' TODO add a way to verify that the recipy works with the bllflow object #' @export -SetRecipy <- function(){ +set_recipy <- function(){ } #' Creates recipy from variable sheet -ConstructRecipy <- function(){ +construct_recipy <- function(){ } \ No newline at end of file diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 6aa7344c..5328662a 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -1,43 +1,64 @@ -# Environment for custom script functions -#' @title Recode with Table -#' -#' @name rec_w_table -#' -#' @description \code{rec_w_table()} recodes values of variable, where vaiable selection and recoding rules are describe in a reference table (variable_details). Similar to \code{sjmisc::rec()}. Uses the same rule syntax as \code{sjmisc::rec()}, except rules are in a table as opposed to arguments in the function. -#' -#' @seealso \code{sjmisc::rec()} +#Removing Note +. <- NULL +#' @title is equal +#' @description Function to compare even with NA present +#' This function returns TRUE wherever elements are the same, including NA's, +#' and false everywhere else. +#' +#' @param v1 variable 1 +#' @param v2 variable 2 #' @export -rec_w_table <- function(data_source = NULL, ...) { - UseMethod("rec_w_table", data_source) +is_equal <- function(v1, v2) { + same <- (v1 == v2) | (is.na(v1) & is.na(v2)) + # anything compared to NA equals NA + # replaces all instanses of NA with FALSE + same[is.na(same)] <- FALSE + + return(same) } -#' @title Recode with Table -#' -#' @name rec_w_table.default +# #' @title Recode with Table +# #' +# #' @description \code{\link{rec_w_table}} recodes values of variable, where vaiable selection and recoding rules are describe +# #' in a reference table (variable_details). Similar to \code{\link[sjmisc]{rec}}. +# #' Uses the same rule syntax as \code{\link[sjmisc]{rec}}, except rules are in a table as opposed to arguments in the function. +# #' @importFrom haven tagged_na +# #' @importFrom stringr str_match +# #' @importFrom dplyr rowwise select do +# #' @seealso \code{\link[sjmisc]{rec}} +# #' @export +# rec_w_table <- function(data_source = NULL, ...) { +# UseMethod("rec_w_table", data_source) +# } + +#' Recode with Table #' -#' @details The \code{variable_details} dataframe has the following variables: +#' The \href{https://github.com/Big-Life-Lab/bllflow/blob/master/inst/extdata/PBC-variableDetails.csv}{variable_details} +#' dataframe needs the following variables to function: #' \describe{ -#' \item{variable}{name of new (mutated) variable that is recoded} -#' \item{databaseStart}{name of dataframe with original variables (\code{variableStart}) to be recoded} -#' \item{variableStart}{name of variable to be recoded} -#' \ifem{fromType}{variable type of \code{variableStart}. \code{cat} = categorical or factor variable; \code{cont} = continuous variable (real number or integer)} -#' \item{catlabel}{label for each category of \code{variable}} -#' \item{... add remaining variables (headers) here} +#' \item{variable}{name of new (mutated) variable that is recoded} +#' \item{toType}{type the variable is being recoded to \emph{cat = categorical, cont = continues}} +#' \item{databaseStart}{name of dataframe with original variables to be recoded} +#' \item{variableStart}{name of variable to be recoded} +#' \item{fromType}{variable type of start variable. \emph{cat = categorical or factor variable} \emph{cont = continuous variable (real number or integer)}} +#' \item{recTo}{Value to recode to} +#' \item{recFrom}{Value/range being recoded from} #' } -#' -#' Each row in \code{variable_details} comprises one category in a newly transformed variable. The rules for each category the new variable are a string in \code{recFrom} and value in \code{recTo}. These recode pairs are the same syntax as \code{sjmisc::rec()}, except in \code{sjmisc::rec()} the pairs are a string for the function attibute \code{rec =}, separated by '\code{=}'. For example in \code{rec_w_table} \code{variable_details$recFrom = 2; variable_details$recTo = 4} is the same as \code{sjmisc::rec(rec = "2=4")}. -#' +#' Each row in \emph{variable_details} comprises one category in a newly transformed variable. The rules for each category the new variable +#' are a string in \emph{recFrom} and value in \emph{recTo}. These recode pairs are the same syntax as \emph{sjmisc::rec()}, +#' except in \emph{sjmisc::rec()} the pairs are a string for the function attibute \emph{rec =}, separated by '\emph{=}'. +#' For example in \emph{rec_w_table} \emph{variable_details$recFrom = 2; variable_details$recTo = 4} is the same as \emph{sjmisc::rec(rec = "2=4")}. #' the pairs are obtained from the RecFrom and RecTo columns #' \describe{ -#' \item{recode pairs}{each recode pair is row. see above example or \code{PBC-variableDetails.csv} -#' \item{multiple values}{multiple old values that should be recoded into a new single value may be separated with comma, e.g. \code{recFrom = "1,2"; recTo = 1}} -#' \item{value range}{a value range is indicated by a colon, e.g. \code{recFrom= "1:4"; recTo = 1} (recodes all values from 1 to 4 into 1} -#' \item{value range for doubles}{for double vectors (with fractional part), all values within the specified range are recoded; e.g. \code{recFrom = "1:2.5'; recTo = 1} recodes 1 to 2.5 into 1, but 2.55 would not be recoded (since it's not included in the specified range)} -#' \item{\code{"min"} and \code{"max"}}{minimum and maximum values are indicates by \emph{min} (or \emph{lo}) and \emph{max} (or \emph{hi}), e.g. \code{recFrom = "min:4"; recTo = 1} (recodes all values from minimum values of \code{x} to 4 into 1)} -#' \item{\code{"else"}}{all other values, which have not been specified yet, are indicated by \emph{else}, e.g. \code{recFrom = "else"; recTo = NA} (recode all other values (not specified in other rows) to "NA")} -#' \item{\code{"copy"}}{the \code{"else"}-token can be combined with \emph{copy}, indicating that all remaining, not yet recoded values should stay the same (are copied from the original value), e.g. \code{recFrom = "else"; recTo = "copy"} -#' \item{\code{NA}'s}{\code{\link{NA}} values are allowed both as old and new value, e.g. \code{recFrom "NA"; recTo = 1. or "recFrom = "3:5"; recTo = "NA"} (recodes all NA into 1, and all values from 3 to 5 into NA in the new variable)} -#' +#' \item{recode pairs}{each recode pair is row. see above example or \emph{PBC-variableDetails.csv}} +#' \item{multiple values}{multiple old values that should be recoded into a new single value may be separated with comma, e.g. \emph{recFrom = "1,2"; recTo = 1}} +#' \item{value range}{a value range is indicated by a colon, e.g. \emph{recFrom= "1:4"; recTo = 1} (recodes all values from 1 to 4 into 1)} +#' \item{value range for doubles}{for double vectors (with fractional part), all values within the specified range are recoded; e.g. \emph{recFrom = "1:2.5'; recTo = 1} recodes 1 to 2.5 into 1, but 2.55 would not be recoded (since it's not included in the specified range)} +#' \item{\emph{"min"} and \emph{"max"}}{minimum and maximum values are indicates by \emph{min} (or \emph{lo}) and \emph{max} (or \emph{hi}), e.g. \emph{recFrom = "min:4"; recTo = 1} (recodes all values from minimum values of \emph{x} to 4 into 1)} +#' \item{\emph{"else"}}{all other values, which have not been specified yet, are indicated by \emph{else}, e.g. \emph{recFrom = "else"; recTo = NA} (recode all other values (not specified in other rows) to "NA")} +#' \item{\emph{"copy"}}{the \emph{"else"}-token can be combined with \emph{copy}, indicating that all remaining, not yet recoded values should stay the same (are copied from the original value), e.g. \emph{recFrom = "else"; recTo = "copy"}} +#' \item{\emph{NA}'s}{\emph{NA} values are allowed both as old and new value, e.g. \emph{recFrom "NA"; recTo = 1. or "recFrom = "3:5"; recTo = "NA"} (recodes all NA into 1, and all values from 3 to 5 into NA in the new variable)} +#'} #' #' @param data_source A dataframe containing the variables to be recoded. #' @param variable_details A dataframe containing the specifications (rules) for recoding. @@ -46,13 +67,18 @@ rec_w_table <- function(data_source = NULL, ...) { #' @param append_to_data Logical, if \code{TRUE} (default), recoded variables will be appended to the data_source. #' @param log Logical, if \code{FALSE} (default), a log of recoding will not be printed. #' @param print_note Logical, if \code{FALSE} (default), will not print the content inside the `Note`` column of the variable beinng recoded. -#' @param append_non_DB_columns Logical, if \code{FALSE} (default), will not append variables if missing in `data_source`` but present in `variable_details`. #' @param variables character vector containing variable names to recode or a variables csv containing additional variable info -#' @param labels named character vector of variable and their label -#' +#' @param var_labels labels vector to attach to variables in variables +#' @param custom_function_path path to location of the function to load +#' #' @return a dataframe that is recoded according to rules in variable_details. +#' @importFrom haven tagged_na +#' @importFrom stringr str_match +#' @importFrom dplyr rowwise select do +#' @importFrom magrittr %>% #' @export -rec_w_table.default <- + +rec_with_table <- function(data_source, variable_details, dataset_name, @@ -138,21 +164,24 @@ recode_call <- append_non_DB_columns, log, var_labels) { - variable_details[[pkg.globals$argument.Variables]] <- trimws(variable_details[[pkg.globals$argument.Variables]]) + variable_details[[pkg.globals$argument.Variables]] <- + trimws(variable_details[[pkg.globals$argument.Variables]]) if (!is.null(variables) && "data.frame" %in% class(variables)) { variable_details <- - update_variable_details_based_on_variable_sheet(variableSheet = variables, variable_details = variable_details) + update_variable_details_based_on_variable_sheet(variable_sheet = variables, variable_details = variable_details) } else { if (!is.null(variables)) { variable_details <- - variable_details[trimws(variable_details[[pkg.globals$argument.Variables]]) %in% variables, ] + variable_details[trimws(variable_details[[pkg.globals$argument.Variables]]) %in% variables,] vars_being_recoded <- as.character(unique(variable_details[[pkg.globals$argument.Variables]])) if (length(vars_being_recoded) != length(variables)) { missing_vars <- setdiff(variables, vars_being_recoded) warning( - paste(missing_vars, - "is missing from variable details therefore cannot be recoded") + paste( + missing_vars, + "is missing from variable details therefore cannot be recoded" + ) ) } } @@ -183,7 +212,7 @@ recode_call <- all_possible_var_names <- unique(as.character(variable_details[[pkg.globals$argument.Variables]])) all_variables_detected <- - variable_details[grepl(dataset_name , variable_details[[pkg.globals$argument.DatabaseStart]]), ] + variable_details[grepl(dataset_name , variable_details[[pkg.globals$argument.DatabaseStart]]),] rec_data <- recode_columns( @@ -218,6 +247,7 @@ recode_call <- #' @description Retrieves the name of the column inside data_source to use for calculations #' #' @param data_name name of the database being checked +#' @param data database being checked #' @param row_being_checked the row from variable details that contains information on this variables #' @param variable_being_checked the name of the recoded variable #' @@ -243,7 +273,7 @@ get_data_variable_name <- } } else if (grepl("\\[", var_start_names)) { data_variable_being_checked <- - stringr::str_match(var_start_names, "\\[(.*?)\\]")[, 2] + str_match(var_start_names, "\\[(.*?)\\]")[, 2] } else{ stop( paste( @@ -272,8 +302,10 @@ get_data_variable_name <- #' #' @param data_source The source database #' @param variables_to_process rows from variable details that are applicable to this DB +#' @param data_name Name of the database being passed #' @param log The option of printing log #' @param print_note the option of printing the note columns +#' @param else_default default else value to use if no else is present #' #' @return Returns recoded and labeled data recode_columns <- @@ -285,38 +317,38 @@ recode_columns <- else_default) { # Split variables to process into recode map and func map_variables_to_process <- - variables_to_process[grepl("map::", variables_to_process[[pkg.globals$argument.CatValue]]), ] + variables_to_process[grepl("map::", variables_to_process[[pkg.globals$argument.CatValue]]),] func_variables_to_process <- - variables_to_process[grepl("Func::", variables_to_process[[pkg.globals$argument.CatValue]]), ] + variables_to_process[grepl("Func::", variables_to_process[[pkg.globals$argument.CatValue]]),] rec_variables_to_process <- - variables_to_process[!grepl("Func::|map::", variables_to_process[[pkg.globals$argument.CatValue]]), ] + variables_to_process[!grepl("Func::|map::", variables_to_process[[pkg.globals$argument.CatValue]]),] label_list <- list() # Set interval if none is present - intervalPresent <- TRUE - validIntervals <- c("[,]", "[,)", "(,]") - intervalDefault <- "[,)" - recodedData <- data_source[, 0] + interval_present <- TRUE + valid_intervals <- c("[,]", "[,)", "(,]") + interval_default <- "[,)" + recoded_data <- data_source[, 0] if (is.null(rec_variables_to_process[[pkg.globals$argument.Interval]])) { - intervalPresent <- FALSE + interval_present <- FALSE } # Loop through the rows of recode vars while (nrow(rec_variables_to_process) > 0) { variable_being_checked <- as.character(rec_variables_to_process[1, pkg.globals$argument.Variables]) - rowsBeingChecked <- - rec_variables_to_process[rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked, ] + rows_being_checked <- + rec_variables_to_process[rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked,] rec_variables_to_process <- - rec_variables_to_process[!rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked, ] - firstRow <- rowsBeingChecked[1,] + rec_variables_to_process[!rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked,] + first_row <- rows_being_checked[1, ] # Check for varialbe existance in data data_variable_being_checked <- get_data_variable_name( data_name = data_name, - row_being_checked = firstRow, + row_being_checked = first_row, variable_being_checked = variable_being_checked, data = data_source ) @@ -331,14 +363,14 @@ recode_columns <- ) } else{ # Check for From column duplicates - allFromValuesForVariable <- - rowsBeingChecked[[pkg.globals$argument.From]] - if (length(unique(allFromValuesForVariable)) != length(allFromValuesForVariable)) { - for (singleFrom in allFromValuesForVariable) { - if (sum(allFromValuesForVariable == singleFrom) > 1) { + all_from_values_for_variable <- + rows_being_checked[[pkg.globals$argument.From]] + if (length(unique(all_from_values_for_variable)) != length(all_from_values_for_variable)) { + for (single_from in all_from_values_for_variable) { + if (sum(all_from_values_for_variable == single_from) > 1) { stop( paste( - singleFrom, + single_from, "was detected more then once in", variable_being_checked, "please make sure only one from value is being recoded" @@ -350,25 +382,25 @@ recode_columns <- # Set factor for all recode values label_list[[variable_being_checked]] <- - CreateLabelListElement(rowsBeingChecked) + create_label_list_element(rows_being_checked) else_value <- - as.character(rowsBeingChecked[rowsBeingChecked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) + as.character(rows_being_checked[rows_being_checked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) if (length(else_value) == 1 && - !isEqual(else_value, "character(0)")) { + !is_equal(else_value, "character(0)")) { else_value <- - RecodeVariableNAFormating(else_value, label_list[[variable_being_checked]]$type) - if (isEqual(else_value, "copy")) { + recode_variable_NA_formating(else_value, label_list[[variable_being_checked]]$type) + if (is_equal(else_value, "copy")) { data_variable_being_checked <- get_data_variable_name( data_name = data_name, - row_being_checked = firstRow, + row_being_checked = first_row, variable_being_checked = variable_being_checked, data = data_source ) - recodedData[variable_being_checked] <- + recoded_data[variable_being_checked] <- data_source[data_variable_being_checked] } else { - recodedData[variable_being_checked] <- else_value + recoded_data[variable_being_checked] <- else_value } # Catch multiple else rows } else if (length(else_value) > 1) { @@ -382,20 +414,20 @@ recode_columns <- ) } else{ - recodedData[variable_being_checked] <- else_default + recoded_data[variable_being_checked] <- else_default } - rowsBeingChecked <- - rowsBeingChecked[!rowsBeingChecked[[pkg.globals$argument.From]] == "else", ] - if (nrow(rowsBeingChecked) > 0) { - logTable <- rowsBeingChecked[, 0] - logTable$valueTo <- NA - logTable$From <- NA - logTable$rowsRecoded <- NA - levels(recodedData[[variable_being_checked]]) <- - c(levels(recodedData[[variable_being_checked]]), levels(rowsBeingChecked[[pkg.globals$argument.CatValue]])) + rows_being_checked <- + rows_being_checked[!rows_being_checked[[pkg.globals$argument.From]] == "else",] + if (nrow(rows_being_checked) > 0) { + log_table <- rows_being_checked[, 0] + log_table$value_to <- NA + log_table$From <- NA + log_table$rows_recoded <- NA + levels(recoded_data[[variable_being_checked]]) <- + c(levels(recoded_data[[variable_being_checked]]), levels(rows_being_checked[[pkg.globals$argument.CatValue]])) - for (row in 1:nrow(rowsBeingChecked)) { - row_being_checked <- rowsBeingChecked[row,] + for (row in 1:nrow(rows_being_checked)) { + row_being_checked <- rows_being_checked[row, ] # If cat go check for label and obtain it # regardless obtain unit and attach @@ -410,66 +442,66 @@ recode_columns <- ) # Recode the variable - fromValues <- list() + from_values <- list() if (grepl(":", as.character(row_being_checked[[pkg.globals$argument.From]]))) { - fromValues <- + from_values <- strsplit(as.character(row_being_checked[[pkg.globals$argument.From]]), ":")[[1]] } else { # TODO find a more elagant way to handle in the future - tempFrom <- + temp_from <- as.character(row_being_checked[[pkg.globals$argument.From]]) - fromValues[[1]] <- tempFrom - fromValues[[2]] <- fromValues[[1]] + from_values[[1]] <- temp_from + from_values[[2]] <- from_values[[1]] } - valueRecorded <- + value_recorded <- as.character(row_being_checked[[pkg.globals$argument.CatValue]]) - if (intervalPresent) { + if (interval_present) { interval = as.character(row_being_checked[[pkg.globals$argument.Interval]]) - if (!interval %in% validIntervals) { - interval <- intervalDefault + if (!interval %in% valid_intervals) { + interval <- interval_default } - if (fromValues[[1]] == fromValues[[2]]) { + if (from_values[[1]] == from_values[[2]]) { interval <- "[,]" } - validRowIndex <- CompareValueBasedOnInterval( - compareColumns = data_variable_being_checked, + valid_row_index <- compare_value_based_on_interval( + compare_columns = data_variable_being_checked, data_source = data_source, - leftBoundary = fromValues[[1]], - rightBoundary = fromValues[[2]], + left_boundary = from_values[[1]], + right_boundary = from_values[[2]], interval = interval ) } else{ - if (fromValues[[1]] == fromValues[[2]]) { + if (from_values[[1]] == from_values[[2]]) { interval <- "[,]" } else{ - interval <- intervalDefault + interval <- interval_default } - validRowIndex <- CompareValueBasedOnInterval( - compareColumns = data_variable_being_checked, + valid_row_index <- compare_value_based_on_interval( + compare_columns = data_variable_being_checked, data_source = data_source, - leftBoundary = fromValues[[1]], - rightBoundary = fromValues[[2]], + left_boundary = from_values[[1]], + right_boundary = from_values[[2]], interval = interval ) } # Start construction of dataframe for log - logTable[row, "valueTo"] <- valueRecorded - logTable[row, "From"] <- + log_table[row, "value_to"] <- value_recorded + log_table[row, "From"] <- as.character(row_being_checked[[pkg.globals$argument.From]]) - logTable[row, "rowsRecoded"] <- - sum(validRowIndex, na.rm = TRUE) + log_table[row, "rows_recoded"] <- + sum(valid_row_index, na.rm = TRUE) - valueRecorded <- - RecodeVariableNAFormating(valueRecorded, label_list[[variable_being_checked]]$type) - if (isEqual(valueRecorded, "copy")) { - valueRecorded <- - data_source[validRowIndex, data_variable_being_checked] + value_recorded <- + recode_variable_NA_formating(value_recorded, label_list[[variable_being_checked]]$type) + if (is_equal(value_recorded, "copy")) { + value_recorded <- + data_source[valid_row_index, data_variable_being_checked] } - recodedData[validRowIndex, variable_being_checked] <- - valueRecorded + recoded_data[valid_row_index, variable_being_checked] <- + value_recorded if (print_note && !is.null(row_being_checked[[pkg.globals$argument.Notes]]) && - !isEqual(row_being_checked[[pkg.globals$argument.Notes]], "") && + !is_equal(row_being_checked[[pkg.globals$argument.Notes]], "") && !is.na(row_being_checked[[pkg.globals$argument.Notes]])) { print(paste("NOTE:", as.character(row_being_checked[[pkg.globals$argument.Notes]]))) } @@ -488,8 +520,8 @@ recode_columns <- ) ) # Reset rowCount to avoid confusion - rownames(logTable) <- NULL - print(logTable) + rownames(log_table) <- NULL + print(log_table) } } @@ -498,86 +530,87 @@ recode_columns <- # Process funcVars while (nrow(func_variables_to_process) > 0) { - firstRow <- func_variables_to_process[1, ] - firstRowVariableName <- - as.character(firstRow[[pkg.globals$argument.Variables]]) + first_row <- func_variables_to_process[1,] + first_row_variable_name <- + as.character(first_row[[pkg.globals$argument.Variables]]) # get name of var pass to - derivedReturn <- - RecodeDerivedVariables( - variableBeingProcessed = firstRowVariableName, - recodedData = recodedData, + derived_return <- + recode_derived_variables( + variable_being_processed = first_row_variable_name, + recoded_data = recoded_data, variables_to_process = func_variables_to_process, log = log, print_note = print_note, else_default = else_default, label_list = label_list, - varStack = c() + var_stack = c() ) - label_list <- derivedReturn$label_list - recodedData <- derivedReturn$recodedData - func_variables_to_process <- derivedReturn$variables_to_process + label_list <- derived_return$label_list + recoded_data <- derived_return$recoded_data + func_variables_to_process <- + derived_return$variables_to_process } # Populate data Labels - recodedData <- - LabelData(label_list = label_list, dataToLabel = recodedData) + recoded_data <- + label_data(label_list = label_list, data_to_label = recoded_data) - return(recodedData) + return(recoded_data) } #' Compare Value Based On Interval #' #' Compare values on the scientific notation interval #' -#' @param leftBoundary the min value -#' @param rightBoundary the max value +#' @param left_boundary the min value +#' @param right_boundary the max value #' @param data_source the data that contains values being compared -#' @param compareColumns The columns inside data_source being checked +#' @param compare_columns The columns inside data_source being checked #' @param interval The scientific notation interval #' #' @return a boolean vector containing true for rows where the comparison is true -CompareValueBasedOnInterval <- - function(leftBoundary, - rightBoundary, +compare_value_based_on_interval <- + function(left_boundary, + right_boundary, data_source, - compareColumns, + compare_columns, interval) { - returnBoolean <- vector() - if (suppressWarnings(is.na(as.numeric(leftBoundary)))) { - returnBoolean <- - data_source[[compareColumns]] %in% data_source[[compareColumns]][which(leftBoundary == data_source[[compareColumns]])] + return_boolean <- vector() + if (suppressWarnings(is.na(as.numeric(left_boundary)))) { + return_boolean <- + data_source[[compare_columns]] %in% data_source[[compare_columns]][which(left_boundary == data_source[[compare_columns]])] } else{ if (interval == "[,]") { - returnBoolean <- - data_source[[compareColumns]] %in% data_source[[compareColumns]][which( - as.numeric(leftBoundary) <= data_source[[compareColumns]] & - data_source[[compareColumns]] <= as.numeric(rightBoundary) + return_boolean <- + data_source[[compare_columns]] %in% data_source[[compare_columns]][which( + as.numeric(left_boundary) <= data_source[[compare_columns]] & + data_source[[compare_columns]] <= as.numeric(right_boundary) )] } else if (interval == "[,)") { - returnBoolean <- - data_source[[compareColumns]] %in% data_source[[compareColumns]][which( - as.numeric(leftBoundary) <= data_source[[compareColumns]] & - data_source[[compareColumns]] < as.numeric(rightBoundary) + return_boolean <- + data_source[[compare_columns]] %in% data_source[[compare_columns]][which( + as.numeric(left_boundary) <= data_source[[compare_columns]] & + data_source[[compare_columns]] < as.numeric(right_boundary) )] } else if (interval == "(,]") { - returnBoolean <- - data_source[[compareColumns]] %in% data_source[[compareColumns]][which( - as.numeric(leftBoundary) < data_source[[compareColumns]] & - data_source[[compareColumns]] <= as.numeric(rightBoundary) + return_boolean <- + data_source[[compare_columns]] %in% data_source[[compare_columns]][which( + as.numeric(left_boundary) < data_source[[compare_columns]] & + data_source[[compare_columns]] <= as.numeric(right_boundary) )] } else{ stop("Invalid Argument was passed") } } - return(returnBoolean) + return(return_boolean) } # Parse out variables csv update_variable_details_based_on_variable_sheet <- - function(variableSheet, variable_details) { + function(variable_sheet, variable_details) { # remove conflicting columns from variable details variable_details <- - variable_details[,!( + variable_details[, !( names(variable_details) %in% c( pkg.globals$MSW.Variables.Columns.VariableType, pkg.globals$MSW.Variables.Columns.Label, @@ -586,8 +619,8 @@ update_variable_details_based_on_variable_sheet <- ) )] # Only keep the needed columns - variableSheet <- - variableSheet[, c( + variable_sheet <- + variable_sheet[, c( pkg.globals$MSW.Variables.Columns.Variable, pkg.globals$MSW.Variables.Columns.VariableType, pkg.globals$MSW.Variables.Columns.Label, @@ -598,169 +631,175 @@ update_variable_details_based_on_variable_sheet <- variable_details <- merge( variable_details, - variableSheet, + variable_sheet, by.x = pkg.globals$argument.Variables, by.y = pkg.globals$MSW.Variables.Columns.Variable, all.x = TRUE ) - # remove variables not present in variableSheet + # remove variables not present in variable_sheet variable_details <- - variable_details[variable_details[[pkg.globals$argument.Variables]] %in% variableSheet[[pkg.globals$MSW.Variables.Columns.Variable]], ] + variable_details[variable_details[[pkg.globals$argument.Variables]] %in% variable_sheet[[pkg.globals$MSW.Variables.Columns.Variable]],] return(variable_details) } -RecodeVariableNAFormating <- function(cellValue, varType) { - recodeValue <- NULL - if (grepl("NA", cellValue)) { - naValueList <- strsplit(cellValue, ":")[[1]] - if (isEqual(varType, pkg.globals$argument.CatType)) { - recodeValue <- paste("NA(", naValueList[[3]], ")", sep = "") +recode_variable_NA_formating <- function(cell_value, var_type) { + recode_value <- NULL + if (grepl("NA", cell_value)) { + na_value_list <- strsplit(cell_value, ":")[[1]] + if (is_equal(var_type, pkg.globals$argument.CatType)) { + recode_value <- paste("NA(", na_value_list[[3]], ")", sep = "") } else{ - recodeValue <- haven::tagged_na(as.character(naValueList[[3]])) + recode_value <- tagged_na(as.character(na_value_list[[3]])) } } else{ - if (!isEqual(varType, pkg.globals$argument.CatType) && - !isEqual(cellValue, "copy")) { - cellValue <- as.numeric(cellValue) + if (!is_equal(var_type, pkg.globals$argument.CatType) && + !is_equal(cell_value, "copy")) { + cell_value <- as.numeric(cell_value) } - recodeValue <- cellValue + recode_value <- cell_value } - return(recodeValue) + return(recode_value) } -RecodeDerivedVariables <- - function(recodedData, - variableBeingProcessed, +recode_derived_variables <- + function(recoded_data, + variable_being_processed, variables_to_process, log, print_note, else_default, label_list, - varStack) { + var_stack) { if (nrow(variables_to_process) <= 0) { - stop(paste(variableBeingProcessed, "is missing from variable_details")) + stop(paste( + variable_being_processed, + "is missing from variable_details" + )) } - varStack <- c(varStack, variableBeingProcessed) + var_stack <- c(var_stack, variable_being_processed) # obtain rows to process and updated variables to Process - variableRows <- - variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] == variableBeingProcessed, ] + variable_rows <- + variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] == variable_being_processed,] variables_to_process <- - variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] != variableBeingProcessed, ] - for (rowNum in 1:nrow(variableRows)) { + variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] != variable_being_processed,] + for (row_num in 1:nrow(variable_rows)) { # Check for presence of feeder variables in data and in the variable being processed stack - feederVars <- - as.list(strsplit(as.character(variableRows[rowNum, ][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] - feederVars <- gsub("\\[|\\]", "", feederVars) - feederVars <- as.list(strsplit(feederVars, ","))[[1]] - feederVars <- sapply(feederVars, trimws) - usedFeederVars <- feederVars - feederVars <- setdiff(feederVars, names(recodedData)) + feeder_vars <- + as.list(strsplit(as.character(variable_rows[row_num,][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] + feeder_vars <- gsub("\\[|\\]", "", feeder_vars) + feeder_vars <- as.list(strsplit(feeder_vars, ","))[[1]] + feeder_vars <- sapply(feeder_vars, trimws) + used_feeder_vars <- feeder_vars + feeder_vars <- setdiff(feeder_vars, names(recoded_data)) # Check if the variable has a function to recode - nonFuncMissingVariables <- - setdiff(feederVars, unique(as.character(variables_to_process[[pkg.globals$argument.Variables]]))) - if (length(nonFuncMissingVariables) > 0) { + non_func_missing_variables <- + setdiff(feeder_vars, unique(as.character(variables_to_process[[pkg.globals$argument.Variables]]))) + if (length(non_func_missing_variables) > 0) { warning( paste( - variableBeingProcessed, + variable_being_processed, "could not be calculated because", - feederVars, + feeder_vars, "was never recoded and is not a function variable" ) ) - varStack <- varStack[!(varStack == variableBeingProcessed)] + var_stack <- + var_stack[!(var_stack == variable_being_processed)] return( list( - varStack = varStack, + var_stack = var_stack, label_list = label_list, - recodedData = recodedData, + recoded_data = recoded_data, variables_to_process = variables_to_process ) ) } - # Check for presense in varStack - if (length(intersect(feederVars, varStack)) > 0) { - conflictVars <- intersect(feederVars, varStack) + # Check for presense in var_stack + if (length(intersect(feeder_vars, var_stack)) > 0) { + conflict_vars <- intersect(feeder_vars, var_stack) stop( paste( - conflictVars, + conflict_vars, "is required to create", - variableBeingProcessed, + variable_being_processed, "but", - variableBeingProcessed, + variable_being_processed, "is needed to create", - conflictVars + conflict_vars ) ) } - # Update varStack and recurse to get the feeder vars - for (oneFeeder in feederVars) { + # Update var_stack and recurse to get the feeder vars + for (one_feeder in feeder_vars) { # Need to check recoded data again in case a recursion added it - if (!oneFeeder %in% names(recodedData)) { - derivedReturn <- - RecodeDerivedVariables( - variableBeingProcessed = oneFeeder, - recodedData = recodedData, + if (!one_feeder %in% names(recoded_data)) { + derived_return <- + recode_derived_variables( + variable_being_processed = one_feeder, + recoded_data = recoded_data, variables_to_process = variables_to_process, log = log, print_note = print_note, else_default = else_default, label_list = label_list, - varStack = varStack + var_stack = var_stack ) - varStack <- derivedReturn$varStack - label_list <- derivedReturn$label_list - recodedData <- derivedReturn$recodedData - variables_to_process <- derivedReturn$variables_to_process + var_stack <- derived_return$var_stack + label_list <- derived_return$label_list + recoded_data <- derived_return$recoded_data + variables_to_process <- + derived_return$variables_to_process } } # Obtain the function for each row - append(label_list, CreateLabelListElement(variableRows)) + append(label_list, create_label_list_element(variable_rows)) - row_being_checked <- variableRows[rowNum,] - funcCell <- + row_being_checked <- variable_rows[row_num, ] + func_cell <- as.character(row_being_checked[[pkg.globals$argument.CatValue]]) - functionBeingUsed <- - as.list(strsplit(funcCell, "::"))[[1]][[2]] + function_being_used <- + as.list(strsplit(func_cell, "::"))[[1]][[2]] - columnValue <- - recodedData %>% dplyr::rowwise(.) %>% dplyr::select(usedFeederVars) %>% - dplyr::do( - columnBeingAdded = CalculateCustomFunctionRowValue( + column_value <- + recoded_data %>% rowwise() %>% select(used_feeder_vars) %>% + do( + column_being_added = calculate_custom_function_row_value( ., - variableNames = usedFeederVars, - customFunctionName = functionBeingUsed + variable_names = used_feeder_vars, + custom_function_name = function_being_used ) ) - recodedData[[variableBeingProcessed]] <- - unlist(columnValue[["columnBeingAdded"]]) + recoded_data[[variable_being_processed]] <- + unlist(column_value[["column_being_added"]]) - varStack <- varStack[!(varStack == variableBeingProcessed)] + var_stack <- + var_stack[!(var_stack == variable_being_processed)] } return( list( - varStack = varStack, + var_stack = var_stack, label_list = label_list, - recodedData = recodedData, + recoded_data = recoded_data, variables_to_process = variables_to_process ) ) } -CalculateCustomFunctionRowValue <- - function(rowValues, - variableNames, - customFunctionName) { - rowValues <- unname(rowValues) +calculate_custom_function_row_value <- + function(row_values, + variable_names, + custom_function_name) { + row_values <- unname(row_values) # TODO add ability to process ranges in from column - customFunctionReturnValue <- - do.call(get(customFunctionName), rowValues) + custom_function_return_value <- + do.call(get(custom_function_name), row_values) - return(customFunctionReturnValue) - } + return(custom_function_return_value) + } \ No newline at end of file diff --git a/R/small-cell-check.R b/R/small-cell-check.R index 4a653fbc..131ee66f 100644 --- a/R/small-cell-check.R +++ b/R/small-cell-check.R @@ -2,8 +2,8 @@ #' #' Checks for presence of small cells within the passed table #' -#' @param passed_table Table to check currently supported is LongTable and TableOne -#' @param small_size Preffered small cell size default <6 +#' @param passed_table Table to check, currently supported tables are LongTable and TableOne +#' @param small_size Preffered small cell size, default <6 #' @param print Option to print the smallCell table #' @return Returns passed table with smallcells attached inside MetaData$smallCells #' @export @@ -14,8 +14,8 @@ check_small_cells <- function(passed_table, ...) { #' #' Checks for presence of small cells within Summary Data #' -#' @param passed_table Table to check currently supported is LongTable and TableOne -#' @param small_size Preffered small cell size default <6 +#' @param passed_table Table to check, currently supported is LongTable and TableOne +#' @param small_size Preffered small cell size, default <6 #' @param print Option to print the smallCell table #' @return Returns passed table with smallcells attached inside MetaData$smallCells #'@export @@ -34,8 +34,8 @@ check_small_cells.SummaryData <- function(passed_table, #' Check for Small Cells #' -#' Small Cells Check checks a given table for small sells then adds a -#' smallCells table to the MetaData of the table object +#' check_small_cells checks a given table for small sells then adds a +#' smallCells table to the MetaData of the tableone object #' #' Checks the categorical table within the TableOne param (CatTable field) for #' small cells. A small cell is a category where the number of people @@ -47,7 +47,6 @@ check_small_cells.SummaryData <- function(passed_table, #' https://cran.r-project.org/web/packages/tableone/index.html. #' @param small_size What value constitutes a small size cell. Default value is 6. #' @param print If TRUE prints the small_size metadata in a human readable format -#' @param table_type Specifies the type of the table that is passed to the function #' #' @return The passed_table object with a new object in the Metadata object called smallCells. #' smallCells is a dataframe with 4 columns @@ -79,31 +78,13 @@ check_small_cells.SummaryData <- function(passed_table, #' # increasing the small_size threshold to 10 #' tmp <- check_small_cells(TableOne, small_size=10) #' -#' # currently only TableOne is supported so table_type != TableOne will throw error -#' #tmp <- check_small_cells(TableOne, table_type="TableTwo") -#' #' @export check_small_cells.TableOne <- function(passed_table, small_size = 6, - print = FALSE, - table_type = "TableOne") { - # Chosing Table procesing function ------------------------------------------- - + print = FALSE) { # Handles TableOne type tables - if (table_type == "TableOne") { small_size_table <- check_small_cells_in_table_one(passed_table, small_size) - # In case an unsupported table type is used this error is thrown - } else { - stop( - cat( - "Table type ", - table_type, - " is not a valid table type or is not yet supported " - ), - "Unsupported Type" - ) - } # Outputing the created Table function --------------------------------------- @@ -144,6 +125,21 @@ check_small_cells.TableOne <- function(passed_table, return(passed_table) } +#' Only summary table and table one is currently supported every other type of +#' table will throw this error +#' @export +check_small_cells.Default <- function(passed_table, ...){ + # In case an unsupported table type is used this error is thrown + stop( + cat( + "Table type ", + class(passed_table), + " is not a valid table type or is not yet supported " + ), + "Unsupported Type" + ) +} + # Table Parsing Functions ----------------------------------------------------------------------- #' Check for Small Cells in TableOne diff --git a/R/table-one-long.R b/R/table-one-long.R index b9275a2b..9cf8b60d 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -21,12 +21,12 @@ #' library(bllflow) #' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbcModel <- BLLFlow(pbc, variables_sheet, variable_details, ddi) +#' ddi <- read_DDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") +#' pbc_model <- BLLFlow(pbc, variables_sheet, variable_details, ddi) #' -#' pbcTableOne <- CreateTableOne(pbcModel, strata = "edema") -#' pbcSummaryTableNoLabels <- summary_data_long(pbcTableOne) -#' pbcLongTableWithLabel <- summary_data_long(pbcTableOne, bll_flow_model = pbcModel, long_table = pbcSummaryTableNoLabels) +#' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") +#' pbc_summary_table_no_labels <- summary_data_long(pbc_table_one) +#' pbc_long_table_with_label <- summary_data_long(pbc_table_one, bll_flow_model = pbc_model, long_table = pbc_summary_table_no_labels) #'@export summary_data_long <- function(table_one, @@ -76,16 +76,17 @@ CreateTableOne <- function(x = NULL, ...) { #' Create Table One using BLLFlow Object #' #' Creates table one using the information present in the passed bllFlow object +#' specifically uses working data as the data, #' additional arguments can be passed to create a specific table one. #' However if no optional args are passed the variable info stored in variables MSW is used. #' -#' @param bll_flow_model The bllflow object +#' @param bll_flow_model The bllFlow object #' @param vars The optional vars to use in creation of table one if no vars are passed then vars in MSW variables is used #' @param strata The optional strata to use in creation of table one if no strata is passed no strata is used #' @param factor_vars The optional factor_vars (categorical variables) used in creation of table one if nothing is passed #' the MSW variables sheet is used to determine variable types #' -#' @return returns a table one tableOne object +#' @return returns a table one \href{https://cran.r-project.org/web/packages/tableone/index.html}{tableone} object #' #' @examples #' library(survival) @@ -100,9 +101,9 @@ CreateTableOne <- function(x = NULL, ...) { #' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) #' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbcModel <- BLLFlow(pbc, variables_sheet, variable_details, ddi) +#' pbc_model <- BLLFlow(pbc, variables_sheet, variable_details, ddi) #' -#' pbcTableOne <- CreateTableOne(pbcModel, strata = "edema") +#' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") #' #' @export CreateTableOne.BLLFlow <- function(bll_flow_model, diff --git a/data/cchs2001.RData b/data/cchs2001.RData new file mode 100644 index 0000000000000000000000000000000000000000..0bb0cd17a852371e41f50752889eb4313a587237 GIT binary patch literal 21548 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 literal 0 HcmV?d00001 diff --git a/data/cchs2007_2008.RData b/data/cchs2007_2008.RData new file mode 100644 index 0000000000000000000000000000000000000000..323cd4b637c4052fb53fe9699aa35ce3431e4466 GIT binary patch literal 31344 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 DWZUyN literal 0 HcmV?d00001 diff --git a/data/cchs2009_2010.RData b/data/cchs2009_2010.RData new file mode 100644 index 0000000000000000000000000000000000000000..ad8f499775bf21e10d19ceb74fb78cda10a33f33 GIT binary patch literal 31952 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

l$gsHqX3$vL_9b38cAxpJ~ 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 literal 0 HcmV?d00001 diff --git a/data/cchs2011_2012.RData b/data/cchs2011_2012.RData new file mode 100644 index 0000000000000000000000000000000000000000..82bc6067e11549bd7916fe5af849b2b25bf1047c GIT binary patch literal 31200 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 PJ}?c70ssI200CKAlgwqI literal 0 HcmV?d00001 diff --git a/data/cchs2012.RData b/data/cchs2012.RData new file mode 100644 index 0000000000000000000000000000000000000000..fd12840a9a16c0ebffa11ccb4544a6d17d55e037 GIT binary patch literal 34064 zcmV(jK=!}=H+ooF0004LBHlIv03iV!0000G&sfayhw6mUT>vQ&2UJ%gRpOV=} zyMM6mCekOf zMkK&WT;?giKx#?I^SLEIhArw9X^Oy3-E-krp{LC= zG>z;%nd;~$NC{LF{r|#Ov*59&vCQ00sRsf*_JL;eAin3*hgJf%?wUA_08u0nQSWci ziCtH1+R89ZVCIaRmifgV$0)!yITeUB#nE!Y6z-s%f5dh$SO=#Vs2mB(xX>E*ve;IGygVd? zJj;h`AfZZC8{?R0qB{`_7AU2|P7U3SpqqJ#c92>B-u64x@GKiJ>G7|LY3H=+np6Pc zkI`zzD%xklS44algj^_qD3CDQ3N_dVsh;#i*T4HvogrsTOj;)Y8N}4zX2Hd#KhM1l z#HmA}T;S)mBoDCZ3LaDwkFi6ld%){b0}o@#73z;lEXFJYTkg6_J$ssuvB-GY!vhSO zADmpqD`T>A%SJombv$!Zv%)2FC4`gPM~x0tex0FQHE+u&e;-3%Yb%$6)D}0A#i3^U zrnu7=q@gqq-PZ!oIB*li`YE^nY@hNM`?|JNxow=3V`@&xzgrY=k z_qJpAVBRJk9}~(?ghd>W@+|)Nly0zV?@8pL4r`i2a9T6=1}c9~UN<*jLU1G0y5cl( z|Gg2%x*W#)d_Li$iD8@ z5D%xw#9*sjs`$`zb)YF;kvq|XBz(b8lctFbwnkuXKGVW_t!%VI2+2hTe6R6pR5L~+ zM@(eGP#$HGX7!V{zkl_GM6aJVkaU;_++1ujWoxz`w0>Z9vYFxj-Nt!}lN=ZF1z$7h z7ucJAFaJ($?w_YOKK)6zRKR~YdaBMQZso2vlHB0S!RbN%DR?RQOWf;+XSQ6@9q7#d zz0AG|ANDW53MDB^FwkZQg68EHc)12-a4W00@(j=Up<}K>oK<6$u+_c~9wK0Y!G?!r*@X>ez9;x7+?MOLCTS&qpufX!%^|YoDgu4p zEuQ%N^ZOLk&1HgzomleI^)mFO+_jh61@lKsb_by5=2z{|Yx%BuliwI|R zapNyoU8XsVS2vV#RuAF$D6IdMM+C`CpRBRibd<&qIb!q)eq_=@KKNK%nkvfUZgQvS z^z6M~gqJkh*lCn5mlEU_+6d|^81r9&w5y;S6doIxom+gY75SM@;`Y~ktsOJN7r!7a88+CIZuQr%$F&R3UysImnA?R(x9*H-l(&d5nUliM6$ z124Rs$o7Zz&eF)EDJL^??(Y|DDUsguL5Yd$!|wleIR20PAI`pXa2%y3Gs77m$7Du? zczE~65fgv^L!;!FEo9Mf#XX6R!rEtET(CnZ2LnF@2K%d8Hy6;XifeE-BNd9<6ej`6 z(0jDwbK6}C0ybDh>n7~JpD5|d8?CJvXBM2?uaVq?K_s%$ASDGkZCu{# zI^29DCG^p)T!%fQALdPX8$5H8{VmgExJdb|;GwB5#x=7Lc6QxNYid}7Q@D}x5`TCU zmx$=Mjy#O-;di*FG&ixEAO{WdSw*3L$I78brOsX(l{=z&9;GTWR?S8D$tZapdPj#E4 z&wKxarMLJFa78T)vtnDO#fmypI@BEu+O0JckIK0iyXVDtnWAsI z)8{g!i_tGrs(O43<&;oNwkUJ-wJAYN1EDrGGO^M?{k2jIj!^G%NaECX%-atrc9x3S zih2KrI{MTwR_eD);g5Tu(^D^;s@lrzHPMrrZU$LS?@ZiisV>Ai`g5t-ScwGvtX#%| z{8|IbKvyLl7Ia-{uvKK2)kwu8V2l8l$aE^IA4DuSAd^pHd6G(C zyI<*5*GaU}lWaJ|p~!*^=lQSc(n-YO#%5o4&VMrd_8r44GMSW8QY$utiS=Dag~CTn zm09U01pljm@j%ibq*Y*+Pd!EBD9s{E178uDfd+o*GR0ECT9LHQ$EsyJ4gvg?%6SdReij5P%7(^m0aY+?F2m9x)z~~f zmaE*iyd}eSIm5Z9G^=Xbc*Nm67PJo3JAiguuP&pYv23*26jZaBs3NLBzqbpX)GEj0 z(UJ0-N|zG#n%@b;Z=Bxu%hO50jvalA8ovB%1=J-`lsM~L6Dk8xrK#;X;6gJOPD-Gu z2c@3hKLB9TcDXmhiu3dI2JH)gHFAZrC=|bTh8`gX0xOYYTCGRN^&o91;)E!%*LMA| zrMl-Zh@x7trNF227O$T1i6DaSn`{V3J~mQmBun#fRVeMM)AG~-puA#|qI7O|9x{mP z524n?($>EvYHUsJ>!v&kcqvgZH-ncvMjrF7Z-lq_)S=6q1|)-*)1L{KtHbYyDL@5p zxrV2hwh}jn+gHB-;*hLW_SSLt+4mZFKefuNDRAK45P z>5xB(%5&7*91BO*uq@8?hb(DJI!IlgNfZFSlWbljk_#=$vJ{v#g~gz%y~+!o(L5{S zb*@M*6sOf{+B>3T9rAL(DKypOUXhy6|B(w`Fb=?;JvltBfgG1Ui#@Oidt#;KH2B(~ zynuQTF?L^EgInj2=L2X3&hk}~K-Z*H9J4;F~Y%@A;Okd|8; zI7&`<)gXyEc!48Y?WAmi&fJp`JI%DxI)a<=JFz|M-Mcv`E}>%Wkw=@Qjeggk^c)mm zNc;O`38R9vaIUgTJ8cf$xXl2Tm`^B^NVedDMR|7xx^$!oDCeNE6qP#g)TwEw^j#V* z9gnIpS?By}qG|ZHRtc4h4w!g9PPTB*-@`;Ok64ZaDi;%VB4wnd%PBV-g!w7J;V#x%AL3JLQEkP8-jMI$sT^yyL(&e)vc?5 zU;pM5y&-o3i1HNUWSO}6Aha;#P1O71>TA#Mawqv>Jf)>~1g-Z?{qx%aMO=QBdA)U_ z3RBct#6NyRm%l8hPQP?sbu=(NC*$uy!Dc8Rg5JG7x8X9NZO_g4{f!Sv{sAA2-_3{m zY8o@5?Rq`P4|4Iti2+P~Rs&rZk)wYnpyZ z@pUUaUEy?&g!Rw)WbF;@{5yfLWrZx_TF+cMJ6Wlu4LxhtNYm#r>h8_Ep5B4`cPSFZN3`u)QSxDsG{>@9#P~PJlbh^r6O?G;-PtI|L_DXF2 zvFhIWQ^#YW5!-%^Uy`eze-T&~tAOgN7#hj_w1=_&-i!zMxt@s<^vjeje=mG;JRox~8y;7y;+;Vefay^rGSf`)^hQ868;XfGEIxS!~T7=rs zFh@ys{3DqAGehqei1nk!uF>8=uwz_z3ubbamVyV4kF2A>f{`h7B|dA&R2cZ3wtdtF zhgoe9&Z58iy(uvl8-sJVOG{#}T{=v%>mT9wS_Z22IP2X@KeBk56=$>@B72Wf>5CV2 zAifr^`w#438f{@NAx}?GJ+?6cT&q!@6qmu(+Ig?zFL2@W<lZMVF{Uma_| z5cW63K0E<%4G|i)B1Mut0c(DQ5jL+qCTl()G&iWg713>7@8n^q;p`rfCCm?bgoiXh z1MP6wW$gJW`rpHzN5W+*v%cWMCuD0WU4@p-GHX!BcwKIe)H{y>nNNM+!VQ0`}B z^9Eg5Jz3_28$DA;Ay^ciYh_1=8}Q)S6N9%|b|@*~;E94EhVk@bm_5aGn(B4n4n>Se zvM9}M&UxVS1zZBzr+3q2kQg@}UM_hU6M+EdkGd!|;lxV=dcxd;0poKhDDnd3;9UPbKSYPaF`$p_(6uNIODG#wwlJiKhc2g`E zp6`HLteS663i(l^bbtRP?lU+*=iDaZx{@KE@1dp*U#5xb(QrgvfN+@7lLqT)?y(G8EFQlc^*l zl(@G$9qgcuMWy&h=Dnmb?4<~zx02qlnL*TDy?6|YxyAoU z4c%qWbUj70xkNA+(q=cg@MSI<4ZMeOam7mq(u?{>3ouQU6bVuL3f5X>@y$P4%x;*X z#Qy4P|Kpl(ajiLcu^aas-f46FSWKukPR3{tQ+n*6AS_tMX7eFpU>wxv!3>c5Y>|Oy zc~Ydl?0VOj@@$R8_+yXM^iTjZIaWJr5~$n1(#1f2@d@4eMj2y`&=l z#i-lWHP@q+LQGnYPwLSXou3K{jec5aM#x&|$C`NZvUO(b6ya7^y=LHAfEdUVop4BaeA zM#Qv&C9}CD&VQ~e^pCpp2ChmAOYi-@^&~^39X**9ZmgUA0T#) zJ9K^PtKP|j)yfo+$CHwM&jC2464?9BJV<>SDq!92@{Igz<6EqMR;-lOE;VC+K)kpe z2mI^2G@KF%K8P~N`a}U69B2{76xH6p!{2MS(sfKh{6$kc%<`&y4Ll;H%ZN~oLN&ET zqY-HXh)d5=^Soc7(sS+AaoB&4kl4G^3|eDw!QHv!R0emt!s#WE#OYb0>(RnVwwYvp z9mM!Vl)#cCFswWxSJIuf(ld=b|*2WkGdG zC=X%Gk(WTSTEB|uRG7YaI6LV};eu!HDhPB#cUld&wZ$S6ij`WXSK<C?U(mlulX z9>SgBPrQ7Bv@ui+qI;g=B)T4&7K~1_1-Mh4F2Q^u!s9Hl;bFim>k^>uQGk@>uAMb| zL^VwRBbU&M4#x|x5_AfF3+4qm8xJ4pgSm?;zuA?@u=j5q^!WRwlC58KUN zj-lvIl7wO!$W(W!B?+Y#7O{tEOwpBrelHZs#-!0cIlD`D5hT(>hrL*@U05+w;o}{v z+U1cbPnIR~2dJDw2$8B!4ir9!EA)=ac2Ak%@?ZOA6R*c7*)gVr%DjJpKCEJW89Zj( zrA#LPb7IXYyGz@&u}zov!^tuhU2eDe!5r_;=Us5mw786e^m~>h@iv<5a+(-rg^SNJ|*&c>(uF z%t0MBwa_l(y6u1q{XsIFHo%(``BKSgfV$!o>y)P54}Q2t5BmEiA=+LeOOw9Sv8MU~ z-tl+1FmF6{#OX#{VBJ$cH`XHRJ)|{KxiuZcTVsa{Z{!}#zBx+_jQ;I+&qofs2*AP* zN+i18b81*l<;4u{1}G<+L*c#5M2>&vYzEYNG@}^|Ja9jhahSS`)uWHUXNC2Z@8$A~TYcJlQc5_0#MV}KX%qc}R^M)OpoOxvlNe^Q2!D3gu6XsEa&N zv)_c3%CF(9lxp#>>VW#HH9(hCZ_JL=en@CRp&R+YeoMD$MkP7i}2Ai_w# zYH{PBv|KMZ}>sXN9E@3z9<8t>=uR-kF*UshPAI3q#< z^bmSLF9KUy{q*Y$A9zQ4)+T4A*J8&0;*n)ye4OBu(dCcTcI9Gp==kD~jmUJS8;GpZ zB-65_AM^e`F3JG|-lGD(D}|HV5dyxur=|w=hEb`BE%3Q;(;;tC<;gTsqrw;`Zw|E% z=90zHJb_&Lq4X3flHj*uD_rP+8BF$L@sSv7ZR%mBr;NGj)THMU@_P8nq%?w{&G_Mk zlCl7jOc@Ip+MYA*sVveKvuqClgT}ln%@SN9$W+L=`YG~8m2P*t&}xm^1gy-`5VZZk z-x(T{N$V+e;vIfjkTvTO7x~>lMbFlhgm^5TYImf*qm z?kp@u6Fj?za8nUV@vFGHt$BPs`h$xqE=d8YtQOl1aB+w%fE=kZxa;EU-llakc-A4h zt1L@*i(;0(^OZ@&!xQJAt-s6LYjeg%VCsO+{mqgrU*^x{8iOzqL?zFX7Pv??VmHda z(Yt4)E=5+Slv?gEX_VKRw?whzzs|(kR7?Z_XHf>(Ybu{P^E`%go9k?tS(0AXAw4pA zu0dJR@0CApken$0((O@jCz4sk{%!=yLbd8GXWe{E0uPh8!(~M(?f{v~ItGCXxyWhM5 za9Sjk9-jWk?asM*gIr+)f-lf*K=lm;UEsdSJ>~NSnvs7TnhZjH6FU-~eH+a3*rxHN z=cqz$EZkzytAjzq+QJDTA2b66^bQVtGZ>e0BWAzZDenpcg573@IcK?a-)F3{9W11r}0F9nzfGw${@JKEQ%6An?eB~IqXZg zc$UP~!*4W{;GgB8PV7M`5p%@ancj_>ce+ux0p044uk2@7Wp(^_!a5@BiC$4@+4quJ z6Dk5>)e&bx1Q*cZA4VF4bUMO^5)VJEb=OvOp9Xsba_}(zm+mm2{E#F!`}ut|YvI^1 zUCHTkd?v69!DOWevvC~NAy|JoTQ%?3>%WT+r}IpVZAwGMM0@Vq`FQcA$?zkg@Aa+# zQL=fQ&Vh9L%4rq?UrFq6Fx5d+_w706PSy?7fV=oG6833Z0QJ&+*HzC06m z!}3YsAChFTuhVp05qKSd3@KcTX(o7V@2LHaEX?x3^WJR(X}HwDTs|^VvAEx76yu*< zu{$z2vw#6wWqSK8N$9PW`|sJIssrUeAFyuT<@oh8?`WD7%JY7o)c)6ec0+f(41!OA zcOWYg84zb+k`I1f5OYU8|!MIMK|dtn=nPQoi&WFx4_=DT77T+_S?dvu4c z;QM1CWFky|x*S(XOVt4eb)E`dG7!29aLwM(YmevCj+%Y;eW1}z`Cr?KQzCCjWhD`; zdfEKz&p}1;Sku0iAJG!wUHR7k+>y#%Q`7gM){()9cK047IW3B(BX8+hEZ5YGW4Ac& z6wfzZ$MBQ+U$^i9`5E}{Iu<-JF;fEK&UZ1T4O2i&72-A*0l z?E9MKi6%9>`gHg7-tD>MQZPQoH^rTixyIaM)(eA{5OY*#z|`Xe_#n6IHYb7VPM%2o z%1|U`f~Wct4iTH7>uVh*PxcGURK4|7AH57kv7&qnu;o+-?v#c>EszL+o&s2aIGx+4 zf}gBXH3Whfl08uTu2^H)EgEMXNWCf;ybfIjZ(t-(qo(l%PNa5t#aB~67~q-*TMg)l z*FVtHEZvc(>k9(+&e!8ckw2YPINuE^J51r4VV1PbfRHli9+|WcSNq;)k7#3E_!Le;m%@oM*b7g7 z@U8kiSo21gneX;s+I2}*IW(+4RB3xUTMN=%6itPL2}OjgB}V=`)t#~{5(CT3m!Rp@ z1w_S*1xk*VN3Fg}sr(-}Q*h(q$2XslsrU~~|8V*4Z{jTPQ!1{6JQ8BB#4S}!-QHB3 zQfp5VDs}M%kT156v%;_$I!Hvv5b+U5S2FC@6{yM3+Tc(dvQ%8ahq$Wx zVTu66yRGU>x}9XzxlolLRAlK;D2(DVCdUA|i(gyI8(*`oHBr891-b?qg}{0M$wOG7 zWy#gPKqYg8$$QzMpO9Ovz2O&m`Lr{rj*)!6njfX*0-SRDt(d3d+XW~rWITlfDFO;} z<hY ztZQV=GF!~1H5gc_RutkC2{&4?FZKLMzw01t%Jpy>LGOBAox7P($=)5hTe7{;aERcJ zy;cWW?$Vce^_)`H`dZ6uj9bG*MG7Rl#%bh^6EEEa4Gcm5@8ceW#fae_)4X+}U1Vc*Wfv|v;iO&0Ox6quDx>c^>Z3SZqLdQ|d|P~D6^ngr-J z25YfX*^?g@o9^Md61M~Fm>}5>zA6y~#>cjX!yLAP@G!;mAaD1BZgt6&11oMb1-phy zHzRGr5#bECjCGn|BWf-aXAmZ%%dNGHxP?2Cs|5eP zpNSawvuC>XS8-$c6?yW3Vlbc)-RtK;w3sMtG9F5w>}bHkcgq|br8M)%Jlt@I++c^x z#s0^THxV_>&?D@{&5;|u|3EpSXSP8c5fnnVH8nI?v@rcUjyG3?-WxK@c4Hi!9JUM+ z0@|_?gQsA}E5Y+$k&ig2&Wwo0I$?!i_JVY{oVaAWq`e_{vpw^Q?V(>{H>3z~aXAcJ-EMdp5ZY3&Jw=~k#FKMgK4|AOgh&N>Z<$Lc5U zy`qTAnxo;V8im{cz=uoMgcUtP{DJ&=DHD40@D97y6Uy^;Q@R~540M9-%3?RwQEEf1=ogF1xXMcV2Glyk3;cBSht4M0O>jkiSyxiSO2{WC%F^Su{z z?T#kpt46sPnG>O|vXostxgE?)|yaKW2YtfVCMr7N% z#11MgoxhU;v9_SA_O)Ygm~APAI8fErt(L2AUGMN?#82TB4b~{_^;x%iF%x?~PQ~>g zYgbt3F3&1?At86bj!ZuL#4lQFcLkg5m7W6+1}1MP^!>D2V7usNIZOdzVKO|nnRdE8 zU-CGGiq{Mi43gn_zF@Ni_P#{f_Yru}<7kFCw3uI|qmIm;R%EyN-1@00(gfDJ;n3@F z56iITq$Nky9iVDHZQ2DtEvvVGrVu5xIJ}hj^;&@_e46HwUpi18LJ_Dbt>U!Q4kZN~ zB86)-;Dk%UzhdAs^lH0iUBb6Ieg_P?$T&8BX*N(&B2AlE{LQXUJI5bU-GHT!W#gKS zni`Ex+ftH2p2DjGW{0VHb-4O8{$&+xP$yA4`fD#h9Z}4rw$m;C@nA}!Ekq5}{jHQl zELN+4_8f@L8Ym}>G1$S5)rm`TweJ=$DtM&Qtt9 zoWD7-qNCVz!|=sp7tVZGlS$fa01t# z-No&a<%kgb=i|PdZf(mog6~fjC5Z6FTBBvPFH2OMHzi| zdi{JA0{xcLK#nSBJde&2(%i~Upl|V^2pnx=Eus2qVr*2n0mOwxX$t^G*nNN`Zp1i- zsO|Qr>wU^R#pe^?Gu32!294umy|5hUzONxeP1}9G|3KnFh;DoH^A0hX|0L$?Du-YY2#RyD8fi z#OR`6Pi$Y<>8bW~@v4cp5`mR#(WS)|=G}zsCRD;Zu5%kVHL<5J67nTlZ9Q|~b1mLF z-QM)*m+U`oaNlAu*v0|3KgUez*Kz+?PVz=ALmvV8iUMnLI6TLKw^hoa|K+!Tl7VTr zhIr&J*Bx&hH^=5_%8y1)q0bXxU)QJa)o9h^T#xKlzUo1GxfLID!U$$S&cp*t>}D`L zV)RkFya8NrkpM*oregC|Uq2uS9$X+S9;E?df=8%N`jdUUKAx86Ki|>x zkh<8~;5$iAJ%<;GkkQ5XB1XM1;aep8c+`OWh7axdEE^ad{~5WtYKf^lSGXE?)I0n* z@=_o|Fa{tyBR%_}9wLth>(KggT8BSBq|j_3?W)(a84^dk`0~pL&?k3U!gy3OvKrC> z>TX6gpm;7pIU}bG<%Orz*>{|}iQ##*X+`=r)W6d`9;BPY1}{l&gnUY=owV$-+sgLz zzBB0QWC)dR*S1ZG^k?D}i7oWWHJE)b{}vP}H~#$x<$pq)^$d`F9b2Gh|{FFd=E&wbQUfPG7T6RRbchOUrRJlP)9+TOPAl3%b zE5OuxB=S(`a(w?s)y+deV@5}ZvRA=};53DA{bxBCwR|6&A$z(ly{mq1}tH|9nmHl$fUA?=wTY{b;LR0!k z-<(LleR_~MslGbZ>E_fIr;y>$qJfsE;)+fXKHNQN5LwQ8v0-m|>Gyw`RP1NJSIZCb zZv4L|=SD4beM2&k>?)mPSgsQdRN4$}z{=EGS95@fCjV7N+e{yTo(v&Tj^4X{i1iq` zp1cY5w$EyQ)lZa1o!{k?Aij>d$vq3-100iSiOO!5e7bGEpkL?=j$}uSFav(6nKr%= zw#KL)-wfXrrE8B^h{&FxYx@!bvVtYOR#<&Fue4ccj9bicX}ozj6ARy@!*)+IcKv=f{N6dVO71CrN`*{@T= z?1~1?-3qA3vvlZm^q}*1&A?jH9OckL(C{e}y~1DP;WLHVzgKB4P>Fhxf;EoV9zBFd z(M1gj(?8FpPa7pYqgwhv{GF}`#+cSluo=C_UYWqQI4bt`4sEygK`H z@BLHb9%vx$w$?9vDv5+eejPq>Hewr(>#GIMoC={Iw2eOh1yO88)C6KwC?io79^|tu z@eA|y2nn&Mt?=?i4p~s&0FY#%BzJT+;CN+=m+@>)H_E$YBu3k9GQYl^hOZ-&8(=OF zsM3vdlnXh}o(hRd>GnY+PQB~KA3QrA!Ds}&BhsQvpHIOBdQ~g?A5Qa2tLc-Cv9#q9 z*HKQ>MxR3&TJ{`8v{3w{g(?J+IIHhZkJ(<~|1ii16e!MD)@3*mKLOzu_Lb>w%`!S0d?vtd4xoAK_Pn|z{cN*_34mekg8cvWk^4L zN+IfJkrf>SEbQouje^^0<&wA6_8Zk$y1NmA(?ywW22t&mgPEMUbRH=&;4st>Na zSkea6SX z+;2dLeYXx?2MM%9ujxeLd|dzgf8rU<3IuRA>7oZZCIiGaG{OVC7Kf6a)ug*v@x0#Y z@BiLW>+;7`qPiFAd_k$uw~@#5hR3{=HWV}J7U2u8n`7nRIsYf2(h^d_32lB=9pW*h zxmjcFnUsc$F<>S5QXFJif42DSt{qEngSwMu!ox8tg+VNC7+!>9Rlb^=iFJ+rP6X3v z83{|8)1GXvZT5XeN%F(sNS~)0iesWjxl#G`=oJ@!vW18n&u`LR&urB}fn|Hdo}T=x zXu-BRv*FlCUnsJtGb6J%e^lccO?GlNE#Y+tDaf&=XPAa)Vs1xNNmI7$24?} zy+8Ds^X@0KGNa8nsa*<#Q{Sq+=oK1WDYxYV9rJUG^VnBo);%kTXdYq|OboqPn8=b49nlyXjN_5^p@kW+I)~2Zc&_*Ij+Obu zh}U5o^l=C=k6drnsI&`zqhxqw!p2Ro{5!8Vj-R>UZ%&WwC;!eS2?W2Oy%H2x=WPoq zjLY?8oW6%+vwc})6&5!QoamYJ;NBEM{wZ3497^k+q?D^Y^j1(@N-)HjC$Qe^!u$pI^dx7KA-nU$^+(38riSB2Fk0@p%df`ZNy4o$Ob zo%$>qq{U5v*Km%~$^!0ym|s>0{4-Fz{=ae*?VCQ(1El8RO#3xpqV{M4JG*FWPyOKu zMQe5>3xC95eQbjgux>v}_TSR^$)#34m(`4>T^7I@?D&L=#dA|-tVd2F@2!l%^j{Ws z3X?IT7zczofbsi|q!U)UsUg#kP&4aYw=Z!`yz|?@7{M1+j?!}rp z2mI8_iW{q6L7%Tv{?NgeSbw7N7Owp^Q_(|%736Gu$3=TJaaz`SR+u8w9F% zc0N5S7G37pe>Q@L*JozhX?JeQdU2ygHNgT^$4T30aqqn_eO=AT_a@+h>0QLEDQnH4=RHOk&*|VJX*R@M z)MfoS18DclxJJ0?*vgr0Pg`p5!oKmjt*K*%HV&D}jxGUdbmH{$GSEdACwQ4Om95_2 z6-B|)^;r1)PVQGs%!v2L5pP>`-Z^<+8wvO!}*4zV^_(DlJGxMzPxQg?KEL*+-f^q zBvAb(vvD-fzpTMJnTOW+!5m(IZt_+>%qgmW!PZI{jbFS-IuR5KysGfOrKCGnetvI0 zglzY(3}=9bS?}d%l&Fxwf5OVH(VYFI&l?U6f3&t($JDfTKBk;0U8;>x1!u*yCWHX| z(qXdRLeZoUfLpn+q_Fp)++x$jDx{x(TNYJxytdCFV{fdb%EDmE>z#w zk)n1Bb@XPHC8i@K+PY+ZokaRowi;MMd(ACoFXq#uk$iU-z{=vcG&fe|h07useJ&<( zm7aTEl04-OyFZ*=z>hRBZi@WY{=g2~HBdh|o<3FA_NnI}umydKd>l9c$Om)jZ=g$@ zXWz<<7TvbEv4POLoN}bgDDJ_dtHM^Ldm48Sv2I$`|HsP4JyAZDJrJ4AHif=k$;Jsi zC*Bq|MSK>b-_iydsE44sRdOFwx$pbLBhp{wtQ&Y!n!$k1zH*|B9@_z%XDj!7zo>86 zP$T)*WbJ$h=mIo`*>6^UbQq;u0cE9V9n1v7Z`zuVA=M(DIxI~}7VHopydq`A4b zdPY4_oi!uHX=jZX`e88cLlXs8!RPGYIy>~pd2Toe>bj?+yG+k19Ub5|&X91^?XuBU;BYW#5CBSc(yZQFTNzrG#{$3h9}cSeJY&#j|Dly!|MFjFFon?VD@$ z-)M+gPx6nX{YrskMwQGK(%jIBOP4@=Rzy0~M4-z0_4ibCu@!cE8lyrBh!o?8VLHMd zePgJH0xP5E4Ug6;kO9{0(kdT|(W**tVUj?O6&wry5PjD^_BQ}2^2(@BynFOc11Sda zj_|@BfF^Nv_+PIFp zwW40Zq!G%^)rV5D0(Ro{r5k%QT#xN7hgcFP6QkC{N@z1CnrC0zzG^KNy6_4>L^pZb zsh>t++4M!6>-CWAb8zR*(;mqbLN)z2W=2Am=cDZNkWE)@6OXk91Kk(TKP4|}e9>06 zz)$d|L#i3!1_fN3oRF=|-N#K%$QZb{EB_=V{DuDSJN=n_#v4 zP_-^|9rv3$(%VbsQuDHak)<@DR=1LMS}z^t(4) zG0Oo%wJT`^=4AjoD)Me!#_E+@IC(uTC6n4IZwP8S4uz583wew&SRSysMpRCrrmfx*p0D0=STajM{f4?6@{f)wdAa;(YUka| za9*q@bh_(E*i=ZJ^Y5jNM|_Rte|DQ-fT^Z6RHBDQZHMXNH?98F&vNUBB}^{P&k5qR zj(bmm_6U%C1ZzNo_%Ho>awue+2#tlMB}`@rpK$Z~r}D!6^=?odgAJqB^;wxcwpXwG zEwRl8SFB^BZAI@E&*BD6h~dTcYbM%omf_QmCrL)es+V88nI$(LEu-QCpD<|k+aSA@ zR&H`1DWWPjL!&-a+r1Kz%ekZCtW^wRFt)}`3wTBlbeEs~%lkq1lyv zahP;YB`Px@mkAN>2W_ZVux1^Y9fDg|E9T9Zm}+*Ao}bq&-e-mbmUL?I7{jQ6yxCUQ z9Jj4Qptw?1*24||&k@5mK}k-`nsI})3Kv$T7*Mp15EEIP*ovb-))FTd^yCj3n9S$f ziCQ5bkv$Ct((ymqzVr#;gJ{DvcAkT8Nb_7pdfHN>4nrw?4fx_m^>S@A#Y7+@ud=EG z%;C!ackYiW|8GQ8bFI?{M(PWXd>WLn`bYVWhvA<-Hl1+F?p-+?R zAC-EGy)xNOuV0o;1!MHeSrFi*R`Y8h@i~^wW)!iPu=*Dwy=%F#v2>OCHzXgNDzq4f zYF^<132ld%4Ik;DEPtC|OMT9o!t#P#9dsarCzS9JFm|4-JCz-dm-J=*)UKcMpgg02 zh-$+=KFosN?LwwOgI+3``z@8O7XpE8Hn6W5U7@*eBSLM^qjF%Sh{F=QqTe(3(Z0$6 zE=SjiIbSBaAo3{w1_{Y72I6x?oia}VM0E8?q$nu`B}VHf%6p7ltaTzTYN+6z{Bng2 z#?LZ6)o@tc<8io!0`sliFTpcCLi&e|%NQ>4jVKU*A6DDJ%yRx)iamp=fUhwaPZDS7 z@J*_gIysn!_BEtvHO|Ol=l=-1E9FK@ikR7{3~?fl;P;mWQ7h0i4D0P5ogpD*@$_+w zepi_3ZWgBnXojVAsN+;kmiFhDq662$=NTpOKCm7@RBHS32-#>eW@OTM&GjrPmxFtZN`ZAuk6gjcZmW#Ts%(<2dQCk*a?l z^mxqzdPwdb6rAEG%|8blv`>1^@X-auIm&sezvL&1Ss%N5CG!(rF>w zNG#P%$EkXdd7>EmvMQ<}XVdJvJL0TDRIa<5Z`{YpdSKX*E>~_O#6ImL{*0Na^(Dwz zxo!GqJ!@4XFZrkuc*)Pk2;8Tn zDkNVrd;IPjO|Yft5a^!OGMNxU+aZ$N>qF2Cv#G{=XzO4Or}b0d_2Jp=Jvg)l)`<+`P))uD6IX^7O9}w!=XV<7*JWMEj=jx~Z zvlkaH#C8%nV@In8w#iN=EMeyqoL{6v50fF9VLCxfZOj4UR}P>-tN@S4mudmpYs)%W zi0e$~3;MLuBx6#r$5G7IAW?ppb>odsZJYP$8n3+I7jozd}N z2g-8k)G3ERHA!bOxl47=0}N?$2(6ooGp_$VRF~7S&6MkxNHXgO;QCv`kX@=I5^w(P zQ;7{Ucy@@sPC}_&Sm$xte|?uM(rD#aP}{d;hWYDhJOPO#MDAziIrZMSi<*AZwYcN| z^&RggH4wi)W06rxj+0H5>CkFr?nM-zka2qm_QG(y3hq_?;yeI+$z~l%=2ZSIw4L?A zoAb%vUMoK7R)XV5la#rP2#*^PtqXfTbbs47aSahf%f2P9%|;p!#O*isppnj?xv$0R zhDK^S(mchCq$k8pi&L*O6M+Rm5RqRcW1;?n8>W-TxooZtE2HqfIplZI5mKGWx_BU{ zlxRi)s}5jihK z0ZwBF8YiKH3{4#TzLw)*PTsKd$Ut@zP3HTIe0VEdm84BlLT7Q_sk2(q08ADnn9ZRGg6sAjAuti%M zZ?gTzubAR^=CFLfA4=Sty5Ne1r7OgwhiuJI=~W0T^hEIP9dqA0af@=``8cUW@P{0d z`UmRQ7$WewQPg)9DYnWOKKt+#Y4e)4TVD$bLK~bTsSaxPQxx&%xFUl31%w!}xe54I zxo|i<^;;ITUzep$$iF?Lz=QpFV7UCpkCCgbeFf~5KMms&!$?u#2cpy#p5Dxex27=&Gz@_QigMV_SQscQ0QH^Z3n!CxI{h;VLpM87^r zdh6;XT&>`AV$VUW=M{2x0#3(J(v|zr?~W^6D0BVgB@!7dz*yk2s$abizX9Kmg9E& z!T}@ie%3O$9)^Z=SXF8Np91m|b?k>^7oAq#X(@Z4PePJshi}^T>YRO&_x+9(1TfAf zJc8K(Y9R5*6sL-LHcPV`={JMnlb6RHgRZ#A+I$UDQ~ZQ(HhMgE*+y-#bPknE9Rbiy&fNg7Sic&m#V9S0q+ezk@ zDv;bpwQrZ#p6aWn?d?o5z2NYlAk!Vk%gse(dpk#2=1K}o?6HfswYk&5z~rgRNRSu8 z=PdiM=(RcOXT2gq_ODsAf>YvGVAkHkgM|`ZAwm3?q@IJ<&_g> zs|!XOBvD5_ZF=9HbOcD|q65fe(V7%>GSkw72?=Sd63c<;LCmh`kLCmj8!NuIH-onQ zr{bi0fk#BXo5SE|7F4mwK*)Rf(;sNX4%PKnAXtjEJj+P^uVnEuU=5@C(|P$J_m*>| zj!5?a6$*Fyd0jk;f?(;P1`Eq2(c%suwAM<|+m8!LsL2JpKGd*5D~J zQ6fljc^hu7^{^VXgP>C8%M$QpeDODPReOmUH6l%tUuAyZSwic2WJ6c@DXG%L7IaSS zE%X9UPE8vrFjr8mTT^l(fG(O-?AVFE(4T&O zd5w`gv@~C7_X33ncb&n}k8ZvKE#3F%qM!i~ssYI@5or(Ag@V{3M$|yM8|de~X#SFy zavcBB?v&&UVDUT2;PE)75oJLEo`~rfR`l4jpgT9W*z%o6^)&V!Oo=$k#II~{WFZ!- z+N9(eeA>4|bmTto!3kiZqOsn$MtSi-P0CwBhj_=*I9QxS5||;MEN@Uxv%z7!EcG(N$bhjJzb_ z{?ro+fSVA`HS5g)@!s>rsp*3C>B^rH6W?6YCas(snT}Jy=)YOuK5j7Zk(7)DjsskIdrU; zWa?y0eKGvw_6(*Y*x4j)7|GJ;jx|83EZOSL%v7^h#(%0>+8PLA_!@Y7&Pk+ds&%)1 z_ol}-eVvBbbIU?vn27!3PW=U&FV*|lo6c8Y<>f~rYj|W>xCN{_J)gT3r|5wn5(p#L z7|obiILB*7jAw_MpAd@eE1h|jj3z$C{s<%RqX`?CccpYytAb#x=bIEj#2V2sIR~=ol0BPe(e2gFei=~TzKPsj&;m^8`% z_CfQUj1YYWAn_M-UkTtm`7LewQYTfr0vb7KA=(ip5!FI@+Mk!wn{*itQ0F0JCyE5} zyz79tXM0C02C+Hd1M5I}ly*yF3Fcp8HM%HK$6;5t|9pn@mu4MF_^uRRh`D6Zv|Xck zgw~lXbPF7ZjtO{Sl(H`9MlO)Otte_C*g!#KtV$mGN84JDK+dQ?k>Ttvr!6>wvx+ZW zffsAE9WjRVS4M?M+Vh`<$rt-Axop|MPkx&N=iatFlk7Fg_K|Qmc2=te7D1r^>K@y< z##murkN?(&&DVxLqA}2;Qw5w~T~?y1C*N8&L7BlWdkDKf!HO~%zgr&*;7?7GGGo(T zDlQ?j-s>BQU9=5q!uHk?fe0x@t~=#B$Y(yXl`ppvk}_-rOOVQF`Rs?-a^Abd5f=1h zMbh)=tf^sN(m(y!AxdZg*S+nfL*v)x-{mRD{@WmQ0Af4kTqY?#?jwV+;5Hs9pWx5b zO)pB;@iss#o``-?O-Wrp)$42g&^gjlC+hTi>7JKwnnvv?42XQ=38TkKqc*3zxuVA{ z#YB%96DN)U(umOedvT&WNHw(JaVPfR?IGrgxCT=t0`Hu6S`DV54Gf)9g+ys=)b*0i z3x%?rKA9c4SDb0Wazz->-bx@+bgGyCZsOCwT9!sW?#NUK+tu2R-q`PwQXp$$Y1=~Ai< zws`OOk9D| zZmwnLaf=_B)CmUjh8`#Ucp}YP1~x9jAUJLgibUd{LQH)77{IWU1&dBD>NxGOfA15n zCN7&9>3M~=iQ)Bsy4Zd#f_-6EN@?4T(674HFqJ(N`iBYfuxmR=Ka1~EqQy8UhjEev z5!LRVI*)N++reaEZ^m?p*A0S!~<>UrlbOR zkuCfAWriaPFHD(gI!STnOqcC3gtbNWU|g8&)Cj*JR* zg2_80?ORf>3e=oOLP9MATgL5h zrJvgTL3#g9PV)HkX|TX1zXH?hu=7TuXkk#0+>dWr@IvLf8gl$60D*AA%)Nw0KQD9J zbp5kl7%BXy`Nq42$Ns6Vw8FoYn2j27=OE;LYbAt)!ON{L5In4vgMLcvTIzZNQ}5Ta zMsxl_?F(bTv6?3jFox9?|J3}OPOl8$`E9C6ryAJVIy)dI6Tunk;$%^ydPyD;V)V1p z?2q~%yZ8YB@$7-Vt;G*2A!}w47DiV2BS+Fp4DVfir(L(*sK3P~JU7G_lYv zoCJMgQTR^tJjdi=Db?$ANM150zzN0Tm-AJIvv#)`V1-M!ae@}z=QqgU!TbQ7`L|Re zlW{Y-txk1^{=y$#aFiq-xUA3gQ&vf>4afY=B6QN{sY-5=T z)C#k$2ho@-zHdg<-$6KzL?-C|piq~q8&`_6U^mt7hS=2nQe0DPFQpy;y&9#&b(Wcdro(||G&0ur~~xmhLlyhRLlU%X}x>!VnQ z#V$#z)(`xC9!ki`X0s2MyL8%2^}wC36@?WuicFl@WI7Z67$v#48L0d+QG{w-d2i6+ zgPCS!MjO`qg;3)XWb)kXlvTO>v_{!{auCkEKiKADJcQZRn~$5|{>T`S*ev*p8?R|3 zeGp~hO&i}V@@Y-RA#?x^WdO!57tM3BRW{rnPbwr2{1zc<4Les-^i`UMtLKE;U@@=+ z;pq++x|@cuTsTF8X5oc2a0IjUsL7|BpAVripm~)EBWu`FC~GMVh@juZ*XVn?=0A}1 zII=mmsgkRKt+mIO7;NXhb=+5_TLOXOX8LHdpal1tz=13=Bl4prA$oUgByYxwl49c3 z0W+Iu`M=4HRb;2_q>Ggw0BNO^ihcvIifv|W$t?ZyDqTG97kV@Sun!F2KxzZ5)Kejg zhH%s8(>(y92`*BTJ+yrH1n8cWY%6ufVRY!TECB64|1!6A9mIaXWVnd2yEt=s9{kT)``V@NaV!3?6+uLkso* ztlbg-0h-u%qm6Y!R~BA!Z6IX;ET1?tqLbM>pauEalilKQq`eGK0Hf&<#agaH9tX}= z41(h72`sL9krFE+qRIbv&`M9$+j`)KY3q^OyAAaUn@}Ha2{$^e91NcS5Dt0pmOy!= zBXiKrd@jtwk}SA*kq@(XQHU&sW>1?0ua!lJYSEaA?$Z z(12L+u=)ju6=meEmL2mMXf9&YOAQ^?1ZCGFJ=e+{2yy&Ib3ngYZKSX#BV4zOJwhUBeMB0r_(>=pT7n;W*hznbv#8|6>8!_%6oSBAWnPRm;hYzuJfN>QYDE`Y*sX$^+xYJ_2Urz zgnxgG+-S`rXzgyXuWx{3imd8S?~y%Fl9%!weO!8MHKsv;EN2JpyL4n`>j>3|?>}Tv zC&3wB(jphXW6DmCM^9j0#OuAJV+;piLCpR0(M*EC(gS;R&zz?uz0qE)2uRLvr~i3R zRV2i(w@@&oi-X5`kE)y?JSk_B`$@xXA9VO|Kg*yq+UT=%6~z@(VxA!6-Xv3TNvgOo zPQ4v1p=?^=_nn8#NnENnrwBk_h3KC!j6_Cv_3MDt#&ufohcawxpVHwO*!~E~q3H{h z2&j&CU}8~^M3X|Pg~v&+-PMeIf)gA;^Z6Ql4!=t0>Vb@mgS(d^GZIW9MEC&3tGH*V zN9(@N6xpevC;`uDVE%rjxi5@42ZVd~tNOzxP%?V(|A&S>yN0uubp!ov;sE4bO>5L$ z*1+-S2A*tW3#_ExpZT8-A@EVjl3B!BW`PvVHYT74(V+j#5!UIJc839Mi$MJ>RYI!Y5K1_lNgH$w z+$)`4-Rpx(PJmiDhx5w z+KWj9W4M90GB?TGD3G97#A$(Dqh2k7fB(lH!!>K~o-G?1Ajdk_VLRP&EDaFn{LObr zmK6Z&V8zK>8H+G9t^}%)^Y@g*j}wlDSI>8EW7B8BYlg4?*uO^+d!MmjZeveA6$+cP-W%}u>#zV6@pKZXpSnbpjpKw zN!>U==4qaJJFOq@>0`iOZoHaotFHUVQ|ic#JvyzE6i?BIH|163fF(&H&mBm{C{|UF z_ktzSx}ScXq!< z9P|w+!lOOB0wF=+bs7iOaRvK(kj)i{wf)rt^UHxd`gi4>p*Vt1zWGq6CW^7I!KC&Eg|!28c!DmzHWt<7{<3^afE3y) z2~lf~SKKJ7u+Uuu*y=?_YmTXab9w`)BhEE4@M~VAD_}`MAQ7o!200TBw;)ww z>l>4N8mHVv>c_ma?v!DBvV4t^BhHC32|i-!83XpbFp`C4e<$V)Z%Lxuog|v9W~`eX zCuXH~lNn0Vq;;|}A+V(*uze8oKhuV=472GBq z*3*+9&P|1T9DHyF&fUiv82n@`JA==o6*>AB?;oXa!l7{JXJqg93nhWZYwmve2*IZ*NUEe=Le{JnuRsMQj!nu+>g8x!Z@9RtY!;88 zO%Z=TxvG&8zujeR;u5LCmbZ`Lu!8yD8}?U#>vLg&8tji7;t2l3IZtJgM1m*5TV-AK z;jo!5^!xHh!t)TEbF;-znVh|v%UH@*tdqRtDCr2~8V-~e(UJPd$`Xu3Nq5!_F#40r z3Z4~pvq<~+MOg|msNfR@U^>^Cc|cNGA!p#ZWgmGxFPoJoB}Opwg#b!spE9z|3GrkZ zlb#*K8TWGtv9=m>-FDY{y8$m%PQg!;Fxy*S2}B3G(lJ%|?GLSXSGeNb&Rnqunecvn z455mbAHN*s`-IP;K++b^>2efcaw0mpf5o2Oegjqh>vST}$@KVxk9H*l=_sS9r*iG5 zm*lhzYHWC9OtMYMZ}Aj@0lM`mXp+BghqZfCo|mr^8P>&uE$nh;vRU+@Q|#B!&K56= zB5m5zJX5Lh0*Arg*C=Ts>Z>}iE(JS<&&6?{dWH8aRAbk~DWASRO%Co$49WnApjHV_ zo2THU0~?sGGm?=hL^gA*`9G&!!((bcjST5jO*R{-!Kfhk{!G#gd5aKIwDuGBY^(L zMke$ORp~(<5EM+kb;~C79n>NgC=rOu=g^O7hsk#Ew8n{8Qej!nh##~ZgYbc2C`T9W`kPUo46G0>rkeCwQHv(>s~ zHtQE%Q7OtA2tIRvI~Erl+v*%6%eASSQrjsBN33>OdT*5>Oqx&>@Z%{X)w`Yf!anbYty z2tvA=fd=XUOFn@D!B{eZ-Cfk6BrfbAijvCkf#a35=EBaEVF+kL*p5w7X@GaVcz+aCa#xJDTB%H0d$58*j`(?7ku z43q!S@q|!y&&~^BTjt!JktLdb(h&&|rQ8@)DJ)&9-#6IUfj78iGH7=TAMJuMnX%O1 z79iZ3EO+Qt!YuHywaGue;hqZIXyc#Hwa$OvC6*a~FAc$(uKzk8xW$i|xUWAvJAO;~O{oD{?5&!Q};L zl>*w%%M7MxFxLXUxi_X;Y|{k+MX&uQu||Db7yA-W?1@oOS%toX9sG`}=JnDA2Xkgt zA1X~xl`o2oA3`2=Yc@fC=^dmEXY;Ywf*MdpI*Jh?EXf7PfWUV`kAc5rjZsSCoCKRD z%Ec!I#m~FQ8^@Z$U_f2vR-fVH_xve}-T!93=iOW>|5^eD;F zWeWMi^#R|HJj0(H$S;}hT_YU`rzHVMhthfY951ucVFJYnG2%=-E;Z4K#gSwq`O+HW zyPb`YKDHfDETQVzGZu#fyn{4vXo>oGoph7tH!bF2y%LfYlwc4K(Wa0?;}q?)w)_#m zG>zu`kb}bkLS)($assrJ$Ma();&Ti5q8IM1x$U(h8xXd{XkhU%Dz% zl7kH0=RTP92X~cTa!$E?m4?CXQl5V;P0}g)Uc=Q`>ivg^4&(bgdh0hT>I{zUHyG;( zbuNoCmUaXc-2h-kpYO;|6y1kKuS|`)a+i4}npAh9vkQJY`Ckr~R#g=IbDvV$`a=n) z)G9VkK@Vql`zd~Yck3g=l_03erm%U|-NYluha{bZ9#w3H$+ulX#1TA`lt!zw6~;TG z$z0E*?X8bM_~beuIC6M~k^3Q+Y}^9d2^C>_03gwVFaHHCRb&)+7b_`y&lW3^;ASS< zD-9nkSv64m)fql3vlm7K_6SyFB1%0>1;TC84A={tHgi5K`koQW`Y&!(G)|@@%c}&- zO}emEa|m#hJPy^R%gA)JvEVf-SuE;}3$`ZORg^9L|FhQu-G7pkR_MraPQ+}NtwKAs zE}@x`P{Hw`;(t5|_9|nRpx2~2B@X2xd%pt(MdtWjpD5Em?3*XKjrlpbaLC6C`}Mce;0Z~wncAqq z#ibe8wuPffgNfO&Js5V3bi*YeCE(EYc4T}ZjJ`@eXDBxk2i{gJ!;_`0w$EEn!Yaa9 zc((Q=L4dAUNET{&JzKetvl82%55PrrgqT6l$mpnzz@RPm>dU{R+3Nqoo6-}7TaG}H z$K+a=6awROL+48Hgh|tZ#dp;6qTqcAM_Ote{0SA)L&K4IlbimM1+Aiz9X1gw(6DHk zwQM!-zl8PQQ5*mfJXn=i26+o-&k1&h(~&q37tpkBq|X(=kE0CKvebM@#5ybdvu+9m zkt>rim&IDVq9wpD?R>!i6tcH|H>l5B?$(UNQ#67@1*Z}=srR=9;ptCGc7=+S(~)F{ z?y=A$qm++9Q*6kH~eNGRJ5UpI9WX(#k!he;)?ge!H6knIbWj51DG;8pzoNox%Bon`;1C z|3ga9QkY!%6{A%dCB^ri|BbVBa=M6_S-HQ-M!6&jAdx?}aJX?%GdeJb~%~nL3lq$pkL5$ZuITQjEI0OgG$Yivb9x+*0Axh0yE$o zwTuqMi|xy3>Kl!KJHg2u%?f}~Gt-+DuFjyQ0B+w*FD~%8ay@g;R|BP3(xY(D$g=}( zR8uvCwIXi6BQg6Jzgu~{+YcEz=R2Gga%u(I3%z4BF2k*LKJ&NX-N0bR@@8zSZO+mp zYBO_z{YQ54LToP>GTL$Vh{nDZdVtd$&E)pUjp|!PmlbRs#p?7NL+QqbcgjKsb`lw{ zAcX?buQjTEgSmHuVLZ({31;z=AgRi1V7?^3j?7e8+wO@P*{I2_rQZ5mO&(>xZBSl5 z_wW%_`YQ!tC=AvB3PZqcL6j!lZ<@MK)UO8wl1RZ0+d4h~ZhU_9W2DOuXaqNtG(|=e z^3UvMowWH(9~}A$)V$OFr|-j!_g2tZ8Pvj4 z&FMtE_QJ(E$Eg*wgnl**>6X!+8a-Hz7B;aDX+w={DXx#`on7bMeYHy`W+rhjVhGl? znnw5QfnegoOMo9Aufv1Nxn$I@jw4GmM$Roqp26U7TpKs&x))#jS3N;y)$o825K%f3 zi+3)njk$cO(`+3f{I0=V*V^y_uAPMQKF-ir_WJ>q*cNXT;5{E0vU2$)Y>lA8M*ofX z@mmKgNBUMzlX@ol9~6hFU?W{~w2$|#b=^!TJrh|NBsT8JrL`1$O)C`0fJ6$4^uGE( zR_3}H(Cb5X~GNl}(&5-JWZm+y%wBR_c>!q{wy{J#SG4qXT=7)NFn#sSq1v zNBP4QA{%@Y>Lf_}gW5`X_K>w&Q5f=8?7kE}$4(XO@Wh34JdVoj5X>|N3oAMC)(5ED zIy@P?f_VZX>1epwVKwqMFd&8Mlt2I!uOy9AfNdPieU}qJ`IEAyX%=L+9eTxK2&DC} zg@Og>k}G0Tx1rn1YRsr@WVRUNpE7-e^=HCulQb#w^*%a;79Qcq2c1=0QD8GZZDN1! zJrMg*8OF8q_heXRL`o4|7SYrjBxJIZ=5HJkob!tq;pqV|dFqxAk!r zg`sV+nCN3RTpBR74$=jN;Eqjk`rjCMEf$>1c*PVirJ3P_j0X?J(Z@_eR}|xPw&2Z0 zJVC|`=Q{=(OC@~VV2Tbk%^iM>>!ZbZ>kKYg_iDM!UEr!1xB2R9*(c#JZ&GVaJ_WNx zpH>qn!Yek1))^4EkTvuNM;|R`d5wF45Qg29SY%BK5#wiNWr3X*4C7&De|@He{Pp-W z(%M}SDuxHKBOBNG@$7)>jST*Cx~lhz+GIJv8+AZQ1|#Ur@P_i!3UzUdKQb>A8-%c|aLY?2r&h)pg) zC!f2s9E-)E9a_Iido;b)ztF<=`1U%42vk@7N$?{+V&X+S=VEnA16*UI_`TDFXX%<{ zg4Ezvy=i~HC-#MKe%@crd7-xW?DbAFa19IN9R#PZQ^XDoM&(*Zl)Qflg_Iy=tX} zyC>=8(D4x*Q{PaOd~3@AxL-LS*HL^>M$z6*ySJs zlRKFtRG$MN%$|sh?#~|CJk2+60CD4x62`Hj2(0+g>r(BJ;Zp8FF30rni3=3Py^gS> z^hyoD185Pn2>uEJ!Bqk?ZSrgLnEP-M*K7?~Kf|0p=m0umv z@obv-j8J-MIT=%fyAy{6hqjtxz zQ$N#}v);&ZUk7E0TwA-9t2NDn;^2z?la%9hY1qCf&mQ^oQq5l=ScdV}VLnii*IC+q z`wFfgvk;o2FgG4!8j%9mdwaqP>2=`i7Z}C5u_yjn+?A?cOWg=t+J|zD2^e(?pF*pQ zIS2rqZQ{f)2mA}hJ8dgZW9vGt(DSYo{;IQrxYzt|eIfrsnQ$gzCpIfhlDe z;17>FtpH`u6b{dgv?I!og+csvy(+&-UT}-KYI-ApamEd!0_-$&wfXg%I#FCa;>Dsn zAkv6~aT`3Xd%lGhasF*qu1l)gW7%gBUtUTKexUBx{8hD?<8uyVp)F20E0fv86<+>#Ca6l_nH9hsJuLNtlLY$56cI= z4|)k7xV`s;c+&$qOp$ zXjT7sV}JPWXV;3oE56rX1;kX*O)nO%h(W&+ z-7CVOPm`fk9QKCO5Cr%YHF9&BP%@R4H=g#dKFA{fK=m*9oK><3!tYZy`FN%qNxzw5 z7tMrB53x8ufrxRnz-vLHqdJmbBmjWM7)``_)rwXfwxqQC>Zh4JOBEvgZ4ElV4}eEu z1XX|7{V0%O{N0bN2dAhDCN$JKMAPh8=PkUKIi3lh8Sj5Z?9q$#mn3(g8LVp$zN3#R z&BH}F2i5rRF=1A)aE^@U#HGSp1WmOHtIS2~{}H>aASh8fme4JW=maj&tQbg(>&MIu zzD$GGE@mHnsNebiac1D|knAX>0~xaDwlI~R54k|PRDV!lW+Pf5^g7%dwDA;X*Cl}1 z$J<1T0F#YuBx_2*%N`&ZiIzwRb-x2PlF*Muc{$JcDVK?JBB&BbuR|_SAjX)hZt;}f z2Yh*sk=jBs{$_p{O8v_L)g{X4`x|WjSKI)K9 zg57@`E@U;otbFak0;*1SxHo40s$9DKy$^-EH-q~aWF!ZRT$HZ z(v%P7spw^;J-mM83A~?r!xt(*mZH7d2X0s-XN#s&kr#@|Pnf71WDyAMf%IH(@|b2^ z%m6vHr7^w>S`O&Ac zt5Eu})IMSztbSxqG~UE&$hs{iKB;X&YKuRI=UeLR@2uG#d^aQ%rVAp6ETM8)gzFxWJRHs` z3Z2@cngX_Rl#U-A`F1VWkFr)F`wyHnZYX3VQ6WyFe#X zkBi6eoR4w&ZWc!9xdS3m%Io@`VY4%Azx&OP8HC=};lIJe`mUz>K85Y(Lsqz=`XzT( zM&8+Pb`9S@ZRpq$b7|KAbI2}HoXRU=r2PHvuVCCE5y{tNu75y%%G=66FhB`@Z*O@A zZKCG#SQsYnNnJAGP4;;0GNtO#|2ouNy(O5XD@}ewpwFce{D|oSgT68^#!(W>w{2aj zZ!+^% zX$T$KS2JWbay_C~|4r&aZ0;pu68H+1jL=QtvZ7T`6bi4tJ`6BMuh506!8rQ4BDduF zy5aqpY-0UbAJ3Po7B&s(-5-TI7v?kYtn9V6fFn9BFh|1G@jsBPW1RbDy{tgQ&ao@D zE!6&uEt+ZG&|AU3ntP3Zg zLUTmeI(W*b%GWLUMuRtJgDuMU41SgE1hT@zffvqhuI;my~Xu`L@KO(JQSrV zini<%Po|r;Xm6waX_-0L&FMO9p#KP|bMU4eQgdtro|VJzn@Ww*08*axIOb#q6QN{dGxS z&@7rvq>}C}W-IXY8V4%~d@==0M0G9sr)=vE{Xm0F-~oZk!2k>DUgEn-L0M8&Cb3B- zX7Ne~s$V1!wz~!Wz!(T#xQc<&J&Kb~Xn|#oFzEMDF_j=Pn5}1ZSF;9<1tUU5a2uMf z(7XJI0Gx^fq474 zN+`=88brBfcPq=Lzde5*9t4{Qrr!WN@5gw|` zlUxYgjh8f~C1Y&^NoJ7*?#WXq%h9ETFnNj-3i;LBk;a_;qso3K*8)&KCBD$>l05%! zoh>|J^p;LRFI&JX2zbVKPm}yfnIr18eFC6ea&VqpB*mj@&Qj2Ts#OqMTcvmI9T%jd6i4EN%__ERVPjNO_0~}@i*Bt6hlcBIOtN*a?T}9swBfJbiXvS7|l^&DG_1 za90Z-Lll@?igng|AUfzuFwvtbEdRc49oYW5!oU{;DuId)A|q zm)$PRaQ@oUW{D8?2Jn(S2TfNVDP+=HO^BE87m?reFi1^4T5i~3j^6NXLi6Ll6JGp! z?ZM;Ap|HFX{{Sl(e08DK2BinMte7@T+1`7ruj7P8AS{|`Du_VhI|z(fiEbmq^&3qE zZCYP_OXFYz;C2~sPXvqQd{q_Uzjm9mfg+16Xl%=H{0n7w5`_fvfArOR}b#}hnpz=hUz0{&ZL(8J{R;)0y0F7f!As6A|1 zYgWPDd}yhI@0h*kEe&J%P7$aaLC<$el5+!oGHY5X9cjec=t*mObnRP#ZYqkSUx2UIqUZ}fT9)S1uRrEw2u zLUr^&g5NKfl~@o3yQDN-Tj8p%c}_D%G;dMpNDLt13uMOXUQ^0xg?X$qu8C(5WG+ud zm04vUvsDf_|&IByApyM8~1rHYb)-OLJ5tV5()brP_RsY>48rJH+L^sJYkZi|~(^pYX zUVPJ|=v$U}qe@I^Bmx&xZ<02D5YyKs8F-=hFhvh(4a}7R^^+o^+~x{biQfF7@W875E>w$r0N%b5vUn)Zl8L7x7X`wox+DYh zS^J77*Nyy_fHM2*8!RBGviMHGLp-p5Y{_!q3{uYuTyY4c7_vr3t^DE#(@XRqNIafU z0k^eyN3z#`hooD_mL=BCXyQcRYWI zMGXq87IBTl9K9XaK7A*bPm+mG8_?{DozeXvw)y!OL~7#l2Yn|Q zeHRRCCOsT5Nc>8U9;~MOoAFN+MHSgnHT$TG5dHR?>Q?%g3EURtV=r0Vq~@15>ue>F z^lIu)3WnSuAifP$R(utmxCnwevpzyp?iAs9XLjid`V&r0z#z!So-Calo!bJVos8}M zpfP5r7gsX`TUuKLiS2dRoGepivj=u00045TFu#4pa1{> literal 0 HcmV?d00001 diff --git a/data/cchs2013_2014.RData b/data/cchs2013_2014.RData new file mode 100644 index 0000000000000000000000000000000000000000..11ded6593e3c63311f7c9e4d7977d780264cfda4 GIT binary patch literal 30128 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 literal 0 HcmV?d00001 diff --git a/data/cchs2014.RData b/data/cchs2014.RData new file mode 100644 index 0000000000000000000000000000000000000000..4c2bf1cd4397d2ba06fe395347ac28d527f4adba GIT binary patch literal 31400 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 literal 0 HcmV?d00001 diff --git a/data/variables.RData b/data/variables.RData new file mode 100644 index 0000000000000000000000000000000000000000..171712bd42486305b49cb14d1c228adcd2df3c80 GIT binary patch literal 5864 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/testdata/BLLFlow/BLLFlow-Generator.R b/inst/extdata/testdata/BLLFlow/BLLFlow-Generator.R deleted file mode 100644 index 04861dc4..00000000 --- a/inst/extdata/testdata/BLLFlow/BLLFlow-Generator.R +++ /dev/null @@ -1,88 +0,0 @@ -#Test Environment generation for BLLFlow -TestEnvironment <- list() - -# ---- Test for: bllFlow can be passed no args -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - # Create empty bllFlow instance - testModel <- bllflow::BLLFlow() - - TestEnvironment[["Test-1"]] <- list(testModel = testModel) - - return(TestEnvironment) -} -# ---- Test for: bllFlow does not populate ddi related vars when no ddi is passed -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - # Create non DDI populated bllFlow - variables <- - read.csv( - system.file( - "extdata/testdata/BLLFlow/Test-2", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/BLLFlow/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails) - - TestEnvironment[["Test-2"]] <- list(testModel = testModel, data = pbc, variables = variables, variableDetails = variableDetails) - - return(TestEnvironment) -} -# ---- Test for: bllFlow populates appropriate ddi related vars -SetUpTest3 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/BLLFlow/Test-3", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/BLLFlow/Test-3", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/BLLFlow/", - "Test-3", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - - TestEnvironment[["Test-3"]] <- list(testModel = testModel, data = pbc,variables = variables, variableDetails = variableDetails, ddi = ddi) - - return(TestEnvironment) -} -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - TestEnvironment <- SetUpTest3(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/BLLFlow/BLLFlowData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/BLLFlow/BLLFlowData.RData b/inst/extdata/testdata/BLLFlow/BLLFlowData.RData deleted file mode 100644 index 8cc8a02f2c2adb1b7c499a1aaedbf03d73d51e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74037 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 diff --git a/inst/extdata/testdata/BLLFlow/Test-2/PBC-variableDetails.csv b/inst/extdata/testdata/BLLFlow/Test-2/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/BLLFlow/Test-2/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/BLLFlow/Test-2/PBC-variables.csv b/inst/extdata/testdata/BLLFlow/Test-2/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/BLLFlow/Test-2/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/BLLFlow/Test-3/PBC-variableDetails.csv b/inst/extdata/testdata/BLLFlow/Test-3/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/BLLFlow/Test-3/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/BLLFlow/Test-3/PBC-variables.csv b/inst/extdata/testdata/BLLFlow/Test-3/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/BLLFlow/Test-3/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/BLLFlow/Test-3/pbcDDI.xml b/inst/extdata/testdata/BLLFlow/Test-3/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/BLLFlow/Test-3/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/CheckSmallCells/CheckSmallCells-Generator.R b/inst/extdata/testdata/CheckSmallCells/CheckSmallCells-Generator.R deleted file mode 100644 index 7cdca07b..00000000 --- a/inst/extdata/testdata/CheckSmallCells/CheckSmallCells-Generator.R +++ /dev/null @@ -1,40 +0,0 @@ -#Test Environment generation for CheckSmallCells -TestEnvironment <- list() - -# ---- Test for: CheckSmallCells Identifies small cells in tableOne -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - catVars <- c("status", "trt", "ascites", "hepato", "spiders", "edema", "stage") - standardTableOne <- CreateTableOne(data = pbc,strata = c("trt", "stage"), factorVars = catVars) - checkedTableOne <- bllflow::CheckSmallCells(standardTableOne) - - TestEnvironment[["Test-1"]] <- list(standardTableOne = standardTableOne, checkedTableOne = checkedTableOne) - - return(TestEnvironment) -} -# ---- Test for: CheckSmallCells Identifies small cells in longTable -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - catVars <- c("status", "trt", "ascites", "hepato", "spiders", "edema", "stage") - standardTableOne <- CreateTableOne(data = pbc,strata = c("trt","stage"), factorVars = catVars) - standardLongTable <- bllflow::SummaryDataLong(standardTableOne) - checkedLongTable <- bllflow::CheckSmallCells(standardLongTable) - - TestEnvironment[["Test-2"]] <- list(standardLongTable = standardLongTable, checkedLongTable = checkedLongTable) - - return(TestEnvironment) -} -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/CheckSmallCells/CheckSmallCellsData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/CheckSmallCells/CheckSmallCellsData.RData b/inst/extdata/testdata/CheckSmallCells/CheckSmallCellsData.RData deleted file mode 100644 index ade5a9ec83e2cd2bf583e46e866c2d66bc97f754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29835 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 Zns}KoQJJ2U_5An?w! - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/CleanMin/CleanMin-Generator.R b/inst/extdata/testdata/CleanMin/CleanMin-Generator.R deleted file mode 100644 index 749ed872..00000000 --- a/inst/extdata/testdata/CleanMin/CleanMin-Generator.R +++ /dev/null @@ -1,51 +0,0 @@ -#Test Environment generation for CleanMin -TestEnvironment <- list() - -# ---- Test for: Clean Min Removes min rows -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/CleanMin/Test-1", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/CleanMin/Test-1", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/CleanMin/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - cleanedModel <- bllflow::clean.Min(bllFlowModel = testModel) - - - TestEnvironment[["Test-1"]] <- list(testModel = testModel, cleanedModel = cleanedModel) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/CleanMin/CleanMinData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/CleanMin/CleanMinData.RData b/inst/extdata/testdata/CleanMin/CleanMinData.RData deleted file mode 100644 index 5af95bee660a1330eb6c9364d48d015f664351e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45030 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 z 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 diff --git a/inst/extdata/testdata/CleanMin/Test-1/PBC-variableDetails.csv b/inst/extdata/testdata/CleanMin/Test-1/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/CleanMin/Test-1/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/CleanMin/Test-1/PBC-variables.csv b/inst/extdata/testdata/CleanMin/Test-1/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/CleanMin/Test-1/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/CleanMin/Test-1/pbcDDI.xml b/inst/extdata/testdata/CleanMin/Test-1/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/CleanMin/Test-1/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/CreateTableOne/CreateTableOne-Generator.R b/inst/extdata/testdata/CreateTableOne/CreateTableOne-Generator.R deleted file mode 100644 index c3e3fe21..00000000 --- a/inst/extdata/testdata/CreateTableOne/CreateTableOne-Generator.R +++ /dev/null @@ -1,127 +0,0 @@ -#Test Environment generation for CreateTableOne -TestEnvironment <- list() - -# ---- Test for: CreateTableOne creates tableOne with just bllFlow using bllFlow specs -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/CreateTableOne/Test-1", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/CreateTableOne/Test-1", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/CreateTableOne/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - standardTableOne <- bllflow::CreateTableOne(testModel) - - TestEnvironment[["Test-1"]] <- list(testModel = testModel, standardTableOne = standardTableOne) - - return(TestEnvironment) -} -# ---- Test for: CreateTableOne creates tableOne with just passed vars that creates tableOne with just those vars -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/CreateTableOne/Test-2", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/CreateTableOne/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/CreateTableOne/", - "Test-2", - package = "bllflow" - ), - "pbcDDI.xml" - ) - standardVariables <- c("age","trt") - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - standardTableOne <- bllflow::CreateTableOne(testModel,vars = standardVariables) - - TestEnvironment[["Test-2"]] <- list(testModel = testModel, standardTableOne = standardTableOne, standardVariables = standardVariables) - - return(TestEnvironment) -} -# ---- Test for: CreateTableOne creates tableOne with passed strata -SetUpTest3 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/CreateTableOne/Test-3", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/CreateTableOne/Test-3", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/CreateTableOne/", - "Test-3", - package = "bllflow" - ), - "pbcDDI.xml" - ) - standardStrata <- c("sex") - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - standardTableOne <- bllflow::CreateTableOne(testModel, strata = standardStrata) - - TestEnvironment[["Test-3"]] <- list(testModel = testModel, standardTableOne = standardTableOne, standardStrata = standardStrata) - - return(TestEnvironment) -} -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - TestEnvironment <- SetUpTest3(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/CreateTableOne/CreateTableOneData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/CreateTableOneData.RData b/inst/extdata/testdata/CreateTableOne/CreateTableOneData.RData deleted file mode 100644 index 1a97ce5d268b3cc35e1c8232f51f734b1cb838e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72098 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 MJ`!)sG+eCZJIQt?{!@`Vn7LV;@`w#L;) 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 diff --git a/inst/extdata/testdata/CreateTableOne/Test-1/PBC-variableDetails.csv b/inst/extdata/testdata/CreateTableOne/Test-1/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-1/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/Test-1/PBC-variables.csv b/inst/extdata/testdata/CreateTableOne/Test-1/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-1/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/Test-1/pbcDDI.xml b/inst/extdata/testdata/CreateTableOne/Test-1/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-1/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/CreateTableOne/Test-2/PBC-variableDetails.csv b/inst/extdata/testdata/CreateTableOne/Test-2/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-2/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/Test-2/PBC-variables.csv b/inst/extdata/testdata/CreateTableOne/Test-2/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-2/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/Test-2/pbcDDI.xml b/inst/extdata/testdata/CreateTableOne/Test-2/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-2/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/CreateTableOne/Test-3/PBC-variableDetails.csv b/inst/extdata/testdata/CreateTableOne/Test-3/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-3/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/Test-3/PBC-variables.csv b/inst/extdata/testdata/CreateTableOne/Test-3/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-3/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/CreateTableOne/Test-3/pbcDDI.xml b/inst/extdata/testdata/CreateTableOne/Test-3/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/CreateTableOne/Test-3/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/GetDDIDescription/GetDDIDescription-Generator.R b/inst/extdata/testdata/GetDDIDescription/GetDDIDescription-Generator.R deleted file mode 100644 index 8716dbeb..00000000 --- a/inst/extdata/testdata/GetDDIDescription/GetDDIDescription-Generator.R +++ /dev/null @@ -1,31 +0,0 @@ -#Test Environment generation for GetDDIDescription -TestEnvironment <- list() - -# ---- Test for: GetDDIDescription returns proper named list format -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/GetDDIDescription/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - standardDDIDescription <- bllflow::GetDDIDescription(ddi) - - TestEnvironment[["Test-1"]] <- list(standardDDIDescription = standardDDIDescription, ddi = ddi) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/GetDDIDescription/GetDDIDescriptionData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/GetDDIDescription/GetDDIDescriptionData.RData b/inst/extdata/testdata/GetDDIDescription/GetDDIDescriptionData.RData deleted file mode 100644 index 0b6f4c91ab192f267807ad231da78973f94441de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8341 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 - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/GetDDIVariables/GetDDIVariables-Generator.R b/inst/extdata/testdata/GetDDIVariables/GetDDIVariables-Generator.R deleted file mode 100644 index ffd1527f..00000000 --- a/inst/extdata/testdata/GetDDIVariables/GetDDIVariables-Generator.R +++ /dev/null @@ -1,31 +0,0 @@ -#Test Environment generation for GetDDIVariables -TestEnvironment <- list() - -# ---- Test for: GetDDIVariables returns list of passed vars and their relative metadata -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/GetDDIVariables/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - standardDDIVariables <- bllflow::GetDDIVariables(ddi, "age") - - TestEnvironment[["Test-1"]] <- list(standardDDIVariables = standardDDIVariables, ddi = ddi) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/GetDDIVariables/GetDDIVariablesData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/GetDDIVariables/GetDDIVariablesData.RData b/inst/extdata/testdata/GetDDIVariables/GetDDIVariablesData.RData deleted file mode 100644 index 3219bb15f12f89b011ed2250b3d39fcd9a014265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8126 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 diff --git a/inst/extdata/testdata/GetDDIVariables/Test-1/pbcDDI.xml b/inst/extdata/testdata/GetDDIVariables/Test-1/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/GetDDIVariables/Test-1/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/Integration/Integration-Generator.R b/inst/extdata/testdata/Integration/Integration-Generator.R deleted file mode 100644 index 3e48543d..00000000 --- a/inst/extdata/testdata/Integration/Integration-Generator.R +++ /dev/null @@ -1,150 +0,0 @@ -#Test Environment generation for Integration -TestEnvironment <- list() - -# ---- Integration TEST ---- - - -# ---- Test for: BllFlowObject can be created empty then populated -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-1", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-1", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/Integration/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - TestEnvironment[["Test-1"]] <- list(testModel = testModel) - - return(TestEnvironment) -} -# ---- Test for: Long table can be made from a generated bllFlowObject -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-2", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/Integration/", - "Test-2", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - testTableOne <- bllflow::CreateTableOne(testModel) - testSummaryTable <- bllflow::SummaryDataLong(testTableOne, bllFlowModel = testModel) - - TestEnvironment[["Test-2"]] <- list(testSummaryTable = testSummaryTable) - - return(TestEnvironment) -} -# ---- Test for: Small cells can be found in bllFlow generated table one as well as its long table -SetUpTest3 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-3", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-3", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/Integration/", - "Test-3", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - testTableOne <- bllflow::CreateTableOne(testModel) - testSummaryTable <- bllflow::SummaryDataLong(testTableOne, bllFlowModel = testModel) - testTableOne <- bllflow::CheckSmallCells(testTableOne) - testSummaryTable <- bllflow::CheckSmallCells(testSummaryTable) - - TestEnvironment[["Test-3"]] <- list(testSummaryTable = testSummaryTable, testTableOne = testTableOne) - - return(TestEnvironment) -} -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - TestEnvironment <- SetUpTest3(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/Integration/IntegrationData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/IntegrationData.RData b/inst/extdata/testdata/Integration/IntegrationData.RData deleted file mode 100644 index 7f9e8de4148b574553ec84b6d88d65c0df628640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24817 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 diff --git a/inst/extdata/testdata/Integration/Test-1/PBC-variableDetails.csv b/inst/extdata/testdata/Integration/Test-1/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/Integration/Test-1/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/Test-1/PBC-variables.csv b/inst/extdata/testdata/Integration/Test-1/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/Integration/Test-1/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/Test-1/pbcDDI.xml b/inst/extdata/testdata/Integration/Test-1/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/Integration/Test-1/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/Integration/Test-2/PBC-variableDetails.csv b/inst/extdata/testdata/Integration/Test-2/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/Integration/Test-2/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/Test-2/PBC-variables.csv b/inst/extdata/testdata/Integration/Test-2/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/Integration/Test-2/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/Test-2/pbcDDI.xml b/inst/extdata/testdata/Integration/Test-2/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/Integration/Test-2/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/Integration/Test-3/PBC-variableDetails.csv b/inst/extdata/testdata/Integration/Test-3/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/Integration/Test-3/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/Test-3/PBC-variables.csv b/inst/extdata/testdata/Integration/Test-3/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/Integration/Test-3/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/Integration/Test-3/pbcDDI.xml b/inst/extdata/testdata/Integration/Test-3/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/Integration/Test-3/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/ReadDDI/ReadDDI-Generator.R b/inst/extdata/testdata/ReadDDI/ReadDDI-Generator.R deleted file mode 100644 index 85a8f749..00000000 --- a/inst/extdata/testdata/ReadDDI/ReadDDI-Generator.R +++ /dev/null @@ -1,30 +0,0 @@ -#Test Environment generation for ReadDDI -TestEnvironment <- list() - -# ---- Test for: ReadDDI creates a proper BLLFlow DDI object -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/ReadDDI/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - - TestEnvironment[["Test-1"]] <- list(standardDDI = ddi) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/ReadDDI/ReadDDIData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/ReadDDI/ReadDDIData.RData b/inst/extdata/testdata/ReadDDI/ReadDDIData.RData deleted file mode 100644 index a2aba9e08e67e899bec496fa5b883f854d9190da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8170 zcmVUzFD=tu}Y=VY-x5L{yPW%EX_Ce>MPe*N~H@kaP(T~ zLg^Cxee8i`Y(3%R;s%N*JpjfLz($~){ncH zk>`Bg6{g*c`O)Jo;pu}5QNJhP@85C;dsm7u?lSJR;;!p2wwE1mDReO>4{b+%WcA;8Ba+vz*)a)OdC$@E{gM z7fG z>Uwqji`b7s0Z!tuAY?MOZ6W1B?0J2re>d?$S20J(9yl#?+&C1GYqO{WF4gNRd5872 zd6Xl?kiPSW+>0R$PG;&)(h<}VJst&J(dHm8$S-`4hi%Zsa}Py$Mw9)zjhO;EYn|B; zS9%_p-V+hHRE#P7Oh#cc;=aQ}$CY5RmKOvLv%MgST))jCw=2%bfoGfISiA3xao67( zuN~k2gI7KLux>)Rr90dr0dzlR!MHT^(b8TB>!G%gD?v5E{a zIju>Xxlksqi}c3)8>xp;Td{&+@Ybgke(9qb*TltwN&m@|gaPGaJ*b5Ism}l!J0djV z%u$9gy{ouQOpxjTea8F@W*%dig#J4`;#<-VQ&VM1hPMY(M}IHszgV2;c0+xYtzF&^ zSOZu$B(uHH?eehCz5uh~--a88U}p%MEf~_u>Ejoc9r#XcBVjS&THm<2MqvtJww8C{ zo7UbJ4QhI8e6!M@vDqE#j{jZ!*M9|yBjb>HoJol9zy1Xh1f+YQlYq#;n(fFvbm3<> zglKnM;rl|C*-EXxTB+yC@N3JqJF>FAvRlK3cPi8#{EN+ zgK3PsWb)(I!_*=7qVyrK|J31y?X7#km`Tjac+L9K2bKD9)ZyJSd%*3E@T^Rw_c}i~ zz-hz8m$|;WYwvO--RzN%Buu(dzsh!buUV#vrHT4-yU7{?ndcjCLps}9WU@!E6eZZ z?r+^`ZmWi~S$W@VV$?&W%=QAPyF4ZKSV!ntjiA?u$m>LG(OzPiE6Xfjo9fB5VT&Z{ z68U7^$}!s;7M#6NsjXIO>m&L@Ua;3+#Ji` zAUfh<0uBeU?`*b9L&V~YLu*9qrwpf|$(()kU^{z7CyIKvmX`w{3~trt6DI8U-(M*c zVOEa(S5opP;$O_RdMhLIa&}D(*n;b2E_$C@S0FL>ek=7TJu*_&^$&tnXqNJrxPt_@ z6&ZiJ2&fu?%E@Wb11OHts6Uev?H^bam@fCh`McfNM~DAP02p;xGY$_$KL-wH{{11) z>S-6V#YW?+<`M&5z?mHeQdXp(x#1o{G&TXKiVQ9z>rM(ZVDcWVZA1ai;7S73Gx#)<(7h*A&oYQZ5CQen1L8sp5A6;Evq-3W zy_C+9Mhnq;c86oM08y8bYYz>DoYU*$EKs=$NijV+@S6)~IjuRlEe}lvLOGN+aW&02 z1Y8$O`0Y~~G^L46OH^>pfhUfs2kjBAk8z42t(*gl;l)@-aF7`&GwKFJ3uWq&EI6{` zz^{^tt_a&`cUMZNSJFO&rq{*+neZs(1zN6UnCYCFk0&%754V$e9iq~s`D&MD zqP9+eext$~desg*C695*v5d=_fOONb{XOfk0#R14)>wso9lQ1u;DRDcSZA`JtMeI@ zleFZWH^9GHJA!uv6wRAeQnflYMUY9>ZZXB7v6bS`RrZIit!;+VG39lCtmad#Dabv_ zNZ20?D3gULqq?m)3c^2Dv(~t15-Za8X4Fk8J4oEALqhHJF?O164jz*}JRCl3K?pS5 zD94}1S-X1jie&$8J*!p1UZ^M;M%!`d^V)cL8S6J$OASmh;TkB-RZXHvjuY6;&`wEq z;e@5?Cnv8|b9#8@LiJke!lGQAR<8ccGN}M(o&bn#fwGu#@|fA%skW-97~@lus?fRT zAWV)^W$MQ4wNFv#JtF{=t&u??BSsNF;-^rn&5x7_PgR_a^}$oDou*eyKeGsO0XBqQ zKi&qw!j+Q4+%jl(YbUP=8s{Bj>xf_KI^yW)sEQO9;=J0nv7it>uAI8~zfyid^uYwV z*&+y-Tj!jGh(+yE)GkHs@&l_~@*w)dk=kV(Y@G~}#zJ&zT`v!{{(BU)o~pV~v?nPs z65azf03w)OfjMSf7h;_J5larJH8QYxYgF+n%V!L_dK;gTe*m?Ifyj4q=HxAF(}4_? z+-c3Dp_i>q&kj0Z_D53WHM(kj0r4awCXR8p)5H!JFzegIIdb}HbfDA&=HCD&?o!Ig zzpb=|>xLe~Ig4_ey#dW|}~+rH(#P%Wg#_UUb9P9vl~2t)RjLg&A@hpiX*xR zG`$YQO1`0*5n4M4bDJz!i9AEm@{V!nC!&88gw88^xDW+ByW#N(OEq)C`P(et;XcErR zMj?r{C|*Uz>2OJ{4!{P%5rXr8W!<{H+zLNe3`^01<_o7-d(VwxJv?oSHR!r=PT7^! zba5tEYPFkXW!Mqlol;DYO;tF-(6}|*Q(6h`;Mg#sAw=C#ptfyS+240?0hFg4p7+25 zj>(7N+WKm(T&vZF!hpy>I1AqW5=StOgF9T?BxooO;4JwgOlsgr>=G2JBU7ra(#*p@ zu9wx;I5nzt|0LKEL;|>j-&QueaeZW5!NH$UZcGIsZA5f^vR2iiP*L%c#Fl13=x*@; z#Lb3T7)hi52_Dk|zJY2O>!__?5l@AySuhLqzIR+QW89MgYnd+8vOD=4>Y*ry7;=A@ z)N$TlWh8sTC|Osn+@q9xk9O~ppm4Ph^Fn1UXs`T`SSL&f_-*1gT~HpIlOxlVars0z z7F^T{B4tR(rbhsk9h`JZg4$URkt}ujw?U{wXzVbW!Y$~(r5v7q0Tmj#b9pF6wyw_6 zw3Y@WaZ-fEJ~^%CJbrTnFg1#76N7+r2@Y~IU9wGy+;s@9%LleG3PLaI9S>JSZSk;PgWG5YwP@ zBs>p(OE#>+1RH1&Qg3k#1^%AsS!H{AJl!7^Ae5mVK;{o|jR1VG5e7$qdC-N#fDa@l z2&s?>2E)YUMll6Nnc>Fr3KrI^D{$wfG|4haencfTdSEw{6`&E&bqa40Mz#& z=5YWMru>k*9x(_EUIHGvlcwhc1yv%Oj?INh?~rx4p&8tSyUG@d$7qA;9*vbKKO~*N z87x*+-$0MhsN91rP)5L4;B=iW+I<@&U9Hxa%0r!@IR>uN;fG`qmC@}07$jC-f-V`c zR3ZbWwGe$4)2A&_jw5=IG_)71 zP1C4HH-;H%p>7)Hvf!B$!GIyCyM?T{y)XFi1R;E?biJxeQKsGdn$JN|SGsy*s+B zl3#DBwUeAXS#SK$?cV1PF?OkzFswmY`N)NIIa**Sk`C;uhvXS9pUBlU?$ztHVZJWe z;#UtOIC+{OjiDwk^1bh3H>8M55snt{REVQZ@Fp*ED{7Oz?h2eQPz5`qWe(Bqvo2T2v4#*?pcw90e?u6K)933+$mcM6}R+YEY1qcLPn@Qpw)7 zDM;I97@}q>54s_#tcsHnI!~2FvSS{lgI^M!Qe}6LyqST1B~ubXJAXth7mSLXz!j)D z%_%;1q@@C*KvoEYAR1-Vm_LXre)XWr2J>&SJuow=0gYrpWe-ApI1zhS=_PG5e3B@D zi#m|z(4Ks@<+j}j{>usA+2Vt(t)-0CiObxBiLW?uL21Kx`d~(jvzGCys8WtUPc+SQ?sqRGK((W&VA*4}+M-PNB0d-ykttPn6&``-@fGO3|%U(%!wsRMYGf8ee zxEK*CmZ=EES;1#UjG}N^0z(i3TqLjuqhcMGCAnJ06b(#f z7Zoxpm;%X-lmv;rXq^QzR23#%M)(|$J1{^REfQnUT6|iJ@kwf04$zT<9iV%os~=!O zrj#4#Db`CEBI9gBy}MKxi(?QDEy`2t?a3F4kZnOgB7=^jIH`cX&HY8vw0flrZ* z@V{Mwdrok90W!6Wh>tns)cXF6s>0LM4<-@pW3WzV{t;d5c zy|_eUV3IYqqskz-_y>U$M>w}C zlVN3mxqK0?!1bmcPQ)R%IWE+gj8o2(+oRrz5A(U0N#SY{+0~_#UiXQ5b_S~jSl*8~ zmDUy)wOcq}YA%&i_>gIckrL-im=@R7eiDZXlhSkJ2-{Vau!NL=OV28^(Mkd4SGB=| z%teb|gEczf-H;(Os|iW}dO1Xr2a&g_HI&Q}3UrGGrgRxc0YM9K(M*Op#Jjk$9G+7R zZv+=y>f)fS79IzJ&>dsx>gC|x=i{rS*P37GF!&vZ+JY)rhiwU4*$>ym%1YE5YRy(< zfn=dpFWe3`5GuKG@EDp{5Z1~V$rY5`8k^hT2%AHTBWtyU0_S&+OH9h3G>~NmV#z@2 zG?q7+5%;#260RHIO9VirkFx!fszm+K1+8Ii27?ToG&{;eP^>h5JCWHQb{RdYp&Tkm z%I^cr2apSsEnwjGdl10MPE)vG7vL?ao$2<7ERAl0%@)FYUm2&U(9M^@4F}A0X!D!b zs~aEPZiQ_5b4#tk<+WVDSzY}oZ{s4iexRP=%H1$)bWg7`kfYCk(V`fIC8bN; ziD2vXAlwxJm}bXeNXtJ_Oto~G9dH|pW#!&L6%Gzio7or@d;%%d5nZ5?$?YuiO3YJgxyb8R z^Y$^G!%cJ9eQH0p9{G+AB3~SVtTx@c;ccjnkwTV5o07l(i)h&OShmteS$$Syl*)X0RRx|c-M5lKeM_=!hn z-zIR`N~EK`HtBmbBfeRi>YMnc6ptS*d#c0i9U|P2lzqhX^^^dm(U%RpmR)T%i<>2r ziSHaoJFfpE`FS+^T}WlfD72&G%?HC9N#|`hdLX_tyL0ShFVL7SldWhljX4h~B%@{? zQdp3YqjIhuRu$0c483XF8DyEb2boz|?CvKw8Taqp+ef#m-fM2*JY}DYo!Q>X^e}U` zUYfppcEPHz++4e{lDFhLZ$S~Tn)hJP0y@XnxUt@BDC6PR$v*p>TW4n9_)4v|UK@EH zCD|d2o}b#RxZnVh^rbJ;=O2!LB}6il)aE$K@%;^aG$OHZRm=68ZAdl8pVdCb!9N>6 z3n{~zcdorT9B2arH}P)iULdnUu#ssvf5&%5o6VRzsDp?*a-FD??d?W(*ayOHiZ(re zG1Ra=VQwtTyeQ6^LV&JX`Yks2dNS8`dwlfykz^LWlaaqOw5{;99AnLPN8Z7M0%zLr zo-SwJ8DNxwm0<~ zwtHvf4*HalX04i)cd6?ip6t?hM=qTt(bR71c@pW#J>d+Dxt!)b@A6C5jn$j0_3HIp zgW%fMgbrTE4pwT_l_V!UonfYSzk1{5#`WsT^|d?+=Kw{-;gmksAyaMKSbY`|NBS@2 zG`#4?T>%w9HbY6fLvO7c?v*OP(rE0xX(ra(J~JZX{d4ng%nhb{aQ4t|r|x7TD?ML_ zmjK}I((X2;?CV+6%{&8#ou8-6k`wt$JNK<`=WK1Te_LIAPC?8tXVMt1CO z_O%1A)v}X{+X)Y|&E}Ct4TWn4-`>b7Zt(2#h(!#7T^YGVgVviPCnkZ^HEYZZMyKJ` zFUMVUYWVfmI0f*;+u0MRk5o^M86)WQbZM?Yqymv%G$LIc>8HS;lr?4^uc$NEM$Bkl zj7O(`G-AdS*!*~;SA#D<8Oe4vb>h8|Yxisg?K9uW2x|lzU}?B?XogSW;lg%ZDX5 zaBPV*4Xd$PJ@z< z$6r>!NC6`Sj1(~P^1;Y@4vd&jn!YF?xpH2B}CdJ3%C(iZS^_8{twd##$vh1MuAy+j|PF{rE`E}d-6jo#!sfvt3vRJ+?XB%#l^jz z+7HH%%I|YF%&Pq72-$P-b);?_3VeMN!Y%LhUpX6=PMM!vIj8(&9;9i9{SzFWfQ@YA zuo3-9_2)xI@T(X$IByy;&rMxh9@++|J}%!CZH}*p4F_*0^6)ho(>TkgPtjLFYzksi zRKP_A{IXTRvj84>C9ukfFRTPUH<)wT!uNRSx5G^XmG`U^Ot9e#3&(uswNPQ;3?TTr5QlHvGfiMNa6bMrw%u9$ct2qdBu@?rI`d%2o zTs|)VGiNo$@iYv%ij9hw^b|1hTsCv$-c_HscDXl1c!tluVjDSTt=tz;FIaa)_f@o2 z>6C%<@;L?0@3pf4fHCid60=eqKPON;*Bc8KEmbHT3MqxhAeNHPv?m{lkWXBH8gkw| zVLwF;R)A|!gB3N{OIU;Dy*1*Z?BS=fzL>PECSc-=q;)0 z>)kCk=*j7iY<>C^eHEZnfKCBA1?aqlpp*A{i8)G%FAQ?7oEONsig$&gSmK9Ah41tN zclyqR564_nKu7^0&t*|?!V_Nj<-8!A^kC9Uy4dv$OQ>&H^a{(K$A{zn6}Q)fFZwxx zzj~fkI%OL23Oud_q$BSoB=ZV4pA+ji*XydjrN63bKv*nB2i z@X&L0W5J_NIhDQW^Rx8P*x13(Ds!(dU0PH9UF`MCtiG{+V;ZCRr{^k7!IcWGRFvCA zx&0EB+j;Lzx$r_a*_@kddk&CdYI%JX8xA_Rp|*I9MJQ+eE1IcklVbh zwa+tDiI?!19b2@5!dQv1R`VUq42 zTF+PV=}>c8e*?~3D2+ALw-ofh=|$Md==3&It($tAm_DW7@}f0!9W!Y1NTwdtJV2ud z#cji8M)bC>#El1*v;{*X!^Wy;pDBcf>KPu)RmSciCdk zIatbrEal#GZZN%`I27J!0LD&VwY-?^CG12|@7D5i0GR1kB^sB9vKNFA_o}Xc5G*@^ z4RPs56k5xT##haKNLH&A_|Mw%;9t;89l^hc8|{;N`=nVFG&+GvmaWYmOw6&{#V^)1 zdAH}`L!OU$=yLRhsLvjP_6YMQG|^ATq@{eT^qzxN8jtst4kxt9udPM^b`Ur!ivn87 ze^DB{`I5Ho$ZJFcTT9~HPBK>?AGUQcvc#=&n6WPiGD(be`Y-pb`UyjhxdaxI@?4S zJ%>c6)Y(_+oY)8tgPv=1@7bu+`7?r6=c)M8J64JboQ>-KSyOC5aF9?MV;;{y1ypT0*NSi(qNw(N%G?!>Y#9kO6nHQst7WbN)0F=j` zTsm!IHlNX$#&K#jwAnfXEh->o^_!jMHz%;zZ>)^Tb^|9yN+6*kvhh{vt-f9@i$Nd; z6#UR7dy*AS(Wgp(#*_d2z080|Fw1^~INl@;pwT|N(`+=D{Oe!z56p>~O|4>mAv)5o+{v740hKip$7&-}=&)~hSkm7JxC zCEM=E%KFM~4P*OGB?i)60*c=!Z`0m6gg$^;kOD8XKhaWoF3t zC-<4@;u3Xn>sY#3)1|sOTCE0Q8-u;R{LSu8lQgclKE4IX7Gr!jF{2If^hFRn8PjG) zw|VPOv*=v`jtkCfBy$}1e(PI^oUGQi$7NP)>x-S8yIyca8s^ILx_NKY - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/SummaryDataLong/SummaryDataLong-Generator.R b/inst/extdata/testdata/SummaryDataLong/SummaryDataLong-Generator.R deleted file mode 100644 index ce67a63f..00000000 --- a/inst/extdata/testdata/SummaryDataLong/SummaryDataLong-Generator.R +++ /dev/null @@ -1,124 +0,0 @@ -#Test Environment generation for SummaryDataLong -TestEnvironment <- list() - -# ---- Test for: SummaryDataLong converts tableOne into a long table -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - catVars <- c("status", "trt", "ascites", "hepato", "spiders", "edema", "stage") - standardTableOne <- CreateTableOne(data = pbc,strata = c("trt"), factorVars = catVars) - standardTable <- bllflow::SummaryDataLong(standardTableOne) - - TestEnvironment[["Test-1"]] <- list(standardTable = standardTable, standardTableOne = standardTableOne) - - return(TestEnvironment) -} -# ---- Test for: SummaryDataLong appends tableOne to passed long table -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - catVars <- c("status", "trt", "ascites", "hepato", "spiders", "edema", "stage") - standardTableOne <- CreateTableOne(data = pbc,strata = c("trt"), factorVars = catVars) - standardTable <- bllflow::SummaryDataLong(standardTableOne) - standardCompareTableOne <- CreateTableOne(data = pbc,strata = c("trt","stage"), factorVars = catVars) - standardCompareTable <- bllflow::SummaryDataLong(tableOne = standardCompareTableOne, longTable = standardTable) - - TestEnvironment[["Test-2"]] <- list(standardTable = standardTable, standardCompareTableOne = standardCompareTableOne, standardCompareTable = standardCompareTable) - - return(TestEnvironment) -} -# ---- Test for: SummaryDataLong append tableOne to passed long table as well as labels from bllFlow object -SetUpTest3 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - catVars <- c("status", "trt", "ascites", "hepato", "spiders", "edema", "stage") - standardTableOne <- CreateTableOne(data = pbc,strata = c("trt"), factorVars = catVars) - standardTable <- bllflow::SummaryDataLong(standardTableOne) - standardCompareTableOne <- CreateTableOne(data = pbc,strata = c("trt","stage"), factorVars = catVars) - variables <- - read.csv( - system.file( - "extdata/testdata/SummaryDataLong/Test-3", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/SummaryDataLong/Test-3", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/SummaryDataLong/", - "Test-3", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - standardCompareTable <- bllflow::SummaryDataLong(tableOne = standardCompareTableOne, longTable = standardTable, bllFlowModel = testModel) - - TestEnvironment[["Test-3"]] <- list(standardTable = standardTable, standardCompareTableOne = standardCompareTableOne, standardCompareTable = standardCompareTable, testModel = testModel) - - return(TestEnvironment) -} -# ---- Test for: SummaryDataLong converts tableOne into a long table with labels from bllFlow object -SetUpTest4 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - catVars <- c("status", "trt", "ascites", "hepato", "spiders", "edema", "stage") - standardTableOne <- CreateTableOne(data = pbc,strata = c("trt"), factorVars = catVars) - variables <- - read.csv( - system.file( - "extdata/testdata/SummaryDataLong/Test-4", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/SummaryDataLong/Test-4", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/SummaryDataLong/", - "Test-4", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - standardTable <- bllflow::SummaryDataLong(standardTableOne, bllFlowModel = testModel) - - TestEnvironment[["Test-4"]] <- list(standardTable = standardTable, standardTableOne = standardTableOne, testModel = testModel) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - TestEnvironment <- SetUpTest3(TestEnvironment) - TestEnvironment <- SetUpTest4(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/SummaryDataLong/SummaryDataLongData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/SummaryDataLong/SummaryDataLongData.RData b/inst/extdata/testdata/SummaryDataLong/SummaryDataLongData.RData deleted file mode 100644 index d595c61b80dcd469d0f0bedd2f1d68314a48572b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88077 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 d_;!uq+nl0XH$_-aSG@nv_)W4=a - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variableDetails.csv b/inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variables.csv b/inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/SummaryDataLong/Test-4/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/SummaryDataLong/Test-4/pbcDDI.xml b/inst/extdata/testdata/SummaryDataLong/Test-4/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/SummaryDataLong/Test-4/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variableDetails.csv b/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variables.csv b/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variablesUpdateTest.csv b/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variablesUpdateTest.csv deleted file mode 100644 index 813daca7..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-1/PBC-variablesUpdateTest.csv +++ /dev/null @@ -1,2 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier,from -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete,40:70 diff --git a/inst/extdata/testdata/UpdateMSW/Test-1/pbcDDI.xml b/inst/extdata/testdata/UpdateMSW/Test-1/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-1/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetails.csv b/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetailsUpdateTest.csv b/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetailsUpdateTest.csv deleted file mode 100644 index 3af2674c..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variableDetailsUpdateTest.csv +++ /dev/null @@ -1,5 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,,NA,N/A,2:2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,,N/A,N/A,1:1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A diff --git a/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variables.csv b/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-2/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/Test-2/pbcDDI.xml b/inst/extdata/testdata/UpdateMSW/Test-2/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-2/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/UpdateMSW/Test-3/PBC-variableDetails.csv b/inst/extdata/testdata/UpdateMSW/Test-3/PBC-variableDetails.csv deleted file mode 100644 index 51dc8f2d..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-3/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/Test-3/PBC-variables.csv b/inst/extdata/testdata/UpdateMSW/Test-3/PBC-variables.csv deleted file mode 100644 index 12b92b2f..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-3/PBC-variables.csv +++ /dev/null @@ -1,7 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,centre,interaction,RCS,dummy,impute,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,TRUE,NA,4,NA,FALSE,40,70,delete -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/Test-3/pbcDDI.xml b/inst/extdata/testdata/UpdateMSW/Test-3/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-3/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/UpdateMSW/Test-3/pbcDDIUpdateTest.xml b/inst/extdata/testdata/UpdateMSW/Test-3/pbcDDIUpdateTest.xml deleted file mode 100644 index 5d6687e8..00000000 --- a/inst/extdata/testdata/UpdateMSW/Test-3/pbcDDIUpdateTest.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in yearsTEST - - - -age of participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl)TEST - - - -serum albumin(g/dl) of participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter)TEST - - - -alkaline phosphotase (U/liter) of participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascitesTEST - - - -presence of ascites in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml)TEST - - - -aspartate aminotransferase, once called SGOT (U/ml) in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl)TEST - - - -serum bilirunbin (mg/dl) in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl)TEST - - - -serum cholesterol (mg/dl) in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day)TEST - - - -urine copper (ug/day) in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edemaTEST - - - -edema in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edemaTEST - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treatedTEST - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapyTEST - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liverTEST - - - -presence of hepatomegaly or enlarged liver in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case numberTEST - - - -participant case numberTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet countTEST - - - -platelet count in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting timeTEST - - - -standardised blood clotting time in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -MaleTEST - - -3979 - - -452484.6 - - - - -2 - - -FemaleTEST - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skinTEST - - - -blood vessel malformations in the skin in participantTEST - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy)TEST - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpointTEST - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censoredTEST - - -3979 - - -452484.6 - - - - -1 - - -transplantTEST - - -3979 - - -452484.6 - - - - -2 - - -deadTEST - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986TEST - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trtTEST - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmainTEST - - -3979 - - -452484.6 - - - - -2 - - -placeboTEST - - -3979 - - -452484.6 - - - - -3 - - -not randomisedTEST - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl)TEST - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf)TEST - - - - -Approximate Sampling Variability Tables (pdf)TEST - - - - -Complement to the User Guide - PUMF (pdf)TEST - - - - -Data Dictionary (Frequencies) - PUMF (pdf)TEST - - - - -Derived Variables (DV) (pdf)TEST - - - - -Microdata Licence Agreement (pdf)TEST - - - - -Quality Assurance (pdf)TEST - - - - -Questionnaire (pdf)TEST - - - - -Record Layout - PUMF (pdf)TEST - - - - -Topical Index - PUMF (pdf)TEST - - - - -User Guide (pdf)TEST - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls)TEST - - -
    diff --git a/inst/extdata/testdata/UpdateMSW/UpdateMSW-Generator.R b/inst/extdata/testdata/UpdateMSW/UpdateMSW-Generator.R deleted file mode 100644 index 9ee682cc..00000000 --- a/inst/extdata/testdata/UpdateMSW/UpdateMSW-Generator.R +++ /dev/null @@ -1,154 +0,0 @@ -#Test Environment generation for UpdateMSW -TestEnvironment <- list() - -# ---- UpdateMSW TEST ---- - - -# ---- Test for: UpdateMSW updates bllFlow variables -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-1", - "PBC-variables.csv", - package = "bllflow" - ) - ) - newVariables <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-1", - "PBC-variablesUpdateTest.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-1", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/UpdateMSW/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - updatedTestModel <- bllflow::BLLFlow(data = pbc, variables = newVariables, variableDetails = variableDetails, ddi = ddi) - TestEnvironment[["Test-1"]] <- list(testModel = testModel, updatedTestModel = updatedTestModel, newVariables = newVariables) - - return(TestEnvironment) -} -# ---- Test for: UpdateMSW updates bllFlow variableDetails -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-2", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - newVariableDetails <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-2", - "PBC-variableDetailsUpdateTest.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/UpdateMSW/", - "Test-2", - package = "bllflow" - ), - "pbcDDI.xml" - ) - - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - updatedTestModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = newVariableDetails, ddi = ddi) - TestEnvironment[["Test-2"]] <- list(testModel = testModel, updatedTestModel = updatedTestModel, newVariableDetails = newVariableDetails) - - return(TestEnvironment) -} -# ---- Test for: UpdateMSW updates bllFlow ddi and populatedVariableDetails -SetUpTest3 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-3", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/UpdateMSW/Test-3", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/UpdateMSW/", - "Test-3", - package = "bllflow" - ), - "pbcDDI.xml" - ) - newDDI <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/UpdateMSW/", - "Test-3", - package = "bllflow" - ), - "pbcDDIUpdateTest.xml" - ) - - testModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = ddi) - updatedTestModel <- bllflow::BLLFlow(data = pbc, variables = variables, variableDetails = variableDetails, ddi = newDDI) - TestEnvironment[["Test-3"]] <- list(testModel = testModel, updatedTestModel = updatedTestModel, newDDI = newDDI) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - TestEnvironment <- SetUpTest3(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/UpdateMSW/UpdateMSWData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/UpdateMSW/UpdateMSWData.RData b/inst/extdata/testdata/UpdateMSW/UpdateMSWData.RData deleted file mode 100644 index 2330a0bedcba8343a2377b7515332a18d85478b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmb2|=3oE=HtwQMgGXHtk`fXUk`mHVlM<5Hj3Q?=uqZQgGpkQ{#_y@CS9n(Yw9cvX Yr+v?AGjeenI~=fQ;QzKx)(&U@016)#JOBUy diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv deleted file mode 100644 index f9066827..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variableDetails.csv +++ /dev/null @@ -1,44 +0,0 @@ -variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval -AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" -AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" -AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" -AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" -SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" -SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" -STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" -STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" -STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" -STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" -STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" -STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" -TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" -TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" -TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" -TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" -TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv deleted file mode 100644 index a22f2994..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/PBC-variables.csv +++ /dev/null @@ -1,22 +0,0 @@ -variable,label,labelLong,variableType,units -age,Age,Age of participent in years,cont,Year -sex,Sex,Sex of the participent,cat,NA -bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl -albumin,serum albumin,serum albumin (g/dl),cont,g/dl -protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min -edema,edema,"0 no edema, 0.5 untreated or successfully treated -1 edema despite diuretic therapy",cat,NA -alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter -ascites,presence of ascites,presence of ascites,cat,NA -ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml -chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl -copper,urine copper,urine copper (ug/day),cont,ug/day -hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA -platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood -spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA -stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA -status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA -time,number of days,"number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986",cont,days -trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA -trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/pbcDDI.xml b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/standardWriteOutput.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/standardWriteOutput.csv deleted file mode 100644 index 0bddceac..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1/standardWriteOutput.csv +++ /dev/null @@ -1,21 +0,0 @@ -"variable","label","labelLong","variableType","variableDummy","valueLabelLong","valueLabel","target","method","reference","databaseStart","variableStart","variableStartType","validCatN","validCatNStart","value","valueLabelStart","units","interval","from" -"sex","Sex","Sex","category","sex_cat2_2","Male","Male","pbcDemo","map1_1","No","pbc","sex","cat","2","2",1,"male","N/A","N/A","1" -"sex","Sex","Sex","category","sex_cat2_1","Female","Femle","pbcDemo","map1_1","Yes","pbc","sex","cat","2","2",2,"female",NA,"N/A","2" -"sex","Sex","Sex","category","sex_cat3_3","missing","missing","pbcDemo","map1_1","N/A","pbc","sex","cat","2","2",NA,"N/A","N/A","N/A","N/A" -"age","Age (years)","Age (years)","continuous","age_rcs4_1","Age Restricted Cubic Spline Knot 1","Age RCS 1","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",1,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_1","< 20 years","< 20","table1","map1_1","yes","pbc","age","cont","4","N/A",1,"N/A","years","[,)","0:20" -"age","Age (years)","Age (years)","continuous","age_rcs4_2","Age Restricted Cubic Spline Knot 2","Age RCS 2","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",2,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_2","20 - 40 years","20 - 40","table1","map1_1","no","pbc","age","cont","4","N/A",2,"N/A","years","[,)","20:40" -"age","Age (years)","Age (years)","continuous","age_rcs4_3","Age Restricted Cubic Spline Knot 3","Age RCS 3","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",3,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_3","40 - 80 years","40 - 80","table1","map1_1","no","pbc","age","cont","4","N/A",3,"N/A","years","[,)","40:80" -"age","Age (years)","Age (years)","continuous","age_rcs4_4","Age Restricted Cubic Spline Knot 4","Age RCS 4","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",4,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_4","80+ years","80+","table1","map1_1","no","pbc","age","cont","4","N/A",4,"N/A","years","[,]","80:105" -"age","Age (years)","Age (years)","continuous","age_rcs4_4","missing","missing","pbcDemo","rcs4","N/A","pbc","age","cont","N/A","N/A",NA,"N/A","years","N/A",NA -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_4","missing or out of range","missing","table1","map1_1","no","pbc","age","cont","4","N/A",NA,"N/A","","","else" -NA,"in years",NA,NA,NA,NA,NA,NA,NA,NA,NA,"age","cont",NA,NA,NA,NA,NA,NA,"1:127462" -"edema","Edema","Edema","category","edema_cat3_1","No edema","No edema","pbcDemo","map1_1","Yes","pbc","edema","cat","3","3",1,"No edema","N/A","N/A","0" -"edema","Edema","Edema","category","edema_cat3_2","Untreated or successfully treated","Untreated or successfully treated","pbcDemo","map1_1","No","pbc","edema","cat","3","3",2,"Untreated or successfully treated","N/A","N/A","0.5" -"edema","Edema","Edema","category","edema_cat3_3","Edema despite diuretic therapy","Edema despite diuretic therapy","pbcDemo","map1_1","No","pbc","edema","cat","3","3",3,"Edema despite diuretic therapy","N/A","N/A","1" -"edema","Edema","Edema","category","edema_cat3_3","missing","missing","pbcDemo","map1_1","N/A","pbc","edema","cat","3","3",NA,"Edema despite diuretic therapy","N/A","N/A",NA -NA,"edema",NA,NA,NA,NA,NA,NA,NA,NA,NA,"edema","cat",NA,NA,0,"no edema",NA,NA,"0:0" -NA,"edema",NA,NA,NA,NA,NA,NA,NA,NA,NA,"edema","cat",NA,NA,0.5,"untreated or successfully treated",NA,NA,"0.5:0.5" diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv deleted file mode 100644 index f9066827..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variableDetails.csv +++ /dev/null @@ -1,44 +0,0 @@ -variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval -AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" -AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" -AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" -AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" -SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" -SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" -STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" -STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" -STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" -STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" -STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" -STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" -TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" -TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" -TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" -TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" -TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv deleted file mode 100644 index a22f2994..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/PBC-variables.csv +++ /dev/null @@ -1,22 +0,0 @@ -variable,label,labelLong,variableType,units -age,Age,Age of participent in years,cont,Year -sex,Sex,Sex of the participent,cat,NA -bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl -albumin,serum albumin,serum albumin (g/dl),cont,g/dl -protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min -edema,edema,"0 no edema, 0.5 untreated or successfully treated -1 edema despite diuretic therapy",cat,NA -alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter -ascites,presence of ascites,presence of ascites,cat,NA -ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml -chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl -copper,urine copper,urine copper (ug/day),cont,ug/day -hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA -platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood -spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA -stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA -status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA -time,number of days,"number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986",cont,days -trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA -trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/pbcDDI.xml b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/standardWriteOutput.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/standardWriteOutput.csv deleted file mode 100644 index 0bddceac..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2/standardWriteOutput.csv +++ /dev/null @@ -1,21 +0,0 @@ -"variable","label","labelLong","variableType","variableDummy","valueLabelLong","valueLabel","target","method","reference","databaseStart","variableStart","variableStartType","validCatN","validCatNStart","value","valueLabelStart","units","interval","from" -"sex","Sex","Sex","category","sex_cat2_2","Male","Male","pbcDemo","map1_1","No","pbc","sex","cat","2","2",1,"male","N/A","N/A","1" -"sex","Sex","Sex","category","sex_cat2_1","Female","Femle","pbcDemo","map1_1","Yes","pbc","sex","cat","2","2",2,"female",NA,"N/A","2" -"sex","Sex","Sex","category","sex_cat3_3","missing","missing","pbcDemo","map1_1","N/A","pbc","sex","cat","2","2",NA,"N/A","N/A","N/A","N/A" -"age","Age (years)","Age (years)","continuous","age_rcs4_1","Age Restricted Cubic Spline Knot 1","Age RCS 1","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",1,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_1","< 20 years","< 20","table1","map1_1","yes","pbc","age","cont","4","N/A",1,"N/A","years","[,)","0:20" -"age","Age (years)","Age (years)","continuous","age_rcs4_2","Age Restricted Cubic Spline Knot 2","Age RCS 2","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",2,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_2","20 - 40 years","20 - 40","table1","map1_1","no","pbc","age","cont","4","N/A",2,"N/A","years","[,)","20:40" -"age","Age (years)","Age (years)","continuous","age_rcs4_3","Age Restricted Cubic Spline Knot 3","Age RCS 3","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",3,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_3","40 - 80 years","40 - 80","table1","map1_1","no","pbc","age","cont","4","N/A",3,"N/A","years","[,)","40:80" -"age","Age (years)","Age (years)","continuous","age_rcs4_4","Age Restricted Cubic Spline Knot 4","Age RCS 4","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",4,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_4","80+ years","80+","table1","map1_1","no","pbc","age","cont","4","N/A",4,"N/A","years","[,]","80:105" -"age","Age (years)","Age (years)","continuous","age_rcs4_4","missing","missing","pbcDemo","rcs4","N/A","pbc","age","cont","N/A","N/A",NA,"N/A","years","N/A",NA -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_4","missing or out of range","missing","table1","map1_1","no","pbc","age","cont","4","N/A",NA,"N/A","","","else" -NA,"in years",NA,NA,NA,NA,NA,NA,NA,NA,NA,"age","cont",NA,NA,NA,NA,NA,NA,"1:127462" -"edema","Edema","Edema","category","edema_cat3_1","No edema","No edema","pbcDemo","map1_1","Yes","pbc","edema","cat","3","3",1,"No edema","N/A","N/A","0" -"edema","Edema","Edema","category","edema_cat3_2","Untreated or successfully treated","Untreated or successfully treated","pbcDemo","map1_1","No","pbc","edema","cat","3","3",2,"Untreated or successfully treated","N/A","N/A","0.5" -"edema","Edema","Edema","category","edema_cat3_3","Edema despite diuretic therapy","Edema despite diuretic therapy","pbcDemo","map1_1","No","pbc","edema","cat","3","3",3,"Edema despite diuretic therapy","N/A","N/A","1" -"edema","Edema","Edema","category","edema_cat3_3","missing","missing","pbcDemo","map1_1","N/A","pbc","edema","cat","3","3",NA,"Edema despite diuretic therapy","N/A","N/A",NA -NA,"edema",NA,NA,NA,NA,NA,NA,NA,NA,NA,"edema","cat",NA,NA,0,"no edema",NA,NA,"0:0" -NA,"edema",NA,NA,NA,NA,NA,NA,NA,NA,NA,"edema","cat",NA,NA,0.5,"untreated or successfully treated",NA,NA,"0.5:0.5" diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv deleted file mode 100644 index f9066827..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/PBC-variableDetails.csv +++ /dev/null @@ -1,44 +0,0 @@ -variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval -AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" -AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" -AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" -AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" -SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" -SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" -STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" -STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" -STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" -STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" -STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" -STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" -TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" -TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" -TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" -TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" -TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/pbcDDI.xml b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/pbcDDI.xml deleted file mode 100644 index a12f12e8..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/pbcDDI.xml +++ /dev/null @@ -1,1412 +0,0 @@ - - - - - - -Mayo Clinic Primary Biliary Cirrhosis Data - - -conducted between 1974 and 1984 - - -PBC 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Gnanayutham, Rachel - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Copyright (c) Scholars Portal, Ontario Data Documentation. Extraction Service and Infrastructure (ODESI), 2011 - - -2016-03-08 - - -Ontatio Data Documentation, Extraction Service and Infrastructure, Toronto, Ontario, Canada - - -Nesstar Publisher - - -Ontario Council of University Libraries - - - - -Ontario Data Documentation, Extraction Service and Infrastructure - - -Ontario Data Documentation, Extraction Service and Infrastructure (ODESI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Created by McMaster University. Maps, Data and GIS Centre - - -Version 1.0 - Quickfile - - - -Leahey, A. 2016. Canadian Community Health Survey, 2014: Annual Component. [DDI file format]. Scholars Portal, Ontario Council of University Libraries, Toronto, Ontario [producer and distributor]. - -
    - - - -cchs-82M0013-E-2013-2014-Annual-component_F1 - - - - - - -
    - - - -Mayo Clinic Primary Biliary Cirrhosis Data - -conducted between 1974 and 1984 - - -conducted 1974:1984 - - -Enquête sur la santé dans les collectivités canadiennes, 2013-14 - - -cchs-82M0013-E-2013-2014-Annual-component - - - - -Health Statistics Division - - - - -Health Statistics Division - - -Copyright (c) Statistics Canada - - -2016-03-08 - - -Statistics Canada, Ottawa, Ontario, Canada - - -Nesstar Publisher - - - - -Data Liberation Initiative - - -Data Liberation Initiative (DLI) - - - - - -Canadian Community Health Survey - - - -
  • support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
  • -
  • provide a single data source for health research on small populations and rare characteristics;
  • -
  • timely release of information easily accessible to a diverse community of users; and
  • -
  • create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
  • -]]> -
    -
    - - -March 08, 2016- Statistics Canada - - - -Statistics Canada. 2016. Canadian Community Health Survey, 2013-2014: Annual component [public-use microdata file]. Ottawa, Ontario: Statistics Canada. Health Statistics Division, Data Liberation Initiative [producer and distributor]. - -
    - - - -Administration - - -Alcohal Use - - -Breast examination - - -Cancer - - -Chronic Conditions - - -Dental visits - - -Depression - - -Diabetes - - -Education - - -Food Security - - -Health Care - - -Income - - -Labour Force - - -Mental Health - - -Smoking - - -Socio-demographics - - -Stressors - - -Health - - - - -
      - -
    • Support health surveillance programs by providing health data at the national, provincial and intra-provincial levels;
    • -
    • Provide a single data source for health research on small populations and rare characteristics;
    • -
    • Timely release of information easily accessible to a diverse community of users;
    • -
    • Create a flexible survey instrument that includes a rapid response option to address emerging issues related to the health of the population.
    • -
    -Since 2007, data for the Canadian Community Health Survey (CCHS) are collected yearly instead of every two years. While a sample of approximately 130,000 respondents were interviewed during the reference periods of 2001, 2003 and 2005, the sample size was changed to 65,000 respondents each year starting in 2007. -

    -The CCHS produces an annual microdata file and a file combining two years of data. The CCHS collection years can also be combined by users to examine populations or rare characteristics. -The 2013-2014 master and PUMF files only contain optional content data for modules that were asked -in both years, which applies to the vast majority of optional content data]]> -
    - - - - -Canada - - -Canada, Provinces, Territories - - -Health Regions - - -Health Regions - - - - - -Survey Data - - -
    - - - -Statistics Canada - - -Annual - - -This is a sample survey with a cross-sectional design.

    - -

    To provide reliable estimates to the 110 health regions (HRs), a sample of 65,000 respondents is required on an annual basis. A multi-stage sample allocation strategy gives relatively equal importance to the HRs and the provinces. In the first step, the sample is allocated among the provinces according to the size of their respective populations and the number of HRs they contain. Each province's sample is then allocated among its HRs proportionally to the square root of the population in each HR.

    - -

    The CCHS uses three sampling frames to select the sample of households: 40.5% of the sample of households are selected from an area frame, 58.5% are selected from a list frame of telephone numbers and the remaining 1% are selected from a Random Digit Dialling (RDD) sampling frame. In the Nord-du-Québec and Prairie North health regions, only the RDD frame is used. In Nunavut, only the area frame is used. In the Yukon and Northwest Territories, most of the sample comes from the area frame but a small RDD sample is also selected in the territorial capitals.

    - -

    The CCHS uses the area frame designed for the Labour Force Survey (LFS) as its area frame. Thus, the sampling plan of the LFS must be considered in selecting the CCHS dwelling sample. The LFS plan is a complex two stage stratified design in which each stratum is formed of clusters. The LFS first selects clusters using a sampling method with a probability proportional to size (PPS), and then the final sample is chosen using a systematic sampling of dwellings in the cluster. The CCHS uses the LFS clusters, which it then stratifies by HRs. Lastly, it selects a sample of clusters and dwellings in each HR.

    - -

    The list frame of telephone numbers is used in all but five HRs to complement the area frame. The list frame is an external administrative frame of telephone numbers updated every six months. It is stratified by HR by means of a postal code conversion file in order to match the HRs to the telephone numbers. Telephone numbers are selected using a random sampling process in each HR.

    - -

    Lastly, in four HRs, a Random Digit Dialling (RDD) sampling frame of telephone numbers is used in accordance with the working banks technique, whereby only 100-number banks with at least one valid residential telephone number are retained. The banks are grouped in RDD strata to encompass, as closely as possible, the HR areas. Within each stratum, a 100-number bank is randomly chosen and a number between 00 and 99 is generated at random to create a complete, ten-digit telephone number. This procedure is repeated until the required sample size is reached.

    - -

    The size of the sample is enlarged during the selection process to account for non responses and units outside the coverage (for example, vacant dwellings, institutions, telephone numbers not in use, etc.).

    - -

    Once the dwelling or telephone number sample has been chosen, the next step is to select a member in each household. This decision is made at the time of contact for data collection. All members of the household are listed and a person aged 12 years or over is automatically selected using various selection probabilities based on age and household composition.

    ]]> -
    - - - - -
    - - - -Person-level response rate of 87.3%]]> - - -
    - - - -The data is restricted to use by current students, faculty and staff of <a href="http://ocul.on.ca/" target="_blank">Ontario Council of University Libraries (OCUL)</a> Member Libraries for academic research and teaching only. - - -Data Liberation Initiative (DLI) - - -Under the new Licence agreement, all standard data products in the DLI collection are subject to Statistics Canada's Open Data Licence. The DLI members are now allowed to use the standard data products for non-profit, academic research and instruction. Also under the licence agreement, institutional members of the DLI have access to the entire PUMFs collection, as outlined in the Appendix 1 of the DLI Licence. They can use the PUMFs for statistical and research purposes but they cannot share the data files with non DLI members. - - -DLI License - - - - -
    - - - -CCHS_2013-2014_EN_PUMF.NSDstat - - - -127462 - - -1003 - - - -Nesstar 200801 - - - - - - - -in years - - - -age of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum albumin(g/dl) - - - -serum albumin(g/dl) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -alkaline phosphotase (U/liter) - - - -alkaline phosphotase (U/liter) of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -presence of ascites - - - -presence of ascites in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -aspartate aminotransferase, once called SGOT (U/ml) - - - -aspartate aminotransferase, once called SGOT (U/ml) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum bilirunbin (mg/dl) - - - -serum bilirunbin (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -serum cholesterol (mg/dl) - - - -serum cholesterol (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -urine copper (ug/day) - - - -urine copper (ug/day) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -edema - - - -edema in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -no edema - - -3979 - - -452484.6 - - - - -0.5 - - -untreated or successfully treated - - -1985 - - -125591.4 - - - - -1 - - -edema despite diuretic therapy - - -1985 - - -125591.4 - - - - - - - -presence of hepatomegaly or enlarged liver - - - -presence of hepatomegaly or enlarged liver in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -case number - - - -participant case number - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -platelet count - - - -platelet count in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -standardised blood clotting time - - - -standardised blood clotting time in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Sex - - - -Sex of participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -Male - - -3979 - - -452484.6 - - - - -2 - - -Female - - -3979 - - -452484.6 - - - - - - - -blood vessel malformations in the skin - - - -blood vessel malformations in the skin in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -histologic stage of disease (needs biopsy) - - - -histologic stage of disease (needs biopsy) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -status at endpoint - - - -status at endpoint in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -0 - - -censored - - -3979 - - -452484.6 - - - - -1 - - -transplant - - -3979 - - -452484.6 - - - - -2 - - -dead - - -3979 - - -452484.6 - - - - - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 - - - -number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986 in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -trt - - - -trt in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - - -1 - - -D-penicillmain - - -3979 - - -452484.6 - - - - -2 - - -placebo - - -3979 - - -452484.6 - - - - -3 - - -not randomised - - -3979 - - -452484.6 - - - - - - - -triglycerides (mg/dl) - - - -triglycerides (mg/dl) in participant - - - - - - -127462 - - -30002817 - - -0 - - -0 - - -1 - - -127462 - - -63731.5 - - -63720.201 - - -36795.254 - - -36814.963 - - - - - - -Alphabetic Index - PUMF (pdf) - - - - -Approximate Sampling Variability Tables (pdf) - - - - -Complement to the User Guide - PUMF (pdf) - - - - -Data Dictionary (Frequencies) - PUMF (pdf) - - - - -Derived Variables (DV) (pdf) - - - - -Microdata Licence Agreement (pdf) - - - - -Quality Assurance (pdf) - - - - -Questionnaire (pdf) - - - - -Record Layout - PUMF (pdf) - - - - -Topical Index - PUMF (pdf) - - - - -User Guide (pdf) - - - - - - - - - -Custom Table - Modules selected by particular provinces (xls) - - -
    diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/standardWriteOutput.csv b/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/standardWriteOutput.csv deleted file mode 100644 index 0bddceac..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3/standardWriteOutput.csv +++ /dev/null @@ -1,21 +0,0 @@ -"variable","label","labelLong","variableType","variableDummy","valueLabelLong","valueLabel","target","method","reference","databaseStart","variableStart","variableStartType","validCatN","validCatNStart","value","valueLabelStart","units","interval","from" -"sex","Sex","Sex","category","sex_cat2_2","Male","Male","pbcDemo","map1_1","No","pbc","sex","cat","2","2",1,"male","N/A","N/A","1" -"sex","Sex","Sex","category","sex_cat2_1","Female","Femle","pbcDemo","map1_1","Yes","pbc","sex","cat","2","2",2,"female",NA,"N/A","2" -"sex","Sex","Sex","category","sex_cat3_3","missing","missing","pbcDemo","map1_1","N/A","pbc","sex","cat","2","2",NA,"N/A","N/A","N/A","N/A" -"age","Age (years)","Age (years)","continuous","age_rcs4_1","Age Restricted Cubic Spline Knot 1","Age RCS 1","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",1,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_1","< 20 years","< 20","table1","map1_1","yes","pbc","age","cont","4","N/A",1,"N/A","years","[,)","0:20" -"age","Age (years)","Age (years)","continuous","age_rcs4_2","Age Restricted Cubic Spline Knot 2","Age RCS 2","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",2,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_2","20 - 40 years","20 - 40","table1","map1_1","no","pbc","age","cont","4","N/A",2,"N/A","years","[,)","20:40" -"age","Age (years)","Age (years)","continuous","age_rcs4_3","Age Restricted Cubic Spline Knot 3","Age RCS 3","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",3,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_3","40 - 80 years","40 - 80","table1","map1_1","no","pbc","age","cont","4","N/A",3,"N/A","years","[,)","40:80" -"age","Age (years)","Age (years)","continuous","age_rcs4_4","Age Restricted Cubic Spline Knot 4","Age RCS 4","pbcDemo","rcs4",NA,"pbc","age","cont","N/A","N/A",4,"N/A","years","N/A","N/A" -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_4","80+ years","80+","table1","map1_1","no","pbc","age","cont","4","N/A",4,"N/A","years","[,]","80:105" -"age","Age (years)","Age (years)","continuous","age_rcs4_4","missing","missing","pbcDemo","rcs4","N/A","pbc","age","cont","N/A","N/A",NA,"N/A","years","N/A",NA -"ageGroup","Age group","Age (four categories)","category","age_group_cat4_4","missing or out of range","missing","table1","map1_1","no","pbc","age","cont","4","N/A",NA,"N/A","","","else" -NA,"in years",NA,NA,NA,NA,NA,NA,NA,NA,NA,"age","cont",NA,NA,NA,NA,NA,NA,"1:127462" -"edema","Edema","Edema","category","edema_cat3_1","No edema","No edema","pbcDemo","map1_1","Yes","pbc","edema","cat","3","3",1,"No edema","N/A","N/A","0" -"edema","Edema","Edema","category","edema_cat3_2","Untreated or successfully treated","Untreated or successfully treated","pbcDemo","map1_1","No","pbc","edema","cat","3","3",2,"Untreated or successfully treated","N/A","N/A","0.5" -"edema","Edema","Edema","category","edema_cat3_3","Edema despite diuretic therapy","Edema despite diuretic therapy","pbcDemo","map1_1","No","pbc","edema","cat","3","3",3,"Edema despite diuretic therapy","N/A","N/A","1" -"edema","Edema","Edema","category","edema_cat3_3","missing","missing","pbcDemo","map1_1","N/A","pbc","edema","cat","3","3",NA,"Edema despite diuretic therapy","N/A","N/A",NA -NA,"edema",NA,NA,NA,NA,NA,NA,NA,NA,NA,"edema","cat",NA,NA,0,"no edema",NA,NA,"0:0" -NA,"edema",NA,NA,NA,NA,NA,NA,NA,NA,NA,"edema","cat",NA,NA,0.5,"untreated or successfully treated",NA,NA,"0.5:0.5" diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSW-Generator.R b/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSW-Generator.R deleted file mode 100644 index c737e5ba..00000000 --- a/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSW-Generator.R +++ /dev/null @@ -1,139 +0,0 @@ -#Test Environment generation for WriteDDIPopulatedMSW -TestEnvironment <- list() - -# ---- WriteDDIPopulatedMSW TEST ---- - - -# ---- Test for: WriteDDI should create directory if one does not exist BLLFlow Version -SetUpTest1 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-1", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-1", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/", - "Test-1", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - bllflow::WriteDDIPopulatedMSW( - testModel, - "inst/extdata/testdata/WriteDDIPopulatedMSW/Test-1", - "standardWriteOutput.csv" - ) - TestEnvironment[["Test-1"]] <- list(testModel = testModel) - - return(TestEnvironment) -} -# ---- Test for: WriteDDI should create new file when writing BLLFlow Version -SetUpTest2 <- function(TestEnvironment) { - library(bllflow) - library(survival) - data(pbc) - variables <- - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-2", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/", - "Test-2", - package = "bllflow" - ), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - bllflow::WriteDDIPopulatedMSW( - testModel, - "inst/extdata/testdata/WriteDDIPopulatedMSW/Test-2", - "standardWriteOutput.csv" - ) - TestEnvironment[["Test-2"]] <- list(testModel = testModel) - - return(TestEnvironment) -} -# ---- Test for: WriteDDI should create new file when writing ddi Version -SetUpTest3 <- function(TestEnvironment) { - ddi <- - bllflow::ReadDDI( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/", - "Test-3", - package = "bllflow" - ), - "pbcDDI.xml" - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - WriteDDIPopulatedMSW( - ddi, - "inst/extdata/testdata/WriteDDIPopulatedMSW/Test-3", - "PBC-variableDetails.csv", - "standardWriteOutput.csv" - ) - TestEnvironment[["Test-3"]] <- list(ddi = ddi, variableDetails = variableDetails) - - return(TestEnvironment) -} - -# ---- Run all the Setups ---- -RunAllSetUps <- function(TestEnvironment) { - TestEnvironment <- SetUpTest1(TestEnvironment) - TestEnvironment <- SetUpTest2(TestEnvironment) - TestEnvironment <- SetUpTest3(TestEnvironment) - - return(TestEnvironment) -} -# ---- Save the variables needed for testing ---- -TestEnvironment <- RunAllSetUps(TestEnvironment = TestEnvironment) -save(TestEnvironment, file = "inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSWData.RData") \ No newline at end of file diff --git a/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSWData.RData b/inst/extdata/testdata/WriteDDIPopulatedMSW/WriteDDIPopulatedMSWData.RData deleted file mode 100644 index 2aa0469f6f4bc2659776efd27c581f34118239fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81 zcmb2|=3oE=HtwQMgJ)e2k`fXU(h|~`C#`W%W1d~yuyEo^L1t!d;R(l295{4#KKYcC={_NG@bcjdb13$x0sp)1OK$8HRJ|8Op diff --git a/man/BLLFlow.Rd b/man/BLLFlow.Rd index eb27f42c..746434fe 100644 --- a/man/BLLFlow.Rd +++ b/man/BLLFlow.Rd @@ -4,36 +4,40 @@ \alias{BLLFlow} \title{Creates a bllflow model} \usage{ -BLLFlow(dataList = NULL, variables = NULL, variableDetails = NULL, - ddiList = NULL) +BLLFlow( + data_list = NULL, + variables = NULL, + variable_details = NULL, + ddi_list = NULL +) } \arguments{ -\item{dataList}{A dataframe list that represents the datasets the model will be developed +\item{data_list}{A dataframe list that represents the datasets the model will be developed on} \item{variables}{A dataframe that has the specification sheet for this model. An example of this worksheet is available here \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=0}.} -\item{variableDetails}{A dataframe that is the variable details worksheet. An example +\item{variable_details}{A dataframe that is the variable details worksheet. An example of this worksheet is available here \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=1196358036}.} -\item{ddiList}{A named list that contains the ddi documents} +\item{ddi_list}{A named list that contains the ddi documents} } \value{ A named list which is an instance of the bllflow class. The items in the list are specified below: \cr -1. dataList - A dataframe that contains the passed dataList argument \cr +1. data_list - A dataframe that contains the passed data_list argument \cr 2. variables - A dataframe that contains the passed variables argument \cr -3. variableDetails - A dataframe that contains the passed variableDetails argument \cr -4. ddiList - A named list that contains the ddi found on the passed path \cr -5. additionalDDIMetaData - A named list. See the return type of the \code{\link{GetDDIDescription}} function \cr -6. populatedVariableDetails - A dataframe that contains the rows in the variableDetails \cr +3. variable_details - A dataframe that contains the passed variable_details argument \cr +4. ddi_list - A named list that contains the ddi found on the passed path \cr +5. additional_DDI_meta_data - A named list. See the return type of the \code{\link{get_DDI_description}} function \cr +6. populated_variable_details - A dataframe that contains the rows in the variable_details \cr argument but with additional data filled in using the ddi argument it's specified } \description{ -Wraps up the data, variables and variableDetails arguments in an R object, +Wraps up the data, variables and variable_details arguments in an R object, making it an instance of a bllflow class and returning the resulting object. If a ddi argument is provided, all the metadata from the DDI document is imported into the R object @@ -50,11 +54,11 @@ data(pbc) # Read in the variables and variable details CSV sheets which are part of the # master specification workbook variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -variableDetails <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) # Create a bllFlow R object for the PBC model using the above variables as args # and store it in the pbcModel variable -pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetails) +pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variable_details) # The pbcModel variable is an R object of instance BLLFlow print(attr(pbcModel, 'class')) diff --git a/man/CheckSmallCellsInTableOne.Rd b/man/CheckSmallCellsInTableOne.Rd deleted file mode 100644 index 752c03d0..00000000 --- a/man/CheckSmallCellsInTableOne.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/small-cell-check.R -\name{CheckSmallCellsInTableOne} -\alias{CheckSmallCellsInTableOne} -\title{Check for Small Cells in TableOne} -\usage{ -CheckSmallCellsInTableOne(tableOne, smallSize = 6) -} -\arguments{ -\item{tableOne}{The object outputted by the CreateTableOne function of the -tableone package. The documentation is available here -https://cran.r-project.org/web/packages/tableone/index.html.} - -\item{smallSize}{What value constitutes a small size cell. Default value is 6.} -} -\value{ -data frame with 4 columns: stratifiedBy, strataValues, variableName, factors. -This only adds the variables that contain small cells for easy identification. -It returns an empty table when no small cells are present -} -\description{ -Check for Small Cells inside a TableOne format Table -} -\details{ -Check The CatTable list for all possible small cells this also checks for -all levels similar to showAllLevels in the CatTable from TableOne -documentation available here: -} diff --git a/man/LogFunctionActivity.Rd b/man/LogFunctionActivity.Rd index 1fd78293..480bd7aa 100644 --- a/man/LogFunctionActivity.Rd +++ b/man/LogFunctionActivity.Rd @@ -4,8 +4,17 @@ \alias{LogFunctionActivity} \title{LogFunctionActivity} \usage{ -LogFunctionActivity(bllFlow, rowsChecked, rowsAffected, actionTaken, - reason, executedFunction, variable, value, print) +LogFunctionActivity( + bllFlow, + rowsChecked, + rowsAffected, + actionTaken, + reason, + executedFunction, + variable, + value, + print +) } \arguments{ \item{bllFlow}{BllFlow object containing data and related MetaData} diff --git a/man/clean.Max.Rd b/man/clean.Max.Rd deleted file mode 100644 index a5ee5349..00000000 --- a/man/clean.Max.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/clean.R -\name{clean.Max} -\alias{clean.Max} -\alias{clean.Max.BLLFlow} -\title{Cleans a dataset by updating values above a certain maximum} -\usage{ -clean.Max(bllFlowModel, ...) - -\method{clean.Max}{BLLFlow}(bllFlowModel, print = FALSE, ...) -} -\arguments{ -\item{bllFlowModel}{The bllFlowModel we will clean} - -\item{...}{Arguments to the next method in the chain} - -\item{print}{A boolean which when set to TRUE prints logs of what the operation did} -} -\value{ -bllFlowModel that has had its data modified by the paramaters located in -the variables object -} -\description{ -Cleans a dataset by updating values above a certain maximum -} -\section{Methods (by class)}{ -\itemize{ -\item \code{BLLFlow}: Cleans the data using the max and outlier columns in the variables sheet of -the MSW. Outlier method is applied on a row if any of the variable -values for that row is greater than the max value as specified in the variables -sheet. Outlier checking for the column is not applied if max value is NA. - -Currently supported outlier methods are: \cr -\strong{Delete} - Specified as 'delete' in MSW. Deletes the row from the data. -Deleted rows are stored in the metadata variable under the deletedRows name. \cr -\strong{Missing} - Specified as 'missing' in MSW. Column value for that row which does -not meet the criteria is set to NA. \cr -\strong{Not Applicable} - TODO \cr -\strong{Set to value} - Specified as a number value in MSW. Column value for the row is -set to the value specified in the outlier column. -}} - -\examples{ -# Load packages -library(survival) -library(bllflow) - -# Read in the data we will use -data(pbc) - -# Read in the MSW and variable_details sheet for the PBC model -variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -variableDetailsSheet <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) - -# Create a bllFlow R object for the PBC model using the above variables as args -pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) - -# Clean the data -cleanedPbcModel <- bllflow::clean.Max(pbcModel) - -# If you wish to be updated in the log on what the function does set print to true -cleanedPbcModel <- bllflow::clean.Max(cleanedPbcModel, print=TRUE) - -} diff --git a/man/clean.Min.Rd b/man/clean.Min.Rd deleted file mode 100644 index 21c8cff2..00000000 --- a/man/clean.Min.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/clean.R -\name{clean.Min} -\alias{clean.Min} -\alias{clean.Min.BLLFlow} -\title{Clean a dataset by updating values below a certain minimum} -\usage{ -clean.Min(bllFlowModel, ...) - -\method{clean.Min}{BLLFlow}(bllFlowModel, print = FALSE, ...) -} -\arguments{ -\item{bllFlowModel}{The bllflow model we will clean} - -\item{...}{Arguments to the next method in the chain} - -\item{print}{A boolean which when set to TRUE prints logs of what the operation did} -} -\value{ -A bllflow named list whose dataset was cleaned -} -\description{ -Clean a dataset by updating values below a certain minimum -} -\section{Methods (by class)}{ -\itemize{ -\item \code{BLLFlow}: Cleans the data using the min and outlier columns in the variables sheet of -the MSW. Outlier method is applied on a row if any of the variable -values for that row is less than the min value as specified in the variables -sheet. Outlier checking for the column is not applied if min value is NA. - -Currently supported outlier methods are: \cr -1. \strong{Delete} - Specified as 'delete' in MSW. Deletes the row from the data. \cr -number of deleted rows as well as their reason for deletion is stored in the -metaData variable under the deletedRows name. \cr -2. \strong{Missing} - Specified as 'missing' in MSW. Column value for that row which does -not meet the criteria is set to NA. \cr -3. \strong{Not Applicable} - TODO. \cr -4. \strong{Set to value} - Specified as a number value in MSW. Column value for the row is -set to the value specified in the outlier column. -}} - -\examples{ -# Load packages -library(survival) -library(bllflow) - -# Read in the data we will use -data(pbc) - -# Read in the MSW and variable_details sheet for the PBC model -variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -variableDetailsSheet <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) - -# Create a bllFlow R object for the PBC model using the above variables as args -pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) - -# Clean the data -cleanedPbcModel <- bllflow::clean.Min(pbcModel) - -# If you wish to be updated in the log on what the function does set print to true -cleanedPbcModel <- bllflow::clean.Min(cleanedPbcModel, print=TRUE) - -} diff --git a/tests/testthat.R b/tests/testthat.R deleted file mode 100644 index c8fd7458..00000000 --- a/tests/testthat.R +++ /dev/null @@ -1,4 +0,0 @@ -library(testthat) -library(bllflow) - -test_check("bllflow") diff --git a/tests/testthat/test-CheckSmallCells.R b/tests/testthat/test-CheckSmallCells.R deleted file mode 100644 index 117b82ec..00000000 --- a/tests/testthat/test-CheckSmallCells.R +++ /dev/null @@ -1,38 +0,0 @@ -context("CheckSmallCells") -load( - system.file( - "extdata/testdata/CheckSmallCells", - "CheckSmallCellsData.RData", - package = "bllflow" - ) -) - -test_that("CheckSmallCells Identifies small cells in tableOne", { - checkedTableOne <- - CheckSmallCells(TestEnvironment$`Test-1`$standardTableOne) - expect_equal(checkedTableOne, TestEnvironment$`Test-1`$checkedTableOne) -}) -test_that("CheckSmallCells Identifies small cells in longTable", { - checkedLongTable <- - CheckSmallCells(TestEnvironment$`Test-2`$standardLongTable) - expect_equal(checkedLongTable, - TestEnvironment$`Test-2`$checkedLongTable) -}) -test_that("CheckSmallCells Identifies no small cells in tableOne", { - skip("Not Yet implemented") - # Should we display special message when no small cells are found -}) -test_that("CheckSmallCells Identifies no small cells in longTable", { - skip("Not Yet implemented") - # Should we display special message when no small cells are found -}) -test_that("CheckSmallCells throws an error when invalid tableOne is passed ", - { - skip("Not Yet implemented") - #Invalid table one was passed please make sure ur using CreateTableOne to create it - }) -test_that("CheckSmallCells throws an error when invalid longTable is passed ", - { - skip("Not Yet implemented") - #Invalid longTable was passed please make sure ur using SummaryData to create it - }) diff --git a/tests/testthat/test-Clean.Max.R b/tests/testthat/test-Clean.Max.R deleted file mode 100644 index 65ca63f5..00000000 --- a/tests/testthat/test-Clean.Max.R +++ /dev/null @@ -1,25 +0,0 @@ -context("Clean Max for BLLFlow") -load( - system.file("extdata/testdata/CleanMax", - "CleanMaxData.RData", - package = "bllflow") -) - -test_that("Clean Max Removes Max rows", { - cleanedModel <- clean.Max(TestEnvironment$`Test-1`$testModel) - expect_equal(cleanedModel, TestEnvironment$`Test-1`$cleanedModel) -}) -test_that("Clean Max throws an error when invalid bllFlow is passed", { - skip("Not Yet implemented") - #Invalid bllFlowObject is passed please make sure you use BLLFlow to construct it -}) -test_that("Clean Max throws an error when bllFlow is missing the variables MSW", - { - skip("Not Yet implemented") - #VariablesMSW is missing from the bllFlow object update your object with variables MSW - }) -test_that("Clean Max throws an error when bllFlow variables MSW is missing the Max column", - { - skip("Not Yet implemented") - #VariablesMSW is missing the Max column therefore no operations were performed - }) diff --git a/tests/testthat/test-Clean.Min.R b/tests/testthat/test-Clean.Min.R deleted file mode 100644 index 32b16598..00000000 --- a/tests/testthat/test-Clean.Min.R +++ /dev/null @@ -1,25 +0,0 @@ -context("Clean Min for BLLFlow") -load( - system.file("extdata/testdata/CleanMin", - "CleanMinData.RData", - package = "bllflow") -) - -test_that("Clean Min Removes min rows", { - cleanedModel <- clean.Min(TestEnvironment$`Test-1`$testModel) - expect_equal(cleanedModel, TestEnvironment$`Test-1`$cleanedModel) -}) -test_that("Clean Min throws an error when invalid bllFlow is passed", { - skip("Not Yet implemented") - #Invalid bllFlowObject is passed please make sure you use BLLFlow to construct it -}) -test_that("Clean Min throws an error when bllFlow is missing the variables MSW", - { - skip("Not Yet implemented") - #VariablesMSW is missing from the bllFlow object update your object with variables MSW - }) -test_that("Clean Min throws an error when bllFlow variables MSW is missing the min column", - { - skip("Not Yet implemented") - #VariablesMSW is missing the min column therefore no operations were performed - }) diff --git a/tests/testthat/test-CreateTableOne.R b/tests/testthat/test-CreateTableOne.R deleted file mode 100644 index 96cbc1dd..00000000 --- a/tests/testthat/test-CreateTableOne.R +++ /dev/null @@ -1,39 +0,0 @@ -context("CreateTableOne for BLLFlow") -load( - system.file( - "extdata/testdata/CreateTableOne", - "CreateTableOneData.RData", - package = "bllflow" - ) -) - -test_that("CreateTableOne creates tableOne with just bllFlow using bllFlow specs", - { - testTableOne <- CreateTableOne(TestEnvironment$`Test-1`$testModel) - expect_equal(testTableOne, TestEnvironment$`Test-1`$standardTableOne) - }) -test_that( - "CreateTableOne creates tableOne with just passed vars that creates tableOne with just those vars", - { - testTableOne <- - CreateTableOne(TestEnvironment$`Test-2`$testModel, - vars = TestEnvironment$`Test-2`$standardVariables) - expect_equal(testTableOne, TestEnvironment$`Test-2`$standardTableOne) - } -) -test_that("CreateTableOne creates tableOne with passed strata", { - testTableOne <- - CreateTableOne(TestEnvironment$`Test-3`$testModel, - strata = TestEnvironment$`Test-3`$standardStrata) - expect_equal(testTableOne, TestEnvironment$`Test-3`$standardTableOne) -}) -test_that("CreateTableOne throws an error when data does not contain the strata", - { - skip("Not Yet implemented") - #Passed data does not contain the passed strata. Operation Aborted - }) -test_that("CreateTableOne throws a warning when data does not contain the passed vars", - { - skip("Not Yet implemented") - #Either use the tableOne error or make our own - }) diff --git a/tests/testthat/test-GetDDIDescription.R b/tests/testthat/test-GetDDIDescription.R deleted file mode 100644 index 0874f78b..00000000 --- a/tests/testthat/test-GetDDIDescription.R +++ /dev/null @@ -1,26 +0,0 @@ -context("GetDDIDescription") -load( - system.file( - "extdata/testdata/GetDDIDescription", - "GetDDIDescriptionData.RData", - package = "bllflow" - ) -) - -test_that("GetDDIDescription returns proper named list format", { - testDDIDescription <- - GetDDIDescription(TestEnvironment$`Test-1`$ddi) - expect_equal(testDDIDescription, - TestEnvironment$`Test-1`$standardDDIDescription) -}) -test_that("GetDDIDescription throws an error when invalid ddi is passed", { - skip("Not Yet implemented") - #Invalid ddi was passed please make sure to use the ReadDDI to import ddi -}) -test_that( - "GetDDIDescription throws an error when ddi is missing required data used in creating the return", - { - skip("Not Yet implemented") - #DDI does not contain full Description was dropped - } -) diff --git a/tests/testthat/test-GetDDIVariables.R b/tests/testthat/test-GetDDIVariables.R deleted file mode 100644 index 0241bc23..00000000 --- a/tests/testthat/test-GetDDIVariables.R +++ /dev/null @@ -1,29 +0,0 @@ -context("GetDDIVariables") -load( - system.file( - "extdata/testdata/GetDDIVariables", - "GetDDIVariablesData.RData", - package = "bllflow" - ) -) - -test_that("GetDDIVariables returns list of passed vars and their relative metadata", - { - testDDIVariables <- - GetDDIVariables(TestEnvironment$`Test-1`$ddi, "age") - expect_equal(testDDIVariables, - TestEnvironment$`Test-1`$standardDDIVariables) - }) -test_that("GetDDIVariables throws an error when invalid ddi is passed", { - skip("Not Yet implemented") - #Invalid ddi was passed please make sure to use the ReadDDI to import ddi -}) -test_that("GetDDIVariables throws an error when invalid ddi is passed", { - skip("Not Yet implemented") - #DDI file is not present at specified path -}) -test_that("GetDDIVariables throws a warning when not all passed vars are in ddi", - { - skip("Not Yet implemented") - #Some of the passed vars were missing from ddi and were dropped from the return - }) diff --git a/tests/testthat/test-Integration.R b/tests/testthat/test-Integration.R deleted file mode 100644 index 679fc36d..00000000 --- a/tests/testthat/test-Integration.R +++ /dev/null @@ -1,126 +0,0 @@ -context("Integration") -load( - system.file( - "extdata/testdata/Integration", - "IntegrationData.RData", - package = "bllflow" - ) -) - -test_that("BllFlowObject can be created empty then populated", { - library(survival) - data(pbc) - testModel <- bllflow::BLLFlow(data = pbc) - variables <- read.csv( - system.file( - "extdata/testdata/Integration/Test-1", - "PBC-variables.csv", - package = "bllflow" - ) - ) - testModel <- - bllflow::UpdateMSW(bllModel = testModel, newMSWVariables = variables) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-1", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - testModel <- - bllflow::UpdateMSW(bllModel = testModel, newMSWVariableDeatails = variableDetails) - ddi <- - bllflow::ReadDDI( - system.file("extdata/testdata/Integration/", - "Test-1", - package = "bllflow"), - "pbcDDI.xml" - ) - testModel <- - bllflow::UpdateMSW(bllModel = testModel, newDDI = ddi) - expect_equivalent(testModel, TestEnvironment$`Test-1`$testModel) -}) -test_that("Long table can be made from a generated bllFlowObject", { - library(survival) - data(pbc) - variables <- read.csv( - system.file( - "extdata/testdata/Integration/Test-2", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-2", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file("extdata/testdata/Integration/", - "Test-2", - package = "bllflow"), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - testTableOne <- bllflow::CreateTableOne(testModel) - testSummaryTable <- - bllflow::SummaryDataLong(testTableOne, bllFlowModel = testModel) - - expect_equal(testSummaryTable, - TestEnvironment$`Test-2`$testSummaryTable) -}) -test_that("Small cells can be found in bllFlow generated table one as well as its long table", - { - library(survival) - data(pbc) - variables <- read.csv( - system.file( - "extdata/testdata/Integration/Test-3", - "PBC-variables.csv", - package = "bllflow" - ) - ) - variableDetails <- - read.csv( - system.file( - "extdata/testdata/Integration/Test-3", - "PBC-variableDetails.csv", - package = "bllflow" - ) - ) - ddi <- - bllflow::ReadDDI( - system.file("extdata/testdata/Integration/", - "Test-3", - package = "bllflow"), - "pbcDDI.xml" - ) - testModel <- - bllflow::BLLFlow( - data = pbc, - variables = variables, - variableDetails = variableDetails, - ddi = ddi - ) - testTableOne <- bllflow::CreateTableOne(testModel) - testSummaryTable <- - bllflow::SummaryDataLong(testTableOne, bllFlowModel = testModel) - testTableOne <- bllflow::CheckSmallCells(testTableOne) - testSummaryTable <- - bllflow::CheckSmallCells(testSummaryTable) - - expect_equal(testTableOne, TestEnvironment$`Test-3`$testTableOne) - expect_equal(testSummaryTable, - TestEnvironment$`Test-3`$testSummaryTable) - }) diff --git a/tests/testthat/test-ReadDDI.R b/tests/testthat/test-ReadDDI.R deleted file mode 100644 index 520a9738..00000000 --- a/tests/testthat/test-ReadDDI.R +++ /dev/null @@ -1,25 +0,0 @@ -context("ReadDDI") -load(system.file("extdata/testdata/ReadDDI", - "ReadDDIData.RData", - package = "bllflow")) - -test_that("ReadDDI creates a proper BLLFlow DDI object", { - testDDI <- - ReadDDI( - system.file("extdata/testdata/ReadDDI", "Test-1", package = "bllflow"), - "pbcDDI.xml" - ) - expect_equal(testDDI, TestEnvironment$`Test-1`$standardDDI) -}) -test_that("ReadDDI throws an error if an invalid path is given", { - skip("Not Yet implemented") - #Invalid path detected Aborting -}) -test_that("ReadDDI throws an error if the ddi file is missing", { - skip("Not Yet implemented") - #DDI file is not present at specified path -}) -test_that("ReadDDI throws an error if the ddi file is inproper format", { - skip("Not Yet implemented") - #The specified DDI file is invalid format Abandoning -}) diff --git a/tests/testthat/test-SummaryDataLong.R b/tests/testthat/test-SummaryDataLong.R deleted file mode 100644 index 4f15290b..00000000 --- a/tests/testthat/test-SummaryDataLong.R +++ /dev/null @@ -1,58 +0,0 @@ -context("SummaryDataLong") -load( - system.file( - "extdata/testdata/SummaryDataLong", - "SummaryDataLongData.RData", - package = "bllflow" - ) -) -test_that("SummaryDataLong converts tableOne into a long table", { - TableOneLong <- - SummaryDataLong(TestEnvironment$`Test-1`$standardTableOne) - expect_equal(TableOneLong, TestEnvironment$`Test-1`$standardTable) - -}) -test_that("SummaryDataLong appends tableOne to passed long table", { - appendedLongTable <- - SummaryDataLong( - tableOne = TestEnvironment$`Test-2`$standardCompareTableOne, - longTable = TestEnvironment$`Test-2`$standardTable - ) - expect_equal(appendedLongTable, - TestEnvironment$`Test-2`$standardCompareTable) -}) -test_that( - "SummaryDataLong append tableOne to passed long table as well as labels from bllFlow object", - { - appendedLongTable <- - SummaryDataLong( - tableOne = TestEnvironment$`Test-3`$standardCompareTableOne, - bllFlowModel = TestEnvironment$`Test-3`$testModel, - longTable = TestEnvironment$`Test-3`$standardTable - ) - expect_equal(TestEnvironment$`Test-3`$standardCompareTable, - appendedLongTable) - } -) -test_that("SummaryDataLong converts tableOne into a long table with labels from bllFlow object", - { - TableOneLong <- - SummaryDataLong(TestEnvironment$`Test-4`$standardTableOne, - bllFlowModel = TestEnvironment$`Test-4`$testModel) - expect_equal(TableOneLong, TestEnvironment$`Test-4`$standardTable) - }) -test_that("SummaryDataLong throws an error when an invalid tableOne is passed", - { - skip("Not Yet implemented") - #Invalid tableOne was passed please use the tableone package to create the tableone - }) -test_that("SummaryDataLong throws an error when an invalid long table is passed", - { - skip("Not Yet implemented") - #Invalid summary Table was passed please make sure it is generated by SummaryDataLong - }) -test_that("SummaryDataLong throws a warning when bllFlow object does not contain DDI", - { - skip("Not Yet implemented") - #The passed bllFlow Object does not contain ddi labels no labels were attached to long table - }) diff --git a/tests/testthat/test-UpdateMSW.R b/tests/testthat/test-UpdateMSW.R deleted file mode 100644 index 52978372..00000000 --- a/tests/testthat/test-UpdateMSW.R +++ /dev/null @@ -1,49 +0,0 @@ -context("UpdateMSW") -load( - system.file( - "extdata/testdata/UpdateMSW", - "UpdateMSWData.RData", - package = "bllflow" - ) -) -test_that("UpdateMSW updates bllFlow variables", { - bllFlowModel <- - UpdateMSW(TestEnvironment$`Test-1`$testModel, - newMSWVariables = TestEnvironment$`Test-1`$newVariables) - expect_identical(bllFlowModel, TestEnvironment$`Test-1`$updatedTestModel) -}) -test_that("UpdateMSW updates bllFlow variableDetails", { - bllFlowModel <- - UpdateMSW( - TestEnvironment$`Test-2`$testModel, - newMSWVariableDeatails = TestEnvironment$`Test-2`$newVariableDetails - ) - expect_identical(bllFlowModel, TestEnvironment$`Test-2`$updatedTestModel) -}) -test_that("UpdateMSW updates bllFlow ddi and populatedVariableDetails", { - bllFlowModel <- - UpdateMSW(TestEnvironment$`Test-3`$testModel, - newDDI = TestEnvironment$`Test-3`$newDDI) - expect_identical(bllFlowModel, TestEnvironment$`Test-3`$updatedTestModel) -}) -test_that("UpdateMSW Throws a warning if no update parameters are passed", { - skip("Not Yet implemented") - # No update paramaters were passed no actions were taken -}) -test_that("UpdateMSW Throws an error if invalid args are passed variables", { - skip("Not Yet implemented") - # The passed variables were invalid. Abandoning no updates were made -}) -test_that("UpdateMSW Throws an error if invalid args are passed variableDetails", - { - skip("Not Yet implemented") - # The passed variableDetails were invalid. Abandoning no updates were made - }) -test_that("UpdateMSW Throws an error if invalid args are passed ddi", { - skip("Not Yet implemented") - # The passed ddi were invalid. Abandoning no updates were made -}) -test_that("UpdateMSW Throws an error if invalid bllFlow is passed", { - skip("Not Yet implemented") - # The passed bllFlow object was invalid. Abandoning no updates were made -}) diff --git a/tests/testthat/test-WriteDDIPopulatedMSW.R b/tests/testthat/test-WriteDDIPopulatedMSW.R deleted file mode 100644 index 5bbed3ad..00000000 --- a/tests/testthat/test-WriteDDIPopulatedMSW.R +++ /dev/null @@ -1,99 +0,0 @@ -context("WriteDDI") -load( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW", - "WriteDDIPopulatedMSWData.RData", - package = "bllflow" - ) -) - -test_that("WriteDDI should create directory if one does not exist BLLFlow Version", - { - unlink("../testDataFolder", recursive = TRUE) - WriteDDIPopulatedMSW( - TestEnvironment$`Test-1`$testModel, - "../testDataFolder", - "newMSWvariableDetails.csv" - ) - expect(dir.exists("../testDataFolder"), "Dir does not exist") - expect( - file.exists("../testDataFolder/newMSWvariableDetails.csv"), - "File does not exist" - ) - expect_equal( - read.csv("../testDataFolder/newMSWvariableDetails.csv"), - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-1", - "standardWriteOutput.csv", - package = "bllflow" - ) - ) - ) - unlink("../testDataFolder", recursive = TRUE) - }) -test_that("WriteDDI should create new file when writing BLLFlow Version", { - dir.create("../testDataFolder") - WriteDDIPopulatedMSW( - TestEnvironment$`Test-2`$testModel, - "../testDataFolder", - "newMSWvariableDetails.csv" - ) - expect(dir.exists("../testDataFolder"), "Dir does not exist") - expect( - file.exists("../testDataFolder/newMSWvariableDetails.csv"), - "File does not exist" - ) - expect_equal( - read.csv("../testDataFolder/newMSWvariableDetails.csv"), - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-2", - "standardWriteOutput.csv", - package = "bllflow" - ) - ) - ) - unlink("../testDataFolder", recursive = TRUE) -}) -test_that("WriteDDI should create new file when writing ddi Version", { - dir.create("../testDataFolder") - write.csv( - TestEnvironment$`Test-3`$variableDetails, - "../testDataFolder/newMSWvariableDetails.csv", - row.names = FALSE - ) - WriteDDIPopulatedMSW( - TestEnvironment$`Test-3`$ddi, - "../testDataFolder", - "newMSWvariableDetails.csv", - "ddiCreatedVariableDetails.csv" - ) - expect(dir.exists("../testDataFolder"), "Dir does not exist") - expect( - file.exists("../testDataFolder/ddiCreatedVariableDetails.csv"), - "File does not exist" - ) - expect_equal( - read.csv("../testDataFolder/ddiCreatedVariableDetails.csv"), - read.csv( - system.file( - "extdata/testdata/WriteDDIPopulatedMSW/Test-3", - "standardWriteOutput.csv", - package = "bllflow" - ) - ) - ) - unlink("../testDataFolder", recursive = TRUE) -}) -# ---- -test_that("writeDDI should Throw an error when no ddi is present for ddi version", - { - skip("Not Yet implemented") - #What error should it throw i suggest No DDI file was found at please make sure a valid DDI xml file is passed - }) -test_that("WriteDDI should throw an error if passed bllFlow does not contain DDI", - { - skip("Not Yet implemented") - #ERROR: Passed bllFlow Object does not contain ddi object. Make sure to update your bllFlow object with DDI - }) diff --git a/tests/testthat/test-bllFlow.R b/tests/testthat/test-bllFlow.R deleted file mode 100644 index 474b7d5b..00000000 --- a/tests/testthat/test-bllFlow.R +++ /dev/null @@ -1,46 +0,0 @@ -context("bllFlow construction") -load(system.file("extdata/testdata/BLLFlow", - "BLLFlowData.RData", - package = "bllflow")) - -test_that("bllFlow can be passed no args", { - model <- BLLFlow() - expect_equal(model, TestEnvironment$`Test-1`$testModel) -}) -test_that("bllFlow does not populate ddi related vars when no ddi is passed", { - model <- - BLLFlow( - data = TestEnvironment$`Test-2`$data, - variables = TestEnvironment$`Test-2`$variables, - variableDetails = TestEnvironment$`Test-2`$variableDetails - ) - expect_equal(model, TestEnvironment$`Test-2`$testModel) -}) -test_that("bllFlow populates appropriate ddi related vars", { - model <- - BLLFlow( - data = TestEnvironment$`Test-3`$data, - variables = TestEnvironment$`Test-3`$variables, - variableDetails = TestEnvironment$`Test-3`$variableDetails, - ddi = TestEnvironment$`Test-3`$ddi - ) - expect_equal(model, TestEnvironment$`Test-3`$testModel) -}) -test_that("bllFlow handles passed args of wrong type", { - skip("Not Yet implemented") - # Display error wrong arg passed? should match the classes that are checked above -}) -test_that("bllFlow handles passed args with wrong/innapropriate information", - { - skip("Not Yet implemented") - # This is the check for proper columns being there not cell content/ unless u want it to check column data types - }) -test_that("bllFlow handles empty passed args", { - skip("Not Yet implemented") - # What kind of error should it throw if something is passed of right class but its just empty as in empty data frame -}) -test_that("bllFlow display appropriate warnings when trying to overwrite rows", - { - skip("Not Yet implemented") - # are the current warnings i display the ones we wish to stick with? - }) From 4e5493e483409085e909cac8a50585e5c36ec842 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 9 Jan 2020 15:12:35 -0500 Subject: [PATCH 068/123] [Feature] Added step_z --- NAMESPACE | 6 ++ R/module-instruction-parsing.R | 2 +- R/step_z.R | 114 +++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 R/step_z.R diff --git a/NAMESPACE b/NAMESPACE index a1787707..e4dd8a0d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,8 @@ S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) +S3method(bake,step_meantest) +S3method(bake,step_z) S3method(check_small_cells,Default) S3method(check_small_cells,SummaryData) S3method(check_small_cells,TableOne) @@ -10,6 +12,8 @@ S3method(clean_min,BLLFlow) S3method(create_variable_details_template,BLLFlow) S3method(get_variables,BLLFlow) S3method(get_variables,default) +S3method(prep,step_meantest) +S3method(prep,step_z) S3method(print,metaDataLog) S3method(write_DDI_populated_MSW,BLLFlow) S3method(write_DDI_populated_MSW,BLLFlowDDI) @@ -31,6 +35,8 @@ export(rec_with_table) export(run_module) export(set_data_labels) export(set_recipy) +export(step_meantest) +export(step_z) export(summary_data_long) export(update_MSW) export(write_DDI_populated_MSW) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index ad021f55..bcb0ee0e 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -215,7 +215,7 @@ run_module <- working_data <- create_recipy(module_functions, working_data, variables) } - processed_data <- recipes::bake(working_data, data) + processed_data <- recipes::bake(working_data, new_data = data) return(processed_data) } \ No newline at end of file diff --git a/R/step_z.R b/R/step_z.R new file mode 100644 index 00000000..68b280a4 --- /dev/null +++ b/R/step_z.R @@ -0,0 +1,114 @@ +#' @export +step_z <- function(recipe, + ..., + role = NA, + trained = FALSE, + skip = FALSE, + id = recipes::rand_id("Z"), + append = TRUE, + suffix = "_Z", + means = NULL, + sd = NULL, + na.rm = FALSE, + trim = 0) { + terms <- recipes::ellipse_check(...) + recipes::add_step( + recipe, + step_z_new( + terms = terms, + trained = trained, + role = role, + append = append, + suffix = suffix, + means = means, + sd = sd, + na.rm = na.rm, + trim = trim, + skip = skip, + id = id + ) + ) +} + +step_z_new <- + function(terms, + role, + trained, + append, + suffix, + means, + sd, + na.rm, + trim, + skip, + id) { + step( + subclass = "zScore", + terms = terms, + role = role, + trained = trained, + append = append, + suffix = suffix, + means = means, + sd = sd, + na.rm = na.rm, + trim = trim, + skip = skip, + id = id + ) + } +#' @export +prep.step_z <- function(x, training, info = NULL, ...) { + for (variable_name in x$terms) { + # Verify the training data variable + if (is.null(training[[variable_name]])) { + stop(paste(variable_name, 'is missing from the training data')) + } + if (!is.numeric(training[[variable_name]])) { + stop(paste(variable_name, 'is not numeric therefore zScore cannot + be calculated')) + } + # Calculate the Standard Deviation for the variable + x$means[[variable_name]] <- mean(training[[variable_name]], trim = x$trim, na.rm = x$na.rm) + x$sd[[variable_name]] <- sd(training[[variable_name]], na.rm = x$na.rm) + # Calculate the mean for the variable + } + + return( + step_z_new( + terms = x$terms, + trained = TRUE, + role = x$role, + append = x$append, + suffix = x$suffix, + means = x$means, + sd = x$sd, + na.rm = x$na.rm, + trim = x$trim, + skip = x$skip, + id = x$id + ) + ) +} + +#' @export +bake.step_z <- function(object, new_data, ...) { + require(tibble) + for (varName in names(object$means)) { + newVarName <- paste(varName, object$suffix, sep = "") + new_data[newVarName] <- (new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]] + if (!object$append) { + new_data[varName] <- NULL + } + + } + + return(as_tibble(new_data)) +} + +print.step_z <- + function(x, width = max(20, options()$width - 30), ...) { + cat("z score for ", sep = "") + recipes:::printer(names(x$means), x$terms, x$trained, width = width) + invisible(x) + } From 6b6755c356784d020bcca0cd84e076a8641019fb Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 9 Jan 2020 15:59:54 -0500 Subject: [PATCH 069/123] [Feature] Fixed z_score bugs and added testing vignette --- R/step_z.R | 6 ++--- TestingModules.csv | 3 +++ TestingVariables.csv | 24 +++++++++++++++++ vignettes/ZSCOREMODULETEST_REMOVE_AFTER.Rmd | 29 +++++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 TestingModules.csv create mode 100644 TestingVariables.csv create mode 100644 vignettes/ZSCOREMODULETEST_REMOVE_AFTER.Rmd diff --git a/R/step_z.R b/R/step_z.R index 68b280a4..bd6bce6f 100644 --- a/R/step_z.R +++ b/R/step_z.R @@ -1,7 +1,7 @@ #' @export step_z <- function(recipe, ..., - role = NA, + role = 'predictor', trained = FALSE, skip = FALSE, id = recipes::rand_id("Z"), @@ -43,7 +43,7 @@ step_z_new <- skip, id) { step( - subclass = "zScore", + subclass = "z", terms = terms, role = role, trained = trained, @@ -59,7 +59,7 @@ step_z_new <- } #' @export prep.step_z <- function(x, training, info = NULL, ...) { - for (variable_name in x$terms) { + for (variable_name in recipes::terms_select(x$terms, info = info)) { # Verify the training data variable if (is.null(training[[variable_name]])) { stop(paste(variable_name, 'is missing from the training data')) diff --git a/TestingModules.csv b/TestingModules.csv new file mode 100644 index 00000000..76d15176 --- /dev/null +++ b/TestingModules.csv @@ -0,0 +1,3 @@ +"ModuleName","ModuleOperations","DefaultOrder","ModuleID","ModuleDescription" +"StandardizeToInteger","z::[append=TRUE],integer::[append=FALSE,suffix=FALSE]",1,1,"Converts string values to integer values" +"PrepareForModel","center::[append=TRUE,suffix=""_C""],interact::[append=TRUE,suffix=""_X-{var}""],impute::[append=false,imputeOn=mean,suffix=FALSE],num2factor::[append=FALSE,suffix=FALSE],dummy::[append=TRUE,suffix=""_Dummy""],bs::[append=TRUE,suffix=""_bs{num}""]",2,2,"Prepares the module for coxhp model creation" diff --git a/TestingVariables.csv b/TestingVariables.csv new file mode 100644 index 00000000..40e5c34f --- /dev/null +++ b/TestingVariables.csv @@ -0,0 +1,24 @@ +"variable","label","labelLong","variableType","units","operations","integer","role","z" +"age","Age","Age of participent in years","cont","Year",1,TRUE,"predictor",TRUE +"sex","Sex","Sex of the participent","cat",NA,1,FALSE,"predictor",FALSE +"bili","serum bilirunbin","serum bilirunbin(mg/dl)","cont","mg/dl",1,TRUE,"predictor",TRUE +"albumin","serum albumin","serum albumin (g/dl)","cont","g/dl",1,FALSE,"predictor",FALSE +"protime","standardised blood clotting time","standardised blood clotting time in minutes","cont","min",1,FALSE,"predictor",FALSE +"edema","edema","0 no edema, 0.5 untreated or successfully treated + +1 edema despite diuretic therapy","cat",NA,1,FALSE,"predictor",FALSE +"alk.phos","alkaline phosphotase","alkaline phosphotase (U/liter)","cont","U/liter",1,FALSE,"predictor",FALSE +"ascites","presence of ascites","presence of ascites","cat",NA,1,FALSE,"predictor",FALSE +"ast","aspartate aminotransferase","aspartate aminotransferase, once called SGOT (U/ml)","cont","U/ml",1,FALSE,"predictor",FALSE +"chol","serum cholesterol","serum cholesterol (mg/dl)","cont","mg/dl",1,FALSE,"predictor",FALSE +"copper","urine copper","urine copper (ug/day)","cont","ug/day",1,FALSE,"predictor",FALSE +"hepato","presence of hepatomegaly or enlarged liver","presence of hepatomegaly or enlarged liver in participent","cat",NA,1,FALSE,"predictor",FALSE +"platelet","platelet count","platelet count in thousadnds per microliter of blood","cont","thousand/microliter of blood",1,FALSE,"predictor",FALSE +"spiders","blood vessel malformations in the skin","blood vessel malformations in the skin of the participent","cat",NA,1,FALSE,"predictor",FALSE +"stage","histologic stage of disease","histologic stage of disease (needs biopsy)","cat",NA,1,FALSE,"predictor",FALSE +"status","status at endpoint","status at endpoint, 0/1/2 for censored, transplant, dead","cat",NA,1,FALSE,"outcome",FALSE +"time","number of days","number of days between registration and the earlier of death, + +transplantion, or study analysis in July, 1986","cont","days",1,FALSE,"predictor",FALSE +"trt","trt","1/2/NA for D-penicillmain, placebo, not randomised","cat",NA,1,FALSE,"predictor",FALSE +"trig","triglycerides","triglycerides (mg/dl)","cont","mg/dl",1,FALSE,"predictor",FALSE diff --git a/vignettes/ZSCOREMODULETEST_REMOVE_AFTER.Rmd b/vignettes/ZSCOREMODULETEST_REMOVE_AFTER.Rmd new file mode 100644 index 00000000..d05426c6 --- /dev/null +++ b/vignettes/ZSCOREMODULETEST_REMOVE_AFTER.Rmd @@ -0,0 +1,29 @@ +--- +title: "ZScoreModuleTest" +author: "Rostyslav Vyuha" +date: "January 9, 2020" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## R Markdown +1. Make sure ur on the snake_case_update branch and you pulled +2. Make sure to install and Restart +3. Make sure to import the modules and variables with the same name as the function call + + +```{r} +library(recipes) +library(bllflow) +library(survival) +data(pbc) +#Import the files as variables and Modules +library(readr) +variables <- read_csv("../TestingVariables.csv") +Modules <- read_csv("../TestingModules.csv") + +PostRecode <- run_module(variables = variables, modules = Modules, data = pbc, module_sequence_number = 1) +``` From a52fa8c9ad0cef53b13539114376e73fa40b67b9 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 15 Jan 2020 10:09:08 -0500 Subject: [PATCH 070/123] [Feature] Removed list handling added modules --- NAMESPACE | 2 +- R/bll-flow.R | 92 +++++++++++++++++++++++++++++----------------------- 2 files changed, 52 insertions(+), 42 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index e4dd8a0d..7d035e5b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,8 +17,8 @@ S3method(prep,step_z) S3method(print,metaDataLog) S3method(write_DDI_populated_MSW,BLLFlow) S3method(write_DDI_populated_MSW,BLLFlowDDI) -export(BLLFlow) export(CreateTableOne) +export(build_bllflow) export(check_small_cells) export(clean_max) export(clean_min) diff --git a/R/bll-flow.R b/R/bll-flow.R index 23fb31a9..7e20f7bc 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -5,7 +5,7 @@ #' If a ddi argument is provided, all the metadata from the DDI document is #' imported into the R object #' -#' @param data_list A dataframe list that represents the datasets the model will be developed +#' @param data A dataframe list that represents the datasets the model will be developed #' on #' @param variables A dataframe that has the specification sheet for this model. An example #' of this worksheet is available here @@ -13,13 +13,13 @@ #' @param variable_details A dataframe that is the variable details worksheet. An example #' of this worksheet is available here #' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=1196358036}. -#' @param ddi_list A named list that contains the ddi documents +#' @param ddi A named list that contains the ddi documents #' @return A named list which is an instance of the bllflow class. The items #' in the list are specified below: \cr -#' 1. data_list - A dataframe that contains the passed data_list argument \cr +#' 1. data - A dataframe that contains the passed data argument \cr #' 2. variables - A dataframe that contains the passed variables argument \cr #' 3. variable_details - A dataframe that contains the passed variable_details argument \cr -#' 4. ddi_list - A named list that contains the ddi found on the passed path \cr +#' 4. ddi - A named list that contains the ddi found on the passed path \cr #' 5. additional_DDI_meta_data - A named list. See the return type of the \code{\link{get_DDI_description}} function \cr #' 6. populated_variable_details - A dataframe that contains the rows in the variable_details \cr #' argument but with additional data filled in using the ddi argument it's specified @@ -46,17 +46,17 @@ #' #' # The pbcModel variable is an R object of instance BLLFlow #' print(attr(pbcModel, 'class')) -BLLFlow <- - function(data_list = NULL, +build_bllflow <- + function(data = NULL, variables = NULL, variable_details = NULL, - ddi_list = NULL) { + modules = NULL, + ddi = NULL) { ddi_header <- list() # Verify passed arg integrity for future functions - if (!is.null(data_list)) { - for (single_data_index in 1:length(data_list)) { - check_if_data_frame(data_list[[single_data_index]], names(data_list)[[single_data_index]]) - } + if (!is.null(data)) { + check_if_data_frame(data, names(data)) + } if (!is.null(variables)) { @@ -70,7 +70,7 @@ BLLFlow <- } if (!is.null(variable_details)) { check_if_data_frame(variable_details, - pkg.globals$argument.VariableDetailsSheet) + pkg.globals$argument.VariableDetailsSheet) check_for_column_presence( c( "variable", @@ -90,29 +90,31 @@ BLLFlow <- } - if (!is.null(ddi_list)) { + if (!is.null(ddi)) { # TODO redisign to create template rather then populate add a check to verify proper structure # processedVariableDetails <- # ProcessDDIVariableDetails(ddi, variable_details) - for (ddi_index in 1:length(ddi_list)) { - check_for_existance_of_in_list(c("variableMetaData", "ddiObject"), - ddi_list[[ddi_index]], - paste(names(ddi_list)[[ddi_index]], "ddi")) - ddi_header[[names(ddi_list)[[ddi_index]]]] <- - get_DDI_description(ddi_list[[ddi_index]]) - } + + check_for_existance_of_in_list(c("variableMetaData", "ddiObject"), + ddi, + paste(names(ddi), "ddi")) + ddi_header[[names(ddi)]] <- + get_DDI_description(ddi) + } else{ ddi_header <- NULL } + # TODO Add Verification for modules bll_flow_model <- list( - data_list = data_list, + data = data, variables = variables, variable_details = variable_details, additional_DDI_meta_data = ddi_header, populated_variable_details = NULL, - ddi_list = ddi_list + ddi = ddi, + modules = modules ) attr(bll_flow_model, "class") <- "BLLFlow" @@ -121,20 +123,27 @@ BLLFlow <- } #' @export -read_data <- function(variables, data_name, path_to_data, nrows = -1) { - # calculate the rows to set to null - first_row_of_data <- read.csv(file = path_to_data, nrows = 1) - - var_names_for_this_data <- get_variables.default(variables, data_name) - - columns_to_keep <- colnames(first_row_of_data) %in% var_names_for_this_data - column_classes <- sapply(columns_to_keep, boolean_conversion) - - data_to_save <- read.csv(file = path_to_data, - colClasses = column_classes, nrows = nrows) - - return(data_to_save) -} +read_data <- + function(variables, + data_name, + path_to_data, + nrows = -1) { + # calculate the rows to set to null + first_row_of_data <- read.csv(file = path_to_data, nrows = 1) + + var_names_for_this_data <- + get_variables.default(variables, data_name) + + columns_to_keep <- + colnames(first_row_of_data) %in% var_names_for_this_data + column_classes <- sapply(columns_to_keep, boolean_conversion) + + data_to_save <- read.csv(file = path_to_data, + colClasses = column_classes, + nrows = nrows) + + return(data_to_save) + } boolean_conversion <- function(bool_value) { ret_value <- character() if (bool_value) { @@ -146,20 +155,20 @@ boolean_conversion <- function(bool_value) { return(ret_value) } #' @export -get_variables <- function(variable_source = NULL, ...){ +get_variables <- function(variable_source = NULL, ...) { UseMethod("get_variables", variable_source) } #' @export -get_variables.BLLFlow <- function(bllFlow, data_name){ +get_variables.BLLFlow <- function(bllFlow, data_name) { variables <- bllFlow[[pkg.globals$bllFlowContent.Variables]] return(get_variables.default(variables, data_name)) } #' @export -get_variables.default <- function(variables, data_name){ +get_variables.default <- function(variables, data_name) { variables_to_read_list <- variables[grepl(data_name, variables[[pkg.globals$argument.DatabaseStart]]), ] - + var_names_for_this_data <- list() for (variable_to_read_row in 1:nrow(variables_to_read_list)) { @@ -168,7 +177,8 @@ get_variables.default <- function(variables, data_name){ data_variable_being_checked <- character() if (!grepl("DerivedVar", variable_to_read)) { if (grepl(data_name, variable_to_read)) { - var_start_names_list <- as.list(strsplit(variable_to_read, ",")[[1]]) + var_start_names_list <- + as.list(strsplit(variable_to_read, ",")[[1]]) # Find exact var Name for (var_name in var_start_names_list) { if (grepl(data_name, var_name)) { From edb87b6c7fad949352e6685053fca60034211954 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 28 Jan 2020 14:42:21 -0500 Subject: [PATCH 071/123] [Feature] Harrell rcs wrapper function --- NAMESPACE | 4 + R/bll-flow.R | 1 + R/module-instruction-parsing.R | 6 +- R/recode-with-table.R | 524 +++++++++++++++++++++------------ R/step_rcs.R | 302 +++++++++++++++++++ 5 files changed, 640 insertions(+), 197 deletions(-) create mode 100644 R/step_rcs.R diff --git a/NAMESPACE b/NAMESPACE index 7d035e5b..f4e6a7e0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,6 +3,7 @@ S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) S3method(bake,step_meantest) +S3method(bake,step_rcs) S3method(bake,step_z) S3method(check_small_cells,Default) S3method(check_small_cells,SummaryData) @@ -13,6 +14,7 @@ S3method(create_variable_details_template,BLLFlow) S3method(get_variables,BLLFlow) S3method(get_variables,default) S3method(prep,step_meantest) +S3method(prep,step_rcs) S3method(prep,step_z) S3method(print,metaDataLog) S3method(write_DDI_populated_MSW,BLLFlow) @@ -29,6 +31,7 @@ export(get_DDI_variables) export(get_recipy) export(get_variables) export(is_equal) +export(rcs2) export(read_DDI) export(read_data) export(rec_with_table) @@ -36,6 +39,7 @@ export(run_module) export(set_data_labels) export(set_recipy) export(step_meantest) +export(step_rcs) export(step_z) export(summary_data_long) export(update_MSW) diff --git a/R/bll-flow.R b/R/bll-flow.R index 7e20f7bc..afaf71d5 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -109,6 +109,7 @@ build_bllflow <- bll_flow_model <- list( data = data, + workingData = data, variables = variables, variable_details = variable_details, additional_DDI_meta_data = ddi_header, diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index bcb0ee0e..bb7e7afe 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -152,12 +152,12 @@ create_variable_formula <- function(var_list) { #verify module sequence matches the passed data verify_data_and_sequence_match <- function(module_sequence_number, data) { if (module_sequence_number[[1]] == 1 && - class(data) == "working_data") { + "working_data" %in% class(data)) { stop( "Working data was passed when sequance is at step 1. Make sure to pass the starting data. Aborting operation!" ) - } else if (class(data) != "working_data") { + } else if (!"working_data" %in% class(data)) { if (module_sequence_number[[1]] != 1) { stop( paste( @@ -168,7 +168,7 @@ verify_data_and_sequence_match <- function(module_sequence_number, data) { ) ) } - } else if (data[[pkg.globals$WorkingData.ModuleSequenceNumber]] + 1 != module_sequence_number[[1]]) { + } else if (attr(data, pkg.globals$WorkingData.ModuleSequenceNumber) + 1 != module_sequence_number[[1]]) { stop( paste( "The WorkingData passed is not from the previous module please verify that the data passed is from module", diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 5328662a..f7a95006 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -1,15 +1,37 @@ -#Removing Note +# Removing Note . <- NULL #' @title is equal #' @description Function to compare even with NA present #' This function returns TRUE wherever elements are the same, including NA's, #' and false everywhere else. -#' +#' #' @param v1 variable 1 #' @param v2 variable 2 +#' +#' @return boolean value of whether or not v1 and v2 are equal +#' +#' @examples +#' library(cchsflow) +#' is_equal(1,2) +#' # FALSE +#' +#' is_equal(1,1) +#' # TRUE +#' +#' 1==NA +#' # NA +#' +#' is_equal(1,NA) +#' # FALSE +#' +#' NA==NA +#' # NA +#' +#' is_equal(NA,NA) +#' # TRUE #' @export is_equal <- function(v1, v2) { - same <- (v1 == v2) | (is.na(v1) & is.na(v2)) + same <- (v1 == v2) | (is.na(v1) & is.na(v2)) # anything compared to NA equals NA # replaces all instanses of NA with FALSE same[is.na(same)] <- FALSE @@ -17,164 +39,234 @@ is_equal <- function(v1, v2) { return(same) } -# #' @title Recode with Table -# #' -# #' @description \code{\link{rec_w_table}} recodes values of variable, where vaiable selection and recoding rules are describe -# #' in a reference table (variable_details). Similar to \code{\link[sjmisc]{rec}}. -# #' Uses the same rule syntax as \code{\link[sjmisc]{rec}}, except rules are in a table as opposed to arguments in the function. -# #' @importFrom haven tagged_na -# #' @importFrom stringr str_match -# #' @importFrom dplyr rowwise select do -# #' @seealso \code{\link[sjmisc]{rec}} -# #' @export -# rec_w_table <- function(data_source = NULL, ...) { -# UseMethod("rec_w_table", data_source) -# } - #' Recode with Table #' +#' Recode with Table is responsible for recoding values of a dataset based on +#' the specifications in variable_details. +#' #' The \href{https://github.com/Big-Life-Lab/bllflow/blob/master/inst/extdata/PBC-variableDetails.csv}{variable_details} #' dataframe needs the following variables to function: #' \describe{ #' \item{variable}{name of new (mutated) variable that is recoded} -#' \item{toType}{type the variable is being recoded to \emph{cat = categorical, cont = continues}} -#' \item{databaseStart}{name of dataframe with original variables to be recoded} +#' \item{toType}{type the variable is being recoded to +#' \emph{cat = categorical, cont = continues}} +#' \item{databaseStart}{name of dataframe with original variables to be +#' recoded} #' \item{variableStart}{name of variable to be recoded} -#' \item{fromType}{variable type of start variable. \emph{cat = categorical or factor variable} \emph{cont = continuous variable (real number or integer)}} +#' \item{fromType}{variable type of start variable. +#' \emph{cat = categorical or factor variable} +#' \emph{cont = continuous variable (real number or integer)}} #' \item{recTo}{Value to recode to} #' \item{recFrom}{Value/range being recoded from} #' } -#' Each row in \emph{variable_details} comprises one category in a newly transformed variable. The rules for each category the new variable -#' are a string in \emph{recFrom} and value in \emph{recTo}. These recode pairs are the same syntax as \emph{sjmisc::rec()}, -#' except in \emph{sjmisc::rec()} the pairs are a string for the function attibute \emph{rec =}, separated by '\emph{=}'. -#' For example in \emph{rec_w_table} \emph{variable_details$recFrom = 2; variable_details$recTo = 4} is the same as \emph{sjmisc::rec(rec = "2=4")}. +#' Each row in \emph{variable_details} comprises one category in a +#' newly transformed variable. The rules for each category the new variable +#' are a string in \emph{recFrom} and value in \emph{recTo}. +#' These recode pairs are the same syntax as \emph{sjmisc::rec()}, +#' except in \emph{sjmisc::rec()} the pairs are a string for the function +#' attribute \emph{rec =}, separated by '\emph{=}'. +#' For example in \emph{rec_w_table} +#' \emph{variable_details$recFrom = 2; variable_details$recTo = 4} +#' is the same as \emph{sjmisc::rec(rec = "2=4")}. #' the pairs are obtained from the RecFrom and RecTo columns #' \describe{ -#' \item{recode pairs}{each recode pair is row. see above example or \emph{PBC-variableDetails.csv}} -#' \item{multiple values}{multiple old values that should be recoded into a new single value may be separated with comma, e.g. \emph{recFrom = "1,2"; recTo = 1}} -#' \item{value range}{a value range is indicated by a colon, e.g. \emph{recFrom= "1:4"; recTo = 1} (recodes all values from 1 to 4 into 1)} -#' \item{value range for doubles}{for double vectors (with fractional part), all values within the specified range are recoded; e.g. \emph{recFrom = "1:2.5'; recTo = 1} recodes 1 to 2.5 into 1, but 2.55 would not be recoded (since it's not included in the specified range)} -#' \item{\emph{"min"} and \emph{"max"}}{minimum and maximum values are indicates by \emph{min} (or \emph{lo}) and \emph{max} (or \emph{hi}), e.g. \emph{recFrom = "min:4"; recTo = 1} (recodes all values from minimum values of \emph{x} to 4 into 1)} -#' \item{\emph{"else"}}{all other values, which have not been specified yet, are indicated by \emph{else}, e.g. \emph{recFrom = "else"; recTo = NA} (recode all other values (not specified in other rows) to "NA")} -#' \item{\emph{"copy"}}{the \emph{"else"}-token can be combined with \emph{copy}, indicating that all remaining, not yet recoded values should stay the same (are copied from the original value), e.g. \emph{recFrom = "else"; recTo = "copy"}} -#' \item{\emph{NA}'s}{\emph{NA} values are allowed both as old and new value, e.g. \emph{recFrom "NA"; recTo = 1. or "recFrom = "3:5"; recTo = "NA"} (recodes all NA into 1, and all values from 3 to 5 into NA in the new variable)} -#'} +#' \item{recode pairs}{each recode pair is row. see above example +#' or \emph{PBC-variableDetails.csv}} +#' \item{multiple values}{multiple old values that should be recoded into +#' a new single value may be separated with comma, e.g. +#' \emph{recFrom = "1,2"; recTo = 1}} +#' \item{value range}{a value range is indicated by a colon, e.g. +#' \emph{recFrom= "1:4"; recTo = 1} (recodes all values from 1 to 4 into 1)} +#' \item{value range for doubles}{for double vectors (with fractional part), +#' all values within the specified range are recoded; e.g. +#' \emph{recFrom = "1:2.5'; recTo = 1} recodes 1 to 2.5 into 1, +#' but 2.55 would not be recoded +#' (since it's not included in the specified range)} +#' \item{\emph{"min"} and \emph{"max"}}{minimum and maximum values +#' are indicates by \emph{min} (or \emph{lo}) and \emph{max} (or \emph{hi}), +#' e.g. \emph{recFrom = "min:4"; recTo = 1} (recodes all values from +#' minimum values of \emph{x} to 4 into 1)} +#' \item{\emph{"else"}}{all other values, which have not been specified yet, +#' are indicated by \emph{else}, e.g. \emph{recFrom = "else"; recTo = NA} +#' (recode all other values (not specified in other rows) to "NA")} +#' \item{\emph{"copy"}}{the \emph{"else"}-token can be combined with +#' \emph{copy}, indicating that all remaining, not yet recoded values should +#' stay the same (are copied from the original value), e.g. +#' \emph{recFrom = "else"; recTo = "copy"}} +#' \item{\emph{NA}'s}{\emph{NA} values are allowed both as old and +#' new value, e.g. +#' \emph{recFrom "NA"; recTo = 1. or "recFrom = "3:5"; recTo = "NA"} +#' (recodes all NA into 1, +#' and all values from 3 to 5 into NA in the new variable)} +#' } #' -#' @param data_source A dataframe containing the variables to be recoded. -#' @param variable_details A dataframe containing the specifications (rules) for recoding. -#' @param dataset_name String, the name of the dataset containing the variables to be recoded. -#' @param else_value Value (string, number, integer, logical or NA) that is used to replace any values that are outside the specified ranges (no rules for recoding). -#' @param append_to_data Logical, if \code{TRUE} (default), recoded variables will be appended to the data_source. -#' @param log Logical, if \code{FALSE} (default), a log of recoding will not be printed. -#' @param print_note Logical, if \code{FALSE} (default), will not print the content inside the `Note`` column of the variable beinng recoded. -#' @param variables character vector containing variable names to recode or a variables csv containing additional variable info +#' @param data A dataframe containing the variables to be recoded. +#' @param variables character vector containing variable names to recode or +#' a variables csv containing additional variable info +#' @param database_name String, the name of the dataset containing the +#' to be recoded. +#' @param variable_details A dataframe containing the specifications (rules) +#' for recoding. +#' @param else_value Value (string, number, integer, logical or NA) that is used +#' to replace any values that are outside the specified ranges +#' (no rules for recoding). +#' @param append_to_data Logical, if \code{TRUE} (default), recoded variables +#' will be appended to the data. +#' @param log Logical, if \code{FALSE} (default), a log of recoding will +#' not be printed. +#' @param print_note Logical, if \code{FALSE} (default), will not print the +#' content inside the `Note`` column of the variable being recoded. #' @param var_labels labels vector to attach to variables in variables #' @param custom_function_path path to location of the function to load -#' +#' #' @return a dataframe that is recoded according to rules in variable_details. +#' +#' @examples +#' library(cchsflow) +#' bmi2010 <- rec_with_table( +#' data = cchs2010, c( +#' "HWTGHTM", +#' "HWTGWTK", "HWTGBMI_der" +#' ) +#' ) +#' +#' head(bmi2010) +#' +#' bmi2012 <- rec_with_table( +#' data = cchs2012, c( +#' "HWTGHTM", +#' "HWTGWTK", "HWTGBMI_der" +#' ) +#' ) +#' +#' tail(bmi2012) +#' +#' combined_bmi <- bind_rows(bmi2010, bmi2012) +#' head(combined_bmi) +#' tail(combined_bmi) #' @importFrom haven tagged_na #' @importFrom stringr str_match -#' @importFrom dplyr rowwise select do -#' @importFrom magrittr %>% +#' @importFrom dplyr rowwise select do +#' @importFrom magrittr %>% #' @export rec_with_table <- - function(data_source, - variable_details, - dataset_name, + function(data, + variables = NULL, + database_name = NULL, + variable_details = NULL, else_value = NA, append_to_data = FALSE, log = FALSE, print_note = TRUE, - variables = NULL, var_labels = NULL, custom_function_path = NULL) { # If custom Functions are passed create new environment and source if (!is.null(custom_function_path)) { source(custom_function_path) } - + if (is.null(variable_details)) { + message("Loading cchsflow variable_details") + data(variable_details, package = "cchsflow", envir = environment()) + } + if (is.null(variables)) { + message("Loading cchsflow variables") + data(variables, package = "cchsflow", envir = environment()) + } + if (is.null(database_name)) { + message("Using the passed data variable name as database_name") + database_name <- deparse(substitute(data)) + } # ---- Step 1: Detemine if the passed data is a list or single database - append_non_DB_columns <- FALSE - if (class(data_source) == "list" && - length(dataset_name) == length(data_source)) { - for (data_name in dataset_name) { + append_non_db_columns <- FALSE + if (class(data) == "list" && + length(database_name) == length(data)) { + for (data_name in database_name) { # ---- Step 2A: Verify that the passed name exists in the passed data - if (!is.null(data_source[[data_name]])) { - data_source[[data_name]] <- recode_call( + if (!is.null(data[[data_name]])) { + data[[data_name]] <- recode_call( variables = variables, - data_source = data_source[[data_name]], - dataset_name = dataset_name, + data = data[[data_name]], + database_name = database_name, print_note = print_note, else_value = else_value, variable_details = variable_details, append_to_data = append_to_data, - append_non_DB_columns = append_non_DB_columns, + append_non_db_columns = append_non_db_columns, log = log, var_labels = var_labels ) - } else{ + } else { stop( paste( "The data", data_name, - "is missing from the passed list please verify the names are correct in the data_source list and the dataset_name list" + "is missing from the passed list please verify the names are + correct in the data list and the database_name list" + ) ) - ) } - } - - } else if ("data.frame" %in% class(data_source) && - length(dataset_name) == 1) { - data_source <- recode_call( - variables = variables, - data_source = data_source, - dataset_name = dataset_name, - print_note = print_note, - else_value = else_value, - variable_details = variable_details, - append_to_data = append_to_data, - append_non_DB_columns = append_non_DB_columns, - log = log, - var_labels = var_labels - ) - } else{ - stop( - paste( - "The passed number of data does not match the passed number of dataNames please verify that the number of databases matches number of passed names. - Aborting operation!" - ), - call. = FALSE + } + } else if ("data.frame" %in% class(data) && + length(database_name) == 1) { + data <- recode_call( + variables = variables, + data = data, + database_name = database_name, + print_note = print_note, + else_value = else_value, + variable_details = variable_details, + append_to_data = append_to_data, + append_non_db_columns = append_non_db_columns, + log = log, + var_labels = var_labels ) - } + } else { + stop( + paste( + "The passed number of data does not match the passed number of + dataNames please verify that the number of databases matches number + of passed names. + Aborting operation!" + ), + call. = FALSE + ) + } - return(data_source) - } + return(data) + } # Creates inputs and runs recode functions recode_call <- function(variables, - data_source, - dataset_name, + data, + database_name, print_note, else_value, variable_details, - append_to_data , - append_non_DB_columns, + append_to_data, + append_non_db_columns, log, var_labels) { variable_details[[pkg.globals$argument.Variables]] <- trimws(variable_details[[pkg.globals$argument.Variables]]) if (!is.null(variables) && "data.frame" %in% class(variables)) { + variables[[pkg.globals$argument.Variables]] <- + trimws(variables[[pkg.globals$argument.Variables]]) variable_details <- - update_variable_details_based_on_variable_sheet(variable_sheet = variables, variable_details = variable_details) + update_variable_details_based_on_variable_sheet( + variable_sheet = variables, + variable_details = variable_details + ) } else { if (!is.null(variables)) { variable_details <- - variable_details[trimws(variable_details[[pkg.globals$argument.Variables]]) %in% variables,] + variable_details[trimws(variable_details[[ + pkg.globals$argument.Variables]]) %in% variables, ] vars_being_recoded <- - as.character(unique(variable_details[[pkg.globals$argument.Variables]])) + as.character(unique(variable_details[[ + pkg.globals$argument.Variables]])) if (length(vars_being_recoded) != length(variables)) { missing_vars <- setdiff(variables, vars_being_recoded) warning( @@ -188,22 +280,28 @@ recode_call <- if (is.null(variable_details[[pkg.globals$argument.VariableLabel]])) { variable_details[[pkg.globals$argument.VariableLabel]] <- NA } - if (is.null(variable_details[[pkg.globals$argument.VariableLabelShort]])) { + if (is.null(variable_details[[ + pkg.globals$argument.VariableLabelShort]])) { variable_details[[pkg.globals$argument.VariableLabelShort]] <- NA } } if (!is.null(var_labels)) { if (is.null(names(var_labels))) { stop( - "The passed labels was not a named vector please follow the c(var_name = varLalbel) format" + "The passed labels was not a named vector please follow + the c(var_name = varLalbel) format" ) - } else{ - if (is.factor(variable_details[[pkg.globals$argument.VariableLabelShort]])) { + } else { + if (is.factor(variable_details[[ + pkg.globals$argument.VariableLabelShort]])) { variable_details[[pkg.globals$argument.VariableLabelShort]] <- - as.character(variable_details[[pkg.globals$argument.VariableLabelShort]]) + as.character(variable_details[[ + pkg.globals$argument.VariableLabelShort]]) } for (var_name in names(var_labels)) { - variable_details[variable_details[[pkg.globals$argument.Variables]] == var_name, pkg.globals$argument.VariableLabelShort] <- + variable_details[variable_details[[ + pkg.globals$argument.Variables]] == var_name, + pkg.globals$argument.VariableLabelShort] <- var_labels[[var_name]] } } @@ -212,46 +310,53 @@ recode_call <- all_possible_var_names <- unique(as.character(variable_details[[pkg.globals$argument.Variables]])) all_variables_detected <- - variable_details[grepl(dataset_name , variable_details[[pkg.globals$argument.DatabaseStart]]),] + variable_details[grepl(database_name, variable_details[[ + pkg.globals$argument.DatabaseStart]]), ] rec_data <- recode_columns( - data_source = data_source, + data = data, variables_to_process = all_variables_detected, - data_name = dataset_name, + data_name = database_name, log = log, print_note = print_note, else_default = else_value ) - if (append_non_DB_columns) { + if (append_non_db_columns) { missed_variables <- - all_possible_var_names[!all_possible_var_names %in% unique(as.character(all_variables_detected[, pkg.globals$argument.Variables]))] + all_possible_var_names[!all_possible_var_names %in% + unique(as.character( + all_variables_detected[ + , + pkg.globals$argument.Variables]))] for (missed_variable_name in missed_variables) { rec_data[[missed_variable_name]] <- NA } } if (append_to_data) { - data_source <- cbind(data_source, rec_data) - } else{ - data_source <- rec_data + data <- cbind(data, rec_data) + } else { + data <- rec_data } - return(data_source) - } + return(data) + } #' @title Get Data Variable Name #' #' @name get_data_variable_name #' -#' @description Retrieves the name of the column inside data_source to use for calculations +#' @description Retrieves the name of the column inside data to +#' use for calculations #' #' @param data_name name of the database being checked #' @param data database being checked -#' @param row_being_checked the row from variable details that contains information on this variables +#' @param row_being_checked the row from variable details that contains +#' information on this variables #' @param variable_being_checked the name of the recoded variable #' -#' @return the data_source equivalant of variable_being_checked +#' @return the data equivalent of variable_being_checked get_data_variable_name <- function(data_name, data, @@ -274,7 +379,7 @@ get_data_variable_name <- } else if (grepl("\\[", var_start_names)) { data_variable_being_checked <- str_match(var_start_names, "\\[(.*?)\\]")[, 2] - } else{ + } else { stop( paste( "The row @@ -292,16 +397,18 @@ get_data_variable_name <- ) ) } - + data_variable_being_checked <- trimws(data_variable_being_checked) return(data_variable_being_checked) } #' recode_columns #' -#' Recodes columns from passed row returns just table with those columns and same rows as the data_source +#' Recodes columns from passed row and returns just table with those columns +#' and same rows as the data #' -#' @param data_source The source database -#' @param variables_to_process rows from variable details that are applicable to this DB +#' @param data The source database +#' @param variables_to_process rows from variable details that are applicable +#' to this DB #' @param data_name Name of the database being passed #' @param log The option of printing log #' @param print_note the option of printing the note columns @@ -309,7 +416,7 @@ get_data_variable_name <- #' #' @return Returns recoded and labeled data recode_columns <- - function(data_source, + function(data, variables_to_process, data_name, log, @@ -317,20 +424,23 @@ recode_columns <- else_default) { # Split variables to process into recode map and func map_variables_to_process <- - variables_to_process[grepl("map::", variables_to_process[[pkg.globals$argument.CatValue]]),] + variables_to_process[grepl("map::", variables_to_process[[ + pkg.globals$argument.CatValue]]), ] func_variables_to_process <- - variables_to_process[grepl("Func::", variables_to_process[[pkg.globals$argument.CatValue]]),] + variables_to_process[grepl("Func::", variables_to_process[[ + pkg.globals$argument.CatValue]]), ] rec_variables_to_process <- - variables_to_process[!grepl("Func::|map::", variables_to_process[[pkg.globals$argument.CatValue]]),] + variables_to_process[!grepl("Func::|map::", variables_to_process[[ + pkg.globals$argument.CatValue]]), ] label_list <- list() # Set interval if none is present interval_present <- TRUE valid_intervals <- c("[,]", "[,)", "(,]") interval_default <- "[,)" - recoded_data <- data_source[, 0] + recoded_data <- data[, 0] if (is.null(rec_variables_to_process[[pkg.globals$argument.Interval]])) { interval_present <- FALSE } @@ -338,11 +448,14 @@ recode_columns <- # Loop through the rows of recode vars while (nrow(rec_variables_to_process) > 0) { variable_being_checked <- - as.character(rec_variables_to_process[1, pkg.globals$argument.Variables]) + as.character(rec_variables_to_process[1, + pkg.globals$argument.Variables]) rows_being_checked <- - rec_variables_to_process[rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked,] + rec_variables_to_process[rec_variables_to_process[[ + pkg.globals$argument.Variables]] == variable_being_checked, ] rec_variables_to_process <- - rec_variables_to_process[!rec_variables_to_process[[pkg.globals$argument.Variables]] == variable_being_checked,] + rec_variables_to_process[!rec_variables_to_process[[ + pkg.globals$argument.Variables]] == variable_being_checked, ] first_row <- rows_being_checked[1, ] # Check for varialbe existance in data data_variable_being_checked <- @@ -350,9 +463,9 @@ recode_columns <- data_name = data_name, row_being_checked = first_row, variable_being_checked = variable_being_checked, - data = data_source + data = data ) - if (is.null(data_source[[data_variable_being_checked]])) { + if (is.null(data[[data_variable_being_checked]])) { warning( paste( "Data", @@ -361,11 +474,13 @@ recode_columns <- data_variable_being_checked ) ) - } else{ + } else { # Check for From column duplicates all_from_values_for_variable <- rows_being_checked[[pkg.globals$argument.From]] - if (length(unique(all_from_values_for_variable)) != length(all_from_values_for_variable)) { + if (length(unique( + all_from_values_for_variable)) != length( + all_from_values_for_variable)) { for (single_from in all_from_values_for_variable) { if (sum(all_from_values_for_variable == single_from) > 1) { stop( @@ -384,21 +499,24 @@ recode_columns <- label_list[[variable_being_checked]] <- create_label_list_element(rows_being_checked) else_value <- - as.character(rows_being_checked[rows_being_checked[[pkg.globals$argument.From]] == "else", pkg.globals$argument.CatValue]) + as.character(rows_being_checked[rows_being_checked[[ + pkg.globals$argument.From]] == "else", + pkg.globals$argument.CatValue]) if (length(else_value) == 1 && !is_equal(else_value, "character(0)")) { else_value <- - recode_variable_NA_formating(else_value, label_list[[variable_being_checked]]$type) + recode_variable_NA_formating(else_value, label_list[[ + variable_being_checked]]$type) if (is_equal(else_value, "copy")) { data_variable_being_checked <- get_data_variable_name( data_name = data_name, row_being_checked = first_row, variable_being_checked = variable_being_checked, - data = data_source + data = data ) recoded_data[variable_being_checked] <- - data_source[data_variable_being_checked] + data[data_variable_being_checked] } else { recoded_data[variable_being_checked] <- else_value } @@ -413,20 +531,22 @@ recode_columns <- ) ) } - else{ + else { recoded_data[variable_being_checked] <- else_default } rows_being_checked <- - rows_being_checked[!rows_being_checked[[pkg.globals$argument.From]] == "else",] + rows_being_checked[!rows_being_checked[[ + pkg.globals$argument.From]] == "else", ] if (nrow(rows_being_checked) > 0) { log_table <- rows_being_checked[, 0] log_table$value_to <- NA log_table$From <- NA log_table$rows_recoded <- NA levels(recoded_data[[variable_being_checked]]) <- - c(levels(recoded_data[[variable_being_checked]]), levels(rows_being_checked[[pkg.globals$argument.CatValue]])) + c(levels(recoded_data[[variable_being_checked]]), + levels(rows_being_checked[[pkg.globals$argument.CatValue]])) - for (row in 1:nrow(rows_being_checked)) { + for (row in seq_len(nrow(rows_being_checked))) { row_being_checked <- rows_being_checked[row, ] # If cat go check for label and obtain it @@ -438,16 +558,17 @@ recode_columns <- data_name = data_name, row_being_checked = row_being_checked, variable_being_checked = variable_being_checked, - data = data_source + data = data ) # Recode the variable from_values <- list() - if (grepl(":", as.character(row_being_checked[[pkg.globals$argument.From]]))) { + if (grepl(":", as.character(row_being_checked[[ + pkg.globals$argument.From]]))) { from_values <- - strsplit(as.character(row_being_checked[[pkg.globals$argument.From]]), ":")[[1]] + strsplit(as.character(row_being_checked[[ + pkg.globals$argument.From]]), ":")[[1]] } else { - # TODO find a more elagant way to handle in the future temp_from <- as.character(row_being_checked[[pkg.globals$argument.From]]) from_values[[1]] <- temp_from @@ -456,7 +577,8 @@ recode_columns <- value_recorded <- as.character(row_being_checked[[pkg.globals$argument.CatValue]]) if (interval_present) { - interval = as.character(row_being_checked[[pkg.globals$argument.Interval]]) + interval <- as.character(row_being_checked[[ + pkg.globals$argument.Interval]]) if (!interval %in% valid_intervals) { interval <- interval_default } @@ -465,20 +587,20 @@ recode_columns <- } valid_row_index <- compare_value_based_on_interval( compare_columns = data_variable_being_checked, - data_source = data_source, + data = data, left_boundary = from_values[[1]], right_boundary = from_values[[2]], interval = interval ) - } else{ + } else { if (from_values[[1]] == from_values[[2]]) { interval <- "[,]" - } else{ + } else { interval <- interval_default } valid_row_index <- compare_value_based_on_interval( compare_columns = data_variable_being_checked, - data_source = data_source, + data = data, left_boundary = from_values[[1]], right_boundary = from_values[[2]], interval = interval @@ -492,10 +614,11 @@ recode_columns <- sum(valid_row_index, na.rm = TRUE) value_recorded <- - recode_variable_NA_formating(value_recorded, label_list[[variable_being_checked]]$type) + recode_variable_NA_formating(value_recorded, label_list[[ + variable_being_checked]]$type) if (is_equal(value_recorded, "copy")) { value_recorded <- - data_source[valid_row_index, data_variable_being_checked] + data[valid_row_index, data_variable_being_checked] } recoded_data[valid_row_index, variable_being_checked] <- value_recorded @@ -503,34 +626,34 @@ recode_columns <- !is.null(row_being_checked[[pkg.globals$argument.Notes]]) && !is_equal(row_being_checked[[pkg.globals$argument.Notes]], "") && !is.na(row_being_checked[[pkg.globals$argument.Notes]])) { - print(paste("NOTE:", as.character(row_being_checked[[pkg.globals$argument.Notes]]))) + message("NOTE for", variable_being_checked, + ":", + as.character(row_being_checked[[ + pkg.globals$argument.Notes]])) } } # if log was requested print it if (log) { - print( - paste( - "The variable", - data_variable_being_checked, - "was recoded into", - variable_being_checked, - "for the database", - data_name, - "the following recodes were made:" - ) + message( + "The variable ", + data_variable_being_checked, + " was recoded into ", + variable_being_checked, + " for the database ", + data_name, + " the following recodes were made: " ) # Reset rowCount to avoid confusion rownames(log_table) <- NULL print(log_table) } } - } } # Process funcVars while (nrow(func_variables_to_process) > 0) { - first_row <- func_variables_to_process[1,] + first_row <- func_variables_to_process[1, ] first_row_variable_name <- as.character(first_row[[pkg.globals$argument.Variables]]) # get name of var pass to @@ -563,41 +686,47 @@ recode_columns <- #' #' @param left_boundary the min value #' @param right_boundary the max value -#' @param data_source the data that contains values being compared -#' @param compare_columns The columns inside data_source being checked +#' @param data the data that contains values being compared +#' @param compare_columns The columns inside data being checked #' @param interval The scientific notation interval #' -#' @return a boolean vector containing true for rows where the comparison is true +#' @return a boolean vector containing true for rows where the +#' comparison is true compare_value_based_on_interval <- function(left_boundary, right_boundary, - data_source, + data, compare_columns, interval) { return_boolean <- vector() if (suppressWarnings(is.na(as.numeric(left_boundary)))) { return_boolean <- - data_source[[compare_columns]] %in% data_source[[compare_columns]][which(left_boundary == data_source[[compare_columns]])] - } else{ + data[[compare_columns]] %in% data[[ + compare_columns]][ + which(left_boundary == data[[compare_columns]])] + } else { if (interval == "[,]") { return_boolean <- - data_source[[compare_columns]] %in% data_source[[compare_columns]][which( - as.numeric(left_boundary) <= data_source[[compare_columns]] & - data_source[[compare_columns]] <= as.numeric(right_boundary) - )] + data[[compare_columns]] %in% data[[ + compare_columns]][which( + as.numeric(left_boundary) <= data[[compare_columns]] & + data[[compare_columns]] <= as.numeric(right_boundary) + )] } else if (interval == "[,)") { return_boolean <- - data_source[[compare_columns]] %in% data_source[[compare_columns]][which( - as.numeric(left_boundary) <= data_source[[compare_columns]] & - data_source[[compare_columns]] < as.numeric(right_boundary) - )] + data[[compare_columns]] %in% data[[ + compare_columns]][which( + as.numeric(left_boundary) <= data[[compare_columns]] & + data[[compare_columns]] < as.numeric(right_boundary) + )] } else if (interval == "(,]") { return_boolean <- - data_source[[compare_columns]] %in% data_source[[compare_columns]][which( - as.numeric(left_boundary) < data_source[[compare_columns]] & - data_source[[compare_columns]] <= as.numeric(right_boundary) - )] - } else{ + data[[compare_columns]] %in% data[[ + compare_columns]][which( + as.numeric(left_boundary) < data[[compare_columns]] & + data[[compare_columns]] <= as.numeric(right_boundary) + )] + } else { stop("Invalid Argument was passed") } } @@ -638,7 +767,9 @@ update_variable_details_based_on_variable_sheet <- ) # remove variables not present in variable_sheet variable_details <- - variable_details[variable_details[[pkg.globals$argument.Variables]] %in% variable_sheet[[pkg.globals$MSW.Variables.Columns.Variable]],] + variable_details[variable_details[[pkg.globals$argument.Variables]] %in% + variable_sheet[[ + pkg.globals$MSW.Variables.Columns.Variable]], ] return(variable_details) } @@ -649,10 +780,10 @@ recode_variable_NA_formating <- function(cell_value, var_type) { na_value_list <- strsplit(cell_value, ":")[[1]] if (is_equal(var_type, pkg.globals$argument.CatType)) { recode_value <- paste("NA(", na_value_list[[3]], ")", sep = "") - } else{ + } else { recode_value <- tagged_na(as.character(na_value_list[[3]])) } - } else{ + } else { if (!is_equal(var_type, pkg.globals$argument.CatType) && !is_equal(cell_value, "copy")) { cell_value <- as.numeric(cell_value) @@ -681,13 +812,17 @@ recode_derived_variables <- var_stack <- c(var_stack, variable_being_processed) # obtain rows to process and updated variables to Process variable_rows <- - variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] == variable_being_processed,] + variables_to_process[variables_to_process[[ + pkg.globals$argument.Variables]] == variable_being_processed, ] variables_to_process <- - variables_to_process[variables_to_process[[pkg.globals$argument.Variables]] != variable_being_processed,] - for (row_num in 1:nrow(variable_rows)) { - # Check for presence of feeder variables in data and in the variable being processed stack + variables_to_process[variables_to_process[[ + pkg.globals$argument.Variables]] != variable_being_processed, ] + for (row_num in seq_len(nrow(variable_rows))) { + # Check for presence of feeder variables in data and in the + # variable being processed stack feeder_vars <- - as.list(strsplit(as.character(variable_rows[row_num,][[pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] + as.list(strsplit(as.character(variable_rows[row_num, ][[ + pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] feeder_vars <- gsub("\\[|\\]", "", feeder_vars) feeder_vars <- as.list(strsplit(feeder_vars, ","))[[1]] feeder_vars <- sapply(feeder_vars, trimws) @@ -696,7 +831,8 @@ recode_derived_variables <- # Check if the variable has a function to recode non_func_missing_variables <- - setdiff(feeder_vars, unique(as.character(variables_to_process[[pkg.globals$argument.Variables]]))) + setdiff(feeder_vars, unique(as.character(variables_to_process[[ + pkg.globals$argument.Variables]]))) if (length(non_func_missing_variables) > 0) { warning( paste( @@ -767,7 +903,9 @@ recode_derived_variables <- as.list(strsplit(func_cell, "::"))[[1]][[2]] column_value <- - recoded_data %>% rowwise() %>% select(used_feeder_vars) %>% + recoded_data %>% + rowwise() %>% + select(used_feeder_vars) %>% do( column_being_added = calculate_custom_function_row_value( ., @@ -790,16 +928,14 @@ recode_derived_variables <- variables_to_process = variables_to_process ) ) - } calculate_custom_function_row_value <- function(row_values, variable_names, custom_function_name) { row_values <- unname(row_values) - # TODO add ability to process ranges in from column custom_function_return_value <- do.call(get(custom_function_name), row_values) return(custom_function_return_value) - } \ No newline at end of file + } diff --git a/R/step_rcs.R b/R/step_rcs.R new file mode 100644 index 00000000..2e201c49 --- /dev/null +++ b/R/step_rcs.R @@ -0,0 +1,302 @@ +#' @export +step_rcs <- function(recipe, + ..., + role = 'predictor', + trained = FALSE, + skip = FALSE, + id = recipes::rand_id("RCS"), + number_of_knots = 3, + knots = NULL, + new_names = list()) { + terms <- recipes::ellipse_check(...) + recipes::add_step( + recipe, + step_rcs_new( + terms = terms, + trained = trained, + role = role, + append = append, + id = id, + skip = skip, + number_of_knots = number_of_knots, + knots = knots, + new_names = new_names + ) + ) +} + +step_rcs_new <- + function(terms, + role, + trained, + id, + skip, + number_of_knots, + knots, + new_names) { + step( + subclass = "rcs", + terms = terms, + role = role, + trained = trained, + id = id, + skip = skip, + number_of_knots = number_of_knots, + knots = knots, + new_names = new_names + ) + } +#' @export +prep.step_rcs <- function(x, training, info = NULL, ...) { + require(Hmisc) + for (variable_name in recipes::terms_select(x$terms, info = info)) { + # Verify the training data variable + if (is.null(training[[variable_name]])) { + stop(paste(variable_name, 'is missing from the training data')) + } + if (!is.numeric(training[[variable_name]])) { + stop(paste( + variable_name, + 'is not numeric therefore rcs cannot + be calculated' + )) + } + x$knots[[variable_name]] <- Hmisc::rcspline.eval(training[[variable_name]], nk = x$number_of_knots, knots.only = TRUE) + } + + return( + step_rcs_new( + terms = x$terms, + trained = TRUE, + role = x$role, + skip = x$skip, + id = x$id, + number_of_knots = x$number_of_knots, + knots = x$knots, + new_names = x$new_names + ) + ) +} + +#' @export +bake.step_rcs <- function(object, new_data, ...) { + require(tibble) + for (variable_name in names(object$knots)) { + # TESTING + norm <- 2 + type <- 'ordinary' + # TESTING + knot1 <- object$knots[[variable_name]][1] + knotnk <- object$knots[[variable_name]][object$number_of_knots[[variable_name]]] + knotnk1 <- object$knots[[variable_name]][object$number_of_knots[[variable_name]] - 1] + + kd <- if (norm == 0) + 1 + else if (norm == 1) + knotnk - knotnk1 + else + (knotnk - knot1)^(2 / 3) + + power <- if (type == "integral") + 4 + else + 3 + + for(knot_index in 1:(object$number_of_knots[[variable_name]]) - 2){ + + knot_name <- object$new_names[[variable_name]][[knot_index]] + new_data[, knot_name] <- + pmax((new_data[[variable_name]] - object$knots[[variable_name]][knot_index]) / kd, 0)^power + + ((knotnk1 - object$knots[[variable_name]][knot_index]) * + pmax((new_data[[variable_name]] - knotnk) / kd, 0)^power - + (knotnk - object$knots[[variable_name]][knot_index]) * (pmax(( + new_data[[variable_name]] - knotnk1 + ) / kd, 0)^power)) / (knotnk - knotnk1) + } + } + + return(as_tibble(new_data)) +} + +print.step_rcs <- + function(x, width = max(20, options()$width - 30), ...) { + cat("z score for ", sep = "") + recipes:::printer(names(x$means), x$terms, x$trained, width = width) + invisible(x) + } + +# prep_slice_rcs_eval <- +# function(original_vector, +# knots = NULL, +# number_of_knots = 5, +# include_original_column = FALSE, +# knots.only = FALSE, +# type = "ordinary", +# norm = 2, +# rpm = NULL, +# pc = FALSE, +# fractied = 0.05) +# { +# if (!length(knots)) { +# xx <- original_vector[!is.na(original_vector)] +# n <- length(xx) +# if (n < 6) +# stop("knots not specified, and < 6 non-missing observations") +# if (number_of_knots < 3) +# stop("number_of_knots must be >= 3") +# xu <- sort(unique(xx)) +# nxu <- length(xu) +# if ((nxu - 2) <= number_of_knots) { +# warning( +# sprintf( +# "%s knots requested with %s unique values of original_vector. knots set to %s interior values.", +# number_of_knots, +# nxu, +# nxu - 2 +# ) +# ) +# knots <- xu[-c(1, length(xu))] +# } +# else { +# outer <- if (number_of_knots > 3) +# 0.05 +# else +# 0.1 +# if (number_of_knots > 6) +# outer <- 0.025 +# knots <- numeric(number_of_knots) +# overrideFirst <- overrideLast <- FALSE +# nke <- number_of_knots +# firstknot <- lastknot <- numeric(0) +# if (fractied > 0 && fractied < 1) { +# f <- table(xx) / n +# if (max(f[-c(1, length(f))]) < fractied) { +# if (f[1] >= fractied) { +# firstknot <- min(xx[xx > min(xx)]) +# xx <- xx[xx > firstknot] +# nke <- nke - 1 +# overrideFirst <- TRUE +# } +# if (f[length(f)] >= fractied) { +# lastknot <- max(xx[xx < max(xx)]) +# xx <- xx[xx < lastknot] +# nke <- nke - 1 +# overrideLast <- TRUE +# } +# } +# } +# if (nke == 1) +# knots <- median(xx) +# else { +# if (nxu <= nke) +# knots <- xu +# else { +# p <- if (nke == 2) +# seq(0.5, 1 - outer, length = nke) +# else +# seq(outer, 1 - outer, length = nke) +# knots <- quantile(xx, p) +# if (length(unique(knots)) < min(nke, 3)) { +# knots <- quantile(xx, seq(outer, 1 - outer, +# length = 2 * nke)) +# if (length(firstknot) && length(unique(knots)) < +# 3) { +# midval <- if (length(firstknot) && length(lastknot)) +# (firstknot + lastknot) / 2 +# else +# median(xx) +# knots <- +# sort(c( +# firstknot, +# midval, +# if (length(lastknot)) +# lastknot +# else +# quantile(xx, +# 1 - outer) +# )) +# } +# if ((nu <- length(unique(knots))) < 3) { +# cat("Fewer than 3 unique knots. Frequency table of variable:\n") +# print(table(original_vector)) +# stop() +# } +# warning( +# paste( +# "could not obtain", +# nke, +# "interior knots with default algorithm.\n", +# "Used alternate algorithm to obtain", +# nu, +# "knots" +# ) +# ) +# } +# } +# if (length(xx) < 100) { +# xx <- sort(xx) +# if (!overrideFirst) +# knots[1] <- xx[5] +# if (!overrideLast) +# knots[nke] <- xx[length(xx) - 4] +# } +# } +# knots <- c(firstknot, knots, lastknot) +# } +# } +# knots <- sort(unique(knots)) +# number_of_knots <- length(knots) +# if (number_of_knots < 3) { +# cat("fewer than 3 unique knots. Frequency table of variable:\n") +# print(table(original_vector)) +# stop() +# } +# if (knots.only) +# return(knots) +# if (length(rpm)) +# original_vector[is.na(original_vector)] <- rpm +# xx <- matrix(1.1, length(original_vector), number_of_knots - 2) +# knot1 <- knots[1] +# knotnk <- knots[number_of_knots] +# knotnk1 <- knots[number_of_knots - 1] +# kd <- if (norm == 0) +# 1 +# else if (norm == 1) +# knotnk - knotnk1 +# else +# (knotnk - knot1) +# ^ (2 / 3) +# power <- if (type == "integral") +# 4 +# else +# 3 +# } +# +# bake_sclice_rcs_eval <- function(working_data,) { +# # Calculate number_of_knots +# +# # +# +# for (j in 1:(number_of_knots - 2)) { +# xx[, j] <- pmax((original_vector - knots[j]) / kd, 0) ^ power + +# ((knotnk1 - knots[j]) * +# pmax((original_vector - knotnk) / kd, 0) ^ power - +# (knotnk - knots[j]) * +# (pmax(( +# original_vector - knotnk1 +# ) / kd, 0) ^ power)) / (knotnk - knotnk1) +# } +# if (power == 4) +# xx <- cbind(original_vector, original_vector * original_vector / 2, xx * kd / 4) +# else if (include_original_column) +# xx <- cbind(original_vector, xx) +# if (pc) { +# p <- prcomp(xx, scale = TRUE, center = TRUE) +# pcparms <- p[c("center", "scale", "rotation")] +# xx <- p$original_vector +# attr(xx, "pcparms") <- pcparms +# } +# attr(xx, "knots") <- knots +# xx +# +# } \ No newline at end of file From c48d6265d30b868a9928295579c6721c552d4749 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 29 Jan 2020 15:36:55 -0500 Subject: [PATCH 072/123] [Feature] Added bllflow run_module and apply_missing_tagged_na new function --- NAMESPACE | 3 +++ R/apply_missing_tagged_na.R | 20 ++++++++++++++++++++ R/bll-flow.R | 2 +- R/module-instruction-parsing.R | 23 +++++++++++++++++++++-- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 R/apply_missing_tagged_na.R diff --git a/NAMESPACE b/NAMESPACE index f4e6a7e0..c8156d94 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,9 +17,12 @@ S3method(prep,step_meantest) S3method(prep,step_rcs) S3method(prep,step_z) S3method(print,metaDataLog) +S3method(run_module,BLLFlow) +S3method(run_module,default) S3method(write_DDI_populated_MSW,BLLFlow) S3method(write_DDI_populated_MSW,BLLFlowDDI) export(CreateTableOne) +export(apply_missing_tagged_na) export(build_bllflow) export(check_small_cells) export(clean_max) diff --git a/R/apply_missing_tagged_na.R b/R/apply_missing_tagged_na.R new file mode 100644 index 00000000..ffdfb9a3 --- /dev/null +++ b/R/apply_missing_tagged_na.R @@ -0,0 +1,20 @@ +#' Apply missing tagged NA +#' +#' Any non tagged NA has the passed tag applied to them this helps tag NA that +#' were added by other packages +#' +#' @param data +#' @param variables +#' @param tag_type +#' +#' @return passed data with non tagged NA now having the tag_type applied +#' @export +apply_missing_tagged_na <- function(data, variables, tag_type){ + for (variable in variables){ + NA_index <- is.na(data[[variable]]) + tagged_NA_index <- haven::is_tagged_na(data[[variable]]) + true_NA_index <- !(NA_index == tagged_NA_index) + data[true_NA_index, variable] <- haven::tagged_na(tag_type) + } + return(data) +} \ No newline at end of file diff --git a/R/bll-flow.R b/R/bll-flow.R index afaf71d5..6c61435a 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -109,7 +109,7 @@ build_bllflow <- bll_flow_model <- list( data = data, - workingData = data, + working_data = data, variables = variables, variable_details = variable_details, additional_DDI_meta_data = ddi_header, diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index bb7e7afe..a27e6325 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -25,6 +25,7 @@ parse_module_functions <- refactored_funcs_with_args[[func_name]] <- list() for (argument in func_with_args[[2]]) { + # Insert check for formula presense tmp_arg <- as.list(strsplit(argument, "=")[[1]]) tmp_arg[[2]] <- stringr::str_remove_all(tmp_arg[[2]], "[\"\"]") @@ -181,7 +182,24 @@ verify_data_and_sequence_match <- function(module_sequence_number, data) { } #' @export -run_module <- +run_module <- function(x, ...) { + UseMethod("run_module", x) +} + +#' @export +run_module.BLLFlow <- function(bll_model, module_sequence_number){ + processed_data <- + run_module.default( + variables = bll_model$variables, + modules = bll_model$modules, + data = bll_model$working_data, + module_sequence_number = module_sequence_number, + variable_details = bll_model$variable_details + ) +} + +#' @export +run_module.default <- function(variables, modules, data, @@ -218,4 +236,5 @@ run_module <- processed_data <- recipes::bake(working_data, new_data = data) return(processed_data) - } \ No newline at end of file + } + From c00851166f72c3512fb5ee64d07a4d79b552f0ae Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 4 Feb 2020 17:06:03 -0500 Subject: [PATCH 073/123] [Feature] Added module handling for step_with_formula_step --- NAMESPACE | 4 + R/default_step_parsing.R | 179 ++++++++++++++++++++++++ R/function_parsing.R | 20 +++ R/module-instruction-parsing.R | 242 +++++++-------------------------- R/step_naomit.R | 119 ++++++++++++++++ R/step_with_formula_parsing.R | 140 +++++++++++++++++++ R/strings.R | 7 + 7 files changed, 521 insertions(+), 190 deletions(-) create mode 100644 R/default_step_parsing.R create mode 100644 R/function_parsing.R create mode 100644 R/step_naomit.R create mode 100644 R/step_with_formula_parsing.R diff --git a/NAMESPACE b/NAMESPACE index c8156d94..9a253984 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) S3method(bake,step_meantest) S3method(bake,step_rcs) +S3method(bake,step_tagged_naomit) S3method(bake,step_z) S3method(check_small_cells,Default) S3method(check_small_cells,SummaryData) @@ -15,10 +16,12 @@ S3method(get_variables,BLLFlow) S3method(get_variables,default) S3method(prep,step_meantest) S3method(prep,step_rcs) +S3method(prep,step_tagged_naomit) S3method(prep,step_z) S3method(print,metaDataLog) S3method(run_module,BLLFlow) S3method(run_module,default) +S3method(tidy,step_tagged_naomit) S3method(write_DDI_populated_MSW,BLLFlow) S3method(write_DDI_populated_MSW,BLLFlowDDI) export(CreateTableOne) @@ -43,6 +46,7 @@ export(set_data_labels) export(set_recipy) export(step_meantest) export(step_rcs) +export(step_tagged_naomit) export(step_z) export(summary_data_long) export(update_MSW) diff --git a/R/default_step_parsing.R b/R/default_step_parsing.R new file mode 100644 index 00000000..54524d44 --- /dev/null +++ b/R/default_step_parsing.R @@ -0,0 +1,179 @@ +parse_default_step <- + function(data, + sequence_element, + modules, + variables, + variable_details) { + working_data <- data + module_functions <- + parse_module_functions( + module_table = modules, + module_sequence = sequence_element, + variables = variables, + variable_details = variable_details + ) + working_data <- + create_recipy(module_functions, working_data, variables) + + processed_data <- recipes::bake(working_data, new_data = data) + + return(processed_data) + } + +#Parse out the functions inside each module returning a list of the functions in it +parse_module_functions <- + function(module_table, + module_sequence, + variables, + variable_details) { + #Check row with module sequence + raw_func <- + as.character(module_table[module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, pkg.globals$WorkingData.ModuleOperations]) + + func_list <- strsplit(raw_func, "],")[[1]] + #print(func_list) + + #Seperate each function into seperate list element with 2 elements function name and its arguments + refactored_funcs_with_args <- list() + + for (single_func in func_list) { + func_with_args <- as.list(strsplit(single_func, "::")[[1]]) + func_with_args[[2]] <- + stringr::str_remove_all(func_with_args[[2]], "[\\[\\]]") + func_with_args[[2]] <- + as.list(strsplit(func_with_args[[2]], ",")[[1]]) + + func_name <- func_with_args[[1]] + refactored_funcs_with_args[[func_name]] <- list() + + for (argument in func_with_args[[2]]) { + # Insert check for formula presense + tmp_arg <- as.list(strsplit(argument, "=")[[1]]) + tmp_arg[[2]] <- + stringr::str_remove_all(tmp_arg[[2]], "[\"\"]") + refactored_funcs_with_args[[func_name]][[pkg.globals$FunctionList.Arguments]][[tmp_arg[[1]]]] <- + tmp_arg[[2]] + } + } + + refactored_funcs_with_args_and_vars <- + parse_function_variables( + function_list = refactored_funcs_with_args, + variables = variables, + module_sequence_number = module_sequence + ) + + return(refactored_funcs_with_args_and_vars) + } + +#Uses the function object to find the variables for it and find all the applicable variables +parse_function_variables <- + function(function_list, + variables, + module_sequence_number) { + #Check which rows contain the module currently being ran + affected_rows <- + variables[grepl(module_sequence_number, variables[[pkg.globals$columnNames.Operations]]), ] + + #Check the additional params for the operations and add to function + for (current_func_name in names(function_list)) { + if (current_func_name %in% colnames(affected_rows)) { + columns_to_check <- + affected_rows[affected_rows[[current_func_name]] != FALSE, c(current_func_name, pkg.globals$columnNames.Variable)] + + for (row in 1:nrow(columns_to_check)) { + function_list[[current_func_name]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columns_to_check[row, pkg.globals$columnNames.Variable])]] <- + columns_to_check[row, current_func_name] + } + + } else{ + warning( + paste( + "Requested function", + current_func_name, + "is not present in variables please verify the function name is correct" + ), + call. = FALSE + ) + } + } + #Create new functions in case of additional params being there + function_list <- create_exact_function(function_list) + + return(function_list) + } + +#Define exact functions depending on variable arguments +create_exact_function <- function(function_list) { + #Parse out non TRUE parameters + for (fun_name in names(function_list)) { + if (!is.null(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { + for (var_name in names(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { + if (function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] != TRUE) { + # create new func and move all the ones with that value there + if (is.null(function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]])) { + function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- + function_list[[fun_name]][[pkg.globals$FunctionList.Arguments]] + function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- + function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] + } else{ + function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- + function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] + } + } + } + } + } + + return(function_list) + #Create new functions with the new paramev ters +} + +#Uses the function objects to create a recipy +create_recipy <- + function(function_object_list, + working_data, + variables) { + # Check variable roles for the recipy creation + # TODO bllflow support make this add to overall recipy + outcome_variable <- + as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome", pkg.globals$argument.Variables]) + # TODO add a function for creating a proper formula + recipe_formula <- paste(outcome_variable, "~ .") + + recipy_object <- + recipes::recipe(formula = recipe_formula, + data = working_data, + x = working_data) + + for (single_function in names(function_object_list)) { + variables <- + names(function_object_list[[single_function]][[pkg.globals$FunctionList.VariableArguments]]) + arguments <- + function_object_list[[single_function]][[pkg.globals$FunctionList.Arguments]] + step_formula <- create_variable_formula(variables) + step_name <- paste("step_", single_function, sep = "") + step_list <- list(recipe = recipy_object) + for (argument_name in names(arguments)) { + argument_name <- trimws(argument_name) + step_list[argument_name] <- arguments + } + step_list[[length(step_list)+1]] <- unlist(step_formula) + recipy_object <- + do.call(get(step_name), step_list) + } + recipy_object <- + recipes::prep(recipy_object, training = working_data) + + return(recipy_object) + } + +#Function for creating formula for variable selection +create_variable_formula <- function(var_list) { + return_formula <- list() + for (variable in var_list) { + return_formula <- append(return_formula, variable) + } + + return(return_formula) +} \ No newline at end of file diff --git a/R/function_parsing.R b/R/function_parsing.R new file mode 100644 index 00000000..9404e3a4 --- /dev/null +++ b/R/function_parsing.R @@ -0,0 +1,20 @@ +parse_function <- function(data, + sequence_element, + modules, + variables, + variable_details) { + working_data <- data + module_functions <- + parse_module_functions( + module_table = modules, + module_sequence = sequence_element, + variables = variables, + variable_details = variable_details + ) + working_data <- + create_recipy(module_functions, working_data, variables) + + processed_data <- recipes::bake(working_data, new_data = data) + + return(processed_data) +} \ No newline at end of file diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index a27e6325..2d751705 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -1,185 +1,34 @@ -#Parse out the functions inside each module returning a list of the functions in it -parse_module_functions <- - function(module_table, - module_sequence, - variables, - variable_details) { - #Check row with module sequence - raw_func <- - as.character(module_table[module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, pkg.globals$WorkingData.ModuleOperations]) - - func_list <- strsplit(raw_func, "],")[[1]] - #print(func_list) - - #Seperate each function into seperate list element with 2 elements function name and its arguments - refactored_funcs_with_args <- list() - - for (single_func in func_list) { - func_with_args <- as.list(strsplit(single_func, "::")[[1]]) - func_with_args[[2]] <- - stringr::str_remove_all(func_with_args[[2]], "[\\[\\]]") - func_with_args[[2]] <- - as.list(strsplit(func_with_args[[2]], ",")[[1]]) - - func_name <- func_with_args[[1]] - refactored_funcs_with_args[[func_name]] <- list() - - for (argument in func_with_args[[2]]) { - # Insert check for formula presense - tmp_arg <- as.list(strsplit(argument, "=")[[1]]) - tmp_arg[[2]] <- - stringr::str_remove_all(tmp_arg[[2]], "[\"\"]") - refactored_funcs_with_args[[func_name]][[pkg.globals$FunctionList.Arguments]][[tmp_arg[[1]]]] <- - tmp_arg[[2]] - } - } - - refactored_funcs_with_args_and_vars <- - parse_function_variables( - function_list = refactored_funcs_with_args, - variables = variables, - module_sequence_number = module_sequence +#verify module sequence matches the passed data +verify_data_and_sequence_match <- + function(module_sequence_number, data) { + if (module_sequence_number[[1]] == 1 && + "working_data" %in% class(data)) { + stop( + "Working data was passed when sequance is at step 1. Make sure to pass the starting data. + Aborting operation!" ) - - return(refactored_funcs_with_args_and_vars) - } - -#Uses the function object to find the variables for it and find all the applicable variables -parse_function_variables <- - function(function_list, - variables, - module_sequence_number) { - #Check which rows contain the module currently being ran - affected_rows <- - variables[grepl(module_sequence_number, variables[[pkg.globals$columnNames.Operations]]), ] - - #Check the additional params for the operations and add to function - for (current_func_name in names(function_list)) { - if (current_func_name %in% colnames(affected_rows)) { - columns_to_check <- - affected_rows[affected_rows[[current_func_name]] != FALSE, c(current_func_name, pkg.globals$columnNames.Variable)] - - for (row in 1:nrow(columns_to_check)) { - function_list[[current_func_name]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columns_to_check[row, pkg.globals$columnNames.Variable])]] <- - columns_to_check[row, current_func_name] - } - - } else{ - warning( + } else if (!"working_data" %in% class(data)) { + if (module_sequence_number[[1]] != 1) { + stop( paste( - "Requested function", - current_func_name, - "is not present in variables please verify the function name is correct" - ), - call. = FALSE - ) + "Non working_data was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", + module_sequence_number, + " + Aborting operation!" + ) + ) } + } else if (attr(data, pkg.globals$WorkingData.ModuleSequenceNumber) + 1 != module_sequence_number[[1]]) { + stop( + paste( + "The WorkingData passed is not from the previous module please verify that the data passed is from module", + module_sequence_number - 1, + " + Aborting operation!" + ) + ) } - #Create new functions in case of additional params being there - function_list <- create_exact_function(function_list) - - return(function_list) - } - -#Define exact functions depending on variable arguments -create_exact_function <- function(function_list) { - #Parse out non TRUE parameters - for (fun_name in names(function_list)) { - if (!is.null(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { - for (var_name in names(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { - if (function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] != TRUE) { - # create new func and move all the ones with that value there - if (is.null(function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]])) { - function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- - function_list[[fun_name]][[pkg.globals$FunctionList.Arguments]] - function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- - function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] - } else{ - function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- - function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] - } - } } - } - } - - return(function_list) - #Create new functions with the new paramev ters -} - -#Uses the function objects to create a recipy -create_recipy <- - function(function_object_list, - working_data, - variables) { - # Check variable roles for the recipy creation - # TODO bllflow support make this add to overall recipy - outcome_variable <- - as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome", pkg.globals$argument.Variables]) - # TODO add a function for creating a proper formula - recipe_formula <- paste(outcome_variable, "~ .") - - recipy_object <- - recipes::recipe(formula = recipe_formula, - data = working_data, - x = working_data) - - for (single_function in names(function_object_list)) { - variables <- - names(function_object_list[[single_function]][[pkg.globals$FunctionList.VariableArguments]]) - arguments <- - function_object_list[[single_function]][[pkg.globals$FunctionList.Arguments]] - step_formula <- create_variable_formula(variables) - step_name <- paste("step_", single_function, sep = "") - recipy_object <- - do.call(get(step_name), list(recipe = recipy_object, unlist(step_formula))) - } - recipy_object <- - recipes::prep(recipy_object, training = working_data) - - return(recipy_object) - } - -#Function for creating formula for variable selection -create_variable_formula <- function(var_list) { - return_formula <- list() - for (variable in var_list) { - return_formula <- append(return_formula, variable) - } - - return(return_formula) -} - -#verify module sequence matches the passed data -verify_data_and_sequence_match <- function(module_sequence_number, data) { - if (module_sequence_number[[1]] == 1 && - "working_data" %in% class(data)) { - stop( - "Working data was passed when sequance is at step 1. Make sure to pass the starting data. - Aborting operation!" - ) - } else if (!"working_data" %in% class(data)) { - if (module_sequence_number[[1]] != 1) { - stop( - paste( - "Non working_data was passed to sequence greater then step 1 please make sure ur passing working data that is result of the module sequence before", - module_sequence_number, - " - Aborting operation!" - ) - ) - } - } else if (attr(data, pkg.globals$WorkingData.ModuleSequenceNumber) + 1 != module_sequence_number[[1]]) { - stop( - paste( - "The WorkingData passed is not from the previous module please verify that the data passed is from module", - module_sequence_number - 1, - " - Aborting operation!" - ) - ) - } - } #' @export run_module <- function(x, ...) { @@ -187,7 +36,7 @@ run_module <- function(x, ...) { } #' @export -run_module.BLLFlow <- function(bll_model, module_sequence_number){ +run_module.BLLFlow <- function(bll_model, module_sequence_number) { processed_data <- run_module.default( variables = bll_model$variables, @@ -221,20 +70,33 @@ run_module.default <- verify_data_and_sequence_match(module_sequence_number, data) - working_data <- data + processed_data <- data + # Find type of module and execute the right call for (sequence_element in module_sequence_number) { - module_functions <- - parse_module_functions( - module_table = modules, - module_sequence = sequence_element, - variables = variables, - variable_details = variable_details - ) - working_data <- - create_recipy(module_functions, working_data, variables) + type_of_module <- + modules[modules[[pkg.globals$Modules.DefaultOrder]] == sequence_element, pkg.globals$Modules.OperationsType] + if (type_of_module == pkg.globals$ModuleTypes.DefaultStep) { + processed_data <- parse_default_step(processed_data, + sequence_element, + modules, + variables, + variable_details) + } else if (type_of_module == pkg.globals$ModuleTypes.FormulaStep) { + processed_data <- parse_formula_step(processed_data, + sequence_element, + modules, + variables, + variable_details) + } else if (type_of_module == pkg.globals$ModuleTypes.Function) { + processed_data <- parse_function(processed_data, + sequence_element, + modules, + variables, + variable_details) + } } - processed_data <- recipes::bake(working_data, new_data = data) + + # Find type of module and execute the right call return(processed_data) } - diff --git a/R/step_naomit.R b/R/step_naomit.R new file mode 100644 index 00000000..0a753e60 --- /dev/null +++ b/R/step_naomit.R @@ -0,0 +1,119 @@ +#' Remove observations with missing values +#' +#' `step_tagged_naomit` creates a *specification* of a recipe step that +#' will add remove observations (rows of data) if they contain NA +#' or NaN values. +#' +#' @param recipe A recipe object. The step will be added to the sequence of +#' operations for this recipe. +#' @param ... One or more selector functions to choose which +#' variables will be used to create the dummy variables. See +#' [selections()] for more details. The selected +#' variables must be factors. +#' @param role Unused, include for consistency with other steps. +#' @param trained A logical to indicate if the quantities for preprocessing +#' have been estimated. Again included for consistency. +#' @param columns A character string of variable names that will +#' be populated (eventually) by the `terms` argument. +#' @param id A character string that is unique to this step to identify it. +#' @param skip A logical. Should the step be skipped when the +#' recipe is baked by [bake.recipe()]? While all operations are baked +#' when [prep.recipe()] is run, some operations may not be able to be +#' conducted on new data (e.g. processing the outcome variable(s)). +#' Care should be taken when using `skip = TRUE` as it may affect +#' the computations for subsequent operations +#' +#' @rdname step_tagged_naomit +#' @return An updated version of `recipe` with the +#' new step added to the sequence of existing steps (if any). +#' @export +#' +#' @examples +#' +#' recipe(Ozone ~ ., data = airquality) %>% +#' step_tagged_naomit(Solar.R) %>% +#' prep(airquality, verbose = FALSE) %>% +#' juice() +#' +#' @seealso [recipe()] [prep.recipe()] [bake.recipe()] +step_tagged_naomit <- function(recipe, + ..., + role = NA, + trained = FALSE, + columns = NULL, + tag_type = NULL, + skip = FALSE, + id = recipes::rand_id("tagged_naomit")) { + recipes::add_step( + recipe, + step_tagged_naomit_new( + terms = recipes::ellipse_check(...), + role = role, + trained = trained, + columns = columns, + tag_type = trimws(tag_type), + skip = skip, + id = id + ) + ) +} + +step_tagged_naomit_new <- + function(terms, role, trained, columns, tag_type, skip, id) { + step( + subclass = "tagged_naomit", + terms = terms, + role = role, + trained = trained, + columns = columns, + tag_type = tag_type, + skip = skip, + id = id + ) + } + +#' @export +prep.step_tagged_naomit <- function(x, training, info = NULL, ...) { + step_tagged_naomit_new( + terms = x$terms, + role = x$role, + trained = TRUE, + columns = recipes::terms_select(x$terms, info = info), + tag_type = x$tag_type, + skip = x$skip, + id = x$id + ) +} + +#' @export +bake.step_tagged_naomit <- function(object, new_data, ...) { + if (is.null(object$tag_type)) { + tibble::as_tibble(tidyr::drop_na(new_data, object$columns)) + } else{ + for (column in object$columns) { + if(is.numeric(new_data[[column]])){ + new_data <- new_data[!haven::is_tagged_na(new_data[[column]], tag = object$tag_type),] + }else{ + new_data <- new_data[!is_equal(new_data[[column]], paste("NA(",object$tag_type,")",sep = "")), ] + } + } + tibble::as.tibble(new_data) + } +} + +print.step_tagged_naomit <- + function(x, width = max(20, options()$width - 30), ...) { + cat("Removing rows with NA values in ", sep = "") + cat(tidyr::drop_naformat_selectors(x$terms, width = width)) + cat("\n") + invisible(x) + } + +#' @rdname step_tagged_naomit +#' @param x A `step_tagged_naomit` object. +#' @export +tidy.step_tagged_naomit <- function(x, ...) { + res <- recipes::simple_terms(x, ...) + res$id <- x$id + res +} diff --git a/R/step_with_formula_parsing.R b/R/step_with_formula_parsing.R new file mode 100644 index 00000000..1890c97b --- /dev/null +++ b/R/step_with_formula_parsing.R @@ -0,0 +1,140 @@ +parse_formula_step <- function(data, + sequence_element, + modules, + variables, + variable_details) { + working_data <- data + module_functions <- + parse_formula_module_functions( + module_table = modules, + module_sequence = sequence_element, + variables = variables, + variable_details = variable_details + ) + working_data <- + create_formula_recipy(module_functions, working_data, variables) + + processed_data <- recipes::bake(working_data, new_data = data) + + return(processed_data) +} + +#Parse out the functions inside each module returning a list of the functions in it +parse_formula_module_functions <- + function(module_table, + module_sequence, + variables, + variable_details) { + #Check row with module sequence + raw_func <- + as.character(module_table[module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, pkg.globals$WorkingData.ModuleOperations]) + + func_list <- strsplit(raw_func, "],")[[1]] + #print(func_list) + + #Seperate each function into seperate list element with 2 elements function name and its arguments + refactored_funcs_with_args <- list() + + for (single_func in func_list) { + func_with_args <- as.list(strsplit(single_func, "::")[[1]]) + func_with_args[[2]] <- + stringr::str_remove_all(func_with_args[[2]], "[\\[\\]]") + func_with_args[[2]] <- + as.list(strsplit(func_with_args[[2]], ",")[[1]]) + + func_name <- func_with_args[[1]] + refactored_funcs_with_args[[func_name]] <- list() + + for (argument in func_with_args[[2]]) { + tmp_arg <- as.list(strsplit(argument, "}")[[1]]) + tmp_arg[[1]] <- + stringr::str_remove_all(tmp_arg[[1]], "[{}]") + refactored_funcs_with_args[[func_name]][[pkg.globals$FunctionList.Arguments]][[tmp_arg[[1]]]] <- + tmp_arg[[2]] + } + } + refactored_funcs_with_args_and_vars <- + parse_formula_function_variables( + function_list = refactored_funcs_with_args, + variables = variables, + module_sequence_number = module_sequence + ) + + return(refactored_funcs_with_args_and_vars) + } + +#Uses the function object to find the variables for it and find all the applicable variables +parse_formula_function_variables <- + function(function_list, + variables, + module_sequence_number) { + #Check which rows contain the module currently being ran + affected_rows <- + variables[grepl(module_sequence_number, variables[[pkg.globals$columnNames.Operations]]), ] + + #Check the additional params for the operations and add to function + for (current_func_name in names(function_list)) { + if (current_func_name %in% colnames(affected_rows)) { + columns_to_check <- + affected_rows[affected_rows[[current_func_name]] != FALSE, c(current_func_name, pkg.globals$columnNames.Variable)] + + for (row in 1:nrow(columns_to_check)) { + function_list[[current_func_name]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columns_to_check[row, pkg.globals$columnNames.Variable])]] <- + columns_to_check[row, current_func_name] + } + + } else{ + warning( + paste( + "Requested function", + current_func_name, + "is not present in variables please verify the function name is correct" + ), + call. = FALSE + ) + } + } + #Create new functions in case of additional params being there + function_list <- create_exact_function(function_list) + + return(function_list) + } + +#Uses the function objects to create a recipy +create_formula_recipy <- + function(function_object_list, + working_data, + variables) { + # Check variable roles for the recipy creation + # TODO bllflow support make this add to overall recipy + outcome_variable <- + as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome", pkg.globals$argument.Variables]) + # TODO add a function for creating a proper formula + recipe_formula <- paste(outcome_variable, "~ .") + + recipy_object <- + recipes::recipe(formula = recipe_formula, + data = working_data, + x = working_data) + + for (single_function in names(function_object_list)) { + step_formula <- create_formula_variable_formula(function_object_list[[single_function]]) + step_name <- paste("step_", single_function, sep = "") + recipy_object <- + do.call(get(step_name), list(recipe = recipy_object, rlang::parse_expr(unlist(step_formula)))) + } + recipy_object <- + recipes::prep(recipy_object, training = working_data) + + return(recipy_object) + } + +#Function for creating formula for variable selection +create_formula_variable_formula <- function(functions) { + return_formula <- list() + for (variable in names(functions[[pkg.globals$FunctionList.VariableArguments]])) { + return_formula <- append(return_formula, paste(variable, functions[[pkg.globals$FunctionList.Arguments]], ",",sep = "")) + } + return_formula[[length(return_formula)]] <- stringr::str_sub(return_formula[[length(return_formula)]], end = -2) + return(return_formula) +} \ No newline at end of file diff --git a/R/strings.R b/R/strings.R index 32cd5fee..cb95bf33 100644 --- a/R/strings.R +++ b/R/strings.R @@ -91,6 +91,13 @@ pkg.globals$LongTable.LongTable <- "summaryData" # Module Column names pkg.globals$Modules.DefaultOrder <- "DefaultOrder" +pkg.globals$Modules.ModuleID <- "ModuleID" +pkg.globals$Modules.OperationsType <- "OperationsType" + +# Module Types +pkg.globals$ModuleTypes.FormulaStep <- "step_with_formula" +pkg.globals$ModuleTypes.DefaultStep <- "step" +pkg.globals$ModuleTypes.Function <- "function" # WorkingData contents pkg.globals$WorkingData.ModuleSequenceNumber <- "moduleSequenceNumber" From 97ab811f4e0f3784a9486734dbdacf6c22315cc9 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 6 Feb 2020 09:38:13 -0500 Subject: [PATCH 074/123] [Feature] Added proper run_module bllflow return --- NAMESPACE | 2 + R/bll-flow.R | 3 +- R/module-instruction-parsing.R | 16 ++++++-- R/step_apply_missing_tagged_na.R | 64 ++++++++++++++++++++++++++++++++ R/strings.R | 6 ++- R/table-one-long.R | 4 +- 6 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 R/step_apply_missing_tagged_na.R diff --git a/NAMESPACE b/NAMESPACE index 9a253984..b221798f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) +S3method(bake,step_apply_missing_tagged_na) S3method(bake,step_meantest) S3method(bake,step_rcs) S3method(bake,step_tagged_naomit) @@ -14,6 +15,7 @@ S3method(clean_min,BLLFlow) S3method(create_variable_details_template,BLLFlow) S3method(get_variables,BLLFlow) S3method(get_variables,default) +S3method(prep,step_apply_missing_tagged_na) S3method(prep,step_meantest) S3method(prep,step_rcs) S3method(prep,step_tagged_naomit) diff --git a/R/bll-flow.R b/R/bll-flow.R index 6c61435a..58d8b28e 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -108,7 +108,7 @@ build_bllflow <- # TODO Add Verification for modules bll_flow_model <- list( - data = data, + previous_module_data = data, working_data = data, variables = variables, variable_details = variable_details, @@ -119,6 +119,7 @@ build_bllflow <- ) attr(bll_flow_model, "class") <- "BLLFlow" + attr(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], pkg.globals$bllFlowContent.Sequence) <- 0 return(bll_flow_model) } diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 2d751705..27e056ab 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -2,12 +2,12 @@ verify_data_and_sequence_match <- function(module_sequence_number, data) { if (module_sequence_number[[1]] == 1 && - "working_data" %in% class(data)) { + attr(data, pkg.globals$bllFlowContent.Sequence) != 0) { stop( "Working data was passed when sequance is at step 1. Make sure to pass the starting data. Aborting operation!" ) - } else if (!"working_data" %in% class(data)) { + } else if (attr(data, pkg.globals$bllFlowContent.Sequence) == 0) { if (module_sequence_number[[1]] != 1) { stop( paste( @@ -18,7 +18,7 @@ verify_data_and_sequence_match <- ) ) } - } else if (attr(data, pkg.globals$WorkingData.ModuleSequenceNumber) + 1 != module_sequence_number[[1]]) { + } else if (attr(data, pkg.globals$bllFlowContent.Sequence) + 1 != module_sequence_number[[1]]) { stop( paste( "The WorkingData passed is not from the previous module please verify that the data passed is from module", @@ -37,6 +37,8 @@ run_module <- function(x, ...) { #' @export run_module.BLLFlow <- function(bll_model, module_sequence_number) { + #pkg.globals$bllFlowContent.PreviousData + processed_data <- run_module.default( variables = bll_model$variables, @@ -45,6 +47,9 @@ run_module.BLLFlow <- function(bll_model, module_sequence_number) { module_sequence_number = module_sequence_number, variable_details = bll_model$variable_details ) + bll_model[[pkg.globals$bllFlowContent.PreviousData]] <- processed_data[[2]] + bll_model[[pkg.globals$bllFlowContent.WorkingData]] <- processed_data[[1]] + return(bll_model) } #' @export @@ -71,8 +76,10 @@ run_module.default <- verify_data_and_sequence_match(module_sequence_number, data) processed_data <- data + previous_data <- NULL # Find type of module and execute the right call for (sequence_element in module_sequence_number) { + previous_data <- processed_data type_of_module <- modules[modules[[pkg.globals$Modules.DefaultOrder]] == sequence_element, pkg.globals$Modules.OperationsType] if (type_of_module == pkg.globals$ModuleTypes.DefaultStep) { @@ -94,9 +101,10 @@ run_module.default <- variables, variable_details) } + attr(processed_data, pkg.globals$bllFlowContent.Sequence) <- sequence_element } # Find type of module and execute the right call - return(processed_data) + return(list(processed_data,previous_data)) } diff --git a/R/step_apply_missing_tagged_na.R b/R/step_apply_missing_tagged_na.R new file mode 100644 index 00000000..ea208f06 --- /dev/null +++ b/R/step_apply_missing_tagged_na.R @@ -0,0 +1,64 @@ +step_apply_missing_tagged_na <- function(recipe, + ..., + role = NA, + trained = FALSE, + columns = NULL, + tag_type = NULL, + skip = FALSE, + id = recipes::rand_id("apply_missing_tagged_na")) { + recipes::add_step( + recipe, + step_apply_missing_tagged_na_new( + terms = recipes::ellipse_check(...), + role = role, + trained = trained, + columns = columns, + tag_type = trimws(tag_type), + skip = skip, + id = id + ) + ) +} + +step_apply_missing_tagged_na_new <- + function(terms, role, trained, columns, tag_type, skip, id) { + step( + subclass = "apply_missing_tagged_na", + terms = terms, + role = role, + trained = trained, + columns = columns, + tag_type = tag_type, + skip = skip, + id = id + ) + } + +#' @export +prep.step_apply_missing_tagged_na <- function(x, training, info = NULL, ...) { + step_apply_missing_tagged_na_new( + terms = x$terms, + role = x$role, + trained = TRUE, + columns = recipes::terms_select(x$terms, info = info), + tag_type = x$tag_type, + skip = x$skip, + id = x$id + ) +} + +#' @export +bake.step_apply_missing_tagged_na <- function(object, new_data, ...) { + for (variable in object$columns) { + NA_index <- is.na(new_data[[variable]]) + tagged_NA_index <- haven::is_tagged_na(new_data[[variable]]) + true_NA_index <- !(NA_index == tagged_NA_index) + if (is.numeric(new_data[[variable]])) { + new_data[true_NA_index, variable] <- + haven::tagged_na(object$tag_type) + }else{ + new_data[true_NA_index, variable] <- paste("NA(",object$tag_type,")",sep = "") + } + } + tibble::as.tibble(new_data) +} diff --git a/R/strings.R b/R/strings.R index cb95bf33..caea3eb0 100644 --- a/R/strings.R +++ b/R/strings.R @@ -40,14 +40,16 @@ pkg.globals$ddiValueName.Cat <- "cat" pkg.globals$ddiValueName.Categorical <- "Categorical" # BLLFlow object content -pkg.globals$bllFlowContent.Data <- "data" +pkg.globals$bllFlowContent.Data <- "working_data" pkg.globals$bllFlowContent.Variables <- "variables" pkg.globals$bllFlowContent.VariableDetails <- "variableDetails" pkg.globals$bllFlowContent.PopulatedVariableDetails <- "populatedVariableDetails" pkg.globals$bllFlowContent.DDI <- "ddiList" pkg.globals$bllFlowContent.LongTable <- "longTable" pkg.globals$bllFlowContent.AdditionalMetaData <- "additionalDDIMetaData" -pkg.globals$bllFlowContent.WorkingData <- "workingData" +pkg.globals$bllFlowContent.WorkingData <- "working_data" +pkg.globals$bllFlowContent.PreviousData <- "previous_module_data" +pkg.globals$bllFlowContent.Sequence <- "sequence_number" # MSW Column Names pkg.globals$MSW.Variables.Columns.Variable <- "variable" diff --git a/R/table-one-long.R b/R/table-one-long.R index 9cf8b60d..f527f620 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -115,11 +115,11 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, bll_flow_model[[pkg.globals$bllFlowContent.Variables]] if (is.null(vars)) { vars <- - as.character(bll_flow_model[[pkg.globals$bllFlowContent.Variables]][, pkg.globals$MSW.Variables.Columns.Variable]) + as.character(variables_sheet[[pkg.globals$MSW.Variables.Columns.Variable]]) } if (is.null(factor_vars)) { factor_vars <- - as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable]) + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable][[pkg.globals$MSW.Variables.Columns.Variable]]) } # ----Step 2: Create the tableone ---- From 54e16bec2e9a9a1c60fed8e33f6c61d8b3a30d14 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Fri, 7 Feb 2020 08:44:02 -0500 Subject: [PATCH 075/123] [Feature] Role selection for table one --- R/table-one-long.R | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/R/table-one-long.R b/R/table-one-long.R index f527f620..7e651391 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -109,13 +109,19 @@ CreateTableOne <- function(x = NULL, ...) { CreateTableOne.BLLFlow <- function(bll_flow_model, vars = NULL, strata = NULL, - factor_vars = NULL) { + factor_vars = NULL, + select_role = NULL) { # ----Step 1: pull from variables in bll_flow_model ---- variables_sheet <- bll_flow_model[[pkg.globals$bllFlowContent.Variables]] if (is.null(vars)) { - vars <- - as.character(variables_sheet[[pkg.globals$MSW.Variables.Columns.Variable]]) + if (is.null(select_role)) { + vars <- + as.character(variables_sheet[[pkg.globals$MSW.Variables.Columns.Variable]]) + }else { + vars <- + as.character(variables_sheet[variables_sheet[[pkg.globals$argument.Role]] == select_role, pkg.globals$MSW.Variables.Columns.Variable]) + } } if (is.null(factor_vars)) { factor_vars <- From fffc13d06151a5722949f926ccc0a4178eb43360 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 10 Feb 2020 11:18:56 -0500 Subject: [PATCH 076/123] [Bug] Fixed non tibble vars select --- R/table-one-long.R | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/R/table-one-long.R b/R/table-one-long.R index 7e651391..9949854c 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -124,8 +124,13 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, } } if (is.null(factor_vars)) { - factor_vars <- - as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable][[pkg.globals$MSW.Variables.Columns.Variable]]) + if (is.null(select_role)) { + factor_vars <- + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable]) + }else { + factor_vars <- + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) && variables_sheet[[pkg.globals$argument.Role]] == select_role , pkg.globals$MSW.Variables.Columns.Variable]) + } } # ----Step 2: Create the tableone ---- From 42ce3bc9eade499e0cfd75a187f749085f40c3c5 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 10 Feb 2020 14:13:20 -0500 Subject: [PATCH 077/123] [Bug] Fixed white space issue --- R/table-one-long.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/table-one-long.R b/R/table-one-long.R index 9949854c..f7205f81 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -120,8 +120,9 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, as.character(variables_sheet[[pkg.globals$MSW.Variables.Columns.Variable]]) }else { vars <- - as.character(variables_sheet[variables_sheet[[pkg.globals$argument.Role]] == select_role, pkg.globals$MSW.Variables.Columns.Variable]) + as.character(variables_sheet[grepl(select_role,variables_sheet[[pkg.globals$argument.Role]]), pkg.globals$MSW.Variables.Columns.Variable]) } + vars <- trimws(vars) } if (is.null(factor_vars)) { if (is.null(select_role)) { @@ -129,8 +130,9 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable]) }else { factor_vars <- - as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) && variables_sheet[[pkg.globals$argument.Role]] == select_role , pkg.globals$MSW.Variables.Columns.Variable]) + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) && grepl(select_role,variables_sheet[[pkg.globals$argument.Role]]) , pkg.globals$MSW.Variables.Columns.Variable]) } + factor_vars <- trimws(factor_vars) } # ----Step 2: Create the tableone ---- From 9a2a0d1981f10e4426d47f26b4677ba4c431d4bd Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 11 Feb 2020 13:29:09 -0500 Subject: [PATCH 078/123] [Bug] Accounted for multiple roles --- R/default_step_parsing.R | 2 +- R/step_with_formula_parsing.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/default_step_parsing.R b/R/default_step_parsing.R index 54524d44..1ea09c27 100644 --- a/R/default_step_parsing.R +++ b/R/default_step_parsing.R @@ -137,7 +137,7 @@ create_recipy <- # Check variable roles for the recipy creation # TODO bllflow support make this add to overall recipy outcome_variable <- - as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome", pkg.globals$argument.Variables]) + as.character(variables[grepl( "outcome", variables[[pkg.globals$argument.Role]]), pkg.globals$argument.Variables]) # TODO add a function for creating a proper formula recipe_formula <- paste(outcome_variable, "~ .") diff --git a/R/step_with_formula_parsing.R b/R/step_with_formula_parsing.R index 1890c97b..3cbe9576 100644 --- a/R/step_with_formula_parsing.R +++ b/R/step_with_formula_parsing.R @@ -108,7 +108,7 @@ create_formula_recipy <- # Check variable roles for the recipy creation # TODO bllflow support make this add to overall recipy outcome_variable <- - as.character(variables[variables[[pkg.globals$argument.Role]] == "outcome", pkg.globals$argument.Variables]) + as.character(variables[grepl( "outcome", variables[[pkg.globals$argument.Role]]), pkg.globals$argument.Variables]) # TODO add a function for creating a proper formula recipe_formula <- paste(outcome_variable, "~ .") From d051685ea265221dc07d0833f2ad93ea0b95cf27 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 11 Feb 2020 14:48:03 -0500 Subject: [PATCH 079/123] [Bug] levels mismatch fix --- R/step_apply_missing_tagged_na.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/step_apply_missing_tagged_na.R b/R/step_apply_missing_tagged_na.R index ea208f06..6d7cc5f5 100644 --- a/R/step_apply_missing_tagged_na.R +++ b/R/step_apply_missing_tagged_na.R @@ -57,7 +57,10 @@ bake.step_apply_missing_tagged_na <- function(object, new_data, ...) { new_data[true_NA_index, variable] <- haven::tagged_na(object$tag_type) }else{ - new_data[true_NA_index, variable] <- paste("NA(",object$tag_type,")",sep = "") + if (!paste("NA(", object$tag_type, ")", sep = "") %in% levels(new_data[[variable]])) { + levels(new_data[[variable]]) <- c(levels(new_data[[variable]]), paste("NA(", object$tag_type, ")", sep = "")) + } + new_data[true_NA_index, variable] <- paste("NA(", object$tag_type, ")", sep = "") } } tibble::as.tibble(new_data) From ce8bf17d092f1a8c507d591b1f3608d98216d4c7 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Wed, 12 Feb 2020 16:14:56 -0500 Subject: [PATCH 080/123] [Feature] Added labels to tableOne --- NAMESPACE | 3 + R/label-utils.R | 122 ++++++++++++++++++++++++++------- R/module-instruction-parsing.R | 2 + R/recode-with-table.R | 26 ++++--- 4 files changed, 117 insertions(+), 36 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index b221798f..37d1cfe1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -58,4 +58,7 @@ importFrom(dplyr,rowwise) importFrom(dplyr,select) importFrom(haven,tagged_na) importFrom(magrittr,"%>%") +importFrom(sjlabelled,"set_label<-") +importFrom(sjlabelled,set_label) +importFrom(sjlabelled,set_labels) importFrom(stringr,str_match) diff --git a/R/label-utils.R b/R/label-utils.R index a6def3d8..606fcf51 100644 --- a/R/label-utils.R +++ b/R/label-utils.R @@ -1,3 +1,40 @@ +#' @title Set Data Labels +#' @description sets labels for passed database, Uses the names of final +#' variables in variable_details/variables_sheet as well as the labels contained +#' in the passed dataframes +#' +#' @param data_to_label newly transformed dataset +#' @param variable_details variable_details.csv +#' @param variables_sheet variables.csv +#' +#' @return labeled data_to_label +#' +#' @examples +#' library(cchsflow) +#' library(sjlabelled) +#' bmi2010 <- rec_with_table( +#' cchs2010_p, c( +#' "HWTGHTM", +#' "HWTGWTK", "HWTGBMI_der" +#' ) +#' ) +#' +#' bmi2012 <- rec_with_table( +#' cchs2012_p, c( +#' "HWTGHTM", +#' "HWTGWTK", "HWTGBMI_der" +#' ) +#' ) +#' +#' combined_bmi <- bind_rows(bmi2010, bmi2012) +#' +#' get_label(combined_bmi) +#' +#' labeled_combined_data <- set_data_labels(combined_bmi, +#' variable_details, +#' variables) +#' +#' get_label(labeled_combined_data) #' @export set_data_labels <- function(data_to_label, @@ -7,22 +44,36 @@ set_data_labels <- variable_names <- unique(colnames(data_to_label)) # extract only relevant variable info if (!is.null(variable_details)) { + variable_details[[pkg.globals$argument.Variables]] <- sapply( + variable_details[[pkg.globals$argument.Variables]], trimws) variable_details <- - variable_details[variable_details[[pkg.globals$argument.Variables]] %in% variable_names,] - if (is.null(variables_sheet)){ + variable_details[variable_details[[pkg.globals$argument.Variables]] + %in% variable_names, ] + if (is.null(variables_sheet)) { variable_details[[pkg.globals$MSW.Variables.Columns.Label]] <- NA - variable_details[[pkg.globals$MSW.Variables.Columns.LabelLong]] <- NA + variable_details[[pkg.globals$MSW.Variables.Columns.LabelLong]] <- + NA } } if (!is.null(variables_sheet)) { + variables_sheet[[pkg.globals$argument.Variables]] <- sapply( + variables_sheet[[pkg.globals$argument.Variables]], trimws) variables_sheet <- - variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% variable_names,] - variable_details <- UpdateVariableDetailsBasedOnVariableSheet(variableSheet = variables_sheet, variable_details = variable_details) + variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% + variable_names, ] + variable_details <- + update_variable_details_based_on_variable_sheet( + variable_sheet = variables_sheet, + variable_details = variable_details + ) } label_list <- NULL for (variable_name in variable_names) { - rows_to_process <- variable_details[variable_details[[pkg.globals$argument.Variables]] == variable_name,] - label_list[[variable_name]] <- create_label_list_element(rows_to_process) + rows_to_process <- + variable_details[variable_details[[ + pkg.globals$argument.Variables]] == variable_name, ] + label_list[[variable_name]] <- + create_label_list_element(rows_to_process) } data_to_label <- label_data(label_list, data_to_label) @@ -48,10 +99,11 @@ create_label_list_element <- function(variable_rows) { ret_list$label <- as.character(first_row[[pkg.globals$argument.VariableLabelShort]]) if (is_equal(ret_list$type, pkg.globals$ddiValueName.Cat)) { - for (row_index in 1:nrow(variable_rows)) { + for (row_index in seq_len(nrow(variable_rows))) { single_row <- variable_rows[row_index, ] # Verify type stays the same - if (!is_equal(ret_list$type, as.character(single_row[[pkg.globals$argument.ToType]]))) { + if (!is_equal(ret_list$type, + as.character(single_row[[pkg.globals$argument.ToType]]))) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -62,7 +114,8 @@ create_label_list_element <- function(variable_rows) { ) } # Verify unit is identical - if (!is_equal(ret_list$unit, as.character(single_row[[pkg.globals$argument.Units]]))) { + if (!is_equal(ret_list$unit, + as.character(single_row[[pkg.globals$argument.Units]]))) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -73,8 +126,10 @@ create_label_list_element <- function(variable_rows) { ) } # Verify variable label is identical - if (!is_equal(ret_list$label_long, - as.character(single_row[[pkg.globals$argument.VariableLabel]]))) { + if (!is_equal( + ret_list$label_long, + as.character(single_row[[pkg.globals$argument.VariableLabel]]) + )) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -87,11 +142,15 @@ create_label_list_element <- function(variable_rows) { ) ) } - value_being_labeled <- as.character(single_row[[pkg.globals$argument.CatValue]]) - value_being_labeled <- recode_variable_NA_formating(value_being_labeled, ret_list$type) - ret_list$values[[as.character(single_row[[pkg.globals$argument.CatLabel]])]] <- + value_being_labeled <- + as.character(single_row[[pkg.globals$argument.CatValue]]) + value_being_labeled <- + recode_variable_NA_formating(value_being_labeled, ret_list$type) + ret_list$values[[as.character(single_row[[ + pkg.globals$argument.CatLabel]])]] <- value_being_labeled - ret_list$values_long[[as.character(single_row[[pkg.globals$argument.CatLabelLong]])]] <- + ret_list$values_long[[as.character(single_row[[ + pkg.globals$argument.CatLabelLong]])]] <- value_being_labeled } } @@ -99,34 +158,45 @@ create_label_list_element <- function(variable_rows) { return(ret_list) } -#' label_data +#' @title label_data #' -#' Attaches labels to the DataToLabel to preserve metadata +#' @description Attaches labels to the DataToLabel to preserve metadata #' -#' @param label_list the label list object that contains extracted labels from variable details +#' @param label_list the label list object that contains extracted labels +#' from variable details #' @param data_to_label The data that is to be labeled +#' @importFrom sjlabelled set_labels set_label set_label<- #' #' @return Returns labeled data label_data <- function(label_list, data_to_label) { for (variable_name in names(label_list)) { + if (is.na(label_list[[variable_name]]$type)) { + warning(paste(variable_name, + "is missing from variable_details or variables + (if it was also passed) please verify correct spelling")) + next() + } if (label_list[[variable_name]]$type == pkg.globals$argument.CatType) { if (class(data_to_label[[variable_name]]) != "factor") { - data_to_label[[variable_name]] <- factor(data_to_label[[variable_name]]) + data_to_label[[variable_name]] <- + factor(data_to_label[[variable_name]]) } data_to_label[[variable_name]] <- - sjlabelled::set_labels(data_to_label[[variable_name]], labels = label_list[[variable_name]]$values) + set_labels(data_to_label[[variable_name]], + labels = label_list[[variable_name]]$values) attr(data_to_label[[variable_name]], "labels_long") <- label_list[[variable_name]]$values_long - } else{ + } else { if (class(data_to_label[[variable_name]]) == "factor") { data_to_label[[variable_name]] <- - as.numeric(levels(data_to_label[[variable_name]])[data_to_label[[variable_name]]]) - } else{ + as.numeric(levels(data_to_label[[variable_name]]) + [data_to_label[[variable_name]]]) + } else { data_to_label[[variable_name]] <- as.numeric(data_to_label[[variable_name]]) } } - sjlabelled::set_label(data_to_label[[variable_name]]) <- + set_label(data_to_label[[variable_name]]) <- label_list[[variable_name]]$label attr(data_to_label[[variable_name]], "unit") <- label_list[[variable_name]]$unit @@ -135,4 +205,4 @@ label_data <- function(label_list, data_to_label) { } return(data_to_label) -} + } diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 27e056ab..8e9f4f61 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -47,6 +47,8 @@ run_module.BLLFlow <- function(bll_model, module_sequence_number) { module_sequence_number = module_sequence_number, variable_details = bll_model$variable_details ) + processed_data[[1]] <- as.data.frame(processed_data[[1]]) + processed_data[[1]] <- set_data_labels(processed_data[[1]], bll_model$variable_details, bll_model$variables) bll_model[[pkg.globals$bllFlowContent.PreviousData]] <- processed_data[[2]] bll_model[[pkg.globals$bllFlowContent.WorkingData]] <- processed_data[[1]] return(bll_model) diff --git a/R/recode-with-table.R b/R/recode-with-table.R index f7a95006..5cb51701 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -114,7 +114,7 @@ is_equal <- function(v1, v2) { #' will be appended to the data. #' @param log Logical, if \code{FALSE} (default), a log of recoding will #' not be printed. -#' @param print_note Logical, if \code{FALSE} (default), will not print the +#' @param notes Logical, if \code{FALSE} (default), will not print the #' content inside the `Note`` column of the variable being recoded. #' @param var_labels labels vector to attach to variables in variables #' @param custom_function_path path to location of the function to load @@ -124,7 +124,7 @@ is_equal <- function(v1, v2) { #' @examples #' library(cchsflow) #' bmi2010 <- rec_with_table( -#' data = cchs2010, c( +#' data = cchs2010_p, c( #' "HWTGHTM", #' "HWTGWTK", "HWTGBMI_der" #' ) @@ -133,7 +133,7 @@ is_equal <- function(v1, v2) { #' head(bmi2010) #' #' bmi2012 <- rec_with_table( -#' data = cchs2012, c( +#' data = cchs2012_p, c( #' "HWTGHTM", #' "HWTGWTK", "HWTGBMI_der" #' ) @@ -158,7 +158,7 @@ rec_with_table <- else_value = NA, append_to_data = FALSE, log = FALSE, - print_note = TRUE, + notes = TRUE, var_labels = NULL, custom_function_path = NULL) { # If custom Functions are passed create new environment and source @@ -189,7 +189,7 @@ rec_with_table <- variables = variables, data = data[[data_name]], database_name = database_name, - print_note = print_note, + print_note = notes, else_value = else_value, variable_details = variable_details, append_to_data = append_to_data, @@ -214,7 +214,7 @@ rec_with_table <- variables = variables, data = data, database_name = database_name, - print_note = print_note, + print_note = notes, else_value = else_value, variable_details = variable_details, append_to_data = append_to_data, @@ -439,7 +439,7 @@ recode_columns <- # Set interval if none is present interval_present <- TRUE valid_intervals <- c("[,]", "[,)", "(,]") - interval_default <- "[,)" + interval_default <- "[,]" recoded_data <- data[, 0] if (is.null(rec_variables_to_process[[pkg.globals$argument.Interval]])) { interval_present <- FALSE @@ -626,8 +626,8 @@ recode_columns <- !is.null(row_being_checked[[pkg.globals$argument.Notes]]) && !is_equal(row_being_checked[[pkg.globals$argument.Notes]], "") && !is.na(row_being_checked[[pkg.globals$argument.Notes]])) { - message("NOTE for", variable_being_checked, - ":", + message("NOTE for ", variable_being_checked, + ": ", as.character(row_being_checked[[ pkg.globals$argument.Notes]])) } @@ -913,8 +913,14 @@ recode_derived_variables <- custom_function_name = function_being_used ) ) + # Set type of var + if(as.character(row_being_checked[[pkg.globals$argument.ToType]]) != pkg.globals$argument.CatType) { + column_value <- as.numeric(unlist(column_value[["column_being_added"]])) + }else{ + column_value <- as.factor(unlist(column_value[["column_being_added"]])) + } recoded_data[[variable_being_processed]] <- - unlist(column_value[["column_being_added"]]) + column_value var_stack <- var_stack[!(var_stack == variable_being_processed)] From cdab001326f50ad1e143ffabacd3d9b142df32cc Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Thu, 13 Feb 2020 11:25:10 -0500 Subject: [PATCH 081/123] [Feature] Additional params for CreateTableOne are passed to tableOne --- R/table-one-long.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/table-one-long.R b/R/table-one-long.R index f7205f81..91d2a2e0 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -110,7 +110,7 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, vars = NULL, strata = NULL, factor_vars = NULL, - select_role = NULL) { + select_role = NULL,...) { # ----Step 1: pull from variables in bll_flow_model ---- variables_sheet <- bll_flow_model[[pkg.globals$bllFlowContent.Variables]] @@ -140,14 +140,14 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, final_table <- tableone::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], vars = vars, - factorVars = factor_vars) + factorVars = factor_vars,...) } else{ final_table <- tableone::CreateTableOne( data = bll_flow_model[[pkg.globals$bllFlowContent.Data]], vars = vars, factorVars = factor_vars, - strata = strata + strata = strata,... ) } From 3aacf2f347c730621a12940c08d1b83e651a5d0e Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 18 Feb 2020 11:56:24 -0500 Subject: [PATCH 082/123] [Test] Testing tableone added features --- DESCRIPTION | 2 +- R/table-one-long.R | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d9a1a125..c151ba37 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,7 +23,7 @@ Authors@R: c( email = "mtuna@ohri.ca", role = c("aut"))) Depends: R (>= 3.2), - tableone, + tableoneTEST, DDIwR, xml2, stringr, diff --git a/R/table-one-long.R b/R/table-one-long.R index 91d2a2e0..b19f17f2 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -138,12 +138,12 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, # ----Step 2: Create the tableone ---- if (is.null(strata)) { final_table <- - tableone::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], + tableoneTEST::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], vars = vars, factorVars = factor_vars,...) } else{ final_table <- - tableone::CreateTableOne( + tableoneTEST::CreateTableOne( data = bll_flow_model[[pkg.globals$bllFlowContent.Data]], vars = vars, factorVars = factor_vars, From 5c3105c32bf07afe5979039e826dbe399ee2e304 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Wed, 19 Feb 2020 16:15:33 -0500 Subject: [PATCH 083/123] [Feature] Slight Bloat reduction and commenting out of old/depricated function --- DESCRIPTION | 2 +- NAMESPACE | 2 - R/apply_missing_tagged_na.R | 41 +- R/clean.R | 475 +++++++++++----------- R/create-reference.R | 161 ++++---- R/ddi-utils.R | 531 ++++++++++++------------- R/function_parsing.R | 41 +- R/log-function-activity.R | 139 +++---- R/print-metadata-log.R | 75 ++-- R/rcs2.R | 129 ------ R/recipy-utility.R | 33 +- R/small-cell-check.R | 503 ++++++++++++------------ R/step-function-recoding.R | 181 --------- R/step_apply_missing_tagged_na.R | 67 ---- R/step_naomit.R | 119 ------ R/step_rcs.R | 302 -------------- R/step_with_formula_parsing.R | 1 + R/step_z.R | 114 ------ R/strings.R | 1 + R/table-one-long.R | 651 ++++++++++++++++--------------- R/util-funcs.R | 152 ++++---- 21 files changed, 1412 insertions(+), 2308 deletions(-) delete mode 100644 R/rcs2.R delete mode 100644 R/step-function-recoding.R delete mode 100644 R/step_apply_missing_tagged_na.R delete mode 100644 R/step_naomit.R delete mode 100644 R/step_rcs.R delete mode 100644 R/step_z.R diff --git a/DESCRIPTION b/DESCRIPTION index c151ba37..d9a1a125 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,7 +23,7 @@ Authors@R: c( email = "mtuna@ohri.ca", role = c("aut"))) Depends: R (>= 3.2), - tableoneTEST, + tableone, DDIwR, xml2, stringr, diff --git a/NAMESPACE b/NAMESPACE index 37d1cfe1..79084f2e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -39,7 +39,6 @@ export(get_DDI_variables) export(get_recipy) export(get_variables) export(is_equal) -export(rcs2) export(read_DDI) export(read_data) export(rec_with_table) @@ -50,7 +49,6 @@ export(step_meantest) export(step_rcs) export(step_tagged_naomit) export(step_z) -export(summary_data_long) export(update_MSW) export(write_DDI_populated_MSW) importFrom(dplyr,do) diff --git a/R/apply_missing_tagged_na.R b/R/apply_missing_tagged_na.R index ffdfb9a3..a2a5fffc 100644 --- a/R/apply_missing_tagged_na.R +++ b/R/apply_missing_tagged_na.R @@ -1,20 +1,21 @@ -#' Apply missing tagged NA -#' -#' Any non tagged NA has the passed tag applied to them this helps tag NA that -#' were added by other packages -#' -#' @param data -#' @param variables -#' @param tag_type -#' -#' @return passed data with non tagged NA now having the tag_type applied -#' @export -apply_missing_tagged_na <- function(data, variables, tag_type){ - for (variable in variables){ - NA_index <- is.na(data[[variable]]) - tagged_NA_index <- haven::is_tagged_na(data[[variable]]) - true_NA_index <- !(NA_index == tagged_NA_index) - data[true_NA_index, variable] <- haven::tagged_na(tag_type) - } - return(data) -} \ No newline at end of file +# ---------- DEPRECATED SEE BLLFLOWRECIPES FOR NEW VERSION ---------- +#' #' Apply missing tagged NA +#' #' +#' #' Any non tagged NA has the passed tag applied to them this helps tag NA that +#' #' were added by other packages +#' #' +#' #' @param data +#' #' @param variables +#' #' @param tag_type +#' #' +#' #' @return passed data with non tagged NA now having the tag_type applied +#' #' @export +#' apply_missing_tagged_na <- function(data, variables, tag_type){ +#' for (variable in variables){ +#' NA_index <- is.na(data[[variable]]) +#' tagged_NA_index <- haven::is_tagged_na(data[[variable]]) +#' true_NA_index <- !(NA_index == tagged_NA_index) +#' data[true_NA_index, variable] <- haven::tagged_na(tag_type) +#' } +#' return(data) +#' } \ No newline at end of file diff --git a/R/clean.R b/R/clean.R index f4fd242b..67129a96 100644 --- a/R/clean.R +++ b/R/clean.R @@ -1,237 +1,238 @@ -#' Clean a dataset by updating values below a certain minimum -#' -#' @param bll_flow_model The bllflow model we will clean -#' @param ... Arguments to the next method in the chain -#' -#' @export -clean_min <- function(bll_flow_model, ...) { - UseMethod("clean_min") -} - -#' @describeIn clean_min Cleans the data using the min and outlier columns in the variables sheet of -#' the MSW. Outlier method is applied on a row if any of the variable -#' values for that row is less than the min value as specified in the variables -#' sheet. Outlier checking for the column is not applied if min value is NA. -#' -#' Currently supported outlier methods are: \cr -#' 1. \strong{Delete} - Specified as 'delete' in MSW. Deletes the row from the data. \cr -#' number of deleted rows as well as their reason for deletion is stored in the -#' metaData variable under the deletedRows name. \cr -#' 2. \strong{Missing} - Specified as 'missing' in MSW. Column value for that row which does -#' not meet the criteria is set to NA. \cr -#' 3. \strong{Not Applicable} - TODO. \cr -#' 4. \strong{Set to value} - Specified as a number value in MSW. Column value for the row is -#' set to the value specified in the outlier column. -#' -#' @param print A boolean which when set to TRUE prints logs of what the operation did -#' -#' @return A bllflow named list whose dataset was cleaned -#' @export -#' -#' @examples -#' # Load packages -#' library(survival) -#' library(bllflow) -#' -#' # Read in the data we will use -#' data(pbc) -#' -#' # Read in the MSW and variable_details sheet for the PBC model -#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetailsSheet <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' -#' # Create a bllFlow R object for the PBC model using the above variables as args -#' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) -#' -#' # Clean the data -#' cleanedPbcModel <- bllflow::clean_min(pbcModel) -#' -#' # If you wish to be updated in the log on what the function does set print to true -#' cleanedPbcModel <- bllflow::clean_min(cleanedPbcModel, print=TRUE) -#' -clean_min.BLLFlow <- function(bll_flow_model, print = FALSE, ...) { - bll_flow_model <- - process_min_or_max(bll_flow_model, - pkg.globals$columnNames.Min, - print, - check_less_then) - - return(bll_flow_model) -} - -# Less then comparing function -check_less_then <- - function(operator_based_compare_value, - value_being_compare) { - return(operator_based_compare_value < value_being_compare) - } - -#' Cleans a dataset by updating values above a certain maximum -#' -#' @param bll_flow_model The bll_flow_model we will clean -#' @param ... Arguments to the next method in the chain -#' -#' @export -clean_max <- function(bll_flow_model, ...) { - UseMethod("clean_max") -} - -#' @describeIn clean_max Cleans the data using the max and outlier columns in the variables sheet of -#' the MSW. Outlier method is applied on a row if any of the variable -#' values for that row is greater than the max value as specified in the variables -#' sheet. Outlier checking for the column is not applied if max value is NA. -#' -#' Currently supported outlier methods are: \cr -#' \strong{Delete} - Specified as 'delete' in MSW. Deletes the row from the data. -#' Deleted rows are stored in the metadata variable under the deletedRows name. \cr -#' \strong{Missing} - Specified as 'missing' in MSW. Column value for that row which does -#' not meet the criteria is set to NA. \cr -#' \strong{Not Applicable} - TODO \cr -#' \strong{Set to value} - Specified as a number value in MSW. Column value for the row is -#' set to the value specified in the outlier column. -#' -#' @param print A boolean which when set to TRUE prints logs of what the operation did -#' -#' @return bll_flow_model that has had its data modified by the paramaters located in -#' the variables object -#' @export -#' -#' @examples -#' # Load packages -#' library(survival) -#' library(bllflow) -#' -#' # Read in the data we will use -#' data(pbc) -#' -#' # Read in the MSW and variable_details sheet for the PBC model -#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variableDetailsSheet <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' -#' # Create a bllFlow R object for the PBC model using the above variables as args -#' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) -#' -#' # Clean the data -#' cleanedPbcModel <- bllflow::clean_max(pbcModel) -#' -#' # If you wish to be updated in the log on what the function does set print to true -#' cleanedPbcModel <- bllflow::clean_max(cleanedPbcModel, print=TRUE) -#' -clean_max.BLLFlow <- function(bll_flow_model, print = FALSE, ...) { - bll_flow_model <- - process_min_or_max(bll_flow_model, - pkg.globals$columnNames.Max, - print, - check_greater_then) - - return(bll_flow_model) -} - -# Greater then comparing function -check_greater_then <- - function(operator_based_compare_value, - value_being_compare) { - return(operator_based_compare_value > value_being_compare) - } - -# Internal helper functions ------------------------------------------------------------------ -# Function for actually manipulating the data -process_min_or_max <- - function(bll_flow_model, - operation, - print, - perform_row_check) { - # This is to only store rows which contain instructions for the Operator - # This is done to avoid parsing through unafected variables - variables_to_check <- - apply(bll_flow_model$variables, 1, function(y) - if (!is.na(y[operation])) { - return(list( - variable = y[["variable"]], - operation = y[[operation]], - outlier = y[[pkg.globals$columnNames.Outlier]] - )) - }) - # Apply creates list of length of all rows it checks this removes the ones that had no data added - variables_to_check[sapply(variables_to_check, is.null)] <- NULL - - # Check if all the variables from variables to check exist in the data - check_for_existance_of_in_list(variables_to_check, colnames(bll_flow_model$data)) - - # Clean the affected rows - for (variable_row_being_checked in variables_to_check) { - num_total_rows <- nrow(bll_flow_model$data) - num_affected_rows <- 0 - - # Does not remove NA rows only less then or greater then - # Handling for the delete outlier - if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "delete") { - # Remove all rows that pass the rowCheck - bll_flow_model$data <- - bll_flow_model$data[!( - perform_row_check( - bll_flow_model$data[variable_row_being_checked$variable], - variable_row_being_checked$operation - ) & - !is.na(bll_flow_model$data[variable_row_being_checked$variable]) - ),] - - num_affected_rows <- - num_total_rows - nrow(bll_flow_model$data) - - # Handle missing outlier - } else if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "missing") { - # this checks how many rows contained missing before the function was ran to calculate how many were changed - num_pre_contain_rows <- - length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) - bll_flow_model$data[variable_row_being_checked$variable][perform_row_check(bll_flow_model$data[variable_row_being_checked$variable], - variable_row_being_checked$operation)] <- - NA - num_post_rows <- - length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) - num_affected_rows <- num_post_rows - num_pre_contain_rows - - # Handle the replace with outlier - } else if (!is.na(as.numeric(variable_row_being_checked[[pkg.globals$columnNames.Outlier]]))) { - # Check how many rows already contained the number that is being changed too to give exact number of changed rows - num_pre_contain_rows <- - length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) - bll_flow_model$data[variable_row_being_checked$variable][perform_row_check(bll_flow_model$data[variable_row_being_checked$variable], - variable_row_being_checked$operation)] <- - variable_row_being_checked[[pkg.globals$columnNames.Outlier]] - num_post_rows <- - length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) - num_affected_rows <- num_post_rows - num_pre_contain_rows - - # Handle non supported outlier - } else { - stop(paste( - "Unsupported outlier method ", - variable_row_being_checked[[pkg.globals$columnNames.Outlier]] - )) - } - - # Log the the activity of this outlier - bll_flow_model <- - log_function_activity( - bll_flow_model, - num_total_rows, - num_affected_rows, - variable_row_being_checked[[pkg.globals$columnNames.Outlier]], - paste( - variable_row_being_checked$variable, - " ", - operation, - " at ", - variable_row_being_checked$operation, - sep = "" - ), - paste("clean.", operation, ".BLLFlow", sep = ""), - variable_row_being_checked$variable, - variable_row_being_checked$operation, - print - ) - } - - return(bll_flow_model) - } +# ---------- DEPRECATED USE MODULES INSTEAD ---------- +#' #' Clean a dataset by updating values below a certain minimum +#' #' +#' #' @param bll_flow_model The bllflow model we will clean +#' #' @param ... Arguments to the next method in the chain +#' #' +#' #' @export +#' clean_min <- function(bll_flow_model, ...) { +#' UseMethod("clean_min") +#' } +#' +#' #' @describeIn clean_min Cleans the data using the min and outlier columns in the variables sheet of +#' #' the MSW. Outlier method is applied on a row if any of the variable +#' #' values for that row is less than the min value as specified in the variables +#' #' sheet. Outlier checking for the column is not applied if min value is NA. +#' #' +#' #' Currently supported outlier methods are: \cr +#' #' 1. \strong{Delete} - Specified as 'delete' in MSW. Deletes the row from the data. \cr +#' #' number of deleted rows as well as their reason for deletion is stored in the +#' #' metaData variable under the deletedRows name. \cr +#' #' 2. \strong{Missing} - Specified as 'missing' in MSW. Column value for that row which does +#' #' not meet the criteria is set to NA. \cr +#' #' 3. \strong{Not Applicable} - TODO. \cr +#' #' 4. \strong{Set to value} - Specified as a number value in MSW. Column value for the row is +#' #' set to the value specified in the outlier column. +#' #' +#' #' @param print A boolean which when set to TRUE prints logs of what the operation did +#' #' +#' #' @return A bllflow named list whose dataset was cleaned +#' #' @export +#' #' +#' #' @examples +#' #' # Load packages +#' #' library(survival) +#' #' library(bllflow) +#' #' +#' #' # Read in the data we will use +#' #' data(pbc) +#' #' +#' #' # Read in the MSW and variable_details sheet for the PBC model +#' #' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' #' variableDetailsSheet <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' +#' #' # Create a bllFlow R object for the PBC model using the above variables as args +#' #' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) +#' #' +#' #' # Clean the data +#' #' cleanedPbcModel <- bllflow::clean_min(pbcModel) +#' #' +#' #' # If you wish to be updated in the log on what the function does set print to true +#' #' cleanedPbcModel <- bllflow::clean_min(cleanedPbcModel, print=TRUE) +#' #' +#' clean_min.BLLFlow <- function(bll_flow_model, print = FALSE, ...) { +#' bll_flow_model <- +#' process_min_or_max(bll_flow_model, +#' pkg.globals$columnNames.Min, +#' print, +#' check_less_then) +#' +#' return(bll_flow_model) +#' } +#' +#' # Less then comparing function +#' check_less_then <- +#' function(operator_based_compare_value, +#' value_being_compare) { +#' return(operator_based_compare_value < value_being_compare) +#' } +#' +#' #' Cleans a dataset by updating values above a certain maximum +#' #' +#' #' @param bll_flow_model The bll_flow_model we will clean +#' #' @param ... Arguments to the next method in the chain +#' #' +#' #' @export +#' clean_max <- function(bll_flow_model, ...) { +#' UseMethod("clean_max") +#' } +#' +#' #' @describeIn clean_max Cleans the data using the max and outlier columns in the variables sheet of +#' #' the MSW. Outlier method is applied on a row if any of the variable +#' #' values for that row is greater than the max value as specified in the variables +#' #' sheet. Outlier checking for the column is not applied if max value is NA. +#' #' +#' #' Currently supported outlier methods are: \cr +#' #' \strong{Delete} - Specified as 'delete' in MSW. Deletes the row from the data. +#' #' Deleted rows are stored in the metadata variable under the deletedRows name. \cr +#' #' \strong{Missing} - Specified as 'missing' in MSW. Column value for that row which does +#' #' not meet the criteria is set to NA. \cr +#' #' \strong{Not Applicable} - TODO \cr +#' #' \strong{Set to value} - Specified as a number value in MSW. Column value for the row is +#' #' set to the value specified in the outlier column. +#' #' +#' #' @param print A boolean which when set to TRUE prints logs of what the operation did +#' #' +#' #' @return bll_flow_model that has had its data modified by the paramaters located in +#' #' the variables object +#' #' @export +#' #' +#' #' @examples +#' #' # Load packages +#' #' library(survival) +#' #' library(bllflow) +#' #' +#' #' # Read in the data we will use +#' #' data(pbc) +#' #' +#' #' # Read in the MSW and variable_details sheet for the PBC model +#' #' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' #' variableDetailsSheet <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' +#' #' # Create a bllFlow R object for the PBC model using the above variables as args +#' #' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variableDetailsSheet) +#' #' +#' #' # Clean the data +#' #' cleanedPbcModel <- bllflow::clean_max(pbcModel) +#' #' +#' #' # If you wish to be updated in the log on what the function does set print to true +#' #' cleanedPbcModel <- bllflow::clean_max(cleanedPbcModel, print=TRUE) +#' #' +#' clean_max.BLLFlow <- function(bll_flow_model, print = FALSE, ...) { +#' bll_flow_model <- +#' process_min_or_max(bll_flow_model, +#' pkg.globals$columnNames.Max, +#' print, +#' check_greater_then) +#' +#' return(bll_flow_model) +#' } +#' +#' # Greater then comparing function +#' check_greater_then <- +#' function(operator_based_compare_value, +#' value_being_compare) { +#' return(operator_based_compare_value > value_being_compare) +#' } +#' +#' # Internal helper functions ------------------------------------------------------------------ +#' # Function for actually manipulating the data +#' process_min_or_max <- +#' function(bll_flow_model, +#' operation, +#' print, +#' perform_row_check) { +#' # This is to only store rows which contain instructions for the Operator +#' # This is done to avoid parsing through unafected variables +#' variables_to_check <- +#' apply(bll_flow_model$variables, 1, function(y) +#' if (!is.na(y[operation])) { +#' return(list( +#' variable = y[["variable"]], +#' operation = y[[operation]], +#' outlier = y[[pkg.globals$columnNames.Outlier]] +#' )) +#' }) +#' # Apply creates list of length of all rows it checks this removes the ones that had no data added +#' variables_to_check[sapply(variables_to_check, is.null)] <- NULL +#' +#' # Check if all the variables from variables to check exist in the data +#' check_for_existance_of_in_list(variables_to_check, colnames(bll_flow_model$data)) +#' +#' # Clean the affected rows +#' for (variable_row_being_checked in variables_to_check) { +#' num_total_rows <- nrow(bll_flow_model$data) +#' num_affected_rows <- 0 +#' +#' # Does not remove NA rows only less then or greater then +#' # Handling for the delete outlier +#' if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "delete") { +#' # Remove all rows that pass the rowCheck +#' bll_flow_model$data <- +#' bll_flow_model$data[!( +#' perform_row_check( +#' bll_flow_model$data[variable_row_being_checked$variable], +#' variable_row_being_checked$operation +#' ) & +#' !is.na(bll_flow_model$data[variable_row_being_checked$variable]) +#' ),] +#' +#' num_affected_rows <- +#' num_total_rows - nrow(bll_flow_model$data) +#' +#' # Handle missing outlier +#' } else if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "missing") { +#' # this checks how many rows contained missing before the function was ran to calculate how many were changed +#' num_pre_contain_rows <- +#' length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) +#' bll_flow_model$data[variable_row_being_checked$variable][perform_row_check(bll_flow_model$data[variable_row_being_checked$variable], +#' variable_row_being_checked$operation)] <- +#' NA +#' num_post_rows <- +#' length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) +#' num_affected_rows <- num_post_rows - num_pre_contain_rows +#' +#' # Handle the replace with outlier +#' } else if (!is.na(as.numeric(variable_row_being_checked[[pkg.globals$columnNames.Outlier]]))) { +#' # Check how many rows already contained the number that is being changed too to give exact number of changed rows +#' num_pre_contain_rows <- +#' length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) +#' bll_flow_model$data[variable_row_being_checked$variable][perform_row_check(bll_flow_model$data[variable_row_being_checked$variable], +#' variable_row_being_checked$operation)] <- +#' variable_row_being_checked[[pkg.globals$columnNames.Outlier]] +#' num_post_rows <- +#' length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) +#' num_affected_rows <- num_post_rows - num_pre_contain_rows +#' +#' # Handle non supported outlier +#' } else { +#' stop(paste( +#' "Unsupported outlier method ", +#' variable_row_being_checked[[pkg.globals$columnNames.Outlier]] +#' )) +#' } +#' +#' # Log the the activity of this outlier +#' bll_flow_model <- +#' log_function_activity( +#' bll_flow_model, +#' num_total_rows, +#' num_affected_rows, +#' variable_row_being_checked[[pkg.globals$columnNames.Outlier]], +#' paste( +#' variable_row_being_checked$variable, +#' " ", +#' operation, +#' " at ", +#' variable_row_being_checked$operation, +#' sep = "" +#' ), +#' paste("clean.", operation, ".BLLFlow", sep = ""), +#' variable_row_being_checked$variable, +#' variable_row_being_checked$operation, +#' print +#' ) +#' } +#' +#' return(bll_flow_model) +#' } diff --git a/R/create-reference.R b/R/create-reference.R index 414b9c2c..a67acf5d 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -1,80 +1,81 @@ -#' Create Bll Model Object -#' -#' This object is used to generate the PMML file, for manuscript figures and other uses. -#' -#' @param model_object The object that is returned when a model is created. -#' @param model_type values = crr, NULL. The class name of the model_object. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. -#' @param table_one The object returned by createTableOne(). -#' @param model_data The data used to generate the model. -#' @param calculate_mean default = TRUE. If the means should be included in the table -#' @param baseline_risk_time_frame default = 5. The time for the baseline risk make sure to only use years as input -#' @export -create_BLL_model_object <- - function(model_data, - model_object, - table_one = NULL, - model_type = NULL, - calculate_mean = TRUE, - baseline_risk_time_frame = 5) { - # ----Step 1: verify input/create not passed input---- - supported_model_types <- c("crr") - var_names <- attr(model_object$coef, "names") - - if (!class(model_object) %in% supported_model_types) { - stop("Passed model type is not yet supported. Aborting!") - } - if (is.null(table_one)) { - table_one <- - tableone::CreateTableOne(data = model_data, vars = var_names) - } else { - for (var_name in var_names) { - if (!var_name %in% table_one[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { - # Issue warning before creating table one - warning( - "Passed table one does not contain the vars in the passed model. Creating new TableOne \n" - ) - # Verify data contains the var_names - var_in_data <- var_names %in% colnames(model_data) - if (all(var_in_data)) { - table_one <- - tableone::CreateTableOne(data = model_data, vars = var_names) - } else { - stop("The model_data does not contain all the variables from the model. Aborting!") - } - break() - } - } - } - - # ----Step 2: Generate model object ---- - # Obtain the beta coefficient - beta_coefficient <- model_object$coef - all_strata_var_means <- list() - ret_table <- - data.frame(beta_coefficient = beta_coefficient, row.names = var_names) - - # Obtain the means - if (calculate_mean) { - if (!is.null(table_one$ContTable)) { - for (strataVar in length(table_one$ContTable)) { - all_strata_var_means[[strataVar]] <- - table_one$ContTable[[strataVar]][var_names, pkg.globals$tableOne.Mean] - ret_table[[pkg.globals$tableOne.Mean]] <- - all_strata_var_means[[strataVar]] - } - } else { - warning("The table_one does not contain cont table therefore means were not calculated") - } - } - baseline_risk <- calculate_baseline_risk(model_object, (365.25*baseline_risk_time_frame)) - - return(list(reference = ret_table, baseline = baseline_risk)) - } - -calculate_baseline_risk <- function(model, time) { - jumps <- data.frame(time = model$uftime, bfitj = model$bfitj) - jumps_time <- jumps[jumps$time <= time, ] - b0 <- sum(jumps_time$bfitj) - out <- 1-exp(-b0) - return(out) -} \ No newline at end of file +# ---------- WIP REQUIRES SUMMARY TABLE REVISIT ---------- +#' #' Create Bll Model Object +#' #' +#' #' This object is used to generate the PMML file, for manuscript figures and other uses. +#' #' +#' #' @param model_object The object that is returned when a model is created. +#' #' @param model_type values = crr, NULL. The class name of the model_object. "crr" is the class name for the Fine and Grey model. This is currently the only model that is supported. +#' #' @param table_one The object returned by createTableOne(). +#' #' @param model_data The data used to generate the model. +#' #' @param calculate_mean default = TRUE. If the means should be included in the table +#' #' @param baseline_risk_time_frame default = 5. The time for the baseline risk make sure to only use years as input +#' #' @export +#' create_BLL_model_object <- +#' function(model_data, +#' model_object, +#' table_one = NULL, +#' model_type = NULL, +#' calculate_mean = TRUE, +#' baseline_risk_time_frame = 5) { +#' # ----Step 1: verify input/create not passed input---- +#' supported_model_types <- c("crr") +#' var_names <- attr(model_object$coef, "names") +#' +#' if (!class(model_object) %in% supported_model_types) { +#' stop("Passed model type is not yet supported. Aborting!") +#' } +#' if (is.null(table_one)) { +#' table_one <- +#' tableone::CreateTableOne(data = model_data, vars = var_names) +#' } else { +#' for (var_name in var_names) { +#' if (!var_name %in% table_one[[pkg.globals$LongTable.MetaData]][[pkg.globals$tableOne.Vars]]) { +#' # Issue warning before creating table one +#' warning( +#' "Passed table one does not contain the vars in the passed model. Creating new TableOne \n" +#' ) +#' # Verify data contains the var_names +#' var_in_data <- var_names %in% colnames(model_data) +#' if (all(var_in_data)) { +#' table_one <- +#' tableone::CreateTableOne(data = model_data, vars = var_names) +#' } else { +#' stop("The model_data does not contain all the variables from the model. Aborting!") +#' } +#' break() +#' } +#' } +#' } +#' +#' # ----Step 2: Generate model object ---- +#' # Obtain the beta coefficient +#' beta_coefficient <- model_object$coef +#' all_strata_var_means <- list() +#' ret_table <- +#' data.frame(beta_coefficient = beta_coefficient, row.names = var_names) +#' +#' # Obtain the means +#' if (calculate_mean) { +#' if (!is.null(table_one$ContTable)) { +#' for (strataVar in length(table_one$ContTable)) { +#' all_strata_var_means[[strataVar]] <- +#' table_one$ContTable[[strataVar]][var_names, pkg.globals$tableOne.Mean] +#' ret_table[[pkg.globals$tableOne.Mean]] <- +#' all_strata_var_means[[strataVar]] +#' } +#' } else { +#' warning("The table_one does not contain cont table therefore means were not calculated") +#' } +#' } +#' baseline_risk <- calculate_baseline_risk(model_object, (365.25*baseline_risk_time_frame)) +#' +#' return(list(reference = ret_table, baseline = baseline_risk)) +#' } +#' +#' calculate_baseline_risk <- function(model, time) { +#' jumps <- data.frame(time = model$uftime, bfitj = model$bfitj) +#' jumps_time <- jumps[jumps$time <= time, ] +#' b0 <- sum(jumps_time$bfitj) +#' out <- 1-exp(-b0) +#' return(out) +#' } \ No newline at end of file diff --git a/R/ddi-utils.R b/R/ddi-utils.R index b9b86d97..8f5743be 100644 --- a/R/ddi-utils.R +++ b/R/ddi-utils.R @@ -1,267 +1,268 @@ -#' Parses a DDI document into an R object -#' -#' Reads the DDI document on a file system and converts it into an R object. -#' Right now the following information is added to the object: \cr -#' 1. Variables info as well as values labels for categorical variables \cr -#' 2. Study Related Metadata -#' -#' @param ddi_path A string containing the path to the directory that has the -#' DDI document -#' @param ddi_file A string containing the name of the DDI document -#' @return A named list which is an instance of a BLLFlowDDI class. The list -#' contains the following members: \cr -#' 1. variable_meta_data - A named list. It's value comes from calling the \cr -#' \link[DDIwR]{getMetadata} function \cr -#' 2. additional_DDI_meta_data - A named list containig the remaining nodes in the DDI document -#' -#' @export -#' @examples -#' library(bllflow) -#' -#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -read_DDI <- function(ddi_path, ddi_file) { - # DDwR crates lots of cat outputs that are suppressed - ddi_meta_data <- - suppress_function_output(DDIwR::getMetadata(paste(ddi_path, ddi_file, sep = "/"))) - additional_DDI_meta_data <- - xml2::as_list(xml2::read_xml(paste(ddi_path, ddi_file, sep = "/"))) - for (single_variable_index in 1:length(additional_DDI_meta_data$codeBook$dataDscr)) { - if (!is.null(attr(additional_DDI_meta_data$codeBook$dataDscr[[single_variable_index]], "name", exact = TRUE))) { - var_name <- - attr(additional_DDI_meta_data$codeBook$dataDscr[[single_variable_index]], - "name", - exact = TRUE) - names(additional_DDI_meta_data$codeBook$dataDscr)[single_variable_index] <- - var_name - } - } - - ddi_object <- - list(variable_meta_data = ddi_meta_data, ddi_object = additional_DDI_meta_data) - attr(ddi_object, "class") <- - c(attr(ddi_object, "class"), "BLLFlowDDI") - - return(ddi_object) -} - -# Prevents function from writing Cat to console -suppress_function_output <- function(x) { - sink(tempfile()) - on.exit(sink()) - invisible(force(x)) -} - -#' Parses the headers from a DDI document -#' -#' Retreives the docDscr, stdyDscr and fileDscr nodes from a DDI document, storing -#' them in a named list and returning the list -#' -#' @param ddi A named list created using the \code{\link{read_DDI}} function -#' @return Returns a named list with the following members: \cr -#' docDscr - Contains the docDscr node in the DDI document \cr -#' stdyDscr - Contains the stdyDscr node in the DDI document \cr -#' fileDscr - Contains the fileDscr node in the DDI document \cr -#' -#' @export -#' @examples -#' library(bllflow) -#' -#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' -#' pbcDDIHeaders <- bllflow::get_DDI_description(pbcDDI) -#' print(names(pbcDDIHeaders)) -get_DDI_description <- function(ddi) { - ddi_object <- ddi$ddi_object - additional_DDI_meta_data <- list( - docDscr = ddi_object$codeBook$docDscr, - stdyDscr = ddi_object$codeBook$stdyDscr, - fileDscr = ddi_object$codeBook$fileDscr - ) - - return(additional_DDI_meta_data) -} - -#' Writes a variable details CSV sheet to file -#' @param x Object on which we will dispatch -#' @param ... The next method in the chain -#' -#' @export -write_DDI_populated_MSW <- function(x, ...) { - UseMethod("write_DDI_populated_MSW", x) -} - -#' @describeIn write_DDI_populated_MSW The populated_variable_details data frame within a bllflow model is written -#' as a CSV file -#' -#' @param path_to_write_to A string containing the path to the directory -#' where the file should be writtem -#' @param new_file_name A string containing the name of the written file -#' -#' @export -#' @examples -#' \dontrun{ -#' # Writing the variable details sheet within a bllflow model -#' # _________________________________________________________ -#' -#' library(survival) -#' library(bllflow) -#' -#' data(pbc) -#' -#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' -#' # Read the MSW files -#' variables <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' -#' # Create a BLLFlow object and add labels. -#' pbcModel <- bllflow::BLLFlow(pbc, variables, variable_details, pbcDDI) -#' -#' -#' bllflow::write_DDI_populated_MSW(pbcModel, "../../inst/extdata/", "newMSWvariableDetails.csv") +# ---------- WIP NEEDS DDI REVISIT ---------- +#' #' Parses a DDI document into an R object +#' #' +#' #' Reads the DDI document on a file system and converts it into an R object. +#' #' Right now the following information is added to the object: \cr +#' #' 1. Variables info as well as values labels for categorical variables \cr +#' #' 2. Study Related Metadata +#' #' +#' #' @param ddi_path A string containing the path to the directory that has the +#' #' DDI document +#' #' @param ddi_file A string containing the name of the DDI document +#' #' @return A named list which is an instance of a BLLFlowDDI class. The list +#' #' contains the following members: \cr +#' #' 1. variable_meta_data - A named list. It's value comes from calling the \cr +#' #' \link[DDIwR]{getMetadata} function \cr +#' #' 2. additional_DDI_meta_data - A named list containig the remaining nodes in the DDI document +#' #' +#' #' @export +#' #' @examples +#' #' library(bllflow) +#' #' +#' #' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' read_DDI <- function(ddi_path, ddi_file) { +#' # DDwR crates lots of cat outputs that are suppressed +#' ddi_meta_data <- +#' suppress_function_output(DDIwR::getMetadata(paste(ddi_path, ddi_file, sep = "/"))) +#' additional_DDI_meta_data <- +#' xml2::as_list(xml2::read_xml(paste(ddi_path, ddi_file, sep = "/"))) +#' for (single_variable_index in 1:length(additional_DDI_meta_data$codeBook$dataDscr)) { +#' if (!is.null(attr(additional_DDI_meta_data$codeBook$dataDscr[[single_variable_index]], "name", exact = TRUE))) { +#' var_name <- +#' attr(additional_DDI_meta_data$codeBook$dataDscr[[single_variable_index]], +#' "name", +#' exact = TRUE) +#' names(additional_DDI_meta_data$codeBook$dataDscr)[single_variable_index] <- +#' var_name +#' } +#' } +#' +#' ddi_object <- +#' list(variable_meta_data = ddi_meta_data, ddi_object = additional_DDI_meta_data) +#' attr(ddi_object, "class") <- +#' c(attr(ddi_object, "class"), "BLLFlowDDI") +#' +#' return(ddi_object) #' } -#' -write_DDI_populated_MSW.BLLFlow <- - function(x, path_to_write_to, new_file_name, ...) { - bllFlow <- x - - # create new directory if one does not exist - if (!dir.exists(path_to_write_to)) { - dir.create(file.path(getwd(), path_to_write_to)) - } - - write.csv(bllFlow[[pkg.globals$bllFlowContent.PopulatedVariableDetails]], - file = file.path(path_to_write_to, new_file_name), - row.names = FALSE) - } - -#' @describeIn write_DDI_populated_MSW Updates an existing variable details worksheet -#' with metadata from a ddi document and then writes the new variable details -#' sheet to file. The new sheet is saved in the same directory as the old sheet. The -#' first argument should be an object returned by the \code{\link{read_DDI}} function. -#' -#' @param path_to_MSW A string containing the path to the directory with the variable details sheet -#' @param msw_name A string containing the name of the variable details sheet -#' @param new_name A string containing the name of the new variable details sheet -#' -#' @export -#' @examples -#' \dontrun{ -#' # Updating a variable details sheet from file and writing the updated version -#' # ___________________________________________________________________________ -#' -#' library(bllflow) -#' -#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' -#' bllflow::write_DDI_populated_MSW(pbcDDI, "../../inst/extdata/", "PBC-variableDetails.csv", "new_name.csv") +#' +#' # Prevents function from writing Cat to console +#' suppress_function_output <- function(x) { +#' sink(tempfile()) +#' on.exit(sink()) +#' invisible(force(x)) #' } -write_DDI_populated_MSW.BLLFlowDDI <- - function(x, path_to_MSW, msw_name, new_name = NULL, ...) { - ddi <- x - - if (!file.exists(file.path(path_to_MSW, msw_name))) { - stop(paste("The MSW file is not present in", path_to_MSW), call. = FALSE) - } - variable_details <- read.csv(file.path(path_to_MSW, msw_name)) - populated_variable_details <- - process_DDI_variable_details(ddi, variable_details) - - # create new directory if one does not exist - if (!dir.exists(path_to_MSW)) { - dir.create(file.path(getwd(), path_to_MSW)) - } - - # generate name for new file name if one is not provided - if (is.null(new_name)) { - new_name <- paste(msw_name, "DDIPopulated.csv", sep = "") - } - - write.csv( - populated_variable_details, - file = file.path(path_to_MSW, new_name), - row.names = FALSE - ) - } - -#' Retreives variables in a DDI document -#' -#' Returns a list of dataDscr nodes from a DDI document which represent -#' variables provided in the var_list argument -#' -#' @param ddi A named list returned by the \code{\link{read_DDI}} function -#' @param var_list A list of strings that represents variable names -#' @return Returns a list containing the dataDscr nodes from the DDI document, -#' each one of which matches with an entry in the var_list argument -#' @export -#' @examples -#' library(bllflow) -#' -#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' -#' varsForPBC <- bllflow::get_DDI_variables(pbcDDI, c("age", "sex")) -#' print(attr(varsForPBC[[1]], 'name')) -#' print(varsForPBC[[1]]$labl) -get_DDI_variables <- function(ddi, var_list) { - ddi_variables <- list() - requested_variable_indexes <- - which(names(ddi$ddi_object$codeBook$dataDscr) %in% var_list) - ddi_variables <- - ddi$ddi_object$codeBook$dataDscr[requested_variable_indexes] - - return(ddi_variables) -} - -#' Updates the model specification worksheet (MSW) of a bllflow model. Also updates -#' the variable details sheet with metadata from a ddi document from the original -#' bllflow model if it exists. -#' -#' @param bll_model A bllflow instance whose MSW will be updated -#' @param new_MSW_variables A dataframe containing the new MSW variables sheet -#' @param new_MSW_variable_deatails A dataframe containing the new MSW variable details sheet -#' @param new_DDI A ddi object to add to bll_model -#' @return bllflow model with it's respective MSW members updated. -#' -#' @export -#' @examples -#' library(survival) -#' library(bllflow) -#' -#' data(pbc) -#' -#' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") -#' -#' # Read the MSW files -#' variables <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' -#' # Create a BLLFlow object and add labels. -#' pbcModel <- bllflow::BLLFlow(pbc, variables, variable_details, pbcDDI) -#' -#' pbcModel <- bllflow::update_MSW(pbcModel, variables, variable_details) -#' pbcModel <- bllflow::update_MSW(pbcModel, variables) -#' pbcModel <- bllflow::update_MSW(pbcModel, new_MSW_variable_deatails = variable_details) -update_MSW <- function(bll_model, - new_MSW_variables = NULL, - new_MSW_variable_deatails = NULL, - new_DDI = NULL) { - if (!is.null(new_DDI)) { - bll_model[[pkg.globals$bllFlowContent.DDI]] <- new_DDI - bll_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- - process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], bll_model[[pkg.globals$bllFlowContent.VariableDetails]]) - bll_model[[pkg.globals$bllFlowContent.AdditionalMetaData]] <- get_DDI_description(new_DDI) - } - if (!is.null(new_MSW_variables)) { - bll_model[[pkg.globals$bllFlowContent.Variables]] <- new_MSW_variables - } - if (!is.null(new_MSW_variable_deatails)) { - bll_model[[pkg.globals$bllFlowContent.VariableDetails]] <- - new_MSW_variable_deatails - if (!is.null(bll_model[[pkg.globals$bllFlowContent.DDI]])) { - bll_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- - process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], new_MSW_variable_deatails) - } - } - - return(bll_model) -} \ No newline at end of file +#' +#' #' Parses the headers from a DDI document +#' #' +#' #' Retreives the docDscr, stdyDscr and fileDscr nodes from a DDI document, storing +#' #' them in a named list and returning the list +#' #' +#' #' @param ddi A named list created using the \code{\link{read_DDI}} function +#' #' @return Returns a named list with the following members: \cr +#' #' docDscr - Contains the docDscr node in the DDI document \cr +#' #' stdyDscr - Contains the stdyDscr node in the DDI document \cr +#' #' fileDscr - Contains the fileDscr node in the DDI document \cr +#' #' +#' #' @export +#' #' @examples +#' #' library(bllflow) +#' #' +#' #' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' #' +#' #' pbcDDIHeaders <- bllflow::get_DDI_description(pbcDDI) +#' #' print(names(pbcDDIHeaders)) +#' get_DDI_description <- function(ddi) { +#' ddi_object <- ddi$ddi_object +#' additional_DDI_meta_data <- list( +#' docDscr = ddi_object$codeBook$docDscr, +#' stdyDscr = ddi_object$codeBook$stdyDscr, +#' fileDscr = ddi_object$codeBook$fileDscr +#' ) +#' +#' return(additional_DDI_meta_data) +#' } +#' +#' #' Writes a variable details CSV sheet to file +#' #' @param x Object on which we will dispatch +#' #' @param ... The next method in the chain +#' #' +#' #' @export +#' write_DDI_populated_MSW <- function(x, ...) { +#' UseMethod("write_DDI_populated_MSW", x) +#' } +#' +#' #' @describeIn write_DDI_populated_MSW The populated_variable_details data frame within a bllflow model is written +#' #' as a CSV file +#' #' +#' #' @param path_to_write_to A string containing the path to the directory +#' #' where the file should be writtem +#' #' @param new_file_name A string containing the name of the written file +#' #' +#' #' @export +#' #' @examples +#' #' \dontrun{ +#' #' # Writing the variable details sheet within a bllflow model +#' #' # _________________________________________________________ +#' #' +#' #' library(survival) +#' #' library(bllflow) +#' #' +#' #' data(pbc) +#' #' +#' #' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' #' +#' #' # Read the MSW files +#' #' variables <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' +#' #' # Create a BLLFlow object and add labels. +#' #' pbcModel <- bllflow::BLLFlow(pbc, variables, variable_details, pbcDDI) +#' #' +#' #' +#' #' bllflow::write_DDI_populated_MSW(pbcModel, "../../inst/extdata/", "newMSWvariableDetails.csv") +#' #' } +#' #' +#' write_DDI_populated_MSW.BLLFlow <- +#' function(x, path_to_write_to, new_file_name, ...) { +#' bllFlow <- x +#' +#' # create new directory if one does not exist +#' if (!dir.exists(path_to_write_to)) { +#' dir.create(file.path(getwd(), path_to_write_to)) +#' } +#' +#' write.csv(bllFlow[[pkg.globals$bllFlowContent.PopulatedVariableDetails]], +#' file = file.path(path_to_write_to, new_file_name), +#' row.names = FALSE) +#' } +#' +#' #' @describeIn write_DDI_populated_MSW Updates an existing variable details worksheet +#' #' with metadata from a ddi document and then writes the new variable details +#' #' sheet to file. The new sheet is saved in the same directory as the old sheet. The +#' #' first argument should be an object returned by the \code{\link{read_DDI}} function. +#' #' +#' #' @param path_to_MSW A string containing the path to the directory with the variable details sheet +#' #' @param msw_name A string containing the name of the variable details sheet +#' #' @param new_name A string containing the name of the new variable details sheet +#' #' +#' #' @export +#' #' @examples +#' #' \dontrun{ +#' #' # Updating a variable details sheet from file and writing the updated version +#' #' # ___________________________________________________________________________ +#' #' +#' #' library(bllflow) +#' #' +#' #' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' #' +#' #' bllflow::write_DDI_populated_MSW(pbcDDI, "../../inst/extdata/", "PBC-variableDetails.csv", "new_name.csv") +#' #' } +#' write_DDI_populated_MSW.BLLFlowDDI <- +#' function(x, path_to_MSW, msw_name, new_name = NULL, ...) { +#' ddi <- x +#' +#' if (!file.exists(file.path(path_to_MSW, msw_name))) { +#' stop(paste("The MSW file is not present in", path_to_MSW), call. = FALSE) +#' } +#' variable_details <- read.csv(file.path(path_to_MSW, msw_name)) +#' populated_variable_details <- +#' process_DDI_variable_details(ddi, variable_details) +#' +#' # create new directory if one does not exist +#' if (!dir.exists(path_to_MSW)) { +#' dir.create(file.path(getwd(), path_to_MSW)) +#' } +#' +#' # generate name for new file name if one is not provided +#' if (is.null(new_name)) { +#' new_name <- paste(msw_name, "DDIPopulated.csv", sep = "") +#' } +#' +#' write.csv( +#' populated_variable_details, +#' file = file.path(path_to_MSW, new_name), +#' row.names = FALSE +#' ) +#' } +#' +#' #' Retreives variables in a DDI document +#' #' +#' #' Returns a list of dataDscr nodes from a DDI document which represent +#' #' variables provided in the var_list argument +#' #' +#' #' @param ddi A named list returned by the \code{\link{read_DDI}} function +#' #' @param var_list A list of strings that represents variable names +#' #' @return Returns a list containing the dataDscr nodes from the DDI document, +#' #' each one of which matches with an entry in the var_list argument +#' #' @export +#' #' @examples +#' #' library(bllflow) +#' #' +#' #' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' #' +#' #' varsForPBC <- bllflow::get_DDI_variables(pbcDDI, c("age", "sex")) +#' #' print(attr(varsForPBC[[1]], 'name')) +#' #' print(varsForPBC[[1]]$labl) +#' get_DDI_variables <- function(ddi, var_list) { +#' ddi_variables <- list() +#' requested_variable_indexes <- +#' which(names(ddi$ddi_object$codeBook$dataDscr) %in% var_list) +#' ddi_variables <- +#' ddi$ddi_object$codeBook$dataDscr[requested_variable_indexes] +#' +#' return(ddi_variables) +#' } +#' +#' #' Updates the model specification worksheet (MSW) of a bllflow model. Also updates +#' #' the variable details sheet with metadata from a ddi document from the original +#' #' bllflow model if it exists. +#' #' +#' #' @param bll_model A bllflow instance whose MSW will be updated +#' #' @param new_MSW_variables A dataframe containing the new MSW variables sheet +#' #' @param new_MSW_variable_deatails A dataframe containing the new MSW variable details sheet +#' #' @param new_DDI A ddi object to add to bll_model +#' #' @return bllflow model with it's respective MSW members updated. +#' #' +#' #' @export +#' #' @examples +#' #' library(survival) +#' #' library(bllflow) +#' #' +#' #' data(pbc) +#' #' +#' #' pbcDDI <- bllflow::read_DDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") +#' #' +#' #' # Read the MSW files +#' #' variables <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' +#' #' # Create a BLLFlow object and add labels. +#' #' pbcModel <- bllflow::BLLFlow(pbc, variables, variable_details, pbcDDI) +#' #' +#' #' pbcModel <- bllflow::update_MSW(pbcModel, variables, variable_details) +#' #' pbcModel <- bllflow::update_MSW(pbcModel, variables) +#' #' pbcModel <- bllflow::update_MSW(pbcModel, new_MSW_variable_deatails = variable_details) +#' update_MSW <- function(bll_model, +#' new_MSW_variables = NULL, +#' new_MSW_variable_deatails = NULL, +#' new_DDI = NULL) { +#' if (!is.null(new_DDI)) { +#' bll_model[[pkg.globals$bllFlowContent.DDI]] <- new_DDI +#' bll_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- +#' process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], bll_model[[pkg.globals$bllFlowContent.VariableDetails]]) +#' bll_model[[pkg.globals$bllFlowContent.AdditionalMetaData]] <- get_DDI_description(new_DDI) +#' } +#' if (!is.null(new_MSW_variables)) { +#' bll_model[[pkg.globals$bllFlowContent.Variables]] <- new_MSW_variables +#' } +#' if (!is.null(new_MSW_variable_deatails)) { +#' bll_model[[pkg.globals$bllFlowContent.VariableDetails]] <- +#' new_MSW_variable_deatails +#' if (!is.null(bll_model[[pkg.globals$bllFlowContent.DDI]])) { +#' bll_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]] <- +#' process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], new_MSW_variable_deatails) +#' } +#' } +#' +#' return(bll_model) +#' } \ No newline at end of file diff --git a/R/function_parsing.R b/R/function_parsing.R index 9404e3a4..dd197b07 100644 --- a/R/function_parsing.R +++ b/R/function_parsing.R @@ -1,20 +1,21 @@ -parse_function <- function(data, - sequence_element, - modules, - variables, - variable_details) { - working_data <- data - module_functions <- - parse_module_functions( - module_table = modules, - module_sequence = sequence_element, - variables = variables, - variable_details = variable_details - ) - working_data <- - create_recipy(module_functions, working_data, variables) - - processed_data <- recipes::bake(working_data, new_data = data) - - return(processed_data) -} \ No newline at end of file +# ---------- WIP NEEDED FOR FUTURE MODULE UPDATE WITH USER FUNCTION ---------- +# parse_function <- function(data, +# sequence_element, +# modules, +# variables, +# variable_details) { +# working_data <- data +# module_functions <- +# parse_module_functions( +# module_table = modules, +# module_sequence = sequence_element, +# variables = variables, +# variable_details = variable_details +# ) +# working_data <- +# create_recipy(module_functions, working_data, variables) +# +# processed_data <- recipes::bake(working_data, new_data = data) +# +# return(processed_data) +# } \ No newline at end of file diff --git a/R/log-function-activity.R b/R/log-function-activity.R index 78fa8fec..a15d397e 100644 --- a/R/log-function-activity.R +++ b/R/log-function-activity.R @@ -1,69 +1,70 @@ -#' LogFunctionActivity -#' -#' A function to insert log information about the caller function -#' as well as print a human readable output to verify caller function activity -#' -#' @param bllFlow BllFlow object containing data and related MetaData -#' @param rowsChecked The amount of rows that the function calling this had to check -#' @param rowsAffected The amount of rows the caller function changed -#' @param actionTaken What was done with the affected rows -#' @param reason A human readable reason for the action being performed -#' @param executedFunction What was the caller function -#' @param variable What variable the caller function was performed on -#' @param value What was the caller functions compare value -#' @param print Specification if the human readable output needs to be printed -#' -#' @return bllFlow modifiied with the new log data -LogFunctionActivity <- - function(bllFlow, - rowsChecked, - rowsAffected, - actionTaken, - reason, - executedFunction, - variable, - value, - print) { - # Print information about the function if the user desires - if (print) { - print( - paste( - executedFunction, - ": ", - rowsChecked, - " rows were checked and ", - rowsAffected, - " rows were set to ", - actionTaken, - ". Reason: Rule ", - reason, - " ", - sep = "" - ) - ) - } - - # Create a new log if metaData does not yet have a log object - if (is.null(bllFlow$metaData$log)) { - bllFlow$metaData$log <- list() - attr(bllFlow$metaData$log, "class") <- c(attr(bllFlow$metaData$log, "class"), "metaDataLog") - } - - # Populate the log object with data about the function that was executed - label <- - bllFlow$variables[bllFlow$variables$variable==variable - , "label"] - bllFlow$metaData$log[[length(bllFlow$metaData$log) + 1]] <- - list( - fun = executedFunction, - result = list( - type = actionTaken, - rowsAffected = rowsAffected, - variable = variable, - label = label[[1]], - value = value - ) - ) - - return(bllFlow) - } +# ---------- WIP NEEDS TO BE UPDATED TO CURRENT BLLFLOW OBJECT FORMAT ---------- +#' #' LogFunctionActivity +#' #' +#' #' A function to insert log information about the caller function +#' #' as well as print a human readable output to verify caller function activity +#' #' +#' #' @param bllFlow BllFlow object containing data and related MetaData +#' #' @param rowsChecked The amount of rows that the function calling this had to check +#' #' @param rowsAffected The amount of rows the caller function changed +#' #' @param actionTaken What was done with the affected rows +#' #' @param reason A human readable reason for the action being performed +#' #' @param executedFunction What was the caller function +#' #' @param variable What variable the caller function was performed on +#' #' @param value What was the caller functions compare value +#' #' @param print Specification if the human readable output needs to be printed +#' #' +#' #' @return bllFlow modifiied with the new log data +#' LogFunctionActivity <- +#' function(bllFlow, +#' rowsChecked, +#' rowsAffected, +#' actionTaken, +#' reason, +#' executedFunction, +#' variable, +#' value, +#' print) { +#' # Print information about the function if the user desires +#' if (print) { +#' print( +#' paste( +#' executedFunction, +#' ": ", +#' rowsChecked, +#' " rows were checked and ", +#' rowsAffected, +#' " rows were set to ", +#' actionTaken, +#' ". Reason: Rule ", +#' reason, +#' " ", +#' sep = "" +#' ) +#' ) +#' } +#' +#' # Create a new log if metaData does not yet have a log object +#' if (is.null(bllFlow$metaData$log)) { +#' bllFlow$metaData$log <- list() +#' attr(bllFlow$metaData$log, "class") <- c(attr(bllFlow$metaData$log, "class"), "metaDataLog") +#' } +#' +#' # Populate the log object with data about the function that was executed +#' label <- +#' bllFlow$variables[bllFlow$variables$variable==variable +#' , "label"] +#' bllFlow$metaData$log[[length(bllFlow$metaData$log) + 1]] <- +#' list( +#' fun = executedFunction, +#' result = list( +#' type = actionTaken, +#' rowsAffected = rowsAffected, +#' variable = variable, +#' label = label[[1]], +#' value = value +#' ) +#' ) +#' +#' return(bllFlow) +#' } diff --git a/R/print-metadata-log.R b/R/print-metadata-log.R index 8d00b35f..01752ae0 100644 --- a/R/print-metadata-log.R +++ b/R/print-metadata-log.R @@ -1,37 +1,38 @@ -#'Custom print function for the bllFlow metaData log -#' -#'@param x The metaData log object -#'@param ... Arguments for next method in the chain -#' -#'@export -print.metaDataLog <- function(x, ...) { - metaDataLog <- x - - print("Data cleaning and trandformation log") - print(paste(length(metaDataLog), "steps performed")) - printDataFrame <- - data.frame( - "Step" = numeric(), - "Function" = character(), - "Variable" = character(), - "Label" = character(), - "Value" = character(), - "Rows" = numeric(), - "Type" = character(), - stringsAsFactors = FALSE - ) - for (step in 1:length(metaDataLog)) { - stepRow <- - data.frame( - "Step" = step, - "Function" = metaDataLog[[step]]$fun, - "Variable" = metaDataLog[[step]]$result$variable, - "Label" = metaDataLog[[step]]$result$label, - "Value" = metaDataLog[[step]]$result$value, - "Rows" = metaDataLog[[step]]$result$rowsAffected, - "Type" = metaDataLog[[step]]$result$type - ) - printDataFrame <- rbind(printDataFrame, stepRow) - } - print(printDataFrame, row.names = FALSE) -} \ No newline at end of file +# ---------- WIP TO BE IMPLEMENTED ---------- +#' #'Custom print function for the bllFlow metaData log +#' #' +#' #'@param x The metaData log object +#' #'@param ... Arguments for next method in the chain +#' #' +#' #'@export +#' print.metaDataLog <- function(x, ...) { +#' metaDataLog <- x +#' +#' print("Data cleaning and trandformation log") +#' print(paste(length(metaDataLog), "steps performed")) +#' printDataFrame <- +#' data.frame( +#' "Step" = numeric(), +#' "Function" = character(), +#' "Variable" = character(), +#' "Label" = character(), +#' "Value" = character(), +#' "Rows" = numeric(), +#' "Type" = character(), +#' stringsAsFactors = FALSE +#' ) +#' for (step in 1:length(metaDataLog)) { +#' stepRow <- +#' data.frame( +#' "Step" = step, +#' "Function" = metaDataLog[[step]]$fun, +#' "Variable" = metaDataLog[[step]]$result$variable, +#' "Label" = metaDataLog[[step]]$result$label, +#' "Value" = metaDataLog[[step]]$result$value, +#' "Rows" = metaDataLog[[step]]$result$rowsAffected, +#' "Type" = metaDataLog[[step]]$result$type +#' ) +#' printDataFrame <- rbind(printDataFrame, stepRow) +#' } +#' print(printDataFrame, row.names = FALSE) +#' } \ No newline at end of file diff --git a/R/rcs2.R b/R/rcs2.R deleted file mode 100644 index 84825f4a..00000000 --- a/R/rcs2.R +++ /dev/null @@ -1,129 +0,0 @@ - -#Modified RCS function -#Modified to allow for naming of the new rcs variables -#Original rcs() function in github repo: harrelfe/rms/rms.trans.s - -#Requires Hmisc and rms package -library(Hmisc) -library(rms) - -des.args <- function(x,parms.allowed,call.args) { - nam <- names(x) - if(! length(nam)) nam <- rep("",5) - name <- nam[1] - if(name=="") { - form <- formula(call("~",as.name("...y..."),call.args[[2]])) - name <- var.inner(form) - } - pa <- parms.allowed - argu <- function(x,karg, arg.name, parms.all, nm) { - if(! parms.all) karg <- karg-1 - k <- charmatch(arg.name,nm,0) #k>0 : named arg found - ## Added karg <= length(x) 9Apr02 for R; R doesn't return NULL - ## like S+ - if(k>0) x[[k]] else - if(length(nm) < karg || nm[karg] != "") NULL else - if(karg <= length(x)) x[[karg]] else NULL - } - if(parms.allowed) parms <- argu(x,2,"parms",pa,nam) else { - parms <- NULL - if(charmatch("parms",nam,0)>0) - stop(paste("parms not allowed for",as.character(call.args[1]))) - } - - nm <- argu(x,5,"name",pa,nam) - if(length(nm)) name <- nm - if(length(.Options$Design.attr)) { - atr <- .Options$Design.attr - i <- charmatch(name, atr$name, 0) - if(! length(i))stop("program logic error for options(factor.number)") - parmi <- atr$parms[[name]] - return(list(name=atr$name[i],parms=parmi,label=atr$label[i], - units=atr$units[i])) # added units 9Jun99 - } - - label <- argu(x,3,"label",pa,nam) - atx <- attributes(x[[1]]) # 9Jun99 - if(! length(label)) label <- atx$label # 9Jun99 attr(x[[1]],"label") - if(! length(label)) label <- name - - list(name=name,parms=parms,label=label,units=atx$units) #9Jun99 - -} - - -## Function to list all attributes of new sub-design matrix -set.atr <- function(xd, x, z, colnames, assume, code, parms, nonlinear) { - ##Note: x argument isn't used - if(is.matrix(xd)) - list(dim=dim(xd),dimnames=list(NULL,colnames),class="rms", - name=z$name, label=z$label, assume=assume, assume.code=code, - parms=parms, - nonlinear=nonlinear,colnames=colnames,units=z$units) - else list(dim=dim(xd), class="rms", - name=z$name, label=z$label, assume=assume, assume.code=code, - parms=parms, - nonlinear=nonlinear,colnames=colnames,units=z$units) -} - - -## Restricted cubic spline expansion -rcs2 <- function(..., rcs_names) { - - cal <- sys.call() - xx <- list(...) - z <- des.args(xx, TRUE, cal) - x <- xx[[1]] - if(! is.numeric(x)) stop(paste(z$name, "is not numeric")) - - nknots <- .Options$nknots - if(! length(nknots)) nknots <- 5 - - parms <- z$parms - if(! length(parms)) parms <- nknots - - if(length(parms)==1) { - nknots <- parms - knots <- NULL - if(nknots == 0) { - attributes(x) <- set.atr(x, x, z, z$name, "asis", 1, NULL, FALSE) - return(x) - } - } - else { - nknots <- length(parms) - knots <- parms - } - - pc <- length(.Options$rcspc) && .Options$rcspc - fractied <- .Options$fractied - if(! length(fractied)) fractied <- 0.05 - - if(! length(knots)) { - xd <- rcspline.eval(x, nk=nknots, inclx=TRUE, pc=pc, fractied=fractied) - knots <- attr(xd,"knots") - } - else xd <- rcspline.eval(x, knots=knots, inclx=TRUE, pc=pc, fractied=fractied) - - parms <- knots - nknots <- length(parms) - nam <- z$name - name <- rcs_names - - if(pc) attr(parms, 'pcparms') <- attr(xd, 'pcparms') - attributes(xd) <- - set.atr(xd, x, z, name, "rcspline", 4, parms, - if(pc) rep(TRUE, nknots-1) else c(FALSE,rep(TRUE,nknots-2))) - xd -} - -#Test modified RCS function (rcs2) -#Age_rcs1 <- as.numeric(sample(18:100, 3000, replace=TRUE)) -#DrinksLastWeek_rcs1 <- as.numeric(sample(0:20, 3000, replace=TRUE)) -#data1 <- data.frame(Age_rcs1, DrinksLastWeek_rcs1) -#rm(Age_rcs1, DrinksLastWeek_rcs1) - -#attach(data1) -#rcs(Age_rcs1, 5) -#rcs2(Age_rcs1, 5, rcs_names=c('Age_rcs1', 'Age_rcs2', 'Age_rcs3', 'Age_rcs4')) -#detach(data1) diff --git a/R/recipy-utility.R b/R/recipy-utility.R index a7b413b9..640a62f2 100644 --- a/R/recipy-utility.R +++ b/R/recipy-utility.R @@ -1,16 +1,17 @@ -#' Returns a recipy attached to bllflow if one is not attached constructs one -#' based on variables sheet -#' @export -get_recipy <- function(){ - -} -#' Sets the recipy for the bllflow object -#' TODO add a way to verify that the recipy works with the bllflow object -#' @export -set_recipy <- function(){ - -} -#' Creates recipy from variable sheet -construct_recipy <- function(){ - -} \ No newline at end of file +# --------- WIP --------- +#' #' Returns a recipy attached to bllflow if one is not attached constructs one +#' #' based on variables sheet +#' #' @export +#' get_recipy <- function(){ +#' +#' } +#' #' Sets the recipy for the bllflow object +#' #' TODO add a way to verify that the recipy works with the bllflow object +#' #' @export +#' set_recipy <- function(){ +#' +#' } +#' #' Creates recipy from variable sheet +#' construct_recipy <- function(){ +#' +#' } \ No newline at end of file diff --git a/R/small-cell-check.R b/R/small-cell-check.R index 131ee66f..681fd3a5 100644 --- a/R/small-cell-check.R +++ b/R/small-cell-check.R @@ -1,251 +1,252 @@ -#' check_small_cells -#' -#' Checks for presence of small cells within the passed table -#' -#' @param passed_table Table to check, currently supported tables are LongTable and TableOne -#' @param small_size Preffered small cell size, default <6 -#' @param print Option to print the smallCell table -#' @return Returns passed table with smallcells attached inside MetaData$smallCells -#' @export -check_small_cells <- function(passed_table, ...) { - UseMethod("check_small_cells", passed_table) -} -#' check_small_cells for Summary Data -#' -#' Checks for presence of small cells within Summary Data -#' -#' @param passed_table Table to check, currently supported is LongTable and TableOne -#' @param small_size Preffered small cell size, default <6 -#' @param print Option to print the smallCell table -#' @return Returns passed table with smallcells attached inside MetaData$smallCells -#'@export -check_small_cells.SummaryData <- function(passed_table, - small_size = 6, - print = FALSE) { - passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]] <- - passed_table$summaryData[passed_table$summaryData[, pkg.globals$LongTable.Frequency] < small_size,] - print(paste(nrow(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]), "Small cells were found")) - if (print) { - print(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]) - } - - return(passed_table) -} - -#' Check for Small Cells -#' -#' check_small_cells checks a given table for small sells then adds a -#' smallCells table to the MetaData of the tableone object -#' -#' Checks the categorical table within the TableOne param (CatTable field) for -#' small cells. A small cell is a category where the number of people -#' in the category (n) is less than the value specified by the small_size param. -#' The freq field within each variable has the n values. -#' -#' @param passed_table The object outputted by the CreateTableOne function of the tableone package. -#' The documentation is available here -#' https://cran.r-project.org/web/packages/tableone/index.html. -#' @param small_size What value constitutes a small size cell. Default value is 6. -#' @param print If TRUE prints the small_size metadata in a human readable format -#' -#' @return The passed_table object with a new object in the Metadata object called smallCells. -#' smallCells is a dataframe with 4 columns -#' stratified_by : the categeries the table was stratified by -#' strata_values : the strata value where the small cell is present -#' variableName and factors and the rows are all the categorical variables -#' whose one or more factors have small cells. -#' -#' @examples -#' -#' # Read in the data we will use to generate Table One -#' -#' library(survival) -#' data(pbc) -#' -#' # Create the Table One object -#' -#' library("tableone") -#' # The list of variables which are categorical -#' catVars <- c("status", "trt", "ascites", "hepato", -#' "spiders", "edema", "stage") -#' -#' # create table 1 object -#' TableOne <- CreateTableOne(data = pbc,strata = c("trt","stage"), factorVars = catVars) -#' -#' # by default small_size is 6 print is set to true and table_type is TableOne -#' tmp <- check_small_cells(TableOne) -#' -#' # increasing the small_size threshold to 10 -#' tmp <- check_small_cells(TableOne, small_size=10) -#' -#' @export -check_small_cells.TableOne <- function(passed_table, - small_size = 6, - print = FALSE) { - # Handles TableOne type tables - small_size_table <- - check_small_cells_in_table_one(passed_table, small_size) - - # Outputing the created Table function --------------------------------------- - - # Writes the created table into the MetaData object of the passed table - # Appends to smallCells if previous reccord exists - if ("smallCells" %in% names(passed_table$MetaData)) { - passed_table$MetaData$smallCells <- - rbind(passed_table$MetaData$smallCells, small_size_table) - # Sort the small cells table by variable, stratified_by, strata_values - passed_table$MetaData$smallCells <- - passed_table$MetaData$smallCells[order( - passed_table$MetaData$smallCells$variable, - passed_table$MetaData$smallCells$stratified_by, - passed_table$MetaData$smallCells$strata_values - ), ] - # reset rowcount - rownames(passed_table$MetaData$smallCells) <- NULL - } else { - # Sort the small cells table by variable, stratified_by, strata_values - passed_table$MetaData$smallCells <- - small_size_table[order( - small_size_table$variable, - small_size_table$stratified_by, - small_size_table$strata_values - ), ] - # reset rowcount - rownames(passed_table$MetaData$smallCells) <- NULL - } - # Prints the table if the print is requested - if (print) { - if (nrow(passed_table$MetaData$smallCells) == 0) { - cat("No small cells are present") - } else{ - print(passed_table$MetaData$smallCells) - } - } - - return(passed_table) -} - -#' Only summary table and table one is currently supported every other type of -#' table will throw this error -#' @export -check_small_cells.Default <- function(passed_table, ...){ - # In case an unsupported table type is used this error is thrown - stop( - cat( - "Table type ", - class(passed_table), - " is not a valid table type or is not yet supported " - ), - "Unsupported Type" - ) -} - -# Table Parsing Functions ----------------------------------------------------------------------- - -#' Check for Small Cells in TableOne -#' -#' Check for Small Cells inside a TableOne format Table -#' -#' Check The CatTable list for all possible small cells this also checks for -#' all levels similar to showAllLevels in the CatTable from TableOne -#' documentation available here: -#' -#' @param table_one The object outputted by the CreateTableOne function of the -#' tableone package. The documentation is available here -#' https://cran.r-project.org/web/packages/tableone/index.html. -#' @param small_size What value constitutes a small size cell. Default value is 6. -#' -#' @return data frame with 4 columns: stratified_by, strata_values, variableName, factors. -#' This only adds the variables that contain small cells for easy identification. -#' It returns an empty table when no small cells are present -check_small_cells_in_table_one <- function(table_one, - small_size = 6) { - # Variable declaration ------------------------------------------------------- - - strata_checked <- 0 - levels_checked <- 0 - variables_found <- 0 - levels_found <- 0 - variables_checked_num <- 0 - small_cell_found <- FALSE - var_names <- attr(table_one$CatTable[[1]], "names") - counter <- 1 - freq_vector <- character() - dim_names <- attr(table_one$CatTable, "dimnames") - strata_counter <- 1 - # This turns the strata arrays into one single array - # Then creates all possible combinations and seperates them with : - # Then all the combinations are combined into a single string array - strata_all_combinations_data_frame <- expand.grid(dim_names) - strata_args <- c(strata_all_combinations_data_frame, sep = ":") - strata_values <- do.call(paste, strata_args) - # Inserts values if not stratified - if (is.null(attr(table_one$CatTable, "strataVarName"))) { - stratified_by <- NA - strata_values <- NA - } else { - stratified_by <- attr(table_one$CatTable, "strataVarName") - } - # Creates a first row in a data frame - # due to rbind function not working on an empty dataframe - # A dummy row is used because first row is unknown at time of creation - detected_small_cells <- - data.frame( - variable = character(), - stratified_by = character(), - strata_values = character() - ) - detected_small_cells$factors <- list() - # Small Cell detection ------------------------------------------------------- - # Loop through the tables for each column - for (strata_counter in 1:length(table_one$CatTable)) { - variables_checked_num <- 0 - # Loop through the tables of each variable - for (selected_variable in table_one$CatTable[[strata_counter]]) { - variables_checked_num <- variables_checked_num + 1 - strata_checked <- strata_checked + 1 - # Loop through the levels of each variable - for (row in 1:nrow(selected_variable)) { - levels_checked <- levels_checked + 1 - frequency <- selected_variable[row, "freq"] - lev_name <- selected_variable[row, "level"] - if (frequency < small_size) { - small_cell_found <- TRUE - levels_found <- levels_found + 1 - freq_vector <- c(freq_vector, lev_name) - } - } - if (small_cell_found) { - variables_found <- variables_found + 1 - # Creates a temporary dataframe with data for the table that was read - # Then that dataframe is added - new_small_cell_row <- - data.frame( - variable = var_names[counter], - stratified_by = stratified_by, - strata_values = strata_values[[strata_counter]] - ) - new_small_cell_row$factors <- list(freq_vector) - detected_small_cells <- - rbind(detected_small_cells, new_small_cell_row) - small_cell_found <- FALSE - } - counter <- counter + 1 - freq_vector <- NULL - } - counter <- 1 - } - cat(variables_checked_num, - " variables with ", - levels_checked, - " levels checked.\n\n") - cat( - length(levels(detected_small_cells$variable)), - " variables with ", - levels_found, - " levels have cells <", - small_size, - " counts.\n\n" - ) - return(detected_small_cells) -} +# ---------- WIP NEEDS NEW BLLFLOW FORMAT UPDATE ---------- +#' #' check_small_cells +#' #' +#' #' Checks for presence of small cells within the passed table +#' #' +#' #' @param passed_table Table to check, currently supported tables are LongTable and TableOne +#' #' @param small_size Preffered small cell size, default <6 +#' #' @param print Option to print the smallCell table +#' #' @return Returns passed table with smallcells attached inside MetaData$smallCells +#' #' @export +#' check_small_cells <- function(passed_table, ...) { +#' UseMethod("check_small_cells", passed_table) +#' } +#' #' check_small_cells for Summary Data +#' #' +#' #' Checks for presence of small cells within Summary Data +#' #' +#' #' @param passed_table Table to check, currently supported is LongTable and TableOne +#' #' @param small_size Preffered small cell size, default <6 +#' #' @param print Option to print the smallCell table +#' #' @return Returns passed table with smallcells attached inside MetaData$smallCells +#' #'@export +#' check_small_cells.SummaryData <- function(passed_table, +#' small_size = 6, +#' print = FALSE) { +#' passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]] <- +#' passed_table$summaryData[passed_table$summaryData[, pkg.globals$LongTable.Frequency] < small_size,] +#' print(paste(nrow(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]), "Small cells were found")) +#' if (print) { +#' print(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]) +#' } +#' +#' return(passed_table) +#' } +#' +#' #' Check for Small Cells +#' #' +#' #' check_small_cells checks a given table for small sells then adds a +#' #' smallCells table to the MetaData of the tableone object +#' #' +#' #' Checks the categorical table within the TableOne param (CatTable field) for +#' #' small cells. A small cell is a category where the number of people +#' #' in the category (n) is less than the value specified by the small_size param. +#' #' The freq field within each variable has the n values. +#' #' +#' #' @param passed_table The object outputted by the CreateTableOne function of the tableone package. +#' #' The documentation is available here +#' #' https://cran.r-project.org/web/packages/tableone/index.html. +#' #' @param small_size What value constitutes a small size cell. Default value is 6. +#' #' @param print If TRUE prints the small_size metadata in a human readable format +#' #' +#' #' @return The passed_table object with a new object in the Metadata object called smallCells. +#' #' smallCells is a dataframe with 4 columns +#' #' stratified_by : the categeries the table was stratified by +#' #' strata_values : the strata value where the small cell is present +#' #' variableName and factors and the rows are all the categorical variables +#' #' whose one or more factors have small cells. +#' #' +#' #' @examples +#' #' +#' #' # Read in the data we will use to generate Table One +#' #' +#' #' library(survival) +#' #' data(pbc) +#' #' +#' #' # Create the Table One object +#' #' +#' #' library("tableone") +#' #' # The list of variables which are categorical +#' #' catVars <- c("status", "trt", "ascites", "hepato", +#' #' "spiders", "edema", "stage") +#' #' +#' #' # create table 1 object +#' #' TableOne <- CreateTableOne(data = pbc,strata = c("trt","stage"), factorVars = catVars) +#' #' +#' #' # by default small_size is 6 print is set to true and table_type is TableOne +#' #' tmp <- check_small_cells(TableOne) +#' #' +#' #' # increasing the small_size threshold to 10 +#' #' tmp <- check_small_cells(TableOne, small_size=10) +#' #' +#' #' @export +#' check_small_cells.TableOne <- function(passed_table, +#' small_size = 6, +#' print = FALSE) { +#' # Handles TableOne type tables +#' small_size_table <- +#' check_small_cells_in_table_one(passed_table, small_size) +#' +#' # Outputing the created Table function --------------------------------------- +#' +#' # Writes the created table into the MetaData object of the passed table +#' # Appends to smallCells if previous reccord exists +#' if ("smallCells" %in% names(passed_table$MetaData)) { +#' passed_table$MetaData$smallCells <- +#' rbind(passed_table$MetaData$smallCells, small_size_table) +#' # Sort the small cells table by variable, stratified_by, strata_values +#' passed_table$MetaData$smallCells <- +#' passed_table$MetaData$smallCells[order( +#' passed_table$MetaData$smallCells$variable, +#' passed_table$MetaData$smallCells$stratified_by, +#' passed_table$MetaData$smallCells$strata_values +#' ), ] +#' # reset rowcount +#' rownames(passed_table$MetaData$smallCells) <- NULL +#' } else { +#' # Sort the small cells table by variable, stratified_by, strata_values +#' passed_table$MetaData$smallCells <- +#' small_size_table[order( +#' small_size_table$variable, +#' small_size_table$stratified_by, +#' small_size_table$strata_values +#' ), ] +#' # reset rowcount +#' rownames(passed_table$MetaData$smallCells) <- NULL +#' } +#' # Prints the table if the print is requested +#' if (print) { +#' if (nrow(passed_table$MetaData$smallCells) == 0) { +#' cat("No small cells are present") +#' } else{ +#' print(passed_table$MetaData$smallCells) +#' } +#' } +#' +#' return(passed_table) +#' } +#' +#' #' Only summary table and table one is currently supported every other type of +#' #' table will throw this error +#' #' @export +#' check_small_cells.Default <- function(passed_table, ...){ +#' # In case an unsupported table type is used this error is thrown +#' stop( +#' cat( +#' "Table type ", +#' class(passed_table), +#' " is not a valid table type or is not yet supported " +#' ), +#' "Unsupported Type" +#' ) +#' } +#' +#' # Table Parsing Functions ----------------------------------------------------------------------- +#' +#' #' Check for Small Cells in TableOne +#' #' +#' #' Check for Small Cells inside a TableOne format Table +#' #' +#' #' Check The CatTable list for all possible small cells this also checks for +#' #' all levels similar to showAllLevels in the CatTable from TableOne +#' #' documentation available here: +#' #' +#' #' @param table_one The object outputted by the CreateTableOne function of the +#' #' tableone package. The documentation is available here +#' #' https://cran.r-project.org/web/packages/tableone/index.html. +#' #' @param small_size What value constitutes a small size cell. Default value is 6. +#' #' +#' #' @return data frame with 4 columns: stratified_by, strata_values, variableName, factors. +#' #' This only adds the variables that contain small cells for easy identification. +#' #' It returns an empty table when no small cells are present +#' check_small_cells_in_table_one <- function(table_one, +#' small_size = 6) { +#' # Variable declaration ------------------------------------------------------- +#' +#' strata_checked <- 0 +#' levels_checked <- 0 +#' variables_found <- 0 +#' levels_found <- 0 +#' variables_checked_num <- 0 +#' small_cell_found <- FALSE +#' var_names <- attr(table_one$CatTable[[1]], "names") +#' counter <- 1 +#' freq_vector <- character() +#' dim_names <- attr(table_one$CatTable, "dimnames") +#' strata_counter <- 1 +#' # This turns the strata arrays into one single array +#' # Then creates all possible combinations and seperates them with : +#' # Then all the combinations are combined into a single string array +#' strata_all_combinations_data_frame <- expand.grid(dim_names) +#' strata_args <- c(strata_all_combinations_data_frame, sep = ":") +#' strata_values <- do.call(paste, strata_args) +#' # Inserts values if not stratified +#' if (is.null(attr(table_one$CatTable, "strataVarName"))) { +#' stratified_by <- NA +#' strata_values <- NA +#' } else { +#' stratified_by <- attr(table_one$CatTable, "strataVarName") +#' } +#' # Creates a first row in a data frame +#' # due to rbind function not working on an empty dataframe +#' # A dummy row is used because first row is unknown at time of creation +#' detected_small_cells <- +#' data.frame( +#' variable = character(), +#' stratified_by = character(), +#' strata_values = character() +#' ) +#' detected_small_cells$factors <- list() +#' # Small Cell detection ------------------------------------------------------- +#' # Loop through the tables for each column +#' for (strata_counter in 1:length(table_one$CatTable)) { +#' variables_checked_num <- 0 +#' # Loop through the tables of each variable +#' for (selected_variable in table_one$CatTable[[strata_counter]]) { +#' variables_checked_num <- variables_checked_num + 1 +#' strata_checked <- strata_checked + 1 +#' # Loop through the levels of each variable +#' for (row in 1:nrow(selected_variable)) { +#' levels_checked <- levels_checked + 1 +#' frequency <- selected_variable[row, "freq"] +#' lev_name <- selected_variable[row, "level"] +#' if (frequency < small_size) { +#' small_cell_found <- TRUE +#' levels_found <- levels_found + 1 +#' freq_vector <- c(freq_vector, lev_name) +#' } +#' } +#' if (small_cell_found) { +#' variables_found <- variables_found + 1 +#' # Creates a temporary dataframe with data for the table that was read +#' # Then that dataframe is added +#' new_small_cell_row <- +#' data.frame( +#' variable = var_names[counter], +#' stratified_by = stratified_by, +#' strata_values = strata_values[[strata_counter]] +#' ) +#' new_small_cell_row$factors <- list(freq_vector) +#' detected_small_cells <- +#' rbind(detected_small_cells, new_small_cell_row) +#' small_cell_found <- FALSE +#' } +#' counter <- counter + 1 +#' freq_vector <- NULL +#' } +#' counter <- 1 +#' } +#' cat(variables_checked_num, +#' " variables with ", +#' levels_checked, +#' " levels checked.\n\n") +#' cat( +#' length(levels(detected_small_cells$variable)), +#' " variables with ", +#' levels_found, +#' " levels have cells <", +#' small_size, +#' " counts.\n\n" +#' ) +#' return(detected_small_cells) +#' } diff --git a/R/step-function-recoding.R b/R/step-function-recoding.R deleted file mode 100644 index ef9950f9..00000000 --- a/R/step-function-recoding.R +++ /dev/null @@ -1,181 +0,0 @@ -#' @export -step_meantest <- function(recipe, - ..., - role = NA, - trained = FALSE, - skip = FALSE, - id = recipes::rand_id("meantest"), - append = FALSE, - suffix = "_meantest", - means = NULL, - trim = 0) { - terms <- recipes::ellipse_check(...) - recipes::add_step( - recipe, - step_meantest_new( - terms = terms, - trained = trained, - role = role, - append = append, - suffix = suffix, - means = means, - trim = trim, - skip = skip, - id = id - ) - ) -} - -step_meantest_new <- - function(terms, - role, - trained, - append, - suffix, - means, - trim, - skip, - id) { - step( - subclass = "meantest", - terms = terms, - role = role, - trained = trained, - append = append, - suffix = suffix, - means = means, - trim = trim, - skip = skip, - id = id - ) - } -#' @export -prep.step_meantest <- function(x, training, info = NULL, ...) { - y <- recipes:::prep.step_meanimpute(x, training, info, ...) - - return( - step_meantest_new( - terms = x$terms, - trained = TRUE, - role = x$role, - append = x$append, - suffix = x$suffix, - means = y$means, - trim = x$trim, - skip = x$skip, - id = x$id - ) - ) -} - -#' @export -bake.step_meantest <- function(object, new_data, ...) { - require(tibble) - for (varName in names(object$means)) { - if (any(is.na(new_data[, varName]))) { - newVarName <- paste(varName, object$suffix, sep = "") - new_data[newVarName] <- new_data[varName] - new_data[is.na(new_data[, newVarName]), newVarName] <- - object$means[[varName]] - if (!object$append) { - new_data[varName] <- NULL - } - } - } - - return(as_tibble(new_data)) -} - -print.step_meantest <- - function(x, width = max(20, options()$width - 30), ...) { - cat("Mean Imputation for ", sep = "") - recipes:::printer(names(x$means), x$terms, x$trained, width = width) - invisible(x) - } - -#' step_bllflowMeanimpute <- -#' function(recipe, -#' ..., -#' role = NA, -#' trained = FALSE, -#' append = TRUE, -#' suffix = "MeanImpute", -#' means = NULL, -#' trim = 0, -#' skip = FALSE, -#' id = rand_id("bllflowMeanimpute")) { -#' add_step( -#' recipe, -#' step_bllflowMeanimpute_new( -#' terms = ellipse_check(...), -#' role = role, -#' trained = trained, -#' append = append, -#' suffix = suffix, -#' means = means, -#' trim = trim, -#' skip = skip, -#' id = id -#' ) -#' ) -#' } -#' -#' step_bllflowMeanimpute_new <- -#' function(terms, role, trained, means, trim, skip, id) { -#' step( -#' subclass = "bllflowMeanimpute", -#' terms = terms, -#' role = role, -#' trained = trained, -#' append = append, -#' suffix = suffix, -#' means = means, -#' trim = trim, -#' skip = skip, -#' id = id -#' ) -#' } -#' -#' #' @export -#' prep.step_bllflowMeanimpute <- function(x, training, info = NULL, ...) { -#' col_names <- terms_select(x$terms, info = info) -#' check_type(training[, col_names]) -#' -#' means <- -#' vapply(training[, col_names], -#' mean, -#' c(mean = 0), -#' trim = x$trim, -#' na.rm = TRUE) -#' step_bllflowMeanimpute_new( -#' terms = x$terms, -#' role = x$role, -#' trained = TRUE, -#' means, -#' trim = x$trim, -#' skip = x$skip, -#' id = x$id -#' ) -#' } -#' - -#' -#' print.step_bllflowMeanimpute <- -#' function(x, width = max(20, options()$width - 30), ...) { -#' cat("Mean Imputation for ", sep = "") -#' printer(names(x$means), x$terms, x$trained, width = width) -#' invisible(x) -#' } -#' -#' #' @export -#' tidy.step_bllflowMeanimpute <- function(x, ...) { -#' if (is_trained(x)) { -#' res <- tibble(terms = names(x$means), -#' model = x$means) -#' } else { -#' term_names <- sel2char(x$terms) -#' res <- tibble(terms = term_names, model = na_dbl) -#' } -#' res$id <- x$id -#' res -#' } \ No newline at end of file diff --git a/R/step_apply_missing_tagged_na.R b/R/step_apply_missing_tagged_na.R deleted file mode 100644 index 6d7cc5f5..00000000 --- a/R/step_apply_missing_tagged_na.R +++ /dev/null @@ -1,67 +0,0 @@ -step_apply_missing_tagged_na <- function(recipe, - ..., - role = NA, - trained = FALSE, - columns = NULL, - tag_type = NULL, - skip = FALSE, - id = recipes::rand_id("apply_missing_tagged_na")) { - recipes::add_step( - recipe, - step_apply_missing_tagged_na_new( - terms = recipes::ellipse_check(...), - role = role, - trained = trained, - columns = columns, - tag_type = trimws(tag_type), - skip = skip, - id = id - ) - ) -} - -step_apply_missing_tagged_na_new <- - function(terms, role, trained, columns, tag_type, skip, id) { - step( - subclass = "apply_missing_tagged_na", - terms = terms, - role = role, - trained = trained, - columns = columns, - tag_type = tag_type, - skip = skip, - id = id - ) - } - -#' @export -prep.step_apply_missing_tagged_na <- function(x, training, info = NULL, ...) { - step_apply_missing_tagged_na_new( - terms = x$terms, - role = x$role, - trained = TRUE, - columns = recipes::terms_select(x$terms, info = info), - tag_type = x$tag_type, - skip = x$skip, - id = x$id - ) -} - -#' @export -bake.step_apply_missing_tagged_na <- function(object, new_data, ...) { - for (variable in object$columns) { - NA_index <- is.na(new_data[[variable]]) - tagged_NA_index <- haven::is_tagged_na(new_data[[variable]]) - true_NA_index <- !(NA_index == tagged_NA_index) - if (is.numeric(new_data[[variable]])) { - new_data[true_NA_index, variable] <- - haven::tagged_na(object$tag_type) - }else{ - if (!paste("NA(", object$tag_type, ")", sep = "") %in% levels(new_data[[variable]])) { - levels(new_data[[variable]]) <- c(levels(new_data[[variable]]), paste("NA(", object$tag_type, ")", sep = "")) - } - new_data[true_NA_index, variable] <- paste("NA(", object$tag_type, ")", sep = "") - } - } - tibble::as.tibble(new_data) -} diff --git a/R/step_naomit.R b/R/step_naomit.R deleted file mode 100644 index 0a753e60..00000000 --- a/R/step_naomit.R +++ /dev/null @@ -1,119 +0,0 @@ -#' Remove observations with missing values -#' -#' `step_tagged_naomit` creates a *specification* of a recipe step that -#' will add remove observations (rows of data) if they contain NA -#' or NaN values. -#' -#' @param recipe A recipe object. The step will be added to the sequence of -#' operations for this recipe. -#' @param ... One or more selector functions to choose which -#' variables will be used to create the dummy variables. See -#' [selections()] for more details. The selected -#' variables must be factors. -#' @param role Unused, include for consistency with other steps. -#' @param trained A logical to indicate if the quantities for preprocessing -#' have been estimated. Again included for consistency. -#' @param columns A character string of variable names that will -#' be populated (eventually) by the `terms` argument. -#' @param id A character string that is unique to this step to identify it. -#' @param skip A logical. Should the step be skipped when the -#' recipe is baked by [bake.recipe()]? While all operations are baked -#' when [prep.recipe()] is run, some operations may not be able to be -#' conducted on new data (e.g. processing the outcome variable(s)). -#' Care should be taken when using `skip = TRUE` as it may affect -#' the computations for subsequent operations -#' -#' @rdname step_tagged_naomit -#' @return An updated version of `recipe` with the -#' new step added to the sequence of existing steps (if any). -#' @export -#' -#' @examples -#' -#' recipe(Ozone ~ ., data = airquality) %>% -#' step_tagged_naomit(Solar.R) %>% -#' prep(airquality, verbose = FALSE) %>% -#' juice() -#' -#' @seealso [recipe()] [prep.recipe()] [bake.recipe()] -step_tagged_naomit <- function(recipe, - ..., - role = NA, - trained = FALSE, - columns = NULL, - tag_type = NULL, - skip = FALSE, - id = recipes::rand_id("tagged_naomit")) { - recipes::add_step( - recipe, - step_tagged_naomit_new( - terms = recipes::ellipse_check(...), - role = role, - trained = trained, - columns = columns, - tag_type = trimws(tag_type), - skip = skip, - id = id - ) - ) -} - -step_tagged_naomit_new <- - function(terms, role, trained, columns, tag_type, skip, id) { - step( - subclass = "tagged_naomit", - terms = terms, - role = role, - trained = trained, - columns = columns, - tag_type = tag_type, - skip = skip, - id = id - ) - } - -#' @export -prep.step_tagged_naomit <- function(x, training, info = NULL, ...) { - step_tagged_naomit_new( - terms = x$terms, - role = x$role, - trained = TRUE, - columns = recipes::terms_select(x$terms, info = info), - tag_type = x$tag_type, - skip = x$skip, - id = x$id - ) -} - -#' @export -bake.step_tagged_naomit <- function(object, new_data, ...) { - if (is.null(object$tag_type)) { - tibble::as_tibble(tidyr::drop_na(new_data, object$columns)) - } else{ - for (column in object$columns) { - if(is.numeric(new_data[[column]])){ - new_data <- new_data[!haven::is_tagged_na(new_data[[column]], tag = object$tag_type),] - }else{ - new_data <- new_data[!is_equal(new_data[[column]], paste("NA(",object$tag_type,")",sep = "")), ] - } - } - tibble::as.tibble(new_data) - } -} - -print.step_tagged_naomit <- - function(x, width = max(20, options()$width - 30), ...) { - cat("Removing rows with NA values in ", sep = "") - cat(tidyr::drop_naformat_selectors(x$terms, width = width)) - cat("\n") - invisible(x) - } - -#' @rdname step_tagged_naomit -#' @param x A `step_tagged_naomit` object. -#' @export -tidy.step_tagged_naomit <- function(x, ...) { - res <- recipes::simple_terms(x, ...) - res$id <- x$id - res -} diff --git a/R/step_rcs.R b/R/step_rcs.R deleted file mode 100644 index 2e201c49..00000000 --- a/R/step_rcs.R +++ /dev/null @@ -1,302 +0,0 @@ -#' @export -step_rcs <- function(recipe, - ..., - role = 'predictor', - trained = FALSE, - skip = FALSE, - id = recipes::rand_id("RCS"), - number_of_knots = 3, - knots = NULL, - new_names = list()) { - terms <- recipes::ellipse_check(...) - recipes::add_step( - recipe, - step_rcs_new( - terms = terms, - trained = trained, - role = role, - append = append, - id = id, - skip = skip, - number_of_knots = number_of_knots, - knots = knots, - new_names = new_names - ) - ) -} - -step_rcs_new <- - function(terms, - role, - trained, - id, - skip, - number_of_knots, - knots, - new_names) { - step( - subclass = "rcs", - terms = terms, - role = role, - trained = trained, - id = id, - skip = skip, - number_of_knots = number_of_knots, - knots = knots, - new_names = new_names - ) - } -#' @export -prep.step_rcs <- function(x, training, info = NULL, ...) { - require(Hmisc) - for (variable_name in recipes::terms_select(x$terms, info = info)) { - # Verify the training data variable - if (is.null(training[[variable_name]])) { - stop(paste(variable_name, 'is missing from the training data')) - } - if (!is.numeric(training[[variable_name]])) { - stop(paste( - variable_name, - 'is not numeric therefore rcs cannot - be calculated' - )) - } - x$knots[[variable_name]] <- Hmisc::rcspline.eval(training[[variable_name]], nk = x$number_of_knots, knots.only = TRUE) - } - - return( - step_rcs_new( - terms = x$terms, - trained = TRUE, - role = x$role, - skip = x$skip, - id = x$id, - number_of_knots = x$number_of_knots, - knots = x$knots, - new_names = x$new_names - ) - ) -} - -#' @export -bake.step_rcs <- function(object, new_data, ...) { - require(tibble) - for (variable_name in names(object$knots)) { - # TESTING - norm <- 2 - type <- 'ordinary' - # TESTING - knot1 <- object$knots[[variable_name]][1] - knotnk <- object$knots[[variable_name]][object$number_of_knots[[variable_name]]] - knotnk1 <- object$knots[[variable_name]][object$number_of_knots[[variable_name]] - 1] - - kd <- if (norm == 0) - 1 - else if (norm == 1) - knotnk - knotnk1 - else - (knotnk - knot1)^(2 / 3) - - power <- if (type == "integral") - 4 - else - 3 - - for(knot_index in 1:(object$number_of_knots[[variable_name]]) - 2){ - - knot_name <- object$new_names[[variable_name]][[knot_index]] - new_data[, knot_name] <- - pmax((new_data[[variable_name]] - object$knots[[variable_name]][knot_index]) / kd, 0)^power + - ((knotnk1 - object$knots[[variable_name]][knot_index]) * - pmax((new_data[[variable_name]] - knotnk) / kd, 0)^power - - (knotnk - object$knots[[variable_name]][knot_index]) * (pmax(( - new_data[[variable_name]] - knotnk1 - ) / kd, 0)^power)) / (knotnk - knotnk1) - } - } - - return(as_tibble(new_data)) -} - -print.step_rcs <- - function(x, width = max(20, options()$width - 30), ...) { - cat("z score for ", sep = "") - recipes:::printer(names(x$means), x$terms, x$trained, width = width) - invisible(x) - } - -# prep_slice_rcs_eval <- -# function(original_vector, -# knots = NULL, -# number_of_knots = 5, -# include_original_column = FALSE, -# knots.only = FALSE, -# type = "ordinary", -# norm = 2, -# rpm = NULL, -# pc = FALSE, -# fractied = 0.05) -# { -# if (!length(knots)) { -# xx <- original_vector[!is.na(original_vector)] -# n <- length(xx) -# if (n < 6) -# stop("knots not specified, and < 6 non-missing observations") -# if (number_of_knots < 3) -# stop("number_of_knots must be >= 3") -# xu <- sort(unique(xx)) -# nxu <- length(xu) -# if ((nxu - 2) <= number_of_knots) { -# warning( -# sprintf( -# "%s knots requested with %s unique values of original_vector. knots set to %s interior values.", -# number_of_knots, -# nxu, -# nxu - 2 -# ) -# ) -# knots <- xu[-c(1, length(xu))] -# } -# else { -# outer <- if (number_of_knots > 3) -# 0.05 -# else -# 0.1 -# if (number_of_knots > 6) -# outer <- 0.025 -# knots <- numeric(number_of_knots) -# overrideFirst <- overrideLast <- FALSE -# nke <- number_of_knots -# firstknot <- lastknot <- numeric(0) -# if (fractied > 0 && fractied < 1) { -# f <- table(xx) / n -# if (max(f[-c(1, length(f))]) < fractied) { -# if (f[1] >= fractied) { -# firstknot <- min(xx[xx > min(xx)]) -# xx <- xx[xx > firstknot] -# nke <- nke - 1 -# overrideFirst <- TRUE -# } -# if (f[length(f)] >= fractied) { -# lastknot <- max(xx[xx < max(xx)]) -# xx <- xx[xx < lastknot] -# nke <- nke - 1 -# overrideLast <- TRUE -# } -# } -# } -# if (nke == 1) -# knots <- median(xx) -# else { -# if (nxu <= nke) -# knots <- xu -# else { -# p <- if (nke == 2) -# seq(0.5, 1 - outer, length = nke) -# else -# seq(outer, 1 - outer, length = nke) -# knots <- quantile(xx, p) -# if (length(unique(knots)) < min(nke, 3)) { -# knots <- quantile(xx, seq(outer, 1 - outer, -# length = 2 * nke)) -# if (length(firstknot) && length(unique(knots)) < -# 3) { -# midval <- if (length(firstknot) && length(lastknot)) -# (firstknot + lastknot) / 2 -# else -# median(xx) -# knots <- -# sort(c( -# firstknot, -# midval, -# if (length(lastknot)) -# lastknot -# else -# quantile(xx, -# 1 - outer) -# )) -# } -# if ((nu <- length(unique(knots))) < 3) { -# cat("Fewer than 3 unique knots. Frequency table of variable:\n") -# print(table(original_vector)) -# stop() -# } -# warning( -# paste( -# "could not obtain", -# nke, -# "interior knots with default algorithm.\n", -# "Used alternate algorithm to obtain", -# nu, -# "knots" -# ) -# ) -# } -# } -# if (length(xx) < 100) { -# xx <- sort(xx) -# if (!overrideFirst) -# knots[1] <- xx[5] -# if (!overrideLast) -# knots[nke] <- xx[length(xx) - 4] -# } -# } -# knots <- c(firstknot, knots, lastknot) -# } -# } -# knots <- sort(unique(knots)) -# number_of_knots <- length(knots) -# if (number_of_knots < 3) { -# cat("fewer than 3 unique knots. Frequency table of variable:\n") -# print(table(original_vector)) -# stop() -# } -# if (knots.only) -# return(knots) -# if (length(rpm)) -# original_vector[is.na(original_vector)] <- rpm -# xx <- matrix(1.1, length(original_vector), number_of_knots - 2) -# knot1 <- knots[1] -# knotnk <- knots[number_of_knots] -# knotnk1 <- knots[number_of_knots - 1] -# kd <- if (norm == 0) -# 1 -# else if (norm == 1) -# knotnk - knotnk1 -# else -# (knotnk - knot1) -# ^ (2 / 3) -# power <- if (type == "integral") -# 4 -# else -# 3 -# } -# -# bake_sclice_rcs_eval <- function(working_data,) { -# # Calculate number_of_knots -# -# # -# -# for (j in 1:(number_of_knots - 2)) { -# xx[, j] <- pmax((original_vector - knots[j]) / kd, 0) ^ power + -# ((knotnk1 - knots[j]) * -# pmax((original_vector - knotnk) / kd, 0) ^ power - -# (knotnk - knots[j]) * -# (pmax(( -# original_vector - knotnk1 -# ) / kd, 0) ^ power)) / (knotnk - knotnk1) -# } -# if (power == 4) -# xx <- cbind(original_vector, original_vector * original_vector / 2, xx * kd / 4) -# else if (include_original_column) -# xx <- cbind(original_vector, xx) -# if (pc) { -# p <- prcomp(xx, scale = TRUE, center = TRUE) -# pcparms <- p[c("center", "scale", "rotation")] -# xx <- p$original_vector -# attr(xx, "pcparms") <- pcparms -# } -# attr(xx, "knots") <- knots -# xx -# -# } \ No newline at end of file diff --git a/R/step_with_formula_parsing.R b/R/step_with_formula_parsing.R index 3cbe9576..5c3a0e41 100644 --- a/R/step_with_formula_parsing.R +++ b/R/step_with_formula_parsing.R @@ -1,3 +1,4 @@ +# parse_formula_step <- function(data, sequence_element, modules, diff --git a/R/step_z.R b/R/step_z.R deleted file mode 100644 index bd6bce6f..00000000 --- a/R/step_z.R +++ /dev/null @@ -1,114 +0,0 @@ -#' @export -step_z <- function(recipe, - ..., - role = 'predictor', - trained = FALSE, - skip = FALSE, - id = recipes::rand_id("Z"), - append = TRUE, - suffix = "_Z", - means = NULL, - sd = NULL, - na.rm = FALSE, - trim = 0) { - terms <- recipes::ellipse_check(...) - recipes::add_step( - recipe, - step_z_new( - terms = terms, - trained = trained, - role = role, - append = append, - suffix = suffix, - means = means, - sd = sd, - na.rm = na.rm, - trim = trim, - skip = skip, - id = id - ) - ) -} - -step_z_new <- - function(terms, - role, - trained, - append, - suffix, - means, - sd, - na.rm, - trim, - skip, - id) { - step( - subclass = "z", - terms = terms, - role = role, - trained = trained, - append = append, - suffix = suffix, - means = means, - sd = sd, - na.rm = na.rm, - trim = trim, - skip = skip, - id = id - ) - } -#' @export -prep.step_z <- function(x, training, info = NULL, ...) { - for (variable_name in recipes::terms_select(x$terms, info = info)) { - # Verify the training data variable - if (is.null(training[[variable_name]])) { - stop(paste(variable_name, 'is missing from the training data')) - } - if (!is.numeric(training[[variable_name]])) { - stop(paste(variable_name, 'is not numeric therefore zScore cannot - be calculated')) - } - # Calculate the Standard Deviation for the variable - x$means[[variable_name]] <- mean(training[[variable_name]], trim = x$trim, na.rm = x$na.rm) - x$sd[[variable_name]] <- sd(training[[variable_name]], na.rm = x$na.rm) - # Calculate the mean for the variable - } - - return( - step_z_new( - terms = x$terms, - trained = TRUE, - role = x$role, - append = x$append, - suffix = x$suffix, - means = x$means, - sd = x$sd, - na.rm = x$na.rm, - trim = x$trim, - skip = x$skip, - id = x$id - ) - ) -} - -#' @export -bake.step_z <- function(object, new_data, ...) { - require(tibble) - for (varName in names(object$means)) { - newVarName <- paste(varName, object$suffix, sep = "") - new_data[newVarName] <- (new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]] - if (!object$append) { - new_data[varName] <- NULL - } - - } - - return(as_tibble(new_data)) -} - -print.step_z <- - function(x, width = max(20, options()$width - 30), ...) { - cat("z score for ", sep = "") - recipes:::printer(names(x$means), x$terms, x$trained, width = width) - invisible(x) - } diff --git a/R/strings.R b/R/strings.R index caea3eb0..e2e4b49e 100644 --- a/R/strings.R +++ b/R/strings.R @@ -50,6 +50,7 @@ pkg.globals$bllFlowContent.AdditionalMetaData <- "additionalDDIMetaData" pkg.globals$bllFlowContent.WorkingData <- "working_data" pkg.globals$bllFlowContent.PreviousData <- "previous_module_data" pkg.globals$bllFlowContent.Sequence <- "sequence_number" +pkg.globals$bllFlowContent.Class <- "bllflow" # MSW Column Names pkg.globals$MSW.Variables.Columns.Variable <- "variable" diff --git a/R/table-one-long.R b/R/table-one-long.R index b19f17f2..4d1c21ba 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -1,91 +1,28 @@ -#' Summary Data Long Table -#' -#' Creates a Long table to summarise data from multiple tables in one convenient table. -#' Its primary use is to convert Table one tables into a long table. -#' The optional arguments allow appending to long table as well as addition of labels -#' -#' @param table_one the table one object to be converted into a long table -#' @param long_table the optional long table to append the table one information to -#' @param bll_flow_model The optional bllFlow object containing labels and extra information on the variables -#' @return Returns the long table or the bll_flow_model with long table attached -#' -#' @examples -#' library(survival) -#' data(pbc) -#' pbc$exp_percentile <- runif(nrow(pbc), 0, 1) -#' pbc$ageGroup <- ifelse(pbc$age < 20, 1, -#' ifelse(pbc$age >= 20 & pbc$age < 40, 2, -#' ifelse(pbc$age >= 40 & pbc$age < 80, 3, -#' ifelse(pbc$age >= 80, 4, NA)))) -#' -#' library(bllflow) -#' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' ddi <- read_DDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbc_model <- BLLFlow(pbc, variables_sheet, variable_details, ddi) -#' -#' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") -#' pbc_summary_table_no_labels <- summary_data_long(pbc_table_one) -#' pbc_long_table_with_label <- summary_data_long(pbc_table_one, bll_flow_model = pbc_model, long_table = pbc_summary_table_no_labels) -#'@export -summary_data_long <- - function(table_one, - long_table = NULL, - bll_flow_model = NULL) { - if (is.null(table_one) & is.null(long_table)) { - warning("No table one or long table was passed to summary_data_long", - call. = FALSE) - } - if (is.null(long_table)) { - long_table <- data.frame(stringsAsFactors = FALSE) - long_table[[pkg.globals$LongTable.VariableCategory]] <- - character() - long_table[[pkg.globals$LongTable.Variable]] <- character() - long_table[[pkg.globals$LongTable.Prevalence]] <- numeric() - long_table[[pkg.globals$LongTable.Frequency]] <- numeric() - long_table[[pkg.globals$LongTable.NMissing]] <- numeric() - long_table[[pkg.globals$LongTable.Mean]] <- numeric() - long_table[[pkg.globals$LongTable.SD]] <- numeric() - long_table[[pkg.globals$LongTable.Percentile25]] <- numeric() - long_table[[pkg.globals$LongTable.Percentile75]] <- numeric() - } else{ - long_table <- long_table[[pkg.globals$LongTable.LongTable]] - } - return_table <- - add_to_long_table(table_one, long_table, bll_flow_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]]) - if (!pkg.globals$LongTable.ClassName %in% class(return_table)) { - class(return_table) <- - append(class(return_table), pkg.globals$LongTable.ClassName) - } - return_table <- unique(return_table) - return_summary_data <- list(summary_data = return_table) - class(return_summary_data) <- "SummaryData" - - return(return_summary_data) - - } #' Create Table One #' -#' Creates Table One using the tableone package +#' Creates Table One using the tableone package if a bllflow object is passed a custom function +#' then extracts the necessary data for tableone call from the object avoiding unnecessary arguments. +#' #' @export CreateTableOne <- function(x = NULL, ...) { UseMethod("CreateTableOne", x) } -#' Create Table One using BLLFlow Object +#' Create Table One using bllflow Object #' -#' Creates table one using the information present in the passed bllFlow object +#' Creates table one using the information present in the passed bllflow object #' specifically uses working data as the data, #' additional arguments can be passed to create a specific table one. #' However if no optional args are passed the variable info stored in variables MSW is used. #' -#' @param bll_flow_model The bllFlow object -#' @param vars The optional vars to use in creation of table one if no vars are passed then vars in MSW variables is used -#' @param strata The optional strata to use in creation of table one if no strata is passed no strata is used -#' @param factor_vars The optional factor_vars (categorical variables) used in creation of table one if nothing is passed +#' @param bll_flow_model The bllflow object +#' @param vars The optional vars to use in creation of tableone if no vars are passed then vars in MSW variables is used +#' @param strata The optional strata to use in creation of tableone if no strata is passed no strata is used +#' @param factor_vars The optional factor_vars (categorical variables) used in creation of tableone if nothing is passed #' the MSW variables sheet is used to determine variable types -#' +#' @param ... Additional arguments to pass to the tableone::CreateTableOne function call +#' #' @return returns a table one \href{https://cran.r-project.org/web/packages/tableone/index.html}{tableone} object #' #' @examples @@ -100,17 +37,17 @@ CreateTableOne <- function(x = NULL, ...) { #' library(bllflow) #' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' ddi <- ReadDDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbc_model <- BLLFlow(pbc, variables_sheet, variable_details, ddi) +#' ddi <- read_DDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") +#' pbc_model <- build_bllflow(pbc, variables_sheet, variable_details, ddi) #' #' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") -#' +#' @importFrom tableone CreateTableOne #' @export -CreateTableOne.BLLFlow <- function(bll_flow_model, +CreateTableOne.bllfow <- function(bll_flow_model, vars = NULL, strata = NULL, factor_vars = NULL, - select_role = NULL,...) { + select_role = NULL, ...) { # ----Step 1: pull from variables in bll_flow_model ---- variables_sheet <- bll_flow_model[[pkg.globals$bllFlowContent.Variables]] @@ -157,247 +94,315 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, #' @export CreateTableOne.default <- tableone::CreateTableOne -# Function to create a long table one for one tableOne -add_to_long_table <- - function(passed_table, long_table, variable_details) { - # ----Step 1: Populate long table from cont and cat tableone tables ---- - # Call Cont table extraction if tableOne contains ContTable - returned_long_tables <- list() - # table_count is used to populate list and avoid list append issues - table_count <- 0 - if (!is.null(passed_table$ContTable)) { - dim_names <- attr(passed_table$ContTable, "dimnames") - strata_values <- clean_strata_values(dim_names) - table_count <- table_count + 1 - cont_table_long_table <- - extract_data_from_cont_table( - passed_table$ContTable, - attr( - passed_table$ContTable, - pkg.globals$tableOne.StrataVarName - ), - strata_values, - long_table, - variable_details - ) - returned_long_tables[[table_count]] <- cont_table_long_table - } - - # Call Cat table extraction if tableOne contains CatTable - if (!is.null(passed_table$CatTable)) { - dim_names <- attr(passed_table$CatTable, "dimnames") - strata_values <- clean_strata_values(dim_names) - table_count <- table_count + 1 - cat_table_long_table <- - extract_data_from_cat_table( - passed_table$CatTable, - attr( - passed_table$CatTable, - pkg.globals$tableOne.StrataVarName - ), - strata_values, - long_table, - variable_details - ) - returned_long_tables[[table_count]] <- cat_table_long_table - } - - # ----Step 2: Add any missing columns to the newly created tables---- - for (table_to_append in returned_long_tables) { - for (column_missing in colnames(long_table)) { - if (!column_missing %in% colnames(table_to_append)) { - table_to_append[[column_missing]] <- NA - } - } - # synchronizing columns to avoid binding issues - for (column_missing in colnames(table_to_append)) { - if (!column_missing %in% colnames(long_table)) { - # in case of zero row table columns need to be declared in columns <- dataType() - # Set data type of missing column to type of append table - if (nrow(long_table) == 0) { - class(long_table[[column_missing]]) <- - class(table_to_append[[column_missing]]) - } else { - long_table[[column_missing]] <- NA - } - } - } - - long_table <- - rbind(long_table, table_to_append, stringsAsFactors = FALSE) - } - - return(long_table) - } - -# Create long table from contTable -extract_data_from_cont_table <- - function(cont_table, - strata_name, - strata_values, - long_table, - variable_details) { - strata_split_name <- character() - - # ----Step 1: Split the strata name into the two variables ---- - if (!is.null(strata_name)) { - strata_split_name <- - unlist(strsplit(as.character(strata_name), split = ":")) - } else{ - strata_split_name <- strata_name - } - - # ----Step 2: Add columns to long table - long_table_rows <- data.frame() - - # loop through each strata columns - # ----Step 3: Extract information for each new row of the longtable ---- - for (strata_index in 1:length(cont_table)) { - variables <- (row.names(cont_table[[strata_index]])) - for (row in 1:nrow(cont_table[[strata_index]])) { - strata_split_values <- - unlist(strsplit(as.character(strata_values[[strata_index]]), split = ":")) - # extract all the information for that row - num <- cont_table[[strata_index]][row, pkg.globals$tableOne.N] - n_miss <- - cont_table[[strata_index]][row, pkg.globals$tableOne.Miss] - row_mean <- - cont_table[[strata_index]][row, pkg.globals$tableOne.Mean] - row_SD <- - cont_table[[strata_index]][row, pkg.globals$tableOne.SD] - row_percentile25 <- - cont_table[[strata_index]][row, pkg.globals$tableOne.p25] - row_percentile75 <- - cont_table[[strata_index]][row, pkg.globals$tableOne.p75] - - # create the row to add to tableOne Long - group_by_list <- list() - if (length(strata_split_name) > 0) { - group_by_list <- - fill_in_group_by_columns(strata_split_name, - strata_split_values, - group_by_list, - variable_details) - } - - # ----Step 4: Create long table row ---- - long_table_row <- list() - long_table_row[[pkg.globals$LongTable.VariableCategory]] <- NA - long_table_row[[pkg.globals$LongTable.Variable]] <- - variables[[row]] - long_table_row[[pkg.globals$LongTable.Prevalence]] <- NA - long_table_row[[pkg.globals$LongTable.Frequency]] <- num - long_table_row[[pkg.globals$LongTable.NMissing]] <- n_miss - long_table_row[[pkg.globals$LongTable.Mean]] <- row_mean - long_table_row[[pkg.globals$LongTable.SD]] <- row_SD - long_table_row[[pkg.globals$LongTable.Percentile25]] <- - row_percentile25 - long_table_row[[pkg.globals$LongTable.Percentile75]] <- - row_percentile75 - long_table_row <- append(long_table_row, group_by_list) - - # ----Step 5: Clean the row - for (each_element_index in 1:length(long_table_row)) { - # remove empty classes to avoid bind conflicts - # example character(0) - if (length(long_table_row[[each_element_index]]) == 0) { - long_table_row[[each_element_index]] <- NA - } - } - - # ----Step 6: Add row to the rest of the rows---- - long_table_rows <- - rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) - } - } - - return(long_table_rows) - } - -# Create long table from CatTable -extract_data_from_cat_table <- - function(cat_table, - strata_name, - strata_values, - long_table, - variable_details) { - # ----Step 1: Split the strata name into the two variables ---- - variables_checked <- 0 - var_names <- attr(cat_table[[1]], "names") - strata_split_name <- - unlist(strsplit(as.character(strata_name), split = ":")) - # Adds group by columns not found in the long table - - # ----Step 2: Add columns to long table - long_table_rows <- data.frame() - - # ----Step 3: Extract information for each new row of the longtable ---- - for (strata_counter in 1:length(cat_table)) { - strata_split_values <- - unlist(strsplit(as.character(strata_values[[strata_counter]]), split = ":")) - # Loop through the tables of each variable - for (selected_variable_table in cat_table[[strata_counter]]) { - # Used to specify the variable being writen - variables_checked <- variables_checked + 1 - - # Loop through the levels of each variable - for (row in 1:nrow(selected_variable_table)) { - n_miss <- selected_variable_table[row, pkg.globals$tableOne.Miss] - frequency <- - selected_variable_table[row, pkg.globals$tableOne.Freq] - lev_name <- - selected_variable_table[row, pkg.globals$tableOne.Level] - prevalence <- - selected_variable_table[row, pkg.globals$tableOne.Percent] - group_by_list <- list() - if (length(strata_split_name) > 0) { - group_by_list <- - fill_in_group_by_columns(strata_split_name, - strata_split_values, - group_by_list, - variable_details) - if (!is.null(variable_details)) { - group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]] <- - variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], var_names[[variables_checked]]) & - is_equal(variable_details[[pkg.globals$argument.CatStartValue]], as.character(lev_name)), pkg.globals$argument.CatStartLabel] - # If empty add NA - if (length(group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]]) == 0) { - group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]] <- NA - } - } - } - - # ----Step 4: Create long table row ---- - long_table_row <- list() - long_table_row[[pkg.globals$LongTable.VariableCategory]] <- - lev_name - long_table_row[[pkg.globals$LongTable.Variable]] <- - var_names[variables_checked] - long_table_row[[pkg.globals$LongTable.Prevalence]] <- - prevalence - long_table_row[[pkg.globals$LongTable.Frequency]] <- - frequency - long_table_row[[pkg.globals$LongTable.NMissing]] <- n_miss - long_table_row[[pkg.globals$LongTable.Mean]] <- NA - long_table_row[[pkg.globals$LongTable.SD]] <- NA - long_table_row[[pkg.globals$LongTable.Percentile25]] <- NA - long_table_row[[pkg.globals$LongTable.Percentile75]] <- NA - long_table_row <- append(long_table_row, group_by_list) - - # ----Step 5: Clean the row - for (each_element_index in 1:length(long_table_row)) { - if (length(long_table_row[[each_element_index]]) == 0) { - long_table_row[[each_element_index]] <- NA - } - } - - # ----Step 6: Add row to the rest of the rows---- - long_table_rows <- - rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) - } - } - variables_checked <- 0 - } - - return(long_table_rows) - } \ No newline at end of file +# ---------- WIP Needs further testing ---------- +#' #' Summary Data Long Table +#' #' +#' #' Creates a Long table to summarise data from multiple tables in one convenient table. +#' #' Its primary use is to convert Table one tables into a long table. +#' #' The optional arguments allow appending to long table as well as addition of labels +#' #' +#' #' @param table_one the table one object to be converted into a long table +#' #' @param long_table the optional long table to append the table one information to +#' #' @param bll_flow_model The optional bllFlow object containing labels and extra information on the variables +#' #' @return Returns the long table or the bll_flow_model with long table attached +#' #' +#' #' @examples +#' #' library(survival) +#' #' data(pbc) +#' #' pbc$exp_percentile <- runif(nrow(pbc), 0, 1) +#' #' pbc$ageGroup <- ifelse(pbc$age < 20, 1, +#' #' ifelse(pbc$age >= 20 & pbc$age < 40, 2, +#' #' ifelse(pbc$age >= 40 & pbc$age < 80, 3, +#' #' ifelse(pbc$age >= 80, 4, NA)))) +#' #' +#' #' library(bllflow) +#' #' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) +#' #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) +#' #' ddi <- read_DDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") +#' #' pbc_model <- BLLFlow(pbc, variables_sheet, variable_details, ddi) +#' #' +#' #' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") +#' #' pbc_summary_table_no_labels <- summary_data_long(pbc_table_one) +#' #' pbc_long_table_with_label <- summary_data_long(pbc_table_one, bll_flow_model = pbc_model, long_table = pbc_summary_table_no_labels) +#' #'@export +#' summary_data_long <- +#' function(table_one, +#' long_table = NULL, +#' bll_flow_model = NULL) { +#' if (is.null(table_one) & is.null(long_table)) { +#' warning("No table one or long table was passed to summary_data_long", +#' call. = FALSE) +#' } +#' if (is.null(long_table)) { +#' long_table <- data.frame(stringsAsFactors = FALSE) +#' long_table[[pkg.globals$LongTable.VariableCategory]] <- +#' character() +#' long_table[[pkg.globals$LongTable.Variable]] <- character() +#' long_table[[pkg.globals$LongTable.Prevalence]] <- numeric() +#' long_table[[pkg.globals$LongTable.Frequency]] <- numeric() +#' long_table[[pkg.globals$LongTable.NMissing]] <- numeric() +#' long_table[[pkg.globals$LongTable.Mean]] <- numeric() +#' long_table[[pkg.globals$LongTable.SD]] <- numeric() +#' long_table[[pkg.globals$LongTable.Percentile25]] <- numeric() +#' long_table[[pkg.globals$LongTable.Percentile75]] <- numeric() +#' } else{ +#' long_table <- long_table[[pkg.globals$LongTable.LongTable]] +#' } +#' return_table <- +#' add_to_long_table(table_one, long_table, bll_flow_model[[pkg.globals$bllFlowContent.PopulatedVariableDetails]]) +#' if (!pkg.globals$LongTable.ClassName %in% class(return_table)) { +#' class(return_table) <- +#' append(class(return_table), pkg.globals$LongTable.ClassName) +#' } +#' return_table <- unique(return_table) +#' return_summary_data <- list(summary_data = return_table) +#' class(return_summary_data) <- "SummaryData" +#' +#' return(return_summary_data) +#' +#' } +#' +# # Function to create a long table one for one tableOne +# add_to_long_table <- +# function(passed_table, long_table, variable_details) { +# # ----Step 1: Populate long table from cont and cat tableone tables ---- +# # Call Cont table extraction if tableOne contains ContTable +# returned_long_tables <- list() +# # table_count is used to populate list and avoid list append issues +# table_count <- 0 +# if (!is.null(passed_table$ContTable)) { +# dim_names <- attr(passed_table$ContTable, "dimnames") +# strata_values <- clean_strata_values(dim_names) +# table_count <- table_count + 1 +# cont_table_long_table <- +# extract_data_from_cont_table( +# passed_table$ContTable, +# attr( +# passed_table$ContTable, +# pkg.globals$tableOne.StrataVarName +# ), +# strata_values, +# long_table, +# variable_details +# ) +# returned_long_tables[[table_count]] <- cont_table_long_table +# } +# +# # Call Cat table extraction if tableOne contains CatTable +# if (!is.null(passed_table$CatTable)) { +# dim_names <- attr(passed_table$CatTable, "dimnames") +# strata_values <- clean_strata_values(dim_names) +# table_count <- table_count + 1 +# cat_table_long_table <- +# extract_data_from_cat_table( +# passed_table$CatTable, +# attr( +# passed_table$CatTable, +# pkg.globals$tableOne.StrataVarName +# ), +# strata_values, +# long_table, +# variable_details +# ) +# returned_long_tables[[table_count]] <- cat_table_long_table +# } +# +# # ----Step 2: Add any missing columns to the newly created tables---- +# for (table_to_append in returned_long_tables) { +# for (column_missing in colnames(long_table)) { +# if (!column_missing %in% colnames(table_to_append)) { +# table_to_append[[column_missing]] <- NA +# } +# } +# # synchronizing columns to avoid binding issues +# for (column_missing in colnames(table_to_append)) { +# if (!column_missing %in% colnames(long_table)) { +# # in case of zero row table columns need to be declared in columns <- dataType() +# # Set data type of missing column to type of append table +# if (nrow(long_table) == 0) { +# class(long_table[[column_missing]]) <- +# class(table_to_append[[column_missing]]) +# } else { +# long_table[[column_missing]] <- NA +# } +# } +# } +# +# long_table <- +# rbind(long_table, table_to_append, stringsAsFactors = FALSE) +# } +# +# return(long_table) +# } +# +# # Create long table from contTable +# extract_data_from_cont_table <- +# function(cont_table, +# strata_name, +# strata_values, +# long_table, +# variable_details) { +# strata_split_name <- character() +# +# # ----Step 1: Split the strata name into the two variables ---- +# if (!is.null(strata_name)) { +# strata_split_name <- +# unlist(strsplit(as.character(strata_name), split = ":")) +# } else{ +# strata_split_name <- strata_name +# } +# +# # ----Step 2: Add columns to long table +# long_table_rows <- data.frame() +# +# # loop through each strata columns +# # ----Step 3: Extract information for each new row of the longtable ---- +# for (strata_index in 1:length(cont_table)) { +# variables <- (row.names(cont_table[[strata_index]])) +# for (row in 1:nrow(cont_table[[strata_index]])) { +# strata_split_values <- +# unlist(strsplit(as.character(strata_values[[strata_index]]), split = ":")) +# # extract all the information for that row +# num <- cont_table[[strata_index]][row, pkg.globals$tableOne.N] +# n_miss <- +# cont_table[[strata_index]][row, pkg.globals$tableOne.Miss] +# row_mean <- +# cont_table[[strata_index]][row, pkg.globals$tableOne.Mean] +# row_SD <- +# cont_table[[strata_index]][row, pkg.globals$tableOne.SD] +# row_percentile25 <- +# cont_table[[strata_index]][row, pkg.globals$tableOne.p25] +# row_percentile75 <- +# cont_table[[strata_index]][row, pkg.globals$tableOne.p75] +# +# # create the row to add to tableOne Long +# group_by_list <- list() +# if (length(strata_split_name) > 0) { +# group_by_list <- +# fill_in_group_by_columns(strata_split_name, +# strata_split_values, +# group_by_list, +# variable_details) +# } +# +# # ----Step 4: Create long table row ---- +# long_table_row <- list() +# long_table_row[[pkg.globals$LongTable.VariableCategory]] <- NA +# long_table_row[[pkg.globals$LongTable.Variable]] <- +# variables[[row]] +# long_table_row[[pkg.globals$LongTable.Prevalence]] <- NA +# long_table_row[[pkg.globals$LongTable.Frequency]] <- num +# long_table_row[[pkg.globals$LongTable.NMissing]] <- n_miss +# long_table_row[[pkg.globals$LongTable.Mean]] <- row_mean +# long_table_row[[pkg.globals$LongTable.SD]] <- row_SD +# long_table_row[[pkg.globals$LongTable.Percentile25]] <- +# row_percentile25 +# long_table_row[[pkg.globals$LongTable.Percentile75]] <- +# row_percentile75 +# long_table_row <- append(long_table_row, group_by_list) +# +# # ----Step 5: Clean the row +# for (each_element_index in 1:length(long_table_row)) { +# # remove empty classes to avoid bind conflicts +# # example character(0) +# if (length(long_table_row[[each_element_index]]) == 0) { +# long_table_row[[each_element_index]] <- NA +# } +# } +# +# # ----Step 6: Add row to the rest of the rows---- +# long_table_rows <- +# rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) +# } +# } +# +# return(long_table_rows) +# } +# +# # Create long table from CatTable +# extract_data_from_cat_table <- +# function(cat_table, +# strata_name, +# strata_values, +# long_table, +# variable_details) { +# # ----Step 1: Split the strata name into the two variables ---- +# variables_checked <- 0 +# var_names <- attr(cat_table[[1]], "names") +# strata_split_name <- +# unlist(strsplit(as.character(strata_name), split = ":")) +# # Adds group by columns not found in the long table +# +# # ----Step 2: Add columns to long table +# long_table_rows <- data.frame() +# +# # ----Step 3: Extract information for each new row of the longtable ---- +# for (strata_counter in 1:length(cat_table)) { +# strata_split_values <- +# unlist(strsplit(as.character(strata_values[[strata_counter]]), split = ":")) +# # Loop through the tables of each variable +# for (selected_variable_table in cat_table[[strata_counter]]) { +# # Used to specify the variable being writen +# variables_checked <- variables_checked + 1 +# +# # Loop through the levels of each variable +# for (row in 1:nrow(selected_variable_table)) { +# n_miss <- selected_variable_table[row, pkg.globals$tableOne.Miss] +# frequency <- +# selected_variable_table[row, pkg.globals$tableOne.Freq] +# lev_name <- +# selected_variable_table[row, pkg.globals$tableOne.Level] +# prevalence <- +# selected_variable_table[row, pkg.globals$tableOne.Percent] +# group_by_list <- list() +# if (length(strata_split_name) > 0) { +# group_by_list <- +# fill_in_group_by_columns(strata_split_name, +# strata_split_values, +# group_by_list, +# variable_details) +# if (!is.null(variable_details)) { +# group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]] <- +# variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], var_names[[variables_checked]]) & +# is_equal(variable_details[[pkg.globals$argument.CatStartValue]], as.character(lev_name)), pkg.globals$argument.CatStartLabel] +# # If empty add NA +# if (length(group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]]) == 0) { +# group_by_list[[pkg.globals$LongTable.VariableCategoryLabel]] <- NA +# } +# } +# } +# +# # ----Step 4: Create long table row ---- +# long_table_row <- list() +# long_table_row[[pkg.globals$LongTable.VariableCategory]] <- +# lev_name +# long_table_row[[pkg.globals$LongTable.Variable]] <- +# var_names[variables_checked] +# long_table_row[[pkg.globals$LongTable.Prevalence]] <- +# prevalence +# long_table_row[[pkg.globals$LongTable.Frequency]] <- +# frequency +# long_table_row[[pkg.globals$LongTable.NMissing]] <- n_miss +# long_table_row[[pkg.globals$LongTable.Mean]] <- NA +# long_table_row[[pkg.globals$LongTable.SD]] <- NA +# long_table_row[[pkg.globals$LongTable.Percentile25]] <- NA +# long_table_row[[pkg.globals$LongTable.Percentile75]] <- NA +# long_table_row <- append(long_table_row, group_by_list) +# +# # ----Step 5: Clean the row +# for (each_element_index in 1:length(long_table_row)) { +# if (length(long_table_row[[each_element_index]]) == 0) { +# long_table_row[[each_element_index]] <- NA +# } +# } +# +# # ----Step 6: Add row to the rest of the rows---- +# long_table_rows <- +# rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) +# } +# } +# variables_checked <- 0 +# } +# +# return(long_table_rows) +# } \ No newline at end of file diff --git a/R/util-funcs.R b/R/util-funcs.R index d2e514e7..1c1aaa3d 100644 --- a/R/util-funcs.R +++ b/R/util-funcs.R @@ -1,4 +1,4 @@ -# Function to compare even with NA present +# Function to compare, even with NA present # This function returns TRUE wherever elements are the same, including NA's, # and false everywhere else. is_equal <- function(v1, v2) { @@ -10,80 +10,6 @@ is_equal <- function(v1, v2) { return(same) } -# Adds the column to the list as well as the dataframe that is passed -add_column <- - function(column_name, - table_to_add_to) { - if (!column_name %in% colnames(table_to_add_to)) { - if (nrow(table_to_add_to) == 0) { - table_to_add_to[, column_name] <- character() - } else { - table_to_add_to[, column_name] <- NA - } - } - - return(table_to_add_to) - } - -# Adds groupBy columns to long table -add_group_by_columns <- - function(strata_split_name, - long_table, - variable_details) { - for (group_by_index in 1:length(strata_split_name)) { - long_table <- - add_column(paste(pkg.globals$LongTable.GroupBy, group_by_index, sep = ""), - long_table) - long_table <- - add_column(paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = ""), - long_table) - - if (!is.null(variable_details)) { - long_table <- - add_column(paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = ""), - long_table) - long_table <- - add_column( - paste( - pkg.globals$LongTable.GroupByValueLabel, - group_by_index, - sep = "" - ), - long_table - ) - } - } - - return(long_table) - } - -# Fills group by columns with information from variable details -fill_in_group_by_columns <- - function(strata_split_name, - strata_split_values, - long_table_row, - variable_details) { - for (group_by_index in 1:length(strata_split_name)) { - long_table_row[[paste(pkg.globals$LongTable.GroupBy, group_by_index, sep = "")]] <- - strata_split_name[[group_by_index]] - long_table_row[[paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = "")]] <- - strata_split_values[[group_by_index]] - - if (!is.null(variable_details)) { - long_table_row[[paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = "")]] <- - variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & - is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.VariableStartLabel] - long_table_row[[paste(pkg.globals$LongTable.GroupByValueLabel, - group_by_index, - sep = "")]] <- - variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & - is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.CatStartLabel] - - } - } - - return(long_table_row) - } # Cleans strata values clean_strata_values <- @@ -94,3 +20,79 @@ clean_strata_values <- return(strata_values) } + +# ---------- WIP PART OF SUMMARY TABLE ---------- +# # Adds the column to the list as well as the dataframe that is passed +# add_column <- +# function(column_name, +# table_to_add_to) { +# if (!column_name %in% colnames(table_to_add_to)) { +# if (nrow(table_to_add_to) == 0) { +# table_to_add_to[, column_name] <- character() +# } else { +# table_to_add_to[, column_name] <- NA +# } +# } +# +# return(table_to_add_to) +# } +# +# # Adds groupBy columns to long table +# add_group_by_columns <- +# function(strata_split_name, +# long_table, +# variable_details) { +# for (group_by_index in 1:length(strata_split_name)) { +# long_table <- +# add_column(paste(pkg.globals$LongTable.GroupBy, group_by_index, sep = ""), +# long_table) +# long_table <- +# add_column(paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = ""), +# long_table) +# +# if (!is.null(variable_details)) { +# long_table <- +# add_column(paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = ""), +# long_table) +# long_table <- +# add_column( +# paste( +# pkg.globals$LongTable.GroupByValueLabel, +# group_by_index, +# sep = "" +# ), +# long_table +# ) +# } +# } +# +# return(long_table) +# } +# +# # Fills group by columns with information from variable details +# fill_in_group_by_columns <- +# function(strata_split_name, +# strata_split_values, +# long_table_row, +# variable_details) { +# for (group_by_index in 1:length(strata_split_name)) { +# long_table_row[[paste(pkg.globals$LongTable.GroupBy, group_by_index, sep = "")]] <- +# strata_split_name[[group_by_index]] +# long_table_row[[paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = "")]] <- +# strata_split_values[[group_by_index]] +# +# if (!is.null(variable_details)) { +# long_table_row[[paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = "")]] <- +# variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & +# is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.VariableStartLabel] +# long_table_row[[paste(pkg.globals$LongTable.GroupByValueLabel, +# group_by_index, +# sep = "")]] <- +# variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & +# is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.CatStartLabel] +# +# } +# } +# +# return(long_table_row) +# } From 02b457deaf4038d5f457d7305c3df3470dca58be Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Wed, 19 Feb 2020 16:16:12 -0500 Subject: [PATCH 084/123] . --- DESCRIPTION | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d9a1a125..00de4e99 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -32,21 +32,11 @@ Depends: haven, magrittr, rms -Imports: - rstudioapi, - glue, - plotly, - Hmisc, - tidyr, - dplyr Suggests: knitr, rmarkdown, - DT, magrittr, survival, - rms, - cmprsk, testthat URL: https://github.com/Big-Life-Lab/bllflow BugReports: https://github.com/Big-Life-Lab/bllflow/issues From 30eb690decf5c8886295515e070fb2b04b1d71f5 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Feb 2020 06:07:25 -0500 Subject: [PATCH 085/123] [Feature] Added sample config file --- DESCRIPTION | 3 ++- config.yml | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 config.yml diff --git a/DESCRIPTION b/DESCRIPTION index 00de4e99..c11a6c86 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,7 +31,8 @@ Depends: sjlabelled, haven, magrittr, - rms + rms, + config Suggests: knitr, rmarkdown, diff --git a/config.yml b/config.yml new file mode 100644 index 00000000..49aa6550 --- /dev/null +++ b/config.yml @@ -0,0 +1,16 @@ +# @Doug add anything u wish here +default: + variables: !expr cchsflow::variables + variable_details: !expr cchsflow::variable_details + modules: NULL + data: + cchs2001: !expr cchsflow::cchs2001_p + cchs2003: !expr cchsflow::cchs2003_p + cchs2005: !expr cchsflow::cchs2005_p + cchs2007_2008: !expr cchsflow::cchs2007_2008_p + cchs2009_2010: !expr cchsflow::cchs2009_2010_p + cchs2010: !expr cchsflow::cchs2010_p + cchs2011_2012: !expr cchsflow::cchs2011_2012_p + cchs2012: !expr cchsflow::cchs2012_p + cchs2013_2014: !expr cchsflow::cchs2013_2014_p + cchs2014: !expr cchsflow::cchs2014_p From 8b1b5e5eddcd83b39d2dee43f0e3365ca6b00ebb Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Feb 2020 07:50:41 -0500 Subject: [PATCH 086/123] [Feature] Config rec with table --- NAMESPACE | 43 +----- R/bll-flow-constructor-utility.R | 221 +++++++++++++++++++++---------- R/bll-flow.R | 6 +- config.yml | 2 + 4 files changed, 164 insertions(+), 108 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 79084f2e..6e814a08 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,56 +1,22 @@ # Generated by roxygen2: do not edit by hand -S3method(CreateTableOne,BLLFlow) +S3method(CreateTableOne,bllfow) S3method(CreateTableOne,default) -S3method(bake,step_apply_missing_tagged_na) -S3method(bake,step_meantest) -S3method(bake,step_rcs) -S3method(bake,step_tagged_naomit) -S3method(bake,step_z) -S3method(check_small_cells,Default) -S3method(check_small_cells,SummaryData) -S3method(check_small_cells,TableOne) -S3method(clean_max,BLLFlow) -S3method(clean_min,BLLFlow) -S3method(create_variable_details_template,BLLFlow) S3method(get_variables,BLLFlow) S3method(get_variables,default) -S3method(prep,step_apply_missing_tagged_na) -S3method(prep,step_meantest) -S3method(prep,step_rcs) -S3method(prep,step_tagged_naomit) -S3method(prep,step_z) -S3method(print,metaDataLog) S3method(run_module,BLLFlow) S3method(run_module,default) -S3method(tidy,step_tagged_naomit) -S3method(write_DDI_populated_MSW,BLLFlow) -S3method(write_DDI_populated_MSW,BLLFlowDDI) export(CreateTableOne) -export(apply_missing_tagged_na) +export(bllflow_config_init) +export(bllflow_config_read_data) +export(bllflow_config_rec_data) export(build_bllflow) -export(check_small_cells) -export(clean_max) -export(clean_min) -export(create_BLL_model_object) -export(create_variable_details_template) -export(get_DDI_description) -export(get_DDI_variables) -export(get_recipy) export(get_variables) export(is_equal) -export(read_DDI) export(read_data) export(rec_with_table) export(run_module) export(set_data_labels) -export(set_recipy) -export(step_meantest) -export(step_rcs) -export(step_tagged_naomit) -export(step_z) -export(update_MSW) -export(write_DDI_populated_MSW) importFrom(dplyr,do) importFrom(dplyr,rowwise) importFrom(dplyr,select) @@ -60,3 +26,4 @@ importFrom(sjlabelled,"set_label<-") importFrom(sjlabelled,set_label) importFrom(sjlabelled,set_labels) importFrom(stringr,str_match) +importFrom(tableone,CreateTableOne) diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index 327503f1..e86cd7ab 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -1,80 +1,163 @@ +#' Initialize bllflow from provided config file +#' +#' Used the provided config file and matching name to load the correct config +#' type +#' +#' @param config_name = NULL name of the config environment to use for +#' initialization +#' +#' @return constructed bllflow object #' @export -create_variable_details_template <- function(x = NULL, ...) { - UseMethod("create_variable_details_template", x) +bllflow_config_init <- + function(config_name = NULL) { + # Idea let them pass config or config name? @Doug, @Warsame + if (!is.null(config_name)) { + Sys.setenv(R_CONFIG_ACTIVE = config_name) + } + config <- config::get() + ret_bllflow <- + build_bllflow(variables = as.data.frame(config$variables), + variable_details = as.data.frame(config$variable_details)) + + return(ret_bllflow) } +#' Read in data according to config specified data type +#' +#' Uses bllflow to read_data based on config specifications. Currently supported +#' formats are: .RData, .csv +#' +#' @param bllflow_object passed bllflow object to read variables from +#' @param config_name = NULL optional passing of config if you wish to load data +#' from a specific config +#' +#' @return NULL since no modifications are made and read data is just stored in +#' pre specified location #' @export -create_variable_details_template.BLLFlow <- function(bllFlow_object) { - variable_details <- - data.frame( - variable = character(), - toType = character(), - databaseStart = character(), - variableStart = character(), - fromType = character(), - recTo = character(), - catLabel = character(), - catLabelLong = character(), - units = character(), - recFrom = character(), - catStartLabel = character(), - variableStartShortLabel = character(), - variableStartLabel = character() - ) - # Collect all the variables in MSW variables - detected_variables <- unique(bllFlow_object[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) - - # Loop through the ddiList and add variables detected - for (single_DDI in bllFlow_object[[pkg.globals$bllFlowContent.DDI]]) { - variable <- "Please Insert RecodedVariable name" - toType <- - "Please insert desired recoded variable type supported ones are: cat, cont" - databaseStart <- - single_DDI[["ddiObject"]][["codeBook"]][["docDscr"]][["docSrc"]][["titlStmt"]][["titl"]][[1]] - # loop through detected_variables - for (singleDetectedVariable in detected_variables) { - if (singleDetectedVariable %in% names(single_DDI[["variableMetaData"]][["dataDscr"]])) { - variableDDI <- - single_DDI[["variableMetaData"]][["dataDscr"]][[singleDetectedVariable]] - variableStart <- - paste(databaseStart, singleDetectedVariable, sep = "::") - fromType <- variableDDI$type - recTo <- "Please insert values to recode to" - catLabel <- "Please enter the lable" - catLabelLong <- "Please enter the long label" - units <- "Specify the units" - recFrom <- "Specify range to recode from" - catStartLabel <- variableDDI$label - variableStartShortLabel <- variableDDI$label - variableStartLabel <- variableDDI$label - - newRow <- - data.frame( - variable = variable, - toType, - databaseStart, - variableStart, - fromType, - recTo, - catLabel, - catLabelLong, - units, - recFrom, - catStartLabel, - variableStartShortLabel , - variableStartLabel - ) - variable_details <- rbind(variable_details, newRow) - } +bllflow_config_read_data <- function(bllflow_object, config_name = NULL){ + if (!is.null(config_name)){ + Sys.setenv(R_CONFIG_ACTIVE = config_name) + } + config <- config::get() + if (config$data_type == ".RData") { + # use variables to only read the specified variables?? + } else if (config$data_type == ".csv") { + for (data_name in names(config$data)) { + tmp_data <- + read_data( + variables = bllflow_object$variables, + data_name = data_name, + path_to_data = config$data[[data_name]] + ) + assign(data_name, tmp_data) + save(list = data_name, file = paste0(config$data_dir, data_name, ".RData")) } - - } - bllFlow_object$variable_details <- variable_details - - return(bllFlow_object) } +#' Recode data using config data +#' +#' Recodes data according to the config then saves it as RData file at a +#' specified location +#' +#' @param bllflow_object passed bllflow object to read variables from +#' @param config_name = NULL optional passing of config if you wish to load data +#' from a specific config +#' +#' @return NULL since no modifications are made and read data is just stored in +#' pre specified location +#' @export +bllflow_config_rec_data <- function(bllflow_object, config_name = NULL){ + # Consider making this into a function or let user pass loaded config + if (!is.null(config_name)){ + Sys.setenv(R_CONFIG_ACTIVE = config_name) + } + config <- config::get() + for (data_name in names(config$data)) { + load(file.path(config$data_dir, paste0( data_name, ".RData"))) + tmp_rec_data <- rec_with_table(base::get(data_name), variables = bllflow_object$variables) + assign(data_name, tmp_rec_data) + save(list = data_name, file = file.path(config$data_dir, paste0(data_name, "_recoded", ".RData"))) + } +} +# ----------- WIP NOT FULLY IMPLEMENTED ON TODO --------- +#' #' @export +#' create_variable_details_template <- function(x = NULL, ...) { +#' UseMethod("create_variable_details_template", x) +#' } +#' +#' #' @export +#' create_variable_details_template.BLLFlow <- function(bllFlow_object) { +#' variable_details <- +#' data.frame( +#' variable = character(), +#' toType = character(), +#' databaseStart = character(), +#' variableStart = character(), +#' fromType = character(), +#' recTo = character(), +#' catLabel = character(), +#' catLabelLong = character(), +#' units = character(), +#' recFrom = character(), +#' catStartLabel = character(), +#' variableStartShortLabel = character(), +#' variableStartLabel = character() +#' ) +#' # Collect all the variables in MSW variables +#' detected_variables <- unique(bllFlow_object[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) +#' +#' # Loop through the ddiList and add variables detected +#' for (single_DDI in bllFlow_object[[pkg.globals$bllFlowContent.DDI]]) { +#' variable <- "Please Insert RecodedVariable name" +#' toType <- +#' "Please insert desired recoded variable type supported ones are: cat, cont" +#' databaseStart <- +#' single_DDI[["ddiObject"]][["codeBook"]][["docDscr"]][["docSrc"]][["titlStmt"]][["titl"]][[1]] +#' # loop through detected_variables +#' for (singleDetectedVariable in detected_variables) { +#' if (singleDetectedVariable %in% names(single_DDI[["variableMetaData"]][["dataDscr"]])) { +#' variableDDI <- +#' single_DDI[["variableMetaData"]][["dataDscr"]][[singleDetectedVariable]] +#' variableStart <- +#' paste(databaseStart, singleDetectedVariable, sep = "::") +#' fromType <- variableDDI$type +#' recTo <- "Please insert values to recode to" +#' catLabel <- "Please enter the lable" +#' catLabelLong <- "Please enter the long label" +#' units <- "Specify the units" +#' recFrom <- "Specify range to recode from" +#' catStartLabel <- variableDDI$label +#' variableStartShortLabel <- variableDDI$label +#' variableStartLabel <- variableDDI$label +#' +#' newRow <- +#' data.frame( +#' variable = variable, +#' toType, +#' databaseStart, +#' variableStart, +#' fromType, +#' recTo, +#' catLabel, +#' catLabelLong, +#' units, +#' recFrom, +#' catStartLabel, +#' variableStartShortLabel , +#' variableStartLabel +#' ) +#' variable_details <- rbind(variable_details, newRow) +#' } +#' } +#' +#' +#' } +#' bllFlow_object$variable_details <- variable_details +#' +#' return(bllFlow_object) +#' } + # ----------- DEPRICATE NEEDS REMAKING --------- #' #' Creates a data frame that holds additional ddi data #' #' diff --git a/R/bll-flow.R b/R/bll-flow.R index 58d8b28e..01fb75c8 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -119,7 +119,11 @@ build_bllflow <- ) attr(bll_flow_model, "class") <- "BLLFlow" - attr(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], pkg.globals$bllFlowContent.Sequence) <- 0 + # BANDAID + if(!is.null(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]])) { + attr(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], pkg.globals$bllFlowContent.Sequence) <- + 0 + } return(bll_flow_model) } diff --git a/config.yml b/config.yml index 49aa6550..039c3097 100644 --- a/config.yml +++ b/config.yml @@ -3,6 +3,8 @@ default: variables: !expr cchsflow::variables variable_details: !expr cchsflow::variable_details modules: NULL + data_type: ".RData" + data_dir: !expr file.path(getwd(),"data") data: cchs2001: !expr cchsflow::cchs2001_p cchs2003: !expr cchsflow::cchs2003_p From 5cb2da87e1d9ccc9c03c23ed91b6a217bf1ab4fc Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Feb 2020 09:40:53 -0500 Subject: [PATCH 087/123] [Bug] Fixed modules not being read and multi rec not working --- R/bll-flow-constructor-utility.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index e86cd7ab..08e9aa8d 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -17,7 +17,8 @@ bllflow_config_init <- config <- config::get() ret_bllflow <- build_bllflow(variables = as.data.frame(config$variables), - variable_details = as.data.frame(config$variable_details)) + variable_details = as.data.frame(config$variable_details), + modules = as.data.frame(config$modules)) return(ret_bllflow) } @@ -50,7 +51,7 @@ bllflow_config_read_data <- function(bllflow_object, config_name = NULL){ path_to_data = config$data[[data_name]] ) assign(data_name, tmp_data) - save(list = data_name, file = paste0(config$data_dir, data_name, ".RData")) + save(list = data_name, file = file.path(config$data_dir, paste0(data_name, ".RData"))) } } } @@ -75,7 +76,7 @@ bllflow_config_rec_data <- function(bllflow_object, config_name = NULL){ config <- config::get() for (data_name in names(config$data)) { load(file.path(config$data_dir, paste0( data_name, ".RData"))) - tmp_rec_data <- rec_with_table(base::get(data_name), variables = bllflow_object$variables) + tmp_rec_data <- rec_with_table(base::get(data_name), variables = bllflow_object$variables, variable_details = bllflow_object$variable_details, database_name = data_name) assign(data_name, tmp_rec_data) save(list = data_name, file = file.path(config$data_dir, paste0(data_name, "_recoded", ".RData"))) } From 0b31a41416db142d314159a85ac456b8d3d37fa3 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Feb 2020 11:20:55 -0500 Subject: [PATCH 088/123] [Feature] config data combination --- DESCRIPTION | 3 ++- NAMESPACE | 1 + R/bll-flow-constructor-utility.R | 35 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index c11a6c86..b90767b7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -32,7 +32,8 @@ Depends: haven, magrittr, rms, - config + config, + dplyr Suggests: knitr, rmarkdown, diff --git a/NAMESPACE b/NAMESPACE index 6e814a08..193d099c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,6 +7,7 @@ S3method(get_variables,default) S3method(run_module,BLLFlow) S3method(run_module,default) export(CreateTableOne) +export(bllflow_config_combine_data) export(bllflow_config_init) export(bllflow_config_read_data) export(bllflow_config_rec_data) diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index 08e9aa8d..a8e87a2b 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -81,6 +81,41 @@ bllflow_config_rec_data <- function(bllflow_object, config_name = NULL){ save(list = data_name, file = file.path(config$data_dir, paste0(data_name, "_recoded", ".RData"))) } } + +#' Combine data based on config location +#' +#' Combines recoded data and applies labels before attaching the object to bllflow +#' +#' @param bllflow_object passed bllflow object to read variables from +#' @param config_name = NULL optional passing of config if you wish to load data +#' from a specific config +#' +#' @return modified bllflow object containing labelled combined data +#' @export +bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ + if (!is.null(config_name)){ + Sys.setenv(R_CONFIG_ACTIVE = config_name) + } + config <- config::get() + tmp_working_data <- NULL + for (data_name in names(config$data)) { + load(file.path(config$data_dir, paste0( data_name, "_recoded", ".RData"))) + tmp_mod_data <- base::get(data_name) + tmp_mod_data[["data_name"]] <- data_name + if (is.null(tmp_working_data)){ + tmp_working_data <- tmp_mod_data + }else{ + tmp_working_data <- dplyr::bind_rows(tmp_working_data, tmp_mod_data) + } + } + tmp_working_data <- bllflow::set_data_labels(tmp_working_data, bllflow_object$variable_details, bllflow_object$variables) + bllflow_object[[pkg.globals$bllFlowContent.WorkingData]] <- tmp_working_data + bllflow_object[["previous_module_data"]] <- tmp_working_data + attr(bllflow_object[[pkg.globals$bllFlowContent.WorkingData]], pkg.globals$bllFlowContent.Sequence) <- + 0 + + return(bllflow_object) +} # ----------- WIP NOT FULLY IMPLEMENTED ON TODO --------- #' #' @export #' create_variable_details_template <- function(x = NULL, ...) { From 28f16936215dd776e372321f19e629f30b93cd79 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 25 Feb 2020 12:04:24 -0500 Subject: [PATCH 089/123] [Feature] Custom function skeleton --- R/function_parsing.R | 49 +++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/R/function_parsing.R b/R/function_parsing.R index dd197b07..6a27dd6c 100644 --- a/R/function_parsing.R +++ b/R/function_parsing.R @@ -1,21 +1,28 @@ -# ---------- WIP NEEDED FOR FUTURE MODULE UPDATE WITH USER FUNCTION ---------- -# parse_function <- function(data, -# sequence_element, -# modules, -# variables, -# variable_details) { -# working_data <- data -# module_functions <- -# parse_module_functions( -# module_table = modules, -# module_sequence = sequence_element, -# variables = variables, -# variable_details = variable_details -# ) -# working_data <- -# create_recipy(module_functions, working_data, variables) -# -# processed_data <- recipes::bake(working_data, new_data = data) -# -# return(processed_data) -# } \ No newline at end of file +parse_function <- function(data, + sequence_element, + modules, + variables, + variable_details) { + working_data <- data + module_functions <- + parse_module_functions( + module_table = modules, + module_sequence = sequence_element, + variables = variables, + variable_details = variable_details + ) + working_data <- + create_recipy(module_functions, working_data, variables) + + processed_data <- recipes::bake(working_data, new_data = data) + + return(processed_data) +} + +# Use module parsing to find the single column functions??? + + +# And use similar approach as rec custom functions for normal ones?? +# if i spot a = then thats a custom par otherwise i get the columns 1 by 1? +# do i use the do again? Slow and inefficient but nice loading bar and hassle free! +# reuse rec_with_table !!!!!!!!!!!!!!!!!!!!!! From e700323eddaa142787e1d9d425f525a1e6d27f99 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Wed, 26 Feb 2020 12:59:48 -0500 Subject: [PATCH 090/123] [Feature] Added steps back due to complications with bllflow-recipes --- R/step_apply_missing_tagged_na.R | 67 +++++++++++++++++ R/step_naomit.R | 119 +++++++++++++++++++++++++++++++ R/step_z.R | 114 +++++++++++++++++++++++++++++ 3 files changed, 300 insertions(+) create mode 100644 R/step_apply_missing_tagged_na.R create mode 100644 R/step_naomit.R create mode 100644 R/step_z.R diff --git a/R/step_apply_missing_tagged_na.R b/R/step_apply_missing_tagged_na.R new file mode 100644 index 00000000..6d7cc5f5 --- /dev/null +++ b/R/step_apply_missing_tagged_na.R @@ -0,0 +1,67 @@ +step_apply_missing_tagged_na <- function(recipe, + ..., + role = NA, + trained = FALSE, + columns = NULL, + tag_type = NULL, + skip = FALSE, + id = recipes::rand_id("apply_missing_tagged_na")) { + recipes::add_step( + recipe, + step_apply_missing_tagged_na_new( + terms = recipes::ellipse_check(...), + role = role, + trained = trained, + columns = columns, + tag_type = trimws(tag_type), + skip = skip, + id = id + ) + ) +} + +step_apply_missing_tagged_na_new <- + function(terms, role, trained, columns, tag_type, skip, id) { + step( + subclass = "apply_missing_tagged_na", + terms = terms, + role = role, + trained = trained, + columns = columns, + tag_type = tag_type, + skip = skip, + id = id + ) + } + +#' @export +prep.step_apply_missing_tagged_na <- function(x, training, info = NULL, ...) { + step_apply_missing_tagged_na_new( + terms = x$terms, + role = x$role, + trained = TRUE, + columns = recipes::terms_select(x$terms, info = info), + tag_type = x$tag_type, + skip = x$skip, + id = x$id + ) +} + +#' @export +bake.step_apply_missing_tagged_na <- function(object, new_data, ...) { + for (variable in object$columns) { + NA_index <- is.na(new_data[[variable]]) + tagged_NA_index <- haven::is_tagged_na(new_data[[variable]]) + true_NA_index <- !(NA_index == tagged_NA_index) + if (is.numeric(new_data[[variable]])) { + new_data[true_NA_index, variable] <- + haven::tagged_na(object$tag_type) + }else{ + if (!paste("NA(", object$tag_type, ")", sep = "") %in% levels(new_data[[variable]])) { + levels(new_data[[variable]]) <- c(levels(new_data[[variable]]), paste("NA(", object$tag_type, ")", sep = "")) + } + new_data[true_NA_index, variable] <- paste("NA(", object$tag_type, ")", sep = "") + } + } + tibble::as.tibble(new_data) +} diff --git a/R/step_naomit.R b/R/step_naomit.R new file mode 100644 index 00000000..0a753e60 --- /dev/null +++ b/R/step_naomit.R @@ -0,0 +1,119 @@ +#' Remove observations with missing values +#' +#' `step_tagged_naomit` creates a *specification* of a recipe step that +#' will add remove observations (rows of data) if they contain NA +#' or NaN values. +#' +#' @param recipe A recipe object. The step will be added to the sequence of +#' operations for this recipe. +#' @param ... One or more selector functions to choose which +#' variables will be used to create the dummy variables. See +#' [selections()] for more details. The selected +#' variables must be factors. +#' @param role Unused, include for consistency with other steps. +#' @param trained A logical to indicate if the quantities for preprocessing +#' have been estimated. Again included for consistency. +#' @param columns A character string of variable names that will +#' be populated (eventually) by the `terms` argument. +#' @param id A character string that is unique to this step to identify it. +#' @param skip A logical. Should the step be skipped when the +#' recipe is baked by [bake.recipe()]? While all operations are baked +#' when [prep.recipe()] is run, some operations may not be able to be +#' conducted on new data (e.g. processing the outcome variable(s)). +#' Care should be taken when using `skip = TRUE` as it may affect +#' the computations for subsequent operations +#' +#' @rdname step_tagged_naomit +#' @return An updated version of `recipe` with the +#' new step added to the sequence of existing steps (if any). +#' @export +#' +#' @examples +#' +#' recipe(Ozone ~ ., data = airquality) %>% +#' step_tagged_naomit(Solar.R) %>% +#' prep(airquality, verbose = FALSE) %>% +#' juice() +#' +#' @seealso [recipe()] [prep.recipe()] [bake.recipe()] +step_tagged_naomit <- function(recipe, + ..., + role = NA, + trained = FALSE, + columns = NULL, + tag_type = NULL, + skip = FALSE, + id = recipes::rand_id("tagged_naomit")) { + recipes::add_step( + recipe, + step_tagged_naomit_new( + terms = recipes::ellipse_check(...), + role = role, + trained = trained, + columns = columns, + tag_type = trimws(tag_type), + skip = skip, + id = id + ) + ) +} + +step_tagged_naomit_new <- + function(terms, role, trained, columns, tag_type, skip, id) { + step( + subclass = "tagged_naomit", + terms = terms, + role = role, + trained = trained, + columns = columns, + tag_type = tag_type, + skip = skip, + id = id + ) + } + +#' @export +prep.step_tagged_naomit <- function(x, training, info = NULL, ...) { + step_tagged_naomit_new( + terms = x$terms, + role = x$role, + trained = TRUE, + columns = recipes::terms_select(x$terms, info = info), + tag_type = x$tag_type, + skip = x$skip, + id = x$id + ) +} + +#' @export +bake.step_tagged_naomit <- function(object, new_data, ...) { + if (is.null(object$tag_type)) { + tibble::as_tibble(tidyr::drop_na(new_data, object$columns)) + } else{ + for (column in object$columns) { + if(is.numeric(new_data[[column]])){ + new_data <- new_data[!haven::is_tagged_na(new_data[[column]], tag = object$tag_type),] + }else{ + new_data <- new_data[!is_equal(new_data[[column]], paste("NA(",object$tag_type,")",sep = "")), ] + } + } + tibble::as.tibble(new_data) + } +} + +print.step_tagged_naomit <- + function(x, width = max(20, options()$width - 30), ...) { + cat("Removing rows with NA values in ", sep = "") + cat(tidyr::drop_naformat_selectors(x$terms, width = width)) + cat("\n") + invisible(x) + } + +#' @rdname step_tagged_naomit +#' @param x A `step_tagged_naomit` object. +#' @export +tidy.step_tagged_naomit <- function(x, ...) { + res <- recipes::simple_terms(x, ...) + res$id <- x$id + res +} diff --git a/R/step_z.R b/R/step_z.R new file mode 100644 index 00000000..bd6bce6f --- /dev/null +++ b/R/step_z.R @@ -0,0 +1,114 @@ +#' @export +step_z <- function(recipe, + ..., + role = 'predictor', + trained = FALSE, + skip = FALSE, + id = recipes::rand_id("Z"), + append = TRUE, + suffix = "_Z", + means = NULL, + sd = NULL, + na.rm = FALSE, + trim = 0) { + terms <- recipes::ellipse_check(...) + recipes::add_step( + recipe, + step_z_new( + terms = terms, + trained = trained, + role = role, + append = append, + suffix = suffix, + means = means, + sd = sd, + na.rm = na.rm, + trim = trim, + skip = skip, + id = id + ) + ) +} + +step_z_new <- + function(terms, + role, + trained, + append, + suffix, + means, + sd, + na.rm, + trim, + skip, + id) { + step( + subclass = "z", + terms = terms, + role = role, + trained = trained, + append = append, + suffix = suffix, + means = means, + sd = sd, + na.rm = na.rm, + trim = trim, + skip = skip, + id = id + ) + } +#' @export +prep.step_z <- function(x, training, info = NULL, ...) { + for (variable_name in recipes::terms_select(x$terms, info = info)) { + # Verify the training data variable + if (is.null(training[[variable_name]])) { + stop(paste(variable_name, 'is missing from the training data')) + } + if (!is.numeric(training[[variable_name]])) { + stop(paste(variable_name, 'is not numeric therefore zScore cannot + be calculated')) + } + # Calculate the Standard Deviation for the variable + x$means[[variable_name]] <- mean(training[[variable_name]], trim = x$trim, na.rm = x$na.rm) + x$sd[[variable_name]] <- sd(training[[variable_name]], na.rm = x$na.rm) + # Calculate the mean for the variable + } + + return( + step_z_new( + terms = x$terms, + trained = TRUE, + role = x$role, + append = x$append, + suffix = x$suffix, + means = x$means, + sd = x$sd, + na.rm = x$na.rm, + trim = x$trim, + skip = x$skip, + id = x$id + ) + ) +} + +#' @export +bake.step_z <- function(object, new_data, ...) { + require(tibble) + for (varName in names(object$means)) { + newVarName <- paste(varName, object$suffix, sep = "") + new_data[newVarName] <- (new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]] + if (!object$append) { + new_data[varName] <- NULL + } + + } + + return(as_tibble(new_data)) +} + +print.step_z <- + function(x, width = max(20, options()$width - 30), ...) { + cat("z score for ", sep = "") + recipes:::printer(names(x$means), x$terms, x$trained, width = width) + invisible(x) + } From b1f41e140a2ec39f3f57be765e47b6ab9a6713c3 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Wed, 26 Feb 2020 13:16:45 -0500 Subject: [PATCH 091/123] [Feature] Added missing export --- R/step_apply_missing_tagged_na.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/step_apply_missing_tagged_na.R b/R/step_apply_missing_tagged_na.R index 6d7cc5f5..f63ff708 100644 --- a/R/step_apply_missing_tagged_na.R +++ b/R/step_apply_missing_tagged_na.R @@ -1,3 +1,4 @@ +#' @export step_apply_missing_tagged_na <- function(recipe, ..., role = NA, From de2f094b29edbf7e3c95880aff754081de223d28 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Thu, 27 Feb 2020 10:38:24 -0500 Subject: [PATCH 092/123] [Feature] Fixed z --- NAMESPACE | 10 ++++++++++ R/step_z.R | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 193d099c..3d56cde1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,10 +2,17 @@ S3method(CreateTableOne,bllfow) S3method(CreateTableOne,default) +S3method(bake,step_apply_missing_tagged_na) +S3method(bake,step_tagged_naomit) +S3method(bake,step_z) S3method(get_variables,BLLFlow) S3method(get_variables,default) +S3method(prep,step_apply_missing_tagged_na) +S3method(prep,step_tagged_naomit) +S3method(prep,step_z) S3method(run_module,BLLFlow) S3method(run_module,default) +S3method(tidy,step_tagged_naomit) export(CreateTableOne) export(bllflow_config_combine_data) export(bllflow_config_init) @@ -18,6 +25,9 @@ export(read_data) export(rec_with_table) export(run_module) export(set_data_labels) +export(step_apply_missing_tagged_na) +export(step_tagged_naomit) +export(step_z) importFrom(dplyr,do) importFrom(dplyr,rowwise) importFrom(dplyr,select) diff --git a/R/step_z.R b/R/step_z.R index bd6bce6f..af56d08a 100644 --- a/R/step_z.R +++ b/R/step_z.R @@ -18,7 +18,7 @@ step_z <- function(recipe, terms = terms, trained = trained, role = role, - append = append, + append = as.logical(append), suffix = suffix, means = means, sd = sd, From 8ef3d96a2073a38200a6ef85988e37611f6829f3 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Thu, 27 Feb 2020 11:17:31 -0500 Subject: [PATCH 093/123] [Feature] fixed NA.rm --- R/step_z.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/step_z.R b/R/step_z.R index af56d08a..1fede279 100644 --- a/R/step_z.R +++ b/R/step_z.R @@ -9,7 +9,7 @@ step_z <- function(recipe, suffix = "_Z", means = NULL, sd = NULL, - na.rm = FALSE, + na.rm = TRUE, trim = 0) { terms <- recipes::ellipse_check(...) recipes::add_step( @@ -96,6 +96,8 @@ bake.step_z <- function(object, new_data, ...) { require(tibble) for (varName in names(object$means)) { newVarName <- paste(varName, object$suffix, sep = "") + print((new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]]) + print(paste(object$means[[varName]],"<-mean ->",object$sd[[varName]])) new_data[newVarName] <- (new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]] if (!object$append) { new_data[varName] <- NULL From d2274bae49e774a54d8ff78f4ffdeb730f448c34 Mon Sep 17 00:00:00 2001 From: Rostyslav Date: Thu, 27 Feb 2020 11:29:05 -0500 Subject: [PATCH 094/123] [Bug] Removed print --- R/step_z.R | 2 -- 1 file changed, 2 deletions(-) diff --git a/R/step_z.R b/R/step_z.R index 1fede279..02b0f33d 100644 --- a/R/step_z.R +++ b/R/step_z.R @@ -96,8 +96,6 @@ bake.step_z <- function(object, new_data, ...) { require(tibble) for (varName in names(object$means)) { newVarName <- paste(varName, object$suffix, sep = "") - print((new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]]) - print(paste(object$means[[varName]],"<-mean ->",object$sd[[varName]])) new_data[newVarName] <- (new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]] if (!object$append) { new_data[varName] <- NULL From 9d4dc53780c6315fa2cc0ca7891b130fd2d567e9 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Fri, 28 Feb 2020 12:14:13 -0500 Subject: [PATCH 095/123] [Bug] Reverted bllflow class change back to BLLFlow --- R/table-one-long.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/table-one-long.R b/R/table-one-long.R index 4d1c21ba..3dc9211e 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -43,7 +43,7 @@ CreateTableOne <- function(x = NULL, ...) { #' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") #' @importFrom tableone CreateTableOne #' @export -CreateTableOne.bllfow <- function(bll_flow_model, +CreateTableOne.BLLFlow <- function(bll_flow_model, vars = NULL, strata = NULL, factor_vars = NULL, From dbe198916a1c76431d6a3fc9c2d2d9b380ff049e Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Fri, 28 Feb 2020 12:28:27 -0500 Subject: [PATCH 096/123] [Feature] Removed the need for tableoneTest as a way of applying value labels --- R/table-one-long.R | 4 +- R/tableone-print-modification.R | 224 ++++++++++++++++++++++++++++++++ 2 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 R/tableone-print-modification.R diff --git a/R/table-one-long.R b/R/table-one-long.R index 3dc9211e..5fea200b 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -87,7 +87,9 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, strata = strata,... ) } - + # Appends valLabels to metadata of tableone for val printing + valLabels <- sjlabelled::get_labels(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]][vars], values = "n") + final_table$MetaData[["valLabels"]] <- valLabels return(final_table) } diff --git a/R/tableone-print-modification.R b/R/tableone-print-modification.R new file mode 100644 index 00000000..23dcd4f8 --- /dev/null +++ b/R/tableone-print-modification.R @@ -0,0 +1,224 @@ +##' Format and print \code{TableOne} class objects +##' +##' \code{print} method for the \code{TableOne} class objects created by \code{\link{CreateTableOne}} function. +##' +##' @param x Object returned by \code{\link{CreateTableOne}} function. +##' @param catDigits Number of digits to print for proportions. Default 1. +##' @param contDigits Number of digits to print for continuous variables. Default 2. +##' @param pDigits Number of digits to print for p-values (also used for standardized mean differences). Default 3. +##' @param quote Whether to show everything in quotes. The default is FALSE. If TRUE, everything including the row and column names are quoted so that you can copy it to Excel easily. +##' @param missing Whether to show missing data information. +##' @param explain Whether to add explanation to the variable names, i.e., (\%) is added to the variable names when percentage is shown. +##' @param printToggle Whether to print the output. If FALSE, no output is created, and a matrix is invisibly returned. +##' @param test Whether to show p-values. TRUE by default. If FALSE, only the numerical summaries are shown. +##' @param smd Whether to show standardized mean differences. FALSE by default. If there are more than one contrasts, the average of all possible standardized mean differences is shown. For individual contrasts, use \code{summary}. +##' @param noSpaces Whether to remove spaces added for alignment. Use this option if you prefer to align numbers yourself in other software. +##' @param padColnames Whether to pad column names with spaces to center justify. The default is FALSE. It is not conducted if noSpaces = TRUE. +##' @param varLabels Whether to replace variable names with variable labels obtained from \code{labelled::var_label()} function. +##' @param format The default is "fp" frequency (percentage). You can also choose from "f" frequency only, "p" percentage only, and "pf" percentage (frequency). +##' @param showAllLevels Whether to show all levels. FALSE by default, i.e., for 2-level categorical variables, only the higher level is shown to avoid redundant information. +##' @param cramVars A character vector to specify the two-level categorical variables, for which both levels should be shown in one row. +##' @param dropEqual Whether to drop " = second level name" description indicating which level is shown for two-level categorical variables. +##' @param exact A character vector to specify the variables for which the p-values should be those of exact tests. By default all p-values are from large sample approximation tests (chisq.test). +##' @param nonnormal A character vector to specify the variables for which the p-values should be those of nonparametric tests. By default all p-values are from normal assumption-based tests (oneway.test). +##' @param minMax Whether to use [min,max] instead of [p25,p75] for nonnormal variables. The default is FALSE. +##' @param ... For compatibility with generic. Ignored. +##' @return A matrix object containing what you see is also invisibly returned. This can be assinged a name and exported via \code{write.csv}. +##' @author Kazuki Yoshida, Justin Bohn +##' @seealso +##' \code{\link{CreateTableOne}}, \code{\link{CreateTableOne}}, \code{\link{summary.TableOne}} +##' @examples +##' +##' ## See examples for CreateTableOne and svyCreateTableOne +##' +##' @export +print.TableOne <- + function(x, # TableOne object + catDigits = 1, contDigits = 2, pDigits = 3, # Number of digits to show + quote = FALSE, # Whether to show quotes + + ## Common options + missing = FALSE, # Not implemented yet + explain = TRUE, # Whether to show explanation in variable names + printToggle = TRUE, # Whether to print the result visibly + test = TRUE, # Whether to add p-values + smd = FALSE, # Whether to add standardized mean differences + noSpaces = FALSE, # Whether to remove spaces for alignments + padColnames = FALSE, # Whether to pad column names for alignments + varLabels = FALSE, # Whether to show variable labels instead of names. + valLabels = FALSE, # Whether to show category labels instead of values. + missingLabel = "Missing Label", # What label is assigned to missing value labels + + ## Categorical options + format = c("fp","f","p","pf")[1], # Format f_requency and/or p_ercent + showAllLevels = FALSE, # Show all levels of a categorical variable + cramVars = NULL, # Which 2-level variables to show both levels in one row + dropEqual = FALSE, # Do not show " = second level" for two-level variables + exact = NULL, # Which variables should be tested with exact tests + + ## Continuous options + nonnormal = NULL, # Which variables should be treated as nonnormal + minMax = FALSE, # Whether to show median + + ...) { + + ## Extract Cont/CatTable elements of x and dispatch print() appropriately + FmtTables <- ModuleFormatTables(x, + catDigits = catDigits, contDigits = contDigits, + test = test, smd = smd, missing = missing, + explain = explain, pDigits = pDigits, + + ## print.CatTable arguments passed + format = format, exact = exact, + ## Returns one more column if TRUE + showAllLevels = showAllLevels, + cramVars = cramVars, + dropEqual = dropEqual, + + ## print.ContTable arguments passed + nonnormal = nonnormal, minMax = minMax, + insertLevel = showAllLevels) + + ## List of stratum sample size row only tables + FmtStratumSizesTables <- sapply(FmtTables, + FUN = ModuleStratumSizesRow, + showAllLevels = showAllLevels, + simplify = FALSE) + names(FmtStratumSizesTables) <- paste0(names(FmtStratumSizesTables), "N") + + ## Combine as a list of necessary table elements + FmtElementTables <- c(FmtTables, FmtStratumSizesTables) + + + ## Add space paddings + ## Given a list of tables with vecColWidths, + ## return a strata-by-table df containing spaces to add + nSpacesToAdd <- ModuleNSpacesToAdd(FmtElementTables) + ## Actually add spaces to tables + spcFmtEltTables <- ModuleAddSpacesToTable(FmtElementTables, nSpacesToAdd, showAllLevels) + + + ## Create a list of one variable tables excluding sample size row. + ## This is based on the variable order in the MetaData. + lstOneVarTables <- ModuleListOfOneVarTables(spcFmtEltTables, + MetaData = x$MetaData) + + + + if (valLabels) { + lstOneVarTables <- + lapply(seq_along(lstOneVarTables), + function(i) { + ## Each element is a string matrix. + mat <- lstOneVarTables[[i]] + ## Manipulate if a non-NULL label is available. + ## Note MetaData$varLabels is a list. + if ((!is.null(x$MetaData$valLabels[[i]])) && (length(x$MetaData$valLabels[[i]]) > 1)) { + ## The first row name contains the variable name + ## without preceding space. Replace by exact matching. + if (!length(rownames(mat)) > 1) { + #print("HMMMM") + # Handle collapsed vars somehow?????? + } else{ + for (j in 2:length(rownames(mat))) { + # TODO Have some way to deal with collapsed cats + catchValue <- + tryCatch({ + x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] + }, error = function(e) + { + x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] <- + "I NEED A LABEL" + }) + rownames(mat)[j] <- + gsub(trimws(rownames(mat)[j]), + catchValue, + rownames(mat)[j], fixed = TRUE) + } + } + } + ## Return the entire matrix. + mat + }) + } + + ## Replace variable names with variable labels if requested. + ## Loop over the variable replacing its name with its label. + if (varLabels) { + lstOneVarTables <- + lapply(seq_along(lstOneVarTables), + function(i) { + ## Each element is a string matrix. + mat <- lstOneVarTables[[i]] + ## Manipulate if a non-NULL label is available. + ## Note MetaData$varLabels is a list. + if (!is.null(x$MetaData$varLabels[[i]])) { + ## The first row name contains the variable name + ## without preceding space. Replace by exact matching. + rownames(mat)[1] <- gsub(paste0("^", x$MetaData$vars[i]), + x$MetaData$varLabels[[i]], + rownames(mat)[1]) + } + ## Return the entire matrix. + mat + }) + } + + + ## Check if the first row is CatTable element + ## if so, pick sample size row from space-padded CatTable element + ## if not, pick sample size row from space-padded ContTable element + ## Intentionally a one-element list + lstStratumSizesRow <- ifelse(x$MetaData$logiFactors[1], + list(spcFmtEltTables$FmtCatTableN), + list(spcFmtEltTables$FmtContTableN)) + + ## Row-combin n and all variables + out <- do.call(rbind, + ## List concatenation (both are lists) + c(lstStratumSizesRow, lstOneVarTables)) + + + ## Add stratification information to the column header + ## NULL element has a length of zero + if (length(x$ContTable) > 1) { + ## Combine variable names with : in between + strataVarName <- attributes(x$ContTable)$strataVarName + ## Create strata string + strataString <- paste0("Stratified by ", strataVarName) + ## Name the row dimension with it. 1st dimension name should be empty. + names(dimnames(out)) <- c("", strataString) + + } else if (length(x$CatTable) > 1) { + ## Combine variable names with : in between + strataVarName <- attributes(x$CatTable)$strataVarName + ## Create strata string + strataString <- paste0("Stratified by ", strataVarName) + ## Name the row dimension with it. 1st dimension name should be empty. + names(dimnames(out)) <- c("", strataString) + + } else { + + names(dimnames(out)) <- c("", "") + } + + ## Right-justify Missing column if showing and not removing spaces. + if (missing & !noSpaces) { + out[,"Missing"] <- format(out[,"Missing"], justify = "right") + } + + ## Center-justify column names if asked and not removing spaces. + if (padColnames & !noSpaces) { + out <- ModuleMidJustifyColnames(mat = out) + } + + ## Remove spaces if asked. + out <- ModuleRemoveSpaces(mat = out, noSpaces = noSpaces) + + ## Modular version of quote/print toggle. + out <- ModuleQuoteAndPrintMat(matObj = out, + quote = quote, printToggle = printToggle) + + ## Return the result + return(invisible(out)) + } From aadf2dca67ee6c5215adf512c15d3ffda9dc5f66 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Fri, 28 Feb 2020 12:50:20 -0500 Subject: [PATCH 097/123] [Bug] Added tableone function reference --- R/module-instruction-parsing.R | 1 + R/tableone-print-modification.R | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 8e9f4f61..6fdac5c3 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -54,6 +54,7 @@ run_module.BLLFlow <- function(bll_model, module_sequence_number) { return(bll_model) } +#' @importFrom recipes bake #' @export run_module.default <- function(variables, diff --git a/R/tableone-print-modification.R b/R/tableone-print-modification.R index 23dcd4f8..3fc1e057 100644 --- a/R/tableone-print-modification.R +++ b/R/tableone-print-modification.R @@ -63,7 +63,7 @@ print.TableOne <- ...) { ## Extract Cont/CatTable elements of x and dispatch print() appropriately - FmtTables <- ModuleFormatTables(x, + FmtTables <- tableone:::ModuleFormatTables(x, catDigits = catDigits, contDigits = contDigits, test = test, smd = smd, missing = missing, explain = explain, pDigits = pDigits, @@ -81,7 +81,7 @@ print.TableOne <- ## List of stratum sample size row only tables FmtStratumSizesTables <- sapply(FmtTables, - FUN = ModuleStratumSizesRow, + FUN = tableone:::ModuleStratumSizesRow, showAllLevels = showAllLevels, simplify = FALSE) names(FmtStratumSizesTables) <- paste0(names(FmtStratumSizesTables), "N") @@ -93,14 +93,14 @@ print.TableOne <- ## Add space paddings ## Given a list of tables with vecColWidths, ## return a strata-by-table df containing spaces to add - nSpacesToAdd <- ModuleNSpacesToAdd(FmtElementTables) + nSpacesToAdd <- tableone:::ModuleNSpacesToAdd(FmtElementTables) ## Actually add spaces to tables - spcFmtEltTables <- ModuleAddSpacesToTable(FmtElementTables, nSpacesToAdd, showAllLevels) + spcFmtEltTables <- tableone:::ModuleAddSpacesToTable(FmtElementTables, nSpacesToAdd, showAllLevels) ## Create a list of one variable tables excluding sample size row. ## This is based on the variable order in the MetaData. - lstOneVarTables <- ModuleListOfOneVarTables(spcFmtEltTables, + lstOneVarTables <- tableone:::ModuleListOfOneVarTables(spcFmtEltTables, MetaData = x$MetaData) @@ -209,14 +209,14 @@ print.TableOne <- ## Center-justify column names if asked and not removing spaces. if (padColnames & !noSpaces) { - out <- ModuleMidJustifyColnames(mat = out) + out <- tableone:::ModuleMidJustifyColnames(mat = out) } ## Remove spaces if asked. - out <- ModuleRemoveSpaces(mat = out, noSpaces = noSpaces) + out <- tableone:::ModuleRemoveSpaces(mat = out, noSpaces = noSpaces) ## Modular version of quote/print toggle. - out <- ModuleQuoteAndPrintMat(matObj = out, + out <- tableone:::ModuleQuoteAndPrintMat(matObj = out, quote = quote, printToggle = printToggle) ## Return the result From 45c303f2ba6b8079f3f4772840fa16d3a6c97c36 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Sat, 29 Feb 2020 12:39:22 -0500 Subject: [PATCH 098/123] [Bug] Removed tableoneTEST reference --- R/table-one-long.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/table-one-long.R b/R/table-one-long.R index 5fea200b..9f7ef737 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -75,12 +75,12 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, # ----Step 2: Create the tableone ---- if (is.null(strata)) { final_table <- - tableoneTEST::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], + tableone::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], vars = vars, factorVars = factor_vars,...) } else{ final_table <- - tableoneTEST::CreateTableOne( + tableone::CreateTableOne( data = bll_flow_model[[pkg.globals$bllFlowContent.Data]], vars = vars, factorVars = factor_vars, From b0a20b75a65275dfe35fa149fd61de87f4427472 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 2 Mar 2020 10:47:35 -0500 Subject: [PATCH 099/123] [Feature] Added basic formatting from variables in case variable is not in var details and added missing label for tableone print --- R/label-utils.R | 85 +++++++++++++++++++++++---------- R/tableone-print-modification.R | 2 +- 2 files changed, 61 insertions(+), 26 deletions(-) diff --git a/R/label-utils.R b/R/label-utils.R index 606fcf51..9afc6d28 100644 --- a/R/label-utils.R +++ b/R/label-utils.R @@ -1,3 +1,22 @@ +#' @export +set_data_labels <- function(x = NULL, ...) { + UseMethod("set_data_labels", x) +} + +#' @export +set_data_labels.BLLFlow <- function(bllflow_object) { + ret <- + set_data_labels.default( + bllflow_object$working_data, + variable_details = bllflow_object$variable_details, + variables_sheet = bllflow_object$variables + ) + + bllflow_object$working_data <- ret + + return(bllflow_object) +} + #' @title Set Data Labels #' @description sets labels for passed database, Uses the names of final #' variables in variable_details/variables_sheet as well as the labels contained @@ -36,7 +55,7 @@ #' #' get_label(labeled_combined_data) #' @export -set_data_labels <- +set_data_labels.default <- function(data_to_label, variable_details, variables_sheet = NULL) { @@ -44,11 +63,10 @@ set_data_labels <- variable_names <- unique(colnames(data_to_label)) # extract only relevant variable info if (!is.null(variable_details)) { - variable_details[[pkg.globals$argument.Variables]] <- sapply( - variable_details[[pkg.globals$argument.Variables]], trimws) + variable_details[[pkg.globals$argument.Variables]] <- sapply(variable_details[[pkg.globals$argument.Variables]], trimws) variable_details <- variable_details[variable_details[[pkg.globals$argument.Variables]] - %in% variable_names, ] + %in% variable_names,] if (is.null(variables_sheet)) { variable_details[[pkg.globals$MSW.Variables.Columns.Label]] <- NA variable_details[[pkg.globals$MSW.Variables.Columns.LabelLong]] <- @@ -56,22 +74,39 @@ set_data_labels <- } } if (!is.null(variables_sheet)) { - variables_sheet[[pkg.globals$argument.Variables]] <- sapply( - variables_sheet[[pkg.globals$argument.Variables]], trimws) + variables_sheet[[pkg.globals$argument.Variables]] <- sapply(variables_sheet[[pkg.globals$argument.Variables]], trimws) variables_sheet <- variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% - variable_names, ] + variable_names,] variable_details <- - update_variable_details_based_on_variable_sheet( - variable_sheet = variables_sheet, - variable_details = variable_details + update_variable_details_based_on_variable_sheet(variable_sheet = variables_sheet, + variable_details = variable_details) + # Add rows from variables that are missing from variable_details + var_details_names <- unique(variable_details[[pkg.globals$argument.Variables]]) + missing_vars <- variable_names[(!variable_names %in% var_details_names)] + catch_up_vars <- + variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% missing_vars, ] + keep_columns <- + c( + pkg.globals$argument.Variables, + pkg.globals$argument.CatLabel, + pkg.globals$argument.CatLabelLong, + pkg.globals$argument.ToType, + pkg.globals$argument.VariableLabelShort, + pkg.globals$argument.VariableLabel, + pkg.globals$argument.Units, + pkg.globals$argument.CatValue ) + catch_up_vars[keep_columns[(!keep_columns %in% colnames(catch_up_vars))]] <- NA + catch_up_vars[[pkg.globals$argument.ToType]] <- "cont" + variable_details <- variable_details[keep_columns] + catch_up_vars <- catch_up_vars[keep_columns] + variable_details <- rbind(variable_details, catch_up_vars) } label_list <- NULL for (variable_name in variable_names) { rows_to_process <- - variable_details[variable_details[[ - pkg.globals$argument.Variables]] == variable_name, ] + variable_details[variable_details[[pkg.globals$argument.Variables]] == variable_name,] label_list[[variable_name]] <- create_label_list_element(rows_to_process) } @@ -89,7 +124,7 @@ create_label_list_element <- function(variable_rows) { values = c(), values_long = c() ) - first_row <- variable_rows[1, ] + first_row <- variable_rows[1,] ret_list$type <- as.character(first_row[[pkg.globals$argument.ToType]]) ret_list$unit <- @@ -100,7 +135,7 @@ create_label_list_element <- function(variable_rows) { as.character(first_row[[pkg.globals$argument.VariableLabelShort]]) if (is_equal(ret_list$type, pkg.globals$ddiValueName.Cat)) { for (row_index in seq_len(nrow(variable_rows))) { - single_row <- variable_rows[row_index, ] + single_row <- variable_rows[row_index,] # Verify type stays the same if (!is_equal(ret_list$type, as.character(single_row[[pkg.globals$argument.ToType]]))) { @@ -126,10 +161,8 @@ create_label_list_element <- function(variable_rows) { ) } # Verify variable label is identical - if (!is_equal( - ret_list$label_long, - as.character(single_row[[pkg.globals$argument.VariableLabel]]) - )) { + if (!is_equal(ret_list$label_long, + as.character(single_row[[pkg.globals$argument.VariableLabel]]))) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -146,11 +179,9 @@ create_label_list_element <- function(variable_rows) { as.character(single_row[[pkg.globals$argument.CatValue]]) value_being_labeled <- recode_variable_NA_formating(value_being_labeled, ret_list$type) - ret_list$values[[as.character(single_row[[ - pkg.globals$argument.CatLabel]])]] <- + ret_list$values[[as.character(single_row[[pkg.globals$argument.CatLabel]])]] <- value_being_labeled - ret_list$values_long[[as.character(single_row[[ - pkg.globals$argument.CatLabelLong]])]] <- + ret_list$values_long[[as.character(single_row[[pkg.globals$argument.CatLabelLong]])]] <- value_being_labeled } } @@ -171,9 +202,13 @@ create_label_list_element <- function(variable_rows) { label_data <- function(label_list, data_to_label) { for (variable_name in names(label_list)) { if (is.na(label_list[[variable_name]]$type)) { - warning(paste(variable_name, - "is missing from variable_details or variables - (if it was also passed) please verify correct spelling")) + warning( + paste( + variable_name, + "is missing from variable_details or variables + (if it was also passed) please verify correct spelling" + ) + ) next() } if (label_list[[variable_name]]$type == pkg.globals$argument.CatType) { diff --git a/R/tableone-print-modification.R b/R/tableone-print-modification.R index 3fc1e057..17ae07b9 100644 --- a/R/tableone-print-modification.R +++ b/R/tableone-print-modification.R @@ -128,7 +128,7 @@ print.TableOne <- }, error = function(e) { x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] <- - "I NEED A LABEL" + missingLabel }) rownames(mat)[j] <- gsub(trimws(rownames(mat)[j]), From 465871e2e516f94d7e97c28e1d9824da33eb51ff Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 2 Mar 2020 11:09:11 -0500 Subject: [PATCH 100/123] [Feature] added labels to kableone print --- NAMESPACE | 10 +++++++++- R/module-instruction-parsing.R | 2 ++ R/tableone-print-modification.R | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 3d56cde1..2a3efcbd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,6 @@ # Generated by roxygen2: do not edit by hand -S3method(CreateTableOne,bllfow) +S3method(CreateTableOne,BLLFlow) S3method(CreateTableOne,default) S3method(bake,step_apply_missing_tagged_na) S3method(bake,step_tagged_naomit) @@ -10,8 +10,11 @@ S3method(get_variables,default) S3method(prep,step_apply_missing_tagged_na) S3method(prep,step_tagged_naomit) S3method(prep,step_z) +S3method(print,TableOne) S3method(run_module,BLLFlow) S3method(run_module,default) +S3method(set_data_labels,BLLFlow) +S3method(set_data_labels,default) S3method(tidy,step_tagged_naomit) export(CreateTableOne) export(bllflow_config_combine_data) @@ -21,6 +24,7 @@ export(bllflow_config_rec_data) export(build_bllflow) export(get_variables) export(is_equal) +export(kableone) export(read_data) export(rec_with_table) export(run_module) @@ -33,8 +37,12 @@ importFrom(dplyr,rowwise) importFrom(dplyr,select) importFrom(haven,tagged_na) importFrom(magrittr,"%>%") +importFrom(recipes,bake) +importFrom(recipes,prep) +importFrom(recipes,tidy) importFrom(sjlabelled,"set_label<-") importFrom(sjlabelled,set_label) importFrom(sjlabelled,set_labels) importFrom(stringr,str_match) importFrom(tableone,CreateTableOne) +importFrom(utils,capture.output) diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 6fdac5c3..5e3c403b 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -55,6 +55,8 @@ run_module.BLLFlow <- function(bll_model, module_sequence_number) { } #' @importFrom recipes bake +#' @importFrom recipes prep +#' @importFrom recipes tidy #' @export run_module.default <- function(variables, diff --git a/R/tableone-print-modification.R b/R/tableone-print-modification.R index 17ae07b9..c7784f5c 100644 --- a/R/tableone-print-modification.R +++ b/R/tableone-print-modification.R @@ -222,3 +222,27 @@ print.TableOne <- ## Return the result return(invisible(out)) } + + +#' Export TableOne Objects to Markdown +#' +#' @param x an object created by a tableone function +#' @param ... arguments passed to \code{\link[knitr]{kable}} +#' +#' @return A character vector of the table source code +#' @export +#' +#' @examples +#' +#' library(survival) +#' data(pbc) +#' +#' tableOne <- CreateTableOne(data = pbc) +#' +#' kableone(tableOne) +#' +#' @importFrom utils capture.output +kableone <- function(x, ...) { + capture.output(x <- print(x, valLabel=TRUE, varLabel = TRUE)) + knitr::kable(x, ...) +} \ No newline at end of file From eb042d2c218973efff9901f4787ecbb5c07cfd3a Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 3 Mar 2020 10:12:37 -0500 Subject: [PATCH 101/123] [Feature] Added additional params to bllflow::kableone (missingLabel, valLabel, varLabel) --- R/tableone-print-modification.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/tableone-print-modification.R b/R/tableone-print-modification.R index c7784f5c..122e2159 100644 --- a/R/tableone-print-modification.R +++ b/R/tableone-print-modification.R @@ -242,7 +242,7 @@ print.TableOne <- #' kableone(tableOne) #' #' @importFrom utils capture.output -kableone <- function(x, ...) { - capture.output(x <- print(x, valLabel=TRUE, varLabel = TRUE)) +kableone <- function(x, missingLabel = "Missing Label", valLabel = TRUE, varLabel = TRUE, ...) { + capture.output(x <- print(x, valLabel = valLabel, varLabel = varLabel, missingLabel = missingLabel)) knitr::kable(x, ...) } \ No newline at end of file From 3b4d757d8b1ae1392290b1f8b9b3882c3db3cf2b Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 3 Mar 2020 11:54:26 -0500 Subject: [PATCH 102/123] [Bug] Fixed trying to add labels to non existant variables anywhwere --- R/label-utils.R | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/R/label-utils.R b/R/label-utils.R index 9afc6d28..222db965 100644 --- a/R/label-utils.R +++ b/R/label-utils.R @@ -84,6 +84,7 @@ set_data_labels.default <- # Add rows from variables that are missing from variable_details var_details_names <- unique(variable_details[[pkg.globals$argument.Variables]]) missing_vars <- variable_names[(!variable_names %in% var_details_names)] + missing_vars <- missing_vars[missing_vars %in% variables_sheet[[pkg.globals$argument.Variables]]] catch_up_vars <- variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% missing_vars, ] keep_columns <- @@ -97,11 +98,14 @@ set_data_labels.default <- pkg.globals$argument.Units, pkg.globals$argument.CatValue ) - catch_up_vars[keep_columns[(!keep_columns %in% colnames(catch_up_vars))]] <- NA - catch_up_vars[[pkg.globals$argument.ToType]] <- "cont" - variable_details <- variable_details[keep_columns] - catch_up_vars <- catch_up_vars[keep_columns] - variable_details <- rbind(variable_details, catch_up_vars) + if (nrow(catch_up_vars) > 0) { + catch_up_vars[keep_columns[(!keep_columns %in% colnames(catch_up_vars))]] <- + NA + catch_up_vars[[pkg.globals$argument.ToType]] <- "cont" + variable_details <- variable_details[keep_columns] + catch_up_vars <- catch_up_vars[keep_columns] + variable_details <- rbind(variable_details, catch_up_vars) + } } label_list <- NULL for (variable_name in variable_names) { From b96ad211f785c16055a73bdc0c4dafb6df4aada6 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Tue, 3 Mar 2020 15:21:03 -0500 Subject: [PATCH 103/123] [Feature] Added bllflow object return to avoid accidental NULL return --- R/bll-flow-constructor-utility.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index a8e87a2b..38795244 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -54,6 +54,7 @@ bllflow_config_read_data <- function(bllflow_object, config_name = NULL){ save(list = data_name, file = file.path(config$data_dir, paste0(data_name, ".RData"))) } } + return(bllflow_object) } #' Recode data using config data @@ -80,6 +81,7 @@ bllflow_config_rec_data <- function(bllflow_object, config_name = NULL){ assign(data_name, tmp_rec_data) save(list = data_name, file = file.path(config$data_dir, paste0(data_name, "_recoded", ".RData"))) } + return(bllflow_object) } #' Combine data based on config location From 48e19e2c04eefc573d353a00167844f867eba3a2 Mon Sep 17 00:00:00 2001 From: DarkShadeKnigh Date: Mon, 9 Mar 2020 09:49:22 -0400 Subject: [PATCH 104/123] [Feature] Test updated bllflow --- .Rbuildignore | 4 + DESCRIPTION | 10 +- NAMESPACE | 8 +- R/apply_missing_tagged_na.R | 16 +- R/bll-flow-constructor-utility.R | 177 ++- R/bll-flow.R | 218 +-- R/clean.R | 34 +- R/create-reference.R | 12 +- R/ddi-utils.R | 38 +- R/default_step_parsing.R | 176 +- R/error-check.R | 14 +- R/function_parsing.R | 4 +- R/label-utils.R | 105 +- R/log-function-activity.R | 6 +- R/module-instruction-parsing.R | 122 +- R/print-metadata-log.R | 6 +- R/recipy-utility.R | 10 +- R/recode-with-table.R | 380 +++-- R/small-cell-check.R | 18 +- R/step_apply_missing_tagged_na.R | 49 +- R/step_naomit.R | 50 +- R/step_with_formula_parsing.R | 101 +- R/step_z.R | 97 +- R/strings.R | 20 +- R/table-one-long.R | 105 +- R/tableone-print-modification.R | 287 ++-- R/util-funcs.R | 22 +- TestingModules.csv | 3 - TestingVariables.csv | 24 - data/cchs2001.RData | Bin 21548 -> 0 bytes data/cchs2003.RData | Bin 31988 -> 0 bytes data/cchs2005.RData | Bin 30332 -> 0 bytes data/cchs2007_2008.RData | Bin 31344 -> 0 bytes data/cchs2009_2010.RData | Bin 31952 -> 0 bytes data/cchs2010.RData | Bin 34484 -> 0 bytes data/cchs2011_2012.RData | Bin 31200 -> 0 bytes data/cchs2012.RData | Bin 34064 -> 0 bytes data/cchs2013_2014.RData | Bin 30128 -> 0 bytes data/cchs2014.RData | Bin 31400 -> 0 bytes data/variableDetails.RData | Bin 23247 -> 0 bytes data/variables.RData | Bin 5864 -> 0 bytes .../PoRT MSW - cchsVarDetails_archived.csv | 1057 ------------ .../PoRT MSW - cchsVariables_archived.csv | 135 -- inst/extdata/Meeting Version - Modules.csv | 3 - inst/extdata/Meeting Version - Variables.csv | 9 - .../Meeting Version - variableDetails.csv | 21 - inst/extdata/PBC-variableDetails - Copy.csv | 44 - inst/extdata/PBC-variableDetails.csv | 18 - inst/extdata/PBC-variables - Copy.csv | 22 - inst/extdata/PBC-variables.csv | 17 - inst/extdata/bllFlow-variables.csv | 29 - inst/extdata/other_cats.csv | 227 --- inst/extdata/pbc-modules.csv | 5 - inst/extdata/pbc-operations.csv | 14 - inst/extdata/pbcDDI.xml | 1412 ----------------- man/BLLFlow.Rd | 65 - man/LogFunctionActivity.Rd | 44 - man/print.metaDataLog.Rd | 16 - 58 files changed, 1134 insertions(+), 4120 deletions(-) delete mode 100644 TestingModules.csv delete mode 100644 TestingVariables.csv delete mode 100644 data/cchs2001.RData delete mode 100644 data/cchs2003.RData delete mode 100644 data/cchs2005.RData delete mode 100644 data/cchs2007_2008.RData delete mode 100644 data/cchs2009_2010.RData delete mode 100644 data/cchs2010.RData delete mode 100644 data/cchs2011_2012.RData delete mode 100644 data/cchs2012.RData delete mode 100644 data/cchs2013_2014.RData delete mode 100644 data/cchs2014.RData delete mode 100644 data/variableDetails.RData delete mode 100644 data/variables.RData delete mode 100644 inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv delete mode 100644 inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv delete mode 100644 inst/extdata/Meeting Version - Modules.csv delete mode 100644 inst/extdata/Meeting Version - Variables.csv delete mode 100644 inst/extdata/Meeting Version - variableDetails.csv delete mode 100644 inst/extdata/PBC-variableDetails - Copy.csv delete mode 100644 inst/extdata/PBC-variableDetails.csv delete mode 100644 inst/extdata/PBC-variables - Copy.csv delete mode 100644 inst/extdata/PBC-variables.csv delete mode 100644 inst/extdata/bllFlow-variables.csv delete mode 100644 inst/extdata/other_cats.csv delete mode 100644 inst/extdata/pbc-modules.csv delete mode 100644 inst/extdata/pbc-operations.csv delete mode 100644 inst/extdata/pbcDDI.xml delete mode 100644 man/BLLFlow.Rd delete mode 100644 man/LogFunctionActivity.Rd delete mode 100644 man/print.metaDataLog.Rd diff --git a/.Rbuildignore b/.Rbuildignore index 77cf5d3a..10f95e5d 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -12,3 +12,7 @@ BLLFlow.Rproj ^images$ docs$ vignettes +^.travis.yml +^CODE_OF_CONDUCT.md +^CONTRIBUTING.md +^config.yml \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index b90767b7..db6ae0f9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -24,20 +24,24 @@ Authors@R: c( Depends: R (>= 3.2), tableone, + recipes +Imports: DDIwR, xml2, stringr, - recipes, sjlabelled, haven, magrittr, rms, config, - dplyr + dplyr, + labelled, + rlang, + tibble, + tidyr Suggests: knitr, rmarkdown, - magrittr, survival, testthat URL: https://github.com/Big-Life-Lab/bllflow diff --git a/NAMESPACE b/NAMESPACE index 2a3efcbd..c69449b1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -15,7 +15,6 @@ S3method(run_module,BLLFlow) S3method(run_module,default) S3method(set_data_labels,BLLFlow) S3method(set_data_labels,default) -S3method(tidy,step_tagged_naomit) export(CreateTableOne) export(bllflow_config_combine_data) export(bllflow_config_init) @@ -36,13 +35,20 @@ importFrom(dplyr,do) importFrom(dplyr,rowwise) importFrom(dplyr,select) importFrom(haven,tagged_na) +importFrom(labelled,var_label) importFrom(magrittr,"%>%") importFrom(recipes,bake) importFrom(recipes,prep) +importFrom(recipes,step) importFrom(recipes,tidy) +importFrom(rlang,parse_expr) importFrom(sjlabelled,"set_label<-") +importFrom(sjlabelled,get_labels) importFrom(sjlabelled,set_label) importFrom(sjlabelled,set_labels) +importFrom(stats,sd) importFrom(stringr,str_match) importFrom(tableone,CreateTableOne) +importFrom(tibble,as.tibble) +importFrom(tidyr,drop_na) importFrom(utils,capture.output) diff --git a/R/apply_missing_tagged_na.R b/R/apply_missing_tagged_na.R index a2a5fffc..e3fcf8e4 100644 --- a/R/apply_missing_tagged_na.R +++ b/R/apply_missing_tagged_na.R @@ -1,21 +1,21 @@ # ---------- DEPRECATED SEE BLLFLOWRECIPES FOR NEW VERSION ---------- #' #' Apply missing tagged NA -#' #' -#' #' Any non tagged NA has the passed tag applied to them this helps tag NA that -#' #' were added by other packages -#' #' +#' #' +#' #' Any non tagged NA has the passed tag applied to them this helps tag NA +#' #' that were added by other packages +#' #' #' #' @param data #' #' @param variables #' #' @param tag_type -#' #' +#' #' #' #' @return passed data with non tagged NA now having the tag_type applied #' #' @export -#' apply_missing_tagged_na <- function(data, variables, tag_type){ -#' for (variable in variables){ +#' apply_missing_tagged_na <- function(data, variables, tag_type) { +#' for (variable in variables) { #' NA_index <- is.na(data[[variable]]) #' tagged_NA_index <- haven::is_tagged_na(data[[variable]]) #' true_NA_index <- !(NA_index == tagged_NA_index) #' data[true_NA_index, variable] <- haven::tagged_na(tag_type) #' } #' return(data) -#' } \ No newline at end of file +#' } diff --git a/R/bll-flow-constructor-utility.R b/R/bll-flow-constructor-utility.R index 38795244..5780cfe2 100644 --- a/R/bll-flow-constructor-utility.R +++ b/R/bll-flow-constructor-utility.R @@ -1,11 +1,11 @@ #' Initialize bllflow from provided config file -#' -#' Used the provided config file and matching name to load the correct config +#' +#' Used the provided config file and matching name to load the correct config #' type -#' +#' #' @param config_name = NULL name of the config environment to use for #' initialization -#' +#' #' @return constructed bllflow object #' @export bllflow_config_init <- @@ -16,27 +16,29 @@ bllflow_config_init <- } config <- config::get() ret_bllflow <- - build_bllflow(variables = as.data.frame(config$variables), - variable_details = as.data.frame(config$variable_details), - modules = as.data.frame(config$modules)) - + build_bllflow( + variables = as.data.frame(config$variables), + variable_details = as.data.frame(config$variable_details), + modules = as.data.frame(config$modules) + ) + return(ret_bllflow) -} + } #' Read in data according to config specified data type -#' +#' #' Uses bllflow to read_data based on config specifications. Currently supported #' formats are: .RData, .csv -#' +#' #' @param bllflow_object passed bllflow object to read variables from #' @param config_name = NULL optional passing of config if you wish to load data #' from a specific config -#' -#' @return NULL since no modifications are made and read data is just stored in +#' +#' @return NULL since no modifications are made and read data is just stored in #' pre specified location #' @export -bllflow_config_read_data <- function(bllflow_object, config_name = NULL){ - if (!is.null(config_name)){ +bllflow_config_read_data <- function(bllflow_object, config_name = NULL) { + if (!is.null(config_name)) { Sys.setenv(R_CONFIG_ACTIVE = config_name) } config <- config::get() @@ -51,71 +53,85 @@ bllflow_config_read_data <- function(bllflow_object, config_name = NULL){ path_to_data = config$data[[data_name]] ) assign(data_name, tmp_data) - save(list = data_name, file = file.path(config$data_dir, paste0(data_name, ".RData"))) + save(list = data_name, file = file.path(config$data_dir, + paste0(data_name, ".RData"))) } } return(bllflow_object) } #' Recode data using config data -#' -#' Recodes data according to the config then saves it as RData file at a +#' +#' Recodes data according to the config then saves it as RData file at a #' specified location -#' +#' #' @param bllflow_object passed bllflow object to read variables from #' @param config_name = NULL optional passing of config if you wish to load data #' from a specific config -#' -#' @return NULL since no modifications are made and read data is just stored in +#' +#' @return NULL since no modifications are made and read data is just stored in #' pre specified location #' @export -bllflow_config_rec_data <- function(bllflow_object, config_name = NULL){ +bllflow_config_rec_data <- function(bllflow_object, config_name = NULL) { # Consider making this into a function or let user pass loaded config - if (!is.null(config_name)){ + if (!is.null(config_name)) { Sys.setenv(R_CONFIG_ACTIVE = config_name) } config <- config::get() for (data_name in names(config$data)) { - load(file.path(config$data_dir, paste0( data_name, ".RData"))) - tmp_rec_data <- rec_with_table(base::get(data_name), variables = bllflow_object$variables, variable_details = bllflow_object$variable_details, database_name = data_name) + load(file.path(config$data_dir, paste0(data_name, ".RData"))) + tmp_rec_data <- rec_with_table( + base::get(data_name), + variables = bllflow_object$variables, + variable_details = bllflow_object$variable_details, + database_name = data_name) assign(data_name, tmp_rec_data) - save(list = data_name, file = file.path(config$data_dir, paste0(data_name, "_recoded", ".RData"))) + save(list = data_name, + file = file.path(config$data_dir, + paste0(data_name, + "_recoded", + ".RData"))) } return(bllflow_object) } #' Combine data based on config location -#' -#' Combines recoded data and applies labels before attaching the object to bllflow -#' +#' +#' Combines recoded data and applies labels before attaching +#' the object to bllflow +#' #' @param bllflow_object passed bllflow object to read variables from #' @param config_name = NULL optional passing of config if you wish to load data #' from a specific config -#' +#' #' @return modified bllflow object containing labelled combined data #' @export -bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ - if (!is.null(config_name)){ +bllflow_config_combine_data <- function(bllflow_object, config_name = NULL) { + if (!is.null(config_name)) { Sys.setenv(R_CONFIG_ACTIVE = config_name) } config <- config::get() tmp_working_data <- NULL for (data_name in names(config$data)) { - load(file.path(config$data_dir, paste0( data_name, "_recoded", ".RData"))) + load(file.path(config$data_dir, paste0(data_name, "_recoded", ".RData"))) tmp_mod_data <- base::get(data_name) tmp_mod_data[["data_name"]] <- data_name - if (is.null(tmp_working_data)){ + if (is.null(tmp_working_data)) { tmp_working_data <- tmp_mod_data - }else{ + } else { tmp_working_data <- dplyr::bind_rows(tmp_working_data, tmp_mod_data) } } - tmp_working_data <- bllflow::set_data_labels(tmp_working_data, bllflow_object$variable_details, bllflow_object$variables) + tmp_working_data <- bllflow::set_data_labels( + tmp_working_data, + bllflow_object$variable_details, + bllflow_object$variables) bllflow_object[[pkg.globals$bllFlowContent.WorkingData]] <- tmp_working_data bllflow_object[["previous_module_data"]] <- tmp_working_data - attr(bllflow_object[[pkg.globals$bllFlowContent.WorkingData]], pkg.globals$bllFlowContent.Sequence) <- + attr(bllflow_object[[pkg.globals$bllFlowContent.WorkingData]], + pkg.globals$bllFlowContent.Sequence) <- 0 - + return(bllflow_object) } # ----------- WIP NOT FULLY IMPLEMENTED ON TODO --------- @@ -123,7 +139,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' create_variable_details_template <- function(x = NULL, ...) { #' UseMethod("create_variable_details_template", x) #' } -#' +#' #' #' @export #' create_variable_details_template.BLLFlow <- function(bllFlow_object) { #' variable_details <- @@ -143,20 +159,25 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' variableStartLabel = character() #' ) #' # Collect all the variables in MSW variables -#' detected_variables <- unique(bllFlow_object[[pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) -#' +#' detected_variables <- unique(bllFlow_object[[ +#' pkg.globals$bllFlowContent.Variables]][[pkg.globals$argument.Variables]]) +#' #' # Loop through the ddiList and add variables detected #' for (single_DDI in bllFlow_object[[pkg.globals$bllFlowContent.DDI]]) { #' variable <- "Please Insert RecodedVariable name" #' toType <- -#' "Please insert desired recoded variable type supported ones are: cat, cont" +#' "Please insert desired recoded variable type supported ones are: +#' cat, cont" #' databaseStart <- -#' single_DDI[["ddiObject"]][["codeBook"]][["docDscr"]][["docSrc"]][["titlStmt"]][["titl"]][[1]] +#' single_DDI[["ddiObject"]][["codeBook"]][["docDscr"]][[ +#' "docSrc"]][["titlStmt"]][["titl"]][[1]] #' # loop through detected_variables #' for (singleDetectedVariable in detected_variables) { -#' if (singleDetectedVariable %in% names(single_DDI[["variableMetaData"]][["dataDscr"]])) { +#' if (singleDetectedVariable %in% names(single_DDI[[ +#' "variableMetaData"]][["dataDscr"]])) { #' variableDDI <- -#' single_DDI[["variableMetaData"]][["dataDscr"]][[singleDetectedVariable]] +#' single_DDI[["variableMetaData"]][["dataDscr"]][[ +#' singleDetectedVariable]] #' variableStart <- #' paste(databaseStart, singleDetectedVariable, sep = "::") #' fromType <- variableDDI$type @@ -168,7 +189,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' catStartLabel <- variableDDI$label #' variableStartShortLabel <- variableDDI$label #' variableStartLabel <- variableDDI$label -#' +#' #' newRow <- #' data.frame( #' variable = variable, @@ -188,44 +209,50 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' variable_details <- rbind(variable_details, newRow) #' } #' } -#' -#' +#' +#' #' } #' bllFlow_object$variable_details <- variable_details -#' +#' #' return(bllFlow_object) #' } # ----------- DEPRICATE NEEDS REMAKING --------- #' #' Creates a data frame that holds additional ddi data #' #' -#' #' @param variable_details The dataframe that contains the variable information -#' #' that is used to populate the frame with relevant ddi info +#' #' @param variable_details The dataframe that contains the +#' #' variable information that is used to populate the frame with +#' #' relevant ddi info #' #' @param ddiVariables an object that is generated by populateVariables -#' #' it contains the variables as well as all their value labels and min and max +#' #' it contains the variables as well as all their value labels +#' #' and min and max #' #' @return returns a dataframe containing new ddi data #' PopulateVariableDetails <- #' function(variable_details, #' ddiVariables) { #' # Used to group all the variables in the dataframe #' variable_details <- -#' variable_details[order(variable_details[[pkg.globals$argument.VariableStart]], -#' variable_details[[pkg.globals$argument.CatStartValue]]),] +#' variable_details[order(variable_details[[ +#' pkg.globals$argument.VariableStart]], +#' variable_details[[pkg.globals$argument.CatStartValue]]),] #' onlyDesiredVariables <- -#' variable_details[variable_details[[pkg.globals$argument.VariableStart]] %in% names(ddiVariables), ] +#' variable_details[variable_details[[pkg.globals$argument.VariableStart]] +#' %in% names(ddiVariables), ] #' # Copy all the columns #' finalFrame <- onlyDesiredVariables[0, ] #' for (nameIndex in 1:length(names(ddiVariables))) { #' nameBeingChecked <- names(ddiVariables)[[nameIndex]] #' # All the rows for the variable being checked #' rowsToCheck <- -#' onlyDesiredVariables[onlyDesiredVariables[[pkg.globals$argument.VariableStart]] == nameBeingChecked,] +#' onlyDesiredVariables[onlyDesiredVariables[[ +#' pkg.globals$argument.VariableStart]] == nameBeingChecked,] #' # Writes data to relavant rows and removes them from the value object #' for (rowToCheck in 1:nrow(rowsToCheck)) { #' presentCatStartValue <- #' rowsToCheck[rowToCheck, pkg.globals$argument.CatStartValue] #' # Check if the value matches anything in the DDI object -#' if (presentCatStartValue %in% names(ddiVariables[[nameBeingChecked]])) { +#' if (presentCatStartValue %in% names(ddiVariables[[ +#' nameBeingChecked]])) { #' # Populate every column with values pulled from DDI #' selectedVariableCatValue <- #' ddiVariables[[nameBeingChecked]][[as.character(presentCatStartValue)]] @@ -249,7 +276,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' } #' } #' } -#' +#' #' # Remove that value from the list to avoid repetition during new row creation #' ddiVariables[[nameBeingChecked]][[as.character(presentCatStartValue)]] <- #' NULL @@ -292,7 +319,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' finalFrame <- rbind(finalFrame, rowsToCheck[rowToCheck,]) #' } #' } -#' +#' #' # Create new Rows for leftover data #' for (leftOverValue in names(ddiVariables[[nameBeingChecked]])) { #' rowToAdd <- onlyDesiredVariables[0, ] @@ -306,23 +333,23 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' rowToAdd[1, columnName] <- #' leftOverVariableValue[[columnName]] #' } -#' +#' #' rowToAdd[1, pkg.globals$argument.VariableStart] <- #' nameBeingChecked #' finalFrame <- rbind(finalFrame, rowToAdd) #' } #' } -#' +#' #' variablesNotRelatedToTheDDI <- #' variable_details[!variable_details$variableStart %in% names(ddiVariables), ] #' finalFrame <- rbind(finalFrame, variablesNotRelatedToTheDDI) #' rownames(finalFrame) <- NULL -#' +#' #' return(finalFrame) #' } -#' +#' #' #' Imports DDI metadata into a variable details worksheet -#' #' +#' #' #' #' Updates a variable details worksheet with metadata from a DDI document. New rows #' #' are added for missing categories and columns that are empty are updated with #' #' values from the document. No information from the worksheet is overwritten. @@ -331,12 +358,12 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' #' @param variable_details A data frame containing a variable details worksheet #' #' @return A dataframe containing the updated variable details worksheet #' #' @export -#' #' @examples +#' #' @examples #' #' library(bllflow) -#' #' +#' #' #' #' pbcDDI <- bllflow::ReadDDI(system.file("extdata", "", package="bllflow"), "pbcDDI.xml") #' #' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' #' +#' #' #' #' populatedDetails <- ProcessDDIVariableDetails(pbcDDI, variable_details) #' ProcessDDIVariableDetails <- function(ddi, variable_details) { #' variableValueList <- list() @@ -348,7 +375,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' unique(variable_details[pkg.globals$argument.VariableStart]) #' # Find extra info about the variable low and high #' valueForHighLow <- list() -#' +#' #' # Need to loop through every element because the xml2 names all variables var #' for (individualVariable in ddiObject$codeBook$dataDscr) { #' if (!is.null(attr(individualVariable, "name", exact = TRUE))) { @@ -362,7 +389,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' } #' } #' } -#' +#' #' # Loop through every unique variable found in the VariableDetails #' for (variableToCheck in detected_variables[, 1]) { #' # Check if that variable is recorded in DDI @@ -388,7 +415,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' } #' if (valueForHighLow[[variableToCheck]]$Type != pkg.globals$ddiValueName.Cat){ #' # Record variable info -#' variableValueList[[as.character(variableToCheck)]] <- +#' variableValueList[[as.character(variableToCheck)]] <- #' AddDDIToList( #' valueForHighLow[[variableToCheck]]$Type, #' NA, @@ -402,7 +429,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' ddiVariables[[variableToCheck]] <- variableValueList #' } #' } -#' +#' #' if (length(ddiVariables) == 0) { #' populatedVariableDetails <- NULL #' } else{ @@ -410,10 +437,10 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' PopulateVariableDetails(variable_details, #' ddiVariables) #' } -#' +#' #' return(populatedVariableDetails) #' } -#' +#' #' #' AddDDI information to a list #' #' #' #' @param variableStartType Variable type cont or cat @@ -435,7 +462,7 @@ bllflow_config_combine_data <- function(bllflow_object, config_name = NULL){ #' retList[[pkg.globals$argument.CatStartLabel]] <- catStartLabel #' retList[[pkg.globals$argument.VariableStartLabel]] <- variableStartLabel #' retList[[pkg.globals$argument.VariableStartHighLow]] <- paste(variableStartLow, ":",variableStartHigh, sep = "") -#' +#' #' return(retList) #' } -#' +#' diff --git a/R/bll-flow.R b/R/bll-flow.R index 01fb75c8..4d540539 100644 --- a/R/bll-flow.R +++ b/R/bll-flow.R @@ -2,62 +2,35 @@ #' #' Wraps up the data, variables and variable_details arguments in an R object, #' making it an instance of a bllflow class and returning the resulting object. -#' If a ddi argument is provided, all the metadata from the DDI document is -#' imported into the R object #' -#' @param data A dataframe list that represents the datasets the model will be developed -#' on -#' @param variables A dataframe that has the specification sheet for this model. An example -#' of this worksheet is available here -#' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=0}. -#' @param variable_details A dataframe that is the variable details worksheet. An example -#' of this worksheet is available here -#' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit#gid=1196358036}. -#' @param ddi A named list that contains the ddi documents +#' @param data A dataframe list that represents the datasets the model +#' will be developed on +#' @param variables A dataframe that has the specification sheet for this model. +#' An example of this worksheet is available here +#' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit?usp=sharing}. +#' @param variable_details A dataframe that is the variable details worksheet. +#' An example of this worksheet is available here +#' \url{https://docs.google.com/spreadsheets/d/1QVqLKy_C185hzeQdJeOy-EeFMBXui1hZ1cB2sKqPG-4/edit?usp=sharing}. +#' @param modules A dataframe containing module instructions #' @return A named list which is an instance of the bllflow class. The items -#' in the list are specified below: \cr -#' 1. data - A dataframe that contains the passed data argument \cr -#' 2. variables - A dataframe that contains the passed variables argument \cr -#' 3. variable_details - A dataframe that contains the passed variable_details argument \cr -#' 4. ddi - A named list that contains the ddi found on the passed path \cr -#' 5. additional_DDI_meta_data - A named list. See the return type of the \code{\link{get_DDI_description}} function \cr -#' 6. populated_variable_details - A dataframe that contains the rows in the variable_details \cr -#' argument but with additional data filled in using the ddi argument it's specified +#' in the list are specified below: \cr +#' 1. previous_module_data - A dataframe used to store previous module +#' transformation for the purpose of backtracking \cr +#' 2. working_data - A dataframe used to store latest module transformations. +#' This is the primary data used in bllflow functions \cr +#' 3. variables - A dataframe that contains the passed variables argument \cr +#' 4. variable_details - A dataframe that contains the passed +#' variable_details argument \cr #' #' @export -#' -#' @examples -#' #TODO Update with lists -#' # ALl the libraries we will be using -#' library(bllflow) -#' library(survival) -#' -#' # Read in the data we will use for this example -#' data(pbc) -#' -#' # Read in the variables and variable details CSV sheets which are part of the -#' # master specification workbook -#' variablesSheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' -#' # Create a bllFlow R object for the PBC model using the above variables as args -#' # and store it in the pbcModel variable -#' pbcModel <- bllflow::BLLFlow(pbc, variablesSheet, variable_details) -#' -#' # The pbcModel variable is an R object of instance BLLFlow -#' print(attr(pbcModel, 'class')) build_bllflow <- function(data = NULL, - variables = NULL, - variable_details = NULL, - modules = NULL, - ddi = NULL) { - ddi_header <- list() + variables = NULL, + variable_details = NULL, + modules = NULL) { # Verify passed arg integrity for future functions if (!is.null(data)) { check_if_data_frame(data, names(data)) - - } if (!is.null(variables)) { check_if_data_frame(variables, pkg.globals$argument.Variables) @@ -69,8 +42,10 @@ build_bllflow <- ) } if (!is.null(variable_details)) { - check_if_data_frame(variable_details, - pkg.globals$argument.VariableDetailsSheet) + check_if_data_frame( + variable_details, + pkg.globals$argument.VariableDetailsSheet + ) check_for_column_presence( c( "variable", @@ -88,23 +63,23 @@ build_bllflow <- pkg.globals$argument.VariableDetailsSheet ) } - - - if (!is.null(ddi)) { - # TODO redisign to create template rather then populate add a check to verify proper structure - # processedVariableDetails <- - # ProcessDDIVariableDetails(ddi, variable_details) - - check_for_existance_of_in_list(c("variableMetaData", "ddiObject"), - ddi, - paste(names(ddi), "ddi")) - ddi_header[[names(ddi)]] <- - get_DDI_description(ddi) - - - } else{ - ddi_header <- NULL - } + + # DDI support has been dropped for now + # if (!is.null(ddi)) { + # # TODO redisign to create template rather then populate add a check to verify proper structure + # # processedVariableDetails <- + # # ProcessDDIVariableDetails(ddi, variable_details) + # + # check_for_existance_of_in_list(c("variableMetaData", "ddiObject"), + # ddi, + # paste(names(ddi), "ddi")) + # ddi_header[[names(ddi)]] <- + # get_DDI_description(ddi) + # + # + # } else{ + # ddi_header <- NULL + # } # TODO Add Verification for modules bll_flow_model <- list( @@ -112,42 +87,55 @@ build_bllflow <- working_data = data, variables = variables, variable_details = variable_details, - additional_DDI_meta_data = ddi_header, - populated_variable_details = NULL, - ddi = ddi, modules = modules - ) attr(bll_flow_model, "class") <- "BLLFlow" # BANDAID - if(!is.null(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]])) { - attr(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], pkg.globals$bllFlowContent.Sequence) <- + if (!is.null(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]])) { + attr(bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], + pkg.globals$bllFlowContent.Sequence) <- 0 } - + return(bll_flow_model) } - +#' Read csv data +#' +#' Uses passed variables sheet as well as the name of the data name to only read +#' the needed columns from the csv +#' +#' @param variables a variables dataframe can ususally be found in +#' bllflow$variables +#' @param data_name the name of the database ur reading make sure it matches +#' the name in databaseStart +#' @param path_to_data a valid file path to read the csv from +#' @param nrows = -1 specifies the number of rows to read in case not full data +#' is required +#' +#' @return a data.frame containing only the variables needed for that cycle +#' in variables #' @export read_data <- function(variables, - data_name, - path_to_data, - nrows = -1) { + data_name, + path_to_data, + nrows = -1) { # calculate the rows to set to null - first_row_of_data <- read.csv(file = path_to_data, nrows = 1) - + first_row_of_data <- utils::read.csv(file = path_to_data, nrows = 1) + var_names_for_this_data <- get_variables.default(variables, data_name) - + columns_to_keep <- colnames(first_row_of_data) %in% var_names_for_this_data column_classes <- sapply(columns_to_keep, boolean_conversion) - - data_to_save <- read.csv(file = path_to_data, - colClasses = column_classes, - nrows = nrows) - + + data_to_save <- utils::read.csv( + file = path_to_data, + colClasses = column_classes, + nrows = nrows + ) + return(data_to_save) } boolean_conversion <- function(bool_value) { @@ -157,29 +145,65 @@ boolean_conversion <- function(bool_value) { } else { ret_value <- "NULL" } - + return(ret_value) } +#' Get variables +#' +#' Generic method for getting start variables from variable_source +#' based on data_name +#' +#' @param variable_source A variables sheet or bllflow object containing +#' the variables sheet +#' @param ... Used for generic function consistency +#' +#' @return character vector containing start variables for this databaseStart #' @export get_variables <- function(variable_source = NULL, ...) { UseMethod("get_variables", variable_source) } + +#' Get variables from bllflow using specified database name +#' +#' A bllflow specific wrapper around default get_variables to allow +#' consistent bllflow workflow +#' +#' @param variable_source a bllflow object containing variables sheet +#' that is then parsed +#' @param data_name name matching the databaseStart column you wish to +#' get variables for +#' @param ... Used for generic function consistency +#' +#' @return character vector containing start variables for this databaseStart #' @export -get_variables.BLLFlow <- function(bllFlow, data_name) { - variables <- bllFlow[[pkg.globals$bllFlowContent.Variables]] - +get_variables.BLLFlow <- function(variable_source, data_name, ...) { + variables <- variable_source[[pkg.globals$bllFlowContent.Variables]] + return(get_variables.default(variables, data_name)) } + +#' Get variables from variables using specified database name +#' +#' @param variable_source a variables data.frame object containing variables +#' used in the study +#' @param data_name name matching the databaseStart column you wish to get +#' variables for +#' @param ... Used for generic function consistency +#' +#' @return character vector containing start variables for this databaseStart #' @export -get_variables.default <- function(variables, data_name) { +get_variables.default <- function(variable_source, data_name, ...) { + variables <- variable_source variables_to_read_list <- - variables[grepl(data_name, variables[[pkg.globals$argument.DatabaseStart]]), ] - + variables[grepl(data_name, variables[[ + pkg.globals$argument.DatabaseStart]]), ] + var_names_for_this_data <- list() - - for (variable_to_read_row in 1:nrow(variables_to_read_list)) { + + for (variable_to_read_row in seq_len(nrow(variables_to_read_list))) { variable_to_read <- - as.character(variables_to_read_list[variable_to_read_row, pkg.globals$argument.VariableStart]) + as.character(variables_to_read_list[variable_to_read_row, + pkg.globals$argument.VariableStart]) data_variable_being_checked <- character() if (!grepl("DerivedVar", variable_to_read)) { if (grepl(data_name, variable_to_read)) { @@ -198,11 +222,11 @@ get_variables.default <- function(variables, data_name) { stringr::str_match(variable_to_read, "\\[(.*?)\\]")[, 2] } } - + var_names_for_this_data <- append(var_names_for_this_data, data_variable_being_checked) } var_names_for_this_data <- unique(var_names_for_this_data) - + return(var_names_for_this_data) } diff --git a/R/clean.R b/R/clean.R index 67129a96..01118224 100644 --- a/R/clean.R +++ b/R/clean.R @@ -8,7 +8,7 @@ #' clean_min <- function(bll_flow_model, ...) { #' UseMethod("clean_min") #' } -#' +#' #' #' @describeIn clean_min Cleans the data using the min and outlier columns in the variables sheet of #' #' the MSW. Outlier method is applied on a row if any of the variable #' #' values for that row is less than the min value as specified in the variables @@ -56,17 +56,17 @@ #' pkg.globals$columnNames.Min, #' print, #' check_less_then) -#' +#' #' return(bll_flow_model) #' } -#' +#' #' # Less then comparing function #' check_less_then <- #' function(operator_based_compare_value, #' value_being_compare) { #' return(operator_based_compare_value < value_being_compare) #' } -#' +#' #' #' Cleans a dataset by updating values above a certain maximum #' #' #' #' @param bll_flow_model The bll_flow_model we will clean @@ -76,7 +76,7 @@ #' clean_max <- function(bll_flow_model, ...) { #' UseMethod("clean_max") #' } -#' +#' #' #' @describeIn clean_max Cleans the data using the max and outlier columns in the variables sheet of #' #' the MSW. Outlier method is applied on a row if any of the variable #' #' values for that row is greater than the max value as specified in the variables @@ -124,17 +124,17 @@ #' pkg.globals$columnNames.Max, #' print, #' check_greater_then) -#' +#' #' return(bll_flow_model) #' } -#' +#' #' # Greater then comparing function #' check_greater_then <- #' function(operator_based_compare_value, #' value_being_compare) { #' return(operator_based_compare_value > value_being_compare) #' } -#' +#' #' # Internal helper functions ------------------------------------------------------------------ #' # Function for actually manipulating the data #' process_min_or_max <- @@ -155,15 +155,15 @@ #' }) #' # Apply creates list of length of all rows it checks this removes the ones that had no data added #' variables_to_check[sapply(variables_to_check, is.null)] <- NULL -#' +#' #' # Check if all the variables from variables to check exist in the data #' check_for_existance_of_in_list(variables_to_check, colnames(bll_flow_model$data)) -#' +#' #' # Clean the affected rows #' for (variable_row_being_checked in variables_to_check) { #' num_total_rows <- nrow(bll_flow_model$data) #' num_affected_rows <- 0 -#' +#' #' # Does not remove NA rows only less then or greater then #' # Handling for the delete outlier #' if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "delete") { @@ -176,10 +176,10 @@ #' ) & #' !is.na(bll_flow_model$data[variable_row_being_checked$variable]) #' ),] -#' +#' #' num_affected_rows <- #' num_total_rows - nrow(bll_flow_model$data) -#' +#' #' # Handle missing outlier #' } else if (variable_row_being_checked[[pkg.globals$columnNames.Outlier]] == "missing") { #' # this checks how many rows contained missing before the function was ran to calculate how many were changed @@ -191,7 +191,7 @@ #' num_post_rows <- #' length(which(is.na(bll_flow_model$data[variable_row_being_checked$variable]))) #' num_affected_rows <- num_post_rows - num_pre_contain_rows -#' +#' #' # Handle the replace with outlier #' } else if (!is.na(as.numeric(variable_row_being_checked[[pkg.globals$columnNames.Outlier]]))) { #' # Check how many rows already contained the number that is being changed too to give exact number of changed rows @@ -203,7 +203,7 @@ #' num_post_rows <- #' length(which(bll_flow_model$data[variable_row_being_checked$variable] == variable_row_being_checked[[pkg.globals$columnNames.Outlier]])) #' num_affected_rows <- num_post_rows - num_pre_contain_rows -#' +#' #' # Handle non supported outlier #' } else { #' stop(paste( @@ -211,7 +211,7 @@ #' variable_row_being_checked[[pkg.globals$columnNames.Outlier]] #' )) #' } -#' +#' #' # Log the the activity of this outlier #' bll_flow_model <- #' log_function_activity( @@ -233,6 +233,6 @@ #' print #' ) #' } -#' +#' #' return(bll_flow_model) #' } diff --git a/R/create-reference.R b/R/create-reference.R index a67acf5d..2bdc321b 100644 --- a/R/create-reference.R +++ b/R/create-reference.R @@ -20,7 +20,7 @@ #' # ----Step 1: verify input/create not passed input---- #' supported_model_types <- c("crr") #' var_names <- attr(model_object$coef, "names") -#' +#' #' if (!class(model_object) %in% supported_model_types) { #' stop("Passed model type is not yet supported. Aborting!") #' } @@ -46,14 +46,14 @@ #' } #' } #' } -#' +#' #' # ----Step 2: Generate model object ---- #' # Obtain the beta coefficient #' beta_coefficient <- model_object$coef #' all_strata_var_means <- list() #' ret_table <- #' data.frame(beta_coefficient = beta_coefficient, row.names = var_names) -#' +#' #' # Obtain the means #' if (calculate_mean) { #' if (!is.null(table_one$ContTable)) { @@ -68,14 +68,14 @@ #' } #' } #' baseline_risk <- calculate_baseline_risk(model_object, (365.25*baseline_risk_time_frame)) -#' +#' #' return(list(reference = ret_table, baseline = baseline_risk)) #' } -#' +#' #' calculate_baseline_risk <- function(model, time) { #' jumps <- data.frame(time = model$uftime, bfitj = model$bfitj) #' jumps_time <- jumps[jumps$time <= time, ] #' b0 <- sum(jumps_time$bfitj) #' out <- 1-exp(-b0) #' return(out) -#' } \ No newline at end of file +#' } diff --git a/R/ddi-utils.R b/R/ddi-utils.R index 8f5743be..df9e176a 100644 --- a/R/ddi-utils.R +++ b/R/ddi-utils.R @@ -36,22 +36,22 @@ #' var_name #' } #' } -#' +#' #' ddi_object <- #' list(variable_meta_data = ddi_meta_data, ddi_object = additional_DDI_meta_data) #' attr(ddi_object, "class") <- #' c(attr(ddi_object, "class"), "BLLFlowDDI") -#' +#' #' return(ddi_object) #' } -#' +#' #' # Prevents function from writing Cat to console #' suppress_function_output <- function(x) { #' sink(tempfile()) #' on.exit(sink()) #' invisible(force(x)) #' } -#' +#' #' #' Parses the headers from a DDI document #' #' #' #' Retreives the docDscr, stdyDscr and fileDscr nodes from a DDI document, storing @@ -78,10 +78,10 @@ #' stdyDscr = ddi_object$codeBook$stdyDscr, #' fileDscr = ddi_object$codeBook$fileDscr #' ) -#' +#' #' return(additional_DDI_meta_data) #' } -#' +#' #' #' Writes a variable details CSV sheet to file #' #' @param x Object on which we will dispatch #' #' @param ... The next method in the chain @@ -90,7 +90,7 @@ #' write_DDI_populated_MSW <- function(x, ...) { #' UseMethod("write_DDI_populated_MSW", x) #' } -#' +#' #' #' @describeIn write_DDI_populated_MSW The populated_variable_details data frame within a bllflow model is written #' #' as a CSV file #' #' @@ -125,17 +125,17 @@ #' write_DDI_populated_MSW.BLLFlow <- #' function(x, path_to_write_to, new_file_name, ...) { #' bllFlow <- x -#' +#' #' # create new directory if one does not exist #' if (!dir.exists(path_to_write_to)) { #' dir.create(file.path(getwd(), path_to_write_to)) #' } -#' +#' #' write.csv(bllFlow[[pkg.globals$bllFlowContent.PopulatedVariableDetails]], #' file = file.path(path_to_write_to, new_file_name), #' row.names = FALSE) #' } -#' +#' #' #' @describeIn write_DDI_populated_MSW Updates an existing variable details worksheet #' #' with metadata from a ddi document and then writes the new variable details #' #' sheet to file. The new sheet is saved in the same directory as the old sheet. The @@ -160,31 +160,31 @@ #' write_DDI_populated_MSW.BLLFlowDDI <- #' function(x, path_to_MSW, msw_name, new_name = NULL, ...) { #' ddi <- x -#' +#' #' if (!file.exists(file.path(path_to_MSW, msw_name))) { #' stop(paste("The MSW file is not present in", path_to_MSW), call. = FALSE) #' } #' variable_details <- read.csv(file.path(path_to_MSW, msw_name)) #' populated_variable_details <- #' process_DDI_variable_details(ddi, variable_details) -#' +#' #' # create new directory if one does not exist #' if (!dir.exists(path_to_MSW)) { #' dir.create(file.path(getwd(), path_to_MSW)) #' } -#' +#' #' # generate name for new file name if one is not provided #' if (is.null(new_name)) { #' new_name <- paste(msw_name, "DDIPopulated.csv", sep = "") #' } -#' +#' #' write.csv( #' populated_variable_details, #' file = file.path(path_to_MSW, new_name), #' row.names = FALSE #' ) #' } -#' +#' #' #' Retreives variables in a DDI document #' #' #' #' Returns a list of dataDscr nodes from a DDI document which represent @@ -209,10 +209,10 @@ #' which(names(ddi$ddi_object$codeBook$dataDscr) %in% var_list) #' ddi_variables <- #' ddi$ddi_object$codeBook$dataDscr[requested_variable_indexes] -#' +#' #' return(ddi_variables) #' } -#' +#' #' #' Updates the model specification worksheet (MSW) of a bllflow model. Also updates #' #' the variable details sheet with metadata from a ddi document from the original #' #' bllflow model if it exists. @@ -263,6 +263,6 @@ #' process_DDI_variable_details(bll_model[[pkg.globals$bllFlowContent.DDI]], new_MSW_variable_deatails) #' } #' } -#' +#' #' return(bll_model) -#' } \ No newline at end of file +#' } diff --git a/R/default_step_parsing.R b/R/default_step_parsing.R index 1ea09c27..1e767c4d 100644 --- a/R/default_step_parsing.R +++ b/R/default_step_parsing.R @@ -1,9 +1,9 @@ parse_default_step <- function(data, - sequence_element, - modules, - variables, - variable_details) { + sequence_element, + modules, + variables, + variable_details) { working_data <- data module_functions <- parse_module_functions( @@ -14,138 +14,184 @@ parse_default_step <- ) working_data <- create_recipy(module_functions, working_data, variables) - + processed_data <- recipes::bake(working_data, new_data = data) - + return(processed_data) } -#Parse out the functions inside each module returning a list of the functions in it +# Parse out the functions inside each module returning a +# list of the functions in it parse_module_functions <- function(module_table, - module_sequence, - variables, - variable_details) { - #Check row with module sequence + module_sequence, + variables, + variable_details) { + # Check row with module sequence raw_func <- - as.character(module_table[module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, pkg.globals$WorkingData.ModuleOperations]) - + as.character(module_table[ + module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, + pkg.globals$WorkingData.ModuleOperations]) + func_list <- strsplit(raw_func, "],")[[1]] - #print(func_list) - - #Seperate each function into seperate list element with 2 elements function name and its arguments + + # Seperate each function into seperate list element with + # 2 elements function name and its arguments refactored_funcs_with_args <- list() - + for (single_func in func_list) { func_with_args <- as.list(strsplit(single_func, "::")[[1]]) func_with_args[[2]] <- stringr::str_remove_all(func_with_args[[2]], "[\\[\\]]") func_with_args[[2]] <- as.list(strsplit(func_with_args[[2]], ",")[[1]]) - + func_name <- func_with_args[[1]] refactored_funcs_with_args[[func_name]] <- list() - + for (argument in func_with_args[[2]]) { # Insert check for formula presense tmp_arg <- as.list(strsplit(argument, "=")[[1]]) tmp_arg[[2]] <- stringr::str_remove_all(tmp_arg[[2]], "[\"\"]") - refactored_funcs_with_args[[func_name]][[pkg.globals$FunctionList.Arguments]][[tmp_arg[[1]]]] <- + refactored_funcs_with_args[[func_name]][[ + pkg.globals$FunctionList.Arguments]][[ + tmp_arg[[1]]]] <- tmp_arg[[2]] } } - + refactored_funcs_with_args_and_vars <- parse_function_variables( function_list = refactored_funcs_with_args, variables = variables, module_sequence_number = module_sequence ) - + return(refactored_funcs_with_args_and_vars) } -#Uses the function object to find the variables for it and find all the applicable variables +# Uses the function object to find the variables for it and find all +# the applicable variables parse_function_variables <- function(function_list, - variables, - module_sequence_number) { - #Check which rows contain the module currently being ran + variables, + module_sequence_number) { + # Check which rows contain the module currently being ran affected_rows <- - variables[grepl(module_sequence_number, variables[[pkg.globals$columnNames.Operations]]), ] - - #Check the additional params for the operations and add to function + variables[grepl(module_sequence_number, + variables[[pkg.globals$columnNames.Operations]]), ] + + # Check the additional params for the operations and add to function for (current_func_name in names(function_list)) { if (current_func_name %in% colnames(affected_rows)) { columns_to_check <- - affected_rows[affected_rows[[current_func_name]] != FALSE, c(current_func_name, pkg.globals$columnNames.Variable)] - + affected_rows[affected_rows[[current_func_name]] != FALSE, + c(current_func_name, pkg.globals$columnNames.Variable)] + for (row in 1:nrow(columns_to_check)) { - function_list[[current_func_name]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columns_to_check[row, pkg.globals$columnNames.Variable])]] <- + function_list[[current_func_name]][[ + pkg.globals$FunctionList.VariableArguments]][[ + as.character(columns_to_check[ + row, + pkg.globals$columnNames.Variable])]] <- columns_to_check[row, current_func_name] } - - } else{ + } else { warning( paste( "Requested function", current_func_name, - "is not present in variables please verify the function name is correct" + "is not present in variables please verify the + function name is correct" ), call. = FALSE ) } } - #Create new functions in case of additional params being there + # Create new functions in case of additional params being there function_list <- create_exact_function(function_list) - + return(function_list) } -#Define exact functions depending on variable arguments +# Define exact functions depending on variable arguments create_exact_function <- function(function_list) { - #Parse out non TRUE parameters + # Parse out non TRUE parameters for (fun_name in names(function_list)) { - if (!is.null(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { - for (var_name in names(function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]])) { - if (function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] != TRUE) { + if (!is.null(function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]])) { + for (var_name in names( + function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]])) { + if (function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]] != TRUE) { # create new func and move all the ones with that value there - if (is.null(function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]])) { - function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.Arguments]] <- + if (is.null(function_list[[paste( + fun_name, + "::", + function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[ + var_name]], sep = "")]])) { + function_list[[ + paste( + fun_name, + "::", + function_list[[ + fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[ + var_name]], + sep = "")]][[ + pkg.globals$FunctionList.Arguments]] <- function_list[[fun_name]][[pkg.globals$FunctionList.Arguments]] - function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- - function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] - } else{ - function_list[[paste(fun_name, "::", function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]], sep = "")]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] <- - function_list[[fun_name]][[pkg.globals$FunctionList.VariableArguments]][[var_name]] + function_list[[paste( + fun_name, + "::", + function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]], + sep = "")]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]] <- + function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]] + } else { + function_list[[paste( + fun_name, + "::", + function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]], + sep = "")]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]] <- + function_list[[fun_name]][[ + pkg.globals$FunctionList.VariableArguments]][[var_name]] } } } } } - + return(function_list) - #Create new functions with the new paramev ters + # Create new functions with the new paramev ters } -#Uses the function objects to create a recipy +# Uses the function objects to create a recipy create_recipy <- function(function_object_list, - working_data, - variables) { + working_data, + variables) { # Check variable roles for the recipy creation # TODO bllflow support make this add to overall recipy outcome_variable <- - as.character(variables[grepl( "outcome", variables[[pkg.globals$argument.Role]]), pkg.globals$argument.Variables]) + as.character(variables[grepl("outcome", variables[[pkg.globals$argument.Role]]), pkg.globals$argument.Variables]) # TODO add a function for creating a proper formula recipe_formula <- paste(outcome_variable, "~ .") - + recipy_object <- - recipes::recipe(formula = recipe_formula, - data = working_data, - x = working_data) - + recipes::recipe( + formula = recipe_formula, + data = working_data, + x = working_data + ) + for (single_function in names(function_object_list)) { variables <- names(function_object_list[[single_function]][[pkg.globals$FunctionList.VariableArguments]]) @@ -158,22 +204,22 @@ create_recipy <- argument_name <- trimws(argument_name) step_list[argument_name] <- arguments } - step_list[[length(step_list)+1]] <- unlist(step_formula) + step_list[[length(step_list) + 1]] <- unlist(step_formula) recipy_object <- do.call(get(step_name), step_list) } recipy_object <- recipes::prep(recipy_object, training = working_data) - + return(recipy_object) } -#Function for creating formula for variable selection +# Function for creating formula for variable selection create_variable_formula <- function(var_list) { return_formula <- list() for (variable in var_list) { return_formula <- append(return_formula, variable) } - + return(return_formula) -} \ No newline at end of file +} diff --git a/R/error-check.R b/R/error-check.R index 5307720e..61a54dd2 100644 --- a/R/error-check.R +++ b/R/error-check.R @@ -27,13 +27,13 @@ check_if_data_frame <- function(passed_frame, passed_name) { check_if_cell_is_empty <- function(cell_content, - row_number, - column_name, - ddi_value) { + row_number, + column_name, + ddi_value) { is_empty <- TRUE if (!is.null(cell_content) && - !is.na(cell_content) && - cell_content != "" && cell_content != ddi_value) { + !is.na(cell_content) && + cell_content != "" && cell_content != ddi_value) { warning( paste( "Row ", @@ -51,6 +51,6 @@ check_if_cell_is_empty <- ) is_empty <- FALSE } - + return(is_empty) - } \ No newline at end of file + } diff --git a/R/function_parsing.R b/R/function_parsing.R index 6a27dd6c..762e20b9 100644 --- a/R/function_parsing.R +++ b/R/function_parsing.R @@ -19,10 +19,10 @@ parse_function <- function(data, return(processed_data) } -# Use module parsing to find the single column functions??? +# Use module parsing to find the single column functions??? # And use similar approach as rec custom functions for normal ones?? # if i spot a = then thats a custom par otherwise i get the columns 1 by 1? # do i use the do again? Slow and inefficient but nice loading bar and hassle free! -# reuse rec_with_table !!!!!!!!!!!!!!!!!!!!!! +# reuse rec_with_table !!!!!!!!!!!!!!!!!!!!!! diff --git a/R/label-utils.R b/R/label-utils.R index 222db965..bf07c420 100644 --- a/R/label-utils.R +++ b/R/label-utils.R @@ -1,19 +1,29 @@ +#' Generic label setting function +#' +#' When a bllflow object is passed the information in the object is used to label the data. +#' The default handles non bllflow labeling and requires additional params +#' +#' @param x bllflow or data being labeled +#' @param ... Used for generic function consistency +#' +#' @return for bllflow versions a bllflow object with labelled working_data is returned for default a data.frame with labels is returned #' @export set_data_labels <- function(x = NULL, ...) { UseMethod("set_data_labels", x) } #' @export -set_data_labels.BLLFlow <- function(bllflow_object) { +set_data_labels.BLLFlow <- function(x, ...) { + bllflow_object <- x ret <- set_data_labels.default( bllflow_object$working_data, variable_details = bllflow_object$variable_details, variables_sheet = bllflow_object$variables ) - + bllflow_object$working_data <- ret - + return(bllflow_object) } @@ -22,43 +32,19 @@ set_data_labels.BLLFlow <- function(bllflow_object) { #' variables in variable_details/variables_sheet as well as the labels contained #' in the passed dataframes #' -#' @param data_to_label newly transformed dataset -#' @param variable_details variable_details.csv -#' @param variables_sheet variables.csv +#' @param x newly transformed dataset +#' @param variable_details this is for non bllflow and contains details about variable category labels +#' @param variables_sheet this is for non bllflow and contains details about variable labels +#' @param ... Used for generic function consistency #' #' @return labeled data_to_label #' -#' @examples -#' library(cchsflow) -#' library(sjlabelled) -#' bmi2010 <- rec_with_table( -#' cchs2010_p, c( -#' "HWTGHTM", -#' "HWTGWTK", "HWTGBMI_der" -#' ) -#' ) -#' -#' bmi2012 <- rec_with_table( -#' cchs2012_p, c( -#' "HWTGHTM", -#' "HWTGWTK", "HWTGBMI_der" -#' ) -#' ) -#' -#' combined_bmi <- bind_rows(bmi2010, bmi2012) -#' -#' get_label(combined_bmi) -#' -#' labeled_combined_data <- set_data_labels(combined_bmi, -#' variable_details, -#' variables) -#' -#' get_label(labeled_combined_data) #' @export set_data_labels.default <- - function(data_to_label, - variable_details, - variables_sheet = NULL) { + function(x, + variable_details, + variables_sheet = NULL, ...) { + data_to_label <- x # Extract variables in the data variable_names <- unique(colnames(data_to_label)) # extract only relevant variable info @@ -66,7 +52,7 @@ set_data_labels.default <- variable_details[[pkg.globals$argument.Variables]] <- sapply(variable_details[[pkg.globals$argument.Variables]], trimws) variable_details <- variable_details[variable_details[[pkg.globals$argument.Variables]] - %in% variable_names,] + %in% variable_names, ] if (is.null(variables_sheet)) { variable_details[[pkg.globals$MSW.Variables.Columns.Label]] <- NA variable_details[[pkg.globals$MSW.Variables.Columns.LabelLong]] <- @@ -77,10 +63,12 @@ set_data_labels.default <- variables_sheet[[pkg.globals$argument.Variables]] <- sapply(variables_sheet[[pkg.globals$argument.Variables]], trimws) variables_sheet <- variables_sheet[variables_sheet[[pkg.globals$argument.Variables]] %in% - variable_names,] + variable_names, ] variable_details <- - update_variable_details_based_on_variable_sheet(variable_sheet = variables_sheet, - variable_details = variable_details) + update_variable_details_based_on_variable_sheet( + variable_sheet = variables_sheet, + variable_details = variable_details + ) # Add rows from variables that are missing from variable_details var_details_names <- unique(variable_details[[pkg.globals$argument.Variables]]) missing_vars <- variable_names[(!variable_names %in% var_details_names)] @@ -110,12 +98,12 @@ set_data_labels.default <- label_list <- NULL for (variable_name in variable_names) { rows_to_process <- - variable_details[variable_details[[pkg.globals$argument.Variables]] == variable_name,] + variable_details[variable_details[[pkg.globals$argument.Variables]] == variable_name, ] label_list[[variable_name]] <- create_label_list_element(rows_to_process) } data_to_label <- label_data(label_list, data_to_label) - + return(data_to_label) } @@ -128,7 +116,7 @@ create_label_list_element <- function(variable_rows) { values = c(), values_long = c() ) - first_row <- variable_rows[1,] + first_row <- variable_rows[1, ] ret_list$type <- as.character(first_row[[pkg.globals$argument.ToType]]) ret_list$unit <- @@ -139,10 +127,12 @@ create_label_list_element <- function(variable_rows) { as.character(first_row[[pkg.globals$argument.VariableLabelShort]]) if (is_equal(ret_list$type, pkg.globals$ddiValueName.Cat)) { for (row_index in seq_len(nrow(variable_rows))) { - single_row <- variable_rows[row_index,] + single_row <- variable_rows[row_index, ] # Verify type stays the same - if (!is_equal(ret_list$type, - as.character(single_row[[pkg.globals$argument.ToType]]))) { + if (!is_equal( + ret_list$type, + as.character(single_row[[pkg.globals$argument.ToType]]) + )) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -153,8 +143,10 @@ create_label_list_element <- function(variable_rows) { ) } # Verify unit is identical - if (!is_equal(ret_list$unit, - as.character(single_row[[pkg.globals$argument.Units]]))) { + if (!is_equal( + ret_list$unit, + as.character(single_row[[pkg.globals$argument.Units]]) + )) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -165,8 +157,10 @@ create_label_list_element <- function(variable_rows) { ) } # Verify variable label is identical - if (!is_equal(ret_list$label_long, - as.character(single_row[[pkg.globals$argument.VariableLabel]]))) { + if (!is_equal( + ret_list$label_long, + as.character(single_row[[pkg.globals$argument.VariableLabel]]) + )) { stop( paste( as.character(single_row[[pkg.globals$argument.Variables]]), @@ -189,7 +183,7 @@ create_label_list_element <- function(variable_rows) { value_being_labeled } } - + return(ret_list) } @@ -212,7 +206,7 @@ label_data <- function(label_list, data_to_label) { "is missing from variable_details or variables (if it was also passed) please verify correct spelling" ) - ) + ) next() } if (label_list[[variable_name]]$type == pkg.globals$argument.CatType) { @@ -222,14 +216,15 @@ label_data <- function(label_list, data_to_label) { } data_to_label[[variable_name]] <- set_labels(data_to_label[[variable_name]], - labels = label_list[[variable_name]]$values) + labels = label_list[[variable_name]]$values + ) attr(data_to_label[[variable_name]], "labels_long") <- label_list[[variable_name]]$values_long } else { if (class(data_to_label[[variable_name]]) == "factor") { data_to_label[[variable_name]] <- as.numeric(levels(data_to_label[[variable_name]]) - [data_to_label[[variable_name]]]) + [data_to_label[[variable_name]]]) } else { data_to_label[[variable_name]] <- as.numeric(data_to_label[[variable_name]]) @@ -242,6 +237,6 @@ label_data <- function(label_list, data_to_label) { attr(data_to_label[[variable_name]], "label_long") <- label_list[[variable_name]]$label_long } - + return(data_to_label) - } +} diff --git a/R/log-function-activity.R b/R/log-function-activity.R index a15d397e..a6ce2e2b 100644 --- a/R/log-function-activity.R +++ b/R/log-function-activity.R @@ -43,13 +43,13 @@ #' ) #' ) #' } -#' +#' #' # Create a new log if metaData does not yet have a log object #' if (is.null(bllFlow$metaData$log)) { #' bllFlow$metaData$log <- list() #' attr(bllFlow$metaData$log, "class") <- c(attr(bllFlow$metaData$log, "class"), "metaDataLog") #' } -#' +#' #' # Populate the log object with data about the function that was executed #' label <- #' bllFlow$variables[bllFlow$variables$variable==variable @@ -65,6 +65,6 @@ #' value = value #' ) #' ) -#' +#' #' return(bllFlow) #' } diff --git a/R/module-instruction-parsing.R b/R/module-instruction-parsing.R index 5e3c403b..00d2363e 100644 --- a/R/module-instruction-parsing.R +++ b/R/module-instruction-parsing.R @@ -1,8 +1,8 @@ -#verify module sequence matches the passed data +# verify module sequence matches the passed data verify_data_and_sequence_match <- function(module_sequence_number, data) { if (module_sequence_number[[1]] == 1 && - attr(data, pkg.globals$bllFlowContent.Sequence) != 0) { + attr(data, pkg.globals$bllFlowContent.Sequence) != 0) { stop( "Working data was passed when sequance is at step 1. Make sure to pass the starting data. Aborting operation!" @@ -16,32 +16,49 @@ verify_data_and_sequence_match <- " Aborting operation!" ) - ) + ) } - } else if (attr(data, pkg.globals$bllFlowContent.Sequence) + 1 != module_sequence_number[[1]]) { - stop( - paste( - "The WorkingData passed is not from the previous module please verify that the data passed is from module", - module_sequence_number - 1, - " + } else if (attr(data, pkg.globals$bllFlowContent.Sequence) + 1 != module_sequence_number[[1]]) { + stop( + paste( + "The WorkingData passed is not from the previous module please verify that the data passed is from module", + module_sequence_number - 1, + " Aborting operation!" - ) - ) + ) + ) } - } - + } +#' Run Module +#' +#' Runs modules on x using the module_sequence_numbers. When not using bllflow additional params must be passed. +#' Modules must be ran in correct order ex: module 3 can not be ran until 1 and 2 were ran in that order +#' +#' @param x bllflow object or variables that contain variables alongside variable specific module functions +#' @param ... Used for generic function consistency +#' +#' @return when bllflow object is used a bllflow object is returned with latest module data stored in working data and previous module data stored in previous_module_data #' @export run_module <- function(x, ...) { UseMethod("run_module", x) } +#' Bllflow varient of run module +#' +#' Uses bllflow object instead of passing many arguments all of them are retrieved from the bllflow object +#' +#' @param x bllflow object containing module instruction and data to run it on +#' @param module_sequence_number a number specifying the module to run or a numeric range ex: 1 OR 1:3 +#' @param ... Used for generic function consistency +#' #' @export -run_module.BLLFlow <- function(bll_model, module_sequence_number) { - #pkg.globals$bllFlowContent.PreviousData - +run_module.BLLFlow <- function(x, module_sequence_number, ...) { + bll_model <- x + # pkg.globals$bllFlowContent.PreviousData + processed_data <- run_module.default( - variables = bll_model$variables, + x = bll_model$variables, modules = bll_model$modules, data = bll_model$working_data, module_sequence_number = module_sequence_number, @@ -53,18 +70,29 @@ run_module.BLLFlow <- function(bll_model, module_sequence_number) { bll_model[[pkg.globals$bllFlowContent.WorkingData]] <- processed_data[[1]] return(bll_model) } - +#' Non bllflow run module option +#' +#' This is mainly an internal function however for those that dont wish to use bllflow object this is an alternative +#' +#' @param x variables data.frame containing variable specific module instructions +#' @param modules data.frame containing module instructions +#' @param data data.frame to apply the module transformations onto +#' @param module_sequence_number a number specifying the module to run or a numeric range ex: 1 OR 1:3 +#' @param variable_details = NULL optional param can be used to attach variable category labels +#' @param ... Used for generic function consistency +#' #' @importFrom recipes bake #' @importFrom recipes prep #' @importFrom recipes tidy #' @export run_module.default <- - function(variables, - modules, - data, - module_sequence_number, - variable_details = NULL) { - #Standardize module_sequence_number + function(x, + modules, + data, + module_sequence_number, + variable_details = NULL, ...) { + variables <- x + # Standardize module_sequence_number if (module_sequence_number[[1]] == "all") { module_order <- modules[, pkg.globals$Modules.DefaultOrder] # Create module_sequence_number out of all default modules @@ -77,9 +105,9 @@ run_module.default <- call. = FALSE ) } - + verify_data_and_sequence_match(module_sequence_number, data) - + processed_data <- data previous_data <- NULL # Find type of module and execute the right call @@ -88,28 +116,34 @@ run_module.default <- type_of_module <- modules[modules[[pkg.globals$Modules.DefaultOrder]] == sequence_element, pkg.globals$Modules.OperationsType] if (type_of_module == pkg.globals$ModuleTypes.DefaultStep) { - processed_data <- parse_default_step(processed_data, - sequence_element, - modules, - variables, - variable_details) + processed_data <- parse_default_step( + processed_data, + sequence_element, + modules, + variables, + variable_details + ) } else if (type_of_module == pkg.globals$ModuleTypes.FormulaStep) { - processed_data <- parse_formula_step(processed_data, - sequence_element, - modules, - variables, - variable_details) + processed_data <- parse_formula_step( + processed_data, + sequence_element, + modules, + variables, + variable_details + ) } else if (type_of_module == pkg.globals$ModuleTypes.Function) { - processed_data <- parse_function(processed_data, - sequence_element, - modules, - variables, - variable_details) + processed_data <- parse_function( + processed_data, + sequence_element, + modules, + variables, + variable_details + ) } attr(processed_data, pkg.globals$bllFlowContent.Sequence) <- sequence_element } - + # Find type of module and execute the right call - - return(list(processed_data,previous_data)) + + return(list(processed_data, previous_data)) } diff --git a/R/print-metadata-log.R b/R/print-metadata-log.R index 01752ae0..73f1859b 100644 --- a/R/print-metadata-log.R +++ b/R/print-metadata-log.R @@ -1,5 +1,5 @@ # ---------- WIP TO BE IMPLEMENTED ---------- -#' #'Custom print function for the bllFlow metaData log +#' #'Custom print function for the bllFlow metaData log #' #' #' #'@param x The metaData log object #' #'@param ... Arguments for next method in the chain @@ -7,7 +7,7 @@ #' #'@export #' print.metaDataLog <- function(x, ...) { #' metaDataLog <- x -#' +#' #' print("Data cleaning and trandformation log") #' print(paste(length(metaDataLog), "steps performed")) #' printDataFrame <- @@ -35,4 +35,4 @@ #' printDataFrame <- rbind(printDataFrame, stepRow) #' } #' print(printDataFrame, row.names = FALSE) -#' } \ No newline at end of file +#' } diff --git a/R/recipy-utility.R b/R/recipy-utility.R index 640a62f2..14de9600 100644 --- a/R/recipy-utility.R +++ b/R/recipy-utility.R @@ -3,15 +3,15 @@ #' #' based on variables sheet #' #' @export #' get_recipy <- function(){ -#' +#' #' } -#' #' Sets the recipy for the bllflow object +#' #' Sets the recipy for the bllflow object #' #' TODO add a way to verify that the recipy works with the bllflow object #' #' @export #' set_recipy <- function(){ -#' +#' #' } #' #' Creates recipy from variable sheet #' construct_recipy <- function(){ -#' -#' } \ No newline at end of file +#' +#' } diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 5cb51701..4a154a50 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -10,32 +10,13 @@ #' #' @return boolean value of whether or not v1 and v2 are equal #' -#' @examples -#' library(cchsflow) -#' is_equal(1,2) -#' # FALSE -#' -#' is_equal(1,1) -#' # TRUE -#' -#' 1==NA -#' # NA -#' -#' is_equal(1,NA) -#' # FALSE -#' -#' NA==NA -#' # NA -#' -#' is_equal(NA,NA) -#' # TRUE #' @export is_equal <- function(v1, v2) { same <- (v1 == v2) | (is.na(v1) & is.na(v2)) # anything compared to NA equals NA # replaces all instanses of NA with FALSE same[is.na(same)] <- FALSE - + return(same) } @@ -121,29 +102,6 @@ is_equal <- function(v1, v2) { #' #' @return a dataframe that is recoded according to rules in variable_details. #' -#' @examples -#' library(cchsflow) -#' bmi2010 <- rec_with_table( -#' data = cchs2010_p, c( -#' "HWTGHTM", -#' "HWTGWTK", "HWTGBMI_der" -#' ) -#' ) -#' -#' head(bmi2010) -#' -#' bmi2012 <- rec_with_table( -#' data = cchs2012_p, c( -#' "HWTGHTM", -#' "HWTGWTK", "HWTGBMI_der" -#' ) -#' ) -#' -#' tail(bmi2012) -#' -#' combined_bmi <- bind_rows(bmi2010, bmi2012) -#' head(combined_bmi) -#' tail(combined_bmi) #' @importFrom haven tagged_na #' @importFrom stringr str_match #' @importFrom dplyr rowwise select do @@ -152,15 +110,15 @@ is_equal <- function(v1, v2) { rec_with_table <- function(data, - variables = NULL, - database_name = NULL, - variable_details = NULL, - else_value = NA, - append_to_data = FALSE, - log = FALSE, - notes = TRUE, - var_labels = NULL, - custom_function_path = NULL) { + variables = NULL, + database_name = NULL, + variable_details = NULL, + else_value = NA, + append_to_data = FALSE, + log = FALSE, + notes = TRUE, + var_labels = NULL, + custom_function_path = NULL) { # If custom Functions are passed create new environment and source if (!is.null(custom_function_path)) { source(custom_function_path) @@ -180,10 +138,10 @@ rec_with_table <- # ---- Step 1: Detemine if the passed data is a list or single database append_non_db_columns <- FALSE if (class(data) == "list" && - length(database_name) == length(data)) { + length(database_name) == length(data)) { for (data_name in database_name) { # ---- Step 2A: Verify that the passed name exists in the passed data - + if (!is.null(data[[data_name]])) { data[[data_name]] <- recode_call( variables = variables, @@ -205,50 +163,50 @@ rec_with_table <- "is missing from the passed list please verify the names are correct in the data list and the database_name list" ) - ) - } + ) } - } else if ("data.frame" %in% class(data) && - length(database_name) == 1) { - data <- recode_call( - variables = variables, - data = data, - database_name = database_name, - print_note = notes, - else_value = else_value, - variable_details = variable_details, - append_to_data = append_to_data, - append_non_db_columns = append_non_db_columns, - log = log, - var_labels = var_labels - ) - } else { - stop( - paste( - "The passed number of data does not match the passed number of + } + } else if ("data.frame" %in% class(data) && + length(database_name) == 1) { + data <- recode_call( + variables = variables, + data = data, + database_name = database_name, + print_note = notes, + else_value = else_value, + variable_details = variable_details, + append_to_data = append_to_data, + append_non_db_columns = append_non_db_columns, + log = log, + var_labels = var_labels + ) + } else { + stop( + paste( + "The passed number of data does not match the passed number of dataNames please verify that the number of databases matches number of passed names. Aborting operation!" - ), - call. = FALSE - ) - } - - return(data) + ), + call. = FALSE + ) } + return(data) + } + # Creates inputs and runs recode functions recode_call <- function(variables, - data, - database_name, - print_note, - else_value, - variable_details, - append_to_data, - append_non_db_columns, - log, - var_labels) { + data, + database_name, + print_note, + else_value, + variable_details, + append_to_data, + append_non_db_columns, + log, + var_labels) { variable_details[[pkg.globals$argument.Variables]] <- trimws(variable_details[[pkg.globals$argument.Variables]]) if (!is.null(variables) && "data.frame" %in% class(variables)) { @@ -263,10 +221,10 @@ recode_call <- if (!is.null(variables)) { variable_details <- variable_details[trimws(variable_details[[ - pkg.globals$argument.Variables]]) %in% variables, ] + pkg.globals$argument.Variables]]) %in% variables, ] vars_being_recoded <- as.character(unique(variable_details[[ - pkg.globals$argument.Variables]])) + pkg.globals$argument.Variables]])) if (length(vars_being_recoded) != length(variables)) { missing_vars <- setdiff(variables, vars_being_recoded) warning( @@ -281,7 +239,7 @@ recode_call <- variable_details[[pkg.globals$argument.VariableLabel]] <- NA } if (is.null(variable_details[[ - pkg.globals$argument.VariableLabelShort]])) { + pkg.globals$argument.VariableLabelShort]])) { variable_details[[pkg.globals$argument.VariableLabelShort]] <- NA } } @@ -293,26 +251,28 @@ recode_call <- ) } else { if (is.factor(variable_details[[ - pkg.globals$argument.VariableLabelShort]])) { + pkg.globals$argument.VariableLabelShort]])) { variable_details[[pkg.globals$argument.VariableLabelShort]] <- as.character(variable_details[[ - pkg.globals$argument.VariableLabelShort]]) + pkg.globals$argument.VariableLabelShort]]) } for (var_name in names(var_labels)) { - variable_details[variable_details[[ + variable_details[ + variable_details[[ pkg.globals$argument.Variables]] == var_name, - pkg.globals$argument.VariableLabelShort] <- + pkg.globals$argument.VariableLabelShort + ] <- var_labels[[var_name]] } } } - + all_possible_var_names <- unique(as.character(variable_details[[pkg.globals$argument.Variables]])) all_variables_detected <- variable_details[grepl(database_name, variable_details[[ - pkg.globals$argument.DatabaseStart]]), ] - + pkg.globals$argument.DatabaseStart]]), ] + rec_data <- recode_columns( data = data, @@ -325,23 +285,26 @@ recode_call <- if (append_non_db_columns) { missed_variables <- all_possible_var_names[!all_possible_var_names %in% - unique(as.character( - all_variables_detected[ - , - pkg.globals$argument.Variables]))] + unique(as.character( + all_variables_detected + [ + , + pkg.globals$argument.Variables + ] + ))] for (missed_variable_name in missed_variables) { rec_data[[missed_variable_name]] <- NA } } - + if (append_to_data) { data <- cbind(data, rec_data) } else { data <- rec_data } - + return(data) - } + } #' @title Get Data Variable Name #' @@ -359,13 +322,13 @@ recode_call <- #' @return the data equivalent of variable_being_checked get_data_variable_name <- function(data_name, - data, - row_being_checked, - variable_being_checked) { + data, + row_being_checked, + variable_being_checked) { data_variable_being_checked <- character() var_start_names <- as.character(row_being_checked[[pkg.globals$argument.VariableStart]]) - + if (grepl(data_name, var_start_names)) { var_start_names_list <- as.list(strsplit(var_start_names, ",")[[1]]) # Find exact var Name @@ -394,8 +357,8 @@ get_data_variable_name <- Please double check if this variable should have this", data_name, "included in its databaseStart" - ) ) + ) } data_variable_being_checked <- trimws(data_variable_being_checked) return(data_variable_being_checked) @@ -417,24 +380,24 @@ get_data_variable_name <- #' @return Returns recoded and labeled data recode_columns <- function(data, - variables_to_process, - data_name, - log, - print_note, - else_default) { + variables_to_process, + data_name, + log, + print_note, + else_default) { # Split variables to process into recode map and func map_variables_to_process <- variables_to_process[grepl("map::", variables_to_process[[ - pkg.globals$argument.CatValue]]), ] - + pkg.globals$argument.CatValue]]), ] + func_variables_to_process <- variables_to_process[grepl("Func::", variables_to_process[[ - pkg.globals$argument.CatValue]]), ] - + pkg.globals$argument.CatValue]]), ] + rec_variables_to_process <- variables_to_process[!grepl("Func::|map::", variables_to_process[[ - pkg.globals$argument.CatValue]]), ] - + pkg.globals$argument.CatValue]]), ] + label_list <- list() # Set interval if none is present interval_present <- TRUE @@ -444,18 +407,20 @@ recode_columns <- if (is.null(rec_variables_to_process[[pkg.globals$argument.Interval]])) { interval_present <- FALSE } - + # Loop through the rows of recode vars while (nrow(rec_variables_to_process) > 0) { variable_being_checked <- - as.character(rec_variables_to_process[1, - pkg.globals$argument.Variables]) + as.character(rec_variables_to_process[ + 1, + pkg.globals$argument.Variables + ]) rows_being_checked <- rec_variables_to_process[rec_variables_to_process[[ - pkg.globals$argument.Variables]] == variable_being_checked, ] + pkg.globals$argument.Variables]] == variable_being_checked, ] rec_variables_to_process <- rec_variables_to_process[!rec_variables_to_process[[ - pkg.globals$argument.Variables]] == variable_being_checked, ] + pkg.globals$argument.Variables]] == variable_being_checked, ] first_row <- rows_being_checked[1, ] # Check for varialbe existance in data data_variable_being_checked <- @@ -479,8 +444,10 @@ recode_columns <- all_from_values_for_variable <- rows_being_checked[[pkg.globals$argument.From]] if (length(unique( - all_from_values_for_variable)) != length( - all_from_values_for_variable)) { + all_from_values_for_variable + )) != length( + all_from_values_for_variable + )) { for (single_from in all_from_values_for_variable) { if (sum(all_from_values_for_variable == single_from) > 1) { stop( @@ -494,19 +461,21 @@ recode_columns <- } } } - + # Set factor for all recode values label_list[[variable_being_checked]] <- create_label_list_element(rows_being_checked) else_value <- - as.character(rows_being_checked[rows_being_checked[[ + as.character(rows_being_checked[ + rows_being_checked[[ pkg.globals$argument.From]] == "else", - pkg.globals$argument.CatValue]) + pkg.globals$argument.CatValue + ]) if (length(else_value) == 1 && - !is_equal(else_value, "character(0)")) { + !is_equal(else_value, "character(0)")) { else_value <- recode_variable_NA_formating(else_value, label_list[[ - variable_being_checked]]$type) + variable_being_checked]]$type) if (is_equal(else_value, "copy")) { data_variable_being_checked <- get_data_variable_name( @@ -536,22 +505,24 @@ recode_columns <- } rows_being_checked <- rows_being_checked[!rows_being_checked[[ - pkg.globals$argument.From]] == "else", ] + pkg.globals$argument.From]] == "else", ] if (nrow(rows_being_checked) > 0) { log_table <- rows_being_checked[, 0] log_table$value_to <- NA log_table$From <- NA log_table$rows_recoded <- NA levels(recoded_data[[variable_being_checked]]) <- - c(levels(recoded_data[[variable_being_checked]]), - levels(rows_being_checked[[pkg.globals$argument.CatValue]])) - + c( + levels(recoded_data[[variable_being_checked]]), + levels(rows_being_checked[[pkg.globals$argument.CatValue]]) + ) + for (row in seq_len(nrow(rows_being_checked))) { row_being_checked <- rows_being_checked[row, ] # If cat go check for label and obtain it - + # regardless obtain unit and attach - + # find var name for this database data_variable_being_checked <- get_data_variable_name( @@ -560,14 +531,14 @@ recode_columns <- variable_being_checked = variable_being_checked, data = data ) - + # Recode the variable from_values <- list() if (grepl(":", as.character(row_being_checked[[ - pkg.globals$argument.From]]))) { + pkg.globals$argument.From]]))) { from_values <- strsplit(as.character(row_being_checked[[ - pkg.globals$argument.From]]), ":")[[1]] + pkg.globals$argument.From]]), ":")[[1]] } else { temp_from <- as.character(row_being_checked[[pkg.globals$argument.From]]) @@ -578,7 +549,7 @@ recode_columns <- as.character(row_being_checked[[pkg.globals$argument.CatValue]]) if (interval_present) { interval <- as.character(row_being_checked[[ - pkg.globals$argument.Interval]]) + pkg.globals$argument.Interval]]) if (!interval %in% valid_intervals) { interval <- interval_default } @@ -612,10 +583,10 @@ recode_columns <- as.character(row_being_checked[[pkg.globals$argument.From]]) log_table[row, "rows_recoded"] <- sum(valid_row_index, na.rm = TRUE) - + value_recorded <- recode_variable_NA_formating(value_recorded, label_list[[ - variable_being_checked]]$type) + variable_being_checked]]$type) if (is_equal(value_recorded, "copy")) { value_recorded <- data[valid_row_index, data_variable_being_checked] @@ -623,13 +594,15 @@ recode_columns <- recoded_data[valid_row_index, variable_being_checked] <- value_recorded if (print_note && - !is.null(row_being_checked[[pkg.globals$argument.Notes]]) && - !is_equal(row_being_checked[[pkg.globals$argument.Notes]], "") && - !is.na(row_being_checked[[pkg.globals$argument.Notes]])) { - message("NOTE for ", variable_being_checked, - ": ", - as.character(row_being_checked[[ - pkg.globals$argument.Notes]])) + !is.null(row_being_checked[[pkg.globals$argument.Notes]]) && + !is_equal(row_being_checked[[pkg.globals$argument.Notes]], "") && + !is.na(row_being_checked[[pkg.globals$argument.Notes]])) { + message( + "NOTE for ", variable_being_checked, + ": ", + as.character(row_being_checked[[ + pkg.globals$argument.Notes]]) + ) } } # if log was requested print it @@ -650,7 +623,7 @@ recode_columns <- } } } - + # Process funcVars while (nrow(func_variables_to_process) > 0) { first_row <- func_variables_to_process[1, ] @@ -676,7 +649,7 @@ recode_columns <- # Populate data Labels recoded_data <- label_data(label_list = label_list, data_to_label = recoded_data) - + return(recoded_data) } @@ -694,43 +667,44 @@ recode_columns <- #' comparison is true compare_value_based_on_interval <- function(left_boundary, - right_boundary, - data, - compare_columns, - interval) { + right_boundary, + data, + compare_columns, + interval) { return_boolean <- vector() if (suppressWarnings(is.na(as.numeric(left_boundary)))) { return_boolean <- data[[compare_columns]] %in% data[[ - compare_columns]][ - which(left_boundary == data[[compare_columns]])] + compare_columns]][ + which(left_boundary == data[[compare_columns]]) + ] } else { if (interval == "[,]") { return_boolean <- data[[compare_columns]] %in% data[[ - compare_columns]][which( - as.numeric(left_boundary) <= data[[compare_columns]] & - data[[compare_columns]] <= as.numeric(right_boundary) - )] + compare_columns]][which( + as.numeric(left_boundary) <= data[[compare_columns]] & + data[[compare_columns]] <= as.numeric(right_boundary) + )] } else if (interval == "[,)") { return_boolean <- data[[compare_columns]] %in% data[[ - compare_columns]][which( - as.numeric(left_boundary) <= data[[compare_columns]] & - data[[compare_columns]] < as.numeric(right_boundary) - )] + compare_columns]][which( + as.numeric(left_boundary) <= data[[compare_columns]] & + data[[compare_columns]] < as.numeric(right_boundary) + )] } else if (interval == "(,]") { return_boolean <- data[[compare_columns]] %in% data[[ - compare_columns]][which( - as.numeric(left_boundary) < data[[compare_columns]] & - data[[compare_columns]] <= as.numeric(right_boundary) - )] + compare_columns]][which( + as.numeric(left_boundary) < data[[compare_columns]] & + data[[compare_columns]] <= as.numeric(right_boundary) + )] } else { stop("Invalid Argument was passed") } } - + return(return_boolean) } @@ -768,9 +742,9 @@ update_variable_details_based_on_variable_sheet <- # remove variables not present in variable_sheet variable_details <- variable_details[variable_details[[pkg.globals$argument.Variables]] %in% - variable_sheet[[ - pkg.globals$MSW.Variables.Columns.Variable]], ] - + variable_sheet[[ + pkg.globals$MSW.Variables.Columns.Variable]], ] + return(variable_details) } @@ -785,24 +759,24 @@ recode_variable_NA_formating <- function(cell_value, var_type) { } } else { if (!is_equal(var_type, pkg.globals$argument.CatType) && - !is_equal(cell_value, "copy")) { + !is_equal(cell_value, "copy")) { cell_value <- as.numeric(cell_value) } recode_value <- cell_value } - + return(recode_value) } recode_derived_variables <- function(recoded_data, - variable_being_processed, - variables_to_process, - log, - print_note, - else_default, - label_list, - var_stack) { + variable_being_processed, + variables_to_process, + log, + print_note, + else_default, + label_list, + var_stack) { if (nrow(variables_to_process) <= 0) { stop(paste( variable_being_processed, @@ -813,26 +787,26 @@ recode_derived_variables <- # obtain rows to process and updated variables to Process variable_rows <- variables_to_process[variables_to_process[[ - pkg.globals$argument.Variables]] == variable_being_processed, ] + pkg.globals$argument.Variables]] == variable_being_processed, ] variables_to_process <- variables_to_process[variables_to_process[[ - pkg.globals$argument.Variables]] != variable_being_processed, ] + pkg.globals$argument.Variables]] != variable_being_processed, ] for (row_num in seq_len(nrow(variable_rows))) { # Check for presence of feeder variables in data and in the # variable being processed stack feeder_vars <- as.list(strsplit(as.character(variable_rows[row_num, ][[ - pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] + pkg.globals$argument.VariableStart]]), "::"))[[1]][[2]] feeder_vars <- gsub("\\[|\\]", "", feeder_vars) feeder_vars <- as.list(strsplit(feeder_vars, ","))[[1]] feeder_vars <- sapply(feeder_vars, trimws) used_feeder_vars <- feeder_vars feeder_vars <- setdiff(feeder_vars, names(recoded_data)) - + # Check if the variable has a function to recode non_func_missing_variables <- setdiff(feeder_vars, unique(as.character(variables_to_process[[ - pkg.globals$argument.Variables]]))) + pkg.globals$argument.Variables]]))) if (length(non_func_missing_variables) > 0) { warning( paste( @@ -844,7 +818,7 @@ recode_derived_variables <- ) var_stack <- var_stack[!(var_stack == variable_being_processed)] - + return( list( var_stack = var_stack, @@ -869,7 +843,7 @@ recode_derived_variables <- ) ) } - + # Update var_stack and recurse to get the feeder vars for (one_feeder in feeder_vars) { # Need to check recoded data again in case a recursion added it @@ -892,16 +866,16 @@ recode_derived_variables <- derived_return$variables_to_process } } - + # Obtain the function for each row append(label_list, create_label_list_element(variable_rows)) - + row_being_checked <- variable_rows[row_num, ] func_cell <- as.character(row_being_checked[[pkg.globals$argument.CatValue]]) function_being_used <- as.list(strsplit(func_cell, "::"))[[1]][[2]] - + column_value <- recoded_data %>% rowwise() %>% @@ -914,18 +888,18 @@ recode_derived_variables <- ) ) # Set type of var - if(as.character(row_being_checked[[pkg.globals$argument.ToType]]) != pkg.globals$argument.CatType) { + if (as.character(row_being_checked[[pkg.globals$argument.ToType]]) != pkg.globals$argument.CatType) { column_value <- as.numeric(unlist(column_value[["column_being_added"]])) - }else{ + } else { column_value <- as.factor(unlist(column_value[["column_being_added"]])) } recoded_data[[variable_being_processed]] <- column_value - + var_stack <- var_stack[!(var_stack == variable_being_processed)] } - + return( list( var_stack = var_stack, @@ -937,11 +911,11 @@ recode_derived_variables <- } calculate_custom_function_row_value <- function(row_values, - variable_names, - custom_function_name) { + variable_names, + custom_function_name) { row_values <- unname(row_values) custom_function_return_value <- do.call(get(custom_function_name), row_values) - + return(custom_function_return_value) } diff --git a/R/small-cell-check.R b/R/small-cell-check.R index 681fd3a5..db4fc648 100644 --- a/R/small-cell-check.R +++ b/R/small-cell-check.R @@ -29,10 +29,10 @@ #' if (print) { #' print(passed_table[[pkg.globals$LongTable.MetaData]][[pkg.globals$LongTable.SmallCells]]) #' } -#' +#' #' return(passed_table) #' } -#' +#' #' #' Check for Small Cells #' #' #' #' check_small_cells checks a given table for small sells then adds a @@ -86,9 +86,9 @@ #' # Handles TableOne type tables #' small_size_table <- #' check_small_cells_in_table_one(passed_table, small_size) -#' +#' #' # Outputing the created Table function --------------------------------------- -#' +#' #' # Writes the created table into the MetaData object of the passed table #' # Appends to smallCells if previous reccord exists #' if ("smallCells" %in% names(passed_table$MetaData)) { @@ -122,10 +122,10 @@ #' print(passed_table$MetaData$smallCells) #' } #' } -#' +#' #' return(passed_table) #' } -#' +#' #' #' Only summary table and table one is currently supported every other type of #' #' table will throw this error #' #' @export @@ -140,9 +140,9 @@ #' "Unsupported Type" #' ) #' } -#' +#' #' # Table Parsing Functions ----------------------------------------------------------------------- -#' +#' #' #' Check for Small Cells in TableOne #' #' #' #' Check for Small Cells inside a TableOne format Table @@ -162,7 +162,7 @@ #' check_small_cells_in_table_one <- function(table_one, #' small_size = 6) { #' # Variable declaration ------------------------------------------------------- -#' +#' #' strata_checked <- 0 #' levels_checked <- 0 #' variables_found <- 0 diff --git a/R/step_apply_missing_tagged_na.R b/R/step_apply_missing_tagged_na.R index f63ff708..50a8ea4b 100644 --- a/R/step_apply_missing_tagged_na.R +++ b/R/step_apply_missing_tagged_na.R @@ -1,12 +1,44 @@ +#' Apply missing tagged na +#' +#' `step_apply_missing_tagged_na` creates a *specification* of a recipe step that +#' will tag variables if they contain NA +#' or NaN values. This step is based on \code{recipes::step_naomit} +#' +#' @param recipe A recipe object. The step will be added to the sequence of +#' operations for this recipe. +#' @param ... One or more selector functions to choose which +#' variables will be used to create the dummy variables. See +#' [selections()] for more details. The selected +#' variables must be factors. +#' @param role Unused, include for consistency with other steps. +#' @param trained A logical to indicate if the quantities for preprocessing +#' have been estimated. Again included for consistency. +#' @param columns A character string of variable names that will +#' be populated (eventually) by the `terms` argument. +#' @param tag_type the type of \code{haven} tag to apply to any na found must +#' be any lowercase letter from a:z +#' @param skip A logical. Should the step be skipped when the +#' recipe is baked by [bake.recipe()]? While all operations are baked +#' when [prep.recipe()] is run, some operations may not be able to be +#' conducted on new data (e.g. processing the outcome variable(s)). +#' Care should be taken when using `skip = TRUE` as it may affect +#' the computations for subsequent operations +#' @param id A character string that is unique to this step to identify it. +#' +#' @rdname step_naomit +#' @return An updated version of `recipe` with the +#' new step added to the sequence of existing steps (if any). +#' +#' @importFrom recipes step #' @export step_apply_missing_tagged_na <- function(recipe, - ..., - role = NA, - trained = FALSE, - columns = NULL, - tag_type = NULL, - skip = FALSE, - id = recipes::rand_id("apply_missing_tagged_na")) { + ..., + role = NA, + trained = FALSE, + columns = NULL, + tag_type = NULL, + skip = FALSE, + id = recipes::rand_id("apply_missing_tagged_na")) { recipes::add_step( recipe, step_apply_missing_tagged_na_new( @@ -48,6 +80,7 @@ prep.step_apply_missing_tagged_na <- function(x, training, info = NULL, ...) { ) } +#' @importFrom tibble as.tibble #' @export bake.step_apply_missing_tagged_na <- function(object, new_data, ...) { for (variable in object$columns) { @@ -57,7 +90,7 @@ bake.step_apply_missing_tagged_na <- function(object, new_data, ...) { if (is.numeric(new_data[[variable]])) { new_data[true_NA_index, variable] <- haven::tagged_na(object$tag_type) - }else{ + } else { if (!paste("NA(", object$tag_type, ")", sep = "") %in% levels(new_data[[variable]])) { levels(new_data[[variable]]) <- c(levels(new_data[[variable]]), paste("NA(", object$tag_type, ")", sep = "")) } diff --git a/R/step_naomit.R b/R/step_naomit.R index 0a753e60..598f1d78 100644 --- a/R/step_naomit.R +++ b/R/step_naomit.R @@ -1,8 +1,8 @@ #' Remove observations with missing values #' #' `step_tagged_naomit` creates a *specification* of a recipe step that -#' will add remove observations (rows of data) if they contain NA -#' or NaN values. +#' will add remove observations (rows of data) if they contain specified +#' tagged na. Based on \code{recipes::step_naomit()} #' #' @param recipe A recipe object. The step will be added to the sequence of #' operations for this recipe. @@ -15,6 +15,8 @@ #' have been estimated. Again included for consistency. #' @param columns A character string of variable names that will #' be populated (eventually) by the `terms` argument. +#' @param tag_type the Type of the tag being checked for if NULL is passed no +#' tag is checked so all NA are ommited #' @param id A character string that is unique to this step to identify it. #' @param skip A logical. Should the step be skipped when the #' recipe is baked by [bake.recipe()]? While all operations are baked @@ -28,22 +30,17 @@ #' new step added to the sequence of existing steps (if any). #' @export #' -#' @examples -#' -#' recipe(Ozone ~ ., data = airquality) %>% -#' step_tagged_naomit(Solar.R) %>% -#' prep(airquality, verbose = FALSE) %>% -#' juice() -#' +#' @importFrom tidyr drop_na +#' @importFrom recipes step #' @seealso [recipe()] [prep.recipe()] [bake.recipe()] step_tagged_naomit <- function(recipe, - ..., - role = NA, - trained = FALSE, - columns = NULL, - tag_type = NULL, - skip = FALSE, - id = recipes::rand_id("tagged_naomit")) { + ..., + role = NA, + trained = FALSE, + columns = NULL, + tag_type = NULL, + skip = FALSE, + id = recipes::rand_id("tagged_naomit")) { recipes::add_step( recipe, step_tagged_naomit_new( @@ -89,12 +86,12 @@ prep.step_tagged_naomit <- function(x, training, info = NULL, ...) { bake.step_tagged_naomit <- function(object, new_data, ...) { if (is.null(object$tag_type)) { tibble::as_tibble(tidyr::drop_na(new_data, object$columns)) - } else{ + } else { for (column in object$columns) { - if(is.numeric(new_data[[column]])){ - new_data <- new_data[!haven::is_tagged_na(new_data[[column]], tag = object$tag_type),] - }else{ - new_data <- new_data[!is_equal(new_data[[column]], paste("NA(",object$tag_type,")",sep = "")), ] + if (is.numeric(new_data[[column]])) { + new_data <- new_data[!haven::is_tagged_na(new_data[[column]], tag = object$tag_type), ] + } else { + new_data <- new_data[!is_equal(new_data[[column]], paste("NA(", object$tag_type, ")", sep = "")), ] } } tibble::as.tibble(new_data) @@ -104,16 +101,7 @@ bake.step_tagged_naomit <- function(object, new_data, ...) { print.step_tagged_naomit <- function(x, width = max(20, options()$width - 30), ...) { cat("Removing rows with NA values in ", sep = "") - cat(tidyr::drop_naformat_selectors(x$terms, width = width)) + cat(recipes::format_selectors(x$terms, width = width)) cat("\n") invisible(x) } - -#' @rdname step_tagged_naomit -#' @param x A `step_tagged_naomit` object. -#' @export -tidy.step_tagged_naomit <- function(x, ...) { - res <- recipes::simple_terms(x, ...) - res$id <- x$id - res -} diff --git a/R/step_with_formula_parsing.R b/R/step_with_formula_parsing.R index 5c3a0e41..8aa33074 100644 --- a/R/step_with_formula_parsing.R +++ b/R/step_with_formula_parsing.R @@ -1,4 +1,4 @@ -# +# parse_formula_step <- function(data, sequence_element, modules, @@ -14,77 +14,76 @@ parse_formula_step <- function(data, ) working_data <- create_formula_recipy(module_functions, working_data, variables) - + processed_data <- recipes::bake(working_data, new_data = data) - + return(processed_data) } -#Parse out the functions inside each module returning a list of the functions in it +# Parse out the functions inside each module returning a list of the functions in it parse_formula_module_functions <- function(module_table, - module_sequence, - variables, - variable_details) { - #Check row with module sequence + module_sequence, + variables, + variable_details) { + # Check row with module sequence raw_func <- as.character(module_table[module_table[[pkg.globals$Modules.DefaultOrder]] == module_sequence, pkg.globals$WorkingData.ModuleOperations]) - + func_list <- strsplit(raw_func, "],")[[1]] - #print(func_list) - - #Seperate each function into seperate list element with 2 elements function name and its arguments + # print(func_list) + + # Seperate each function into seperate list element with 2 elements function name and its arguments refactored_funcs_with_args <- list() - + for (single_func in func_list) { func_with_args <- as.list(strsplit(single_func, "::")[[1]]) func_with_args[[2]] <- stringr::str_remove_all(func_with_args[[2]], "[\\[\\]]") func_with_args[[2]] <- as.list(strsplit(func_with_args[[2]], ",")[[1]]) - + func_name <- func_with_args[[1]] refactored_funcs_with_args[[func_name]] <- list() - + for (argument in func_with_args[[2]]) { tmp_arg <- as.list(strsplit(argument, "}")[[1]]) tmp_arg[[1]] <- - stringr::str_remove_all(tmp_arg[[1]], "[{}]") + stringr::str_remove_all(tmp_arg[[1]], "[{}]") refactored_funcs_with_args[[func_name]][[pkg.globals$FunctionList.Arguments]][[tmp_arg[[1]]]] <- tmp_arg[[2]] } } - refactored_funcs_with_args_and_vars <- - parse_formula_function_variables( - function_list = refactored_funcs_with_args, - variables = variables, - module_sequence_number = module_sequence - ) + refactored_funcs_with_args_and_vars <- + parse_formula_function_variables( + function_list = refactored_funcs_with_args, + variables = variables, + module_sequence_number = module_sequence + ) return(refactored_funcs_with_args_and_vars) } -#Uses the function object to find the variables for it and find all the applicable variables +# Uses the function object to find the variables for it and find all the applicable variables parse_formula_function_variables <- function(function_list, - variables, - module_sequence_number) { - #Check which rows contain the module currently being ran + variables, + module_sequence_number) { + # Check which rows contain the module currently being ran affected_rows <- variables[grepl(module_sequence_number, variables[[pkg.globals$columnNames.Operations]]), ] - - #Check the additional params for the operations and add to function + + # Check the additional params for the operations and add to function for (current_func_name in names(function_list)) { if (current_func_name %in% colnames(affected_rows)) { columns_to_check <- affected_rows[affected_rows[[current_func_name]] != FALSE, c(current_func_name, pkg.globals$columnNames.Variable)] - + for (row in 1:nrow(columns_to_check)) { function_list[[current_func_name]][[pkg.globals$FunctionList.VariableArguments]][[as.character(columns_to_check[row, pkg.globals$columnNames.Variable])]] <- columns_to_check[row, current_func_name] } - - } else{ + } else { warning( paste( "Requested function", @@ -95,47 +94,55 @@ parse_formula_function_variables <- ) } } - #Create new functions in case of additional params being there + # Create new functions in case of additional params being there function_list <- create_exact_function(function_list) - + return(function_list) } -#Uses the function objects to create a recipy +#' Uses the function objects to create a recipy +#' +#' @param function_object_list List containing function calls and their arguments +#' @param working_data data.frame that is passed to recipes as training data +#' @param variables data.frame containing specific module steps depending on the variable +#' +#' @importFrom rlang parse_expr create_formula_recipy <- function(function_object_list, - working_data, - variables) { + working_data, + variables) { # Check variable roles for the recipy creation # TODO bllflow support make this add to overall recipy outcome_variable <- - as.character(variables[grepl( "outcome", variables[[pkg.globals$argument.Role]]), pkg.globals$argument.Variables]) + as.character(variables[grepl("outcome", variables[[pkg.globals$argument.Role]]), pkg.globals$argument.Variables]) # TODO add a function for creating a proper formula recipe_formula <- paste(outcome_variable, "~ .") - + recipy_object <- - recipes::recipe(formula = recipe_formula, - data = working_data, - x = working_data) - + recipes::recipe( + formula = recipe_formula, + data = working_data, + x = working_data + ) + for (single_function in names(function_object_list)) { step_formula <- create_formula_variable_formula(function_object_list[[single_function]]) step_name <- paste("step_", single_function, sep = "") recipy_object <- - do.call(get(step_name), list(recipe = recipy_object, rlang::parse_expr(unlist(step_formula)))) + do.call(get(step_name), list(recipe = recipy_object, rlang::parse_expr(unlist(step_formula)))) } recipy_object <- recipes::prep(recipy_object, training = working_data) - + return(recipy_object) } -#Function for creating formula for variable selection +# Function for creating formula for variable selection create_formula_variable_formula <- function(functions) { return_formula <- list() for (variable in names(functions[[pkg.globals$FunctionList.VariableArguments]])) { - return_formula <- append(return_formula, paste(variable, functions[[pkg.globals$FunctionList.Arguments]], ",",sep = "")) + return_formula <- append(return_formula, paste(variable, functions[[pkg.globals$FunctionList.Arguments]], ",", sep = "")) } return_formula[[length(return_formula)]] <- stringr::str_sub(return_formula[[length(return_formula)]], end = -2) return(return_formula) -} \ No newline at end of file +} diff --git a/R/step_z.R b/R/step_z.R index 02b0f33d..07ac5e6c 100644 --- a/R/step_z.R +++ b/R/step_z.R @@ -1,16 +1,54 @@ +#' Calculate z score +#' +#' `step_z` creates a *specification* of a recipe step that +#' will calculate z-score on specified variables using training set mean and +#' standard deviation, then based on append +#' will overwrite existing variable or add new columns +#' +#' @param recipe A recipe object. The step will be added to the +#' sequence of operations for this recipe. +#' @param ... One or more selector functions to choose which variables are +#' affected by the step. See [selections()] for more details. For the `tidy` +#' method, these are not currently used. +#' @param role For model terms created by this step, what analysis +#' role should they be assigned?. +#' @param trained A logical to indicate if the quantities for +#' preprocessing have been estimated. +#' @param skip A logical. Should the step be skipped when the +#' recipe is baked by [bake.recipe()]? While all operations are baked +#' when [prep.recipe()] is run, some operations may not be able to be +#' conducted on new data (e.g. processing the outcome variable(s)). +#' Care should be taken when using `skip = TRUE` as it may affect +#' the computations for subsequent operations +#' @param id A character string that is unique to this step to identify it. +#' @param append A boolean indicator if the calculated z-score is to be appened +#' or replace the original variable +#' @param suffix A character indicating the suffix for the variable +#' @param means A list used for storing the means calculated during prep +#' @param sd A list used for storing the standard deviation during prep +#' @param na.rm na.rm paramater to pass to the mean, sd functions +#' @param trim paramater to pass to the mean and sd functions +#' @return An updated version of `recipe` with the new step added to the +#' sequence of existing steps (if any). For the `tidy` method, a tibble with +#' columns `terms` (the selectors or variables selected) and `model` (the mean +#' value). +#' +#' +#' @importFrom stats sd +#' @importFrom recipes step #' @export step_z <- function(recipe, - ..., - role = 'predictor', - trained = FALSE, - skip = FALSE, - id = recipes::rand_id("Z"), - append = TRUE, - suffix = "_Z", - means = NULL, - sd = NULL, - na.rm = TRUE, - trim = 0) { + ..., + role = "predictor", + trained = FALSE, + skip = FALSE, + id = recipes::rand_id("Z"), + append = TRUE, + suffix = "_Z", + means = NULL, + sd = NULL, + na.rm = TRUE, + trim = 0) { terms <- recipes::ellipse_check(...) recipes::add_step( recipe, @@ -32,16 +70,16 @@ step_z <- function(recipe, step_z_new <- function(terms, - role, - trained, - append, - suffix, - means, - sd, - na.rm, - trim, - skip, - id) { + role, + trained, + append, + suffix, + means, + sd, + na.rm, + trim, + skip, + id) { step( subclass = "z", terms = terms, @@ -62,18 +100,17 @@ prep.step_z <- function(x, training, info = NULL, ...) { for (variable_name in recipes::terms_select(x$terms, info = info)) { # Verify the training data variable if (is.null(training[[variable_name]])) { - stop(paste(variable_name, 'is missing from the training data')) + stop(paste(variable_name, "is missing from the training data")) } if (!is.numeric(training[[variable_name]])) { - stop(paste(variable_name, 'is not numeric therefore zScore cannot - be calculated')) + stop(paste(variable_name, "is not numeric therefore zScore cannot \n be calculated")) } # Calculate the Standard Deviation for the variable x$means[[variable_name]] <- mean(training[[variable_name]], trim = x$trim, na.rm = x$na.rm) - x$sd[[variable_name]] <- sd(training[[variable_name]], na.rm = x$na.rm) + x$sd[[variable_name]] <- stats::sd(training[[variable_name]], na.rm = x$na.rm) # Calculate the mean for the variable } - + return( step_z_new( terms = x$terms, @@ -93,22 +130,20 @@ prep.step_z <- function(x, training, info = NULL, ...) { #' @export bake.step_z <- function(object, new_data, ...) { - require(tibble) for (varName in names(object$means)) { newVarName <- paste(varName, object$suffix, sep = "") new_data[newVarName] <- (new_data[[varName]] - object$means[[varName]]) / object$sd[[varName]] if (!object$append) { new_data[varName] <- NULL } - } - - return(as_tibble(new_data)) + + return(tibble::as_tibble(new_data)) } print.step_z <- function(x, width = max(20, options()$width - 30), ...) { cat("z score for ", sep = "") - recipes:::printer(names(x$means), x$terms, x$trained, width = width) + recipes::printer(names(x$means), x$terms, x$trained, width = width) invisible(x) } diff --git a/R/strings.R b/R/strings.R index e2e4b49e..812b2cd7 100644 --- a/R/strings.R +++ b/R/strings.R @@ -9,12 +9,12 @@ pkg.globals$columnNames.Variable <- "variable" # Variable Details Sheet Column Names pkg.globals$argument.Data <- "data" pkg.globals$argument.Variables <- "variable" -pkg.globals$argument.VariableDetailsSheet <- "variableDetailsSheet" -pkg.globals$argument.VariableStart <- "variableStart" +pkg.globals$argument.VariableDetailsSheet <- "variableDetailsSheet" +pkg.globals$argument.VariableStart <- "variableStart" pkg.globals$argument.VariableStartType <- "variableStartType" pkg.globals$argument.DatabaseStart <- "databaseStart" -pkg.globals$argument.VariableStartHigh <- "high" -pkg.globals$argument.VariableStartLow <- "low" +pkg.globals$argument.VariableStartHigh <- "high" +pkg.globals$argument.VariableStartLow <- "low" pkg.globals$argument.CatStartValue <- "value" pkg.globals$argument.CatStartLabel <- "valueLabelStart" pkg.globals$argument.VariableStartLabel <- "label" @@ -29,7 +29,7 @@ pkg.globals$argument.VariableLabelShort <- "label" pkg.globals$argument.CatLabelLong <- "catLabelLong" pkg.globals$argument.CatLabel <- "catLabel" pkg.globals$argument.CatType <- "cat" -pkg.globals$argument.VariableStartHighLow <- "from" +pkg.globals$argument.VariableStartHighLow <- "from" pkg.globals$argument.Role <- "role" # DDI object names @@ -37,7 +37,7 @@ pkg.globals$ddiValue.Min <- "min" pkg.globals$ddiValue.Max <- "max" pkg.globals$ddiValueName.Cont <- "cont" pkg.globals$ddiValueName.Cat <- "cat" -pkg.globals$ddiValueName.Categorical <- "Categorical" +pkg.globals$ddiValueName.Categorical <- "Categorical" # BLLFlow object content pkg.globals$bllFlowContent.Data <- "working_data" @@ -56,7 +56,7 @@ pkg.globals$bllFlowContent.Class <- "bllflow" pkg.globals$MSW.Variables.Columns.Variable <- "variable" pkg.globals$MSW.Variables.Columns.VariableType <- "variableType" pkg.globals$MSW.Variables.Columns.Label <- "label" - pkg.globals$MSW.Variables.Columns.LabelLong <- "labelLong" +pkg.globals$MSW.Variables.Columns.LabelLong <- "labelLong" pkg.globals$MSW.Variables.Columns.Units <- "units" # Table one variable names @@ -103,9 +103,9 @@ pkg.globals$ModuleTypes.DefaultStep <- "step" pkg.globals$ModuleTypes.Function <- "function" # WorkingData contents -pkg.globals$WorkingData.ModuleSequenceNumber <- "moduleSequenceNumber" +pkg.globals$WorkingData.ModuleSequenceNumber <- "moduleSequenceNumber" pkg.globals$WorkingData.ModuleOperations <- "ModuleOperations" -#FunctionList contents +# FunctionList contents pkg.globals$FunctionList.Arguments <- "arguments" -pkg.globals$FunctionList.VariableArguments <- "variablesArguments" \ No newline at end of file +pkg.globals$FunctionList.VariableArguments <- "variablesArguments" diff --git a/R/table-one-long.R b/R/table-one-long.R index 9f7ef737..625a08cb 100644 --- a/R/table-one-long.R +++ b/R/table-one-long.R @@ -3,7 +3,9 @@ #' #' Creates Table One using the tableone package if a bllflow object is passed a custom function #' then extracts the necessary data for tableone call from the object avoiding unnecessary arguments. -#' +#' +#' @param x Object to retrive variables from +#' @param ... Additional arguments to pass to the tableone::CreateTableOne function call #' @export CreateTableOne <- function(x = NULL, ...) { UseMethod("CreateTableOne", x) @@ -16,38 +18,25 @@ CreateTableOne <- function(x = NULL, ...) { #' additional arguments can be passed to create a specific table one. #' However if no optional args are passed the variable info stored in variables MSW is used. #' -#' @param bll_flow_model The bllflow object +#' @param x The bllflow object #' @param vars The optional vars to use in creation of tableone if no vars are passed then vars in MSW variables is used #' @param strata The optional strata to use in creation of tableone if no strata is passed no strata is used #' @param factor_vars The optional factor_vars (categorical variables) used in creation of tableone if nothing is passed #' the MSW variables sheet is used to determine variable types +#' @param select_role The optional argument that specifies the role of the variables to pass to tableone #' @param ... Additional arguments to pass to the tableone::CreateTableOne function call -#' -#' @return returns a table one \href{https://cran.r-project.org/web/packages/tableone/index.html}{tableone} object -#' -#' @examples -#' library(survival) -#' data(pbc) -#' pbc$exp_percentile <- runif(nrow(pbc), 0, 1) -#' pbc$ageGroup <- ifelse(pbc$age < 20, 1, -#' ifelse(pbc$age >= 20 & pbc$age < 40, 2, -#' ifelse(pbc$age >= 40 & pbc$age < 80, 3, -#' ifelse(pbc$age >= 80, 4, NA)))) #' -#' library(bllflow) -#' variables_sheet <- read.csv(system.file("extdata", "PBC-variables.csv", package="bllflow")) -#' variable_details <- read.csv(system.file("extdata", "PBC-variableDetails.csv", package="bllflow")) -#' ddi <- read_DDI(file.path(getwd(), 'bllflow/extdata'),"pbcDDI.xml") -#' pbc_model <- build_bllflow(pbc, variables_sheet, variable_details, ddi) +#' @return returns a table one \href{https://cran.r-project.org/web/packages/tableone/index.html}{tableone} object #' -#' pbc_table_one <- CreateTableOne(pbc_model, strata = "edema") #' @importFrom tableone CreateTableOne +#' @importFrom sjlabelled get_labels #' @export -CreateTableOne.BLLFlow <- function(bll_flow_model, +CreateTableOne.BLLFlow <- function(x, vars = NULL, strata = NULL, factor_vars = NULL, select_role = NULL, ...) { + bll_flow_model <- x # ----Step 1: pull from variables in bll_flow_model ---- variables_sheet <- bll_flow_model[[pkg.globals$bllFlowContent.Variables]] @@ -55,36 +44,38 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, if (is.null(select_role)) { vars <- as.character(variables_sheet[[pkg.globals$MSW.Variables.Columns.Variable]]) - }else { + } else { vars <- - as.character(variables_sheet[grepl(select_role,variables_sheet[[pkg.globals$argument.Role]]), pkg.globals$MSW.Variables.Columns.Variable]) + as.character(variables_sheet[grepl(select_role, variables_sheet[[pkg.globals$argument.Role]]), pkg.globals$MSW.Variables.Columns.Variable]) } vars <- trimws(vars) } if (is.null(factor_vars)) { if (is.null(select_role)) { factor_vars <- - as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) , pkg.globals$MSW.Variables.Columns.Variable]) - }else { + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical), pkg.globals$MSW.Variables.Columns.Variable]) + } else { factor_vars <- - as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) && grepl(select_role,variables_sheet[[pkg.globals$argument.Role]]) , pkg.globals$MSW.Variables.Columns.Variable]) + as.character(variables_sheet[is_equal(variables_sheet[[pkg.globals$MSW.Variables.Columns.VariableType]], pkg.globals$ddiValueName.Categorical) && grepl(select_role, variables_sheet[[pkg.globals$argument.Role]]), pkg.globals$MSW.Variables.Columns.Variable]) } factor_vars <- trimws(factor_vars) } - + # ----Step 2: Create the tableone ---- if (is.null(strata)) { final_table <- - tableone::CreateTableOne(data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], - vars = vars, - factorVars = factor_vars,...) - } else{ + tableone::CreateTableOne( + data = bll_flow_model[[pkg.globals$bllFlowContent.WorkingData]], + vars = vars, + factorVars = factor_vars, ... + ) + } else { final_table <- tableone::CreateTableOne( data = bll_flow_model[[pkg.globals$bllFlowContent.Data]], vars = vars, factorVars = factor_vars, - strata = strata,... + strata = strata, ... ) } # Appends valLabels to metadata of tableone for val printing @@ -94,7 +85,9 @@ CreateTableOne.BLLFlow <- function(bll_flow_model, } #' @export -CreateTableOne.default <- tableone::CreateTableOne +CreateTableOne.default <- function(...) { + tableone::CreateTableOne(...) +} # ---------- WIP Needs further testing ---------- #' #' Summary Data Long Table @@ -159,9 +152,9 @@ CreateTableOne.default <- tableone::CreateTableOne #' return_table <- unique(return_table) #' return_summary_data <- list(summary_data = return_table) #' class(return_summary_data) <- "SummaryData" -#' +#' #' return(return_summary_data) -#' +#' #' } #' # # Function to create a long table one for one tableOne @@ -189,7 +182,7 @@ CreateTableOne.default <- tableone::CreateTableOne # ) # returned_long_tables[[table_count]] <- cont_table_long_table # } -# +# # # Call Cat table extraction if tableOne contains CatTable # if (!is.null(passed_table$CatTable)) { # dim_names <- attr(passed_table$CatTable, "dimnames") @@ -208,7 +201,7 @@ CreateTableOne.default <- tableone::CreateTableOne # ) # returned_long_tables[[table_count]] <- cat_table_long_table # } -# +# # # ----Step 2: Add any missing columns to the newly created tables---- # for (table_to_append in returned_long_tables) { # for (column_missing in colnames(long_table)) { @@ -229,14 +222,14 @@ CreateTableOne.default <- tableone::CreateTableOne # } # } # } -# +# # long_table <- # rbind(long_table, table_to_append, stringsAsFactors = FALSE) # } -# +# # return(long_table) # } -# +# # # Create long table from contTable # extract_data_from_cont_table <- # function(cont_table, @@ -245,7 +238,7 @@ CreateTableOne.default <- tableone::CreateTableOne # long_table, # variable_details) { # strata_split_name <- character() -# +# # # ----Step 1: Split the strata name into the two variables ---- # if (!is.null(strata_name)) { # strata_split_name <- @@ -253,10 +246,10 @@ CreateTableOne.default <- tableone::CreateTableOne # } else{ # strata_split_name <- strata_name # } -# +# # # ----Step 2: Add columns to long table # long_table_rows <- data.frame() -# +# # # loop through each strata columns # # ----Step 3: Extract information for each new row of the longtable ---- # for (strata_index in 1:length(cont_table)) { @@ -276,7 +269,7 @@ CreateTableOne.default <- tableone::CreateTableOne # cont_table[[strata_index]][row, pkg.globals$tableOne.p25] # row_percentile75 <- # cont_table[[strata_index]][row, pkg.globals$tableOne.p75] -# +# # # create the row to add to tableOne Long # group_by_list <- list() # if (length(strata_split_name) > 0) { @@ -286,7 +279,7 @@ CreateTableOne.default <- tableone::CreateTableOne # group_by_list, # variable_details) # } -# +# # # ----Step 4: Create long table row ---- # long_table_row <- list() # long_table_row[[pkg.globals$LongTable.VariableCategory]] <- NA @@ -302,7 +295,7 @@ CreateTableOne.default <- tableone::CreateTableOne # long_table_row[[pkg.globals$LongTable.Percentile75]] <- # row_percentile75 # long_table_row <- append(long_table_row, group_by_list) -# +# # # ----Step 5: Clean the row # for (each_element_index in 1:length(long_table_row)) { # # remove empty classes to avoid bind conflicts @@ -311,16 +304,16 @@ CreateTableOne.default <- tableone::CreateTableOne # long_table_row[[each_element_index]] <- NA # } # } -# +# # # ----Step 6: Add row to the rest of the rows---- # long_table_rows <- # rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) # } # } -# +# # return(long_table_rows) # } -# +# # # Create long table from CatTable # extract_data_from_cat_table <- # function(cat_table, @@ -334,10 +327,10 @@ CreateTableOne.default <- tableone::CreateTableOne # strata_split_name <- # unlist(strsplit(as.character(strata_name), split = ":")) # # Adds group by columns not found in the long table -# +# # # ----Step 2: Add columns to long table # long_table_rows <- data.frame() -# +# # # ----Step 3: Extract information for each new row of the longtable ---- # for (strata_counter in 1:length(cat_table)) { # strata_split_values <- @@ -346,7 +339,7 @@ CreateTableOne.default <- tableone::CreateTableOne # for (selected_variable_table in cat_table[[strata_counter]]) { # # Used to specify the variable being writen # variables_checked <- variables_checked + 1 -# +# # # Loop through the levels of each variable # for (row in 1:nrow(selected_variable_table)) { # n_miss <- selected_variable_table[row, pkg.globals$tableOne.Miss] @@ -373,7 +366,7 @@ CreateTableOne.default <- tableone::CreateTableOne # } # } # } -# +# # # ----Step 4: Create long table row ---- # long_table_row <- list() # long_table_row[[pkg.globals$LongTable.VariableCategory]] <- @@ -390,14 +383,14 @@ CreateTableOne.default <- tableone::CreateTableOne # long_table_row[[pkg.globals$LongTable.Percentile25]] <- NA # long_table_row[[pkg.globals$LongTable.Percentile75]] <- NA # long_table_row <- append(long_table_row, group_by_list) -# +# # # ----Step 5: Clean the row # for (each_element_index in 1:length(long_table_row)) { # if (length(long_table_row[[each_element_index]]) == 0) { # long_table_row[[each_element_index]] <- NA # } # } -# +# # # ----Step 6: Add row to the rest of the rows---- # long_table_rows <- # rbind(long_table_rows, long_table_row, stringsAsFactors = FALSE) @@ -405,6 +398,6 @@ CreateTableOne.default <- tableone::CreateTableOne # } # variables_checked <- 0 # } -# +# # return(long_table_rows) -# } \ No newline at end of file +# } diff --git a/R/tableone-print-modification.R b/R/tableone-print-modification.R index 122e2159..6c2b9291 100644 --- a/R/tableone-print-modification.R +++ b/R/tableone-print-modification.R @@ -15,6 +15,8 @@ ##' @param noSpaces Whether to remove spaces added for alignment. Use this option if you prefer to align numbers yourself in other software. ##' @param padColnames Whether to pad column names with spaces to center justify. The default is FALSE. It is not conducted if noSpaces = TRUE. ##' @param varLabels Whether to replace variable names with variable labels obtained from \code{labelled::var_label()} function. +##' @param valLabels Whether to replace variable category names with variable value labels obtained from \code{sjlabelled::get_labels()} function +##' @param missingLabels The type of label to use when no value label is found for any given variable ##' @param format The default is "fp" frequency (percentage). You can also choose from "f" frequency only, "p" percentage only, and "pf" percentage (frequency). ##' @param showAllLevels Whether to show all levels. FALSE by default, i.e., for 2-level categorical variables, only the higher level is shown to avoid redundant information. ##' @param cramVars A character vector to specify the two-level categorical variables, for which both levels should be shown in one row. @@ -27,158 +29,172 @@ ##' @author Kazuki Yoshida, Justin Bohn ##' @seealso ##' \code{\link{CreateTableOne}}, \code{\link{CreateTableOne}}, \code{\link{summary.TableOne}} +##' @importFrom labelled var_label ##' @examples ##' ##' ## See examples for CreateTableOne and svyCreateTableOne ##' ##' @export print.TableOne <- - function(x, # TableOne object - catDigits = 1, contDigits = 2, pDigits = 3, # Number of digits to show - quote = FALSE, # Whether to show quotes - - ## Common options - missing = FALSE, # Not implemented yet - explain = TRUE, # Whether to show explanation in variable names - printToggle = TRUE, # Whether to print the result visibly - test = TRUE, # Whether to add p-values - smd = FALSE, # Whether to add standardized mean differences - noSpaces = FALSE, # Whether to remove spaces for alignments - padColnames = FALSE, # Whether to pad column names for alignments - varLabels = FALSE, # Whether to show variable labels instead of names. - valLabels = FALSE, # Whether to show category labels instead of values. - missingLabel = "Missing Label", # What label is assigned to missing value labels - - ## Categorical options - format = c("fp","f","p","pf")[1], # Format f_requency and/or p_ercent - showAllLevels = FALSE, # Show all levels of a categorical variable - cramVars = NULL, # Which 2-level variables to show both levels in one row - dropEqual = FALSE, # Do not show " = second level" for two-level variables - exact = NULL, # Which variables should be tested with exact tests - - ## Continuous options - nonnormal = NULL, # Which variables should be treated as nonnormal - minMax = FALSE, # Whether to show median - - ...) { - + function(x, # TableOne object + catDigits = 1, contDigits = 2, pDigits = 3, # Number of digits to show + quote = FALSE, # Whether to show quotes + + ## Common options + missing = FALSE, # Not implemented yet + explain = TRUE, # Whether to show explanation in variable names + printToggle = TRUE, # Whether to print the result visibly + test = TRUE, # Whether to add p-values + smd = FALSE, # Whether to add standardized mean differences + noSpaces = FALSE, # Whether to remove spaces for alignments + padColnames = FALSE, # Whether to pad column names for alignments + varLabels = FALSE, # Whether to show variable labels instead of names. + valLabels = FALSE, # Whether to show category labels instead of values. + missingLabels = "Missing Label", # What label is assigned to missing value labels + + ## Categorical options + format = c("fp", "f", "p", "pf")[1], # Format f_requency and/or p_ercent + showAllLevels = FALSE, # Show all levels of a categorical variable + cramVars = NULL, # Which 2-level variables to show both levels in one row + dropEqual = FALSE, # Do not show " = second level" for two-level variables + exact = NULL, # Which variables should be tested with exact tests + + ## Continuous options + nonnormal = NULL, # Which variables should be treated as nonnormal + minMax = FALSE, # Whether to show median + + ...) { + ## Extract Cont/CatTable elements of x and dispatch print() appropriately FmtTables <- tableone:::ModuleFormatTables(x, - catDigits = catDigits, contDigits = contDigits, - test = test, smd = smd, missing = missing, - explain = explain, pDigits = pDigits, - - ## print.CatTable arguments passed - format = format, exact = exact, - ## Returns one more column if TRUE - showAllLevels = showAllLevels, - cramVars = cramVars, - dropEqual = dropEqual, - - ## print.ContTable arguments passed - nonnormal = nonnormal, minMax = minMax, - insertLevel = showAllLevels) - + catDigits = catDigits, contDigits = contDigits, + test = test, smd = smd, missing = missing, + explain = explain, pDigits = pDigits, + + ## print.CatTable arguments passed + format = format, exact = exact, + ## Returns one more column if TRUE + showAllLevels = showAllLevels, + cramVars = cramVars, + dropEqual = dropEqual, + + ## print.ContTable arguments passed + nonnormal = nonnormal, minMax = minMax, + insertLevel = showAllLevels + ) + ## List of stratum sample size row only tables FmtStratumSizesTables <- sapply(FmtTables, - FUN = tableone:::ModuleStratumSizesRow, - showAllLevels = showAllLevels, - simplify = FALSE) + FUN = tableone:::ModuleStratumSizesRow, + showAllLevels = showAllLevels, + simplify = FALSE + ) names(FmtStratumSizesTables) <- paste0(names(FmtStratumSizesTables), "N") - + ## Combine as a list of necessary table elements FmtElementTables <- c(FmtTables, FmtStratumSizesTables) - - + + ## Add space paddings ## Given a list of tables with vecColWidths, ## return a strata-by-table df containing spaces to add nSpacesToAdd <- tableone:::ModuleNSpacesToAdd(FmtElementTables) ## Actually add spaces to tables spcFmtEltTables <- tableone:::ModuleAddSpacesToTable(FmtElementTables, nSpacesToAdd, showAllLevels) - - + + ## Create a list of one variable tables excluding sample size row. ## This is based on the variable order in the MetaData. lstOneVarTables <- tableone:::ModuleListOfOneVarTables(spcFmtEltTables, - MetaData = x$MetaData) - - - + MetaData = x$MetaData + ) + + + if (valLabels) { lstOneVarTables <- - lapply(seq_along(lstOneVarTables), - function(i) { - ## Each element is a string matrix. - mat <- lstOneVarTables[[i]] - ## Manipulate if a non-NULL label is available. - ## Note MetaData$varLabels is a list. - if ((!is.null(x$MetaData$valLabels[[i]])) && (length(x$MetaData$valLabels[[i]]) > 1)) { - ## The first row name contains the variable name - ## without preceding space. Replace by exact matching. - if (!length(rownames(mat)) > 1) { - #print("HMMMM") - # Handle collapsed vars somehow?????? - } else{ - for (j in 2:length(rownames(mat))) { - # TODO Have some way to deal with collapsed cats - catchValue <- - tryCatch({ - x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] - }, error = function(e) - { - x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] <- - missingLabel - }) - rownames(mat)[j] <- - gsub(trimws(rownames(mat)[j]), - catchValue, - rownames(mat)[j], fixed = TRUE) - } - } - } - ## Return the entire matrix. - mat - }) + lapply( + seq_along(lstOneVarTables), + function(i) { + ## Each element is a string matrix. + mat <- lstOneVarTables[[i]] + ## Manipulate if a non-NULL label is available. + ## Note MetaData$varLabels is a list. + if ((!is.null(x$MetaData$valLabels[[i]])) && (length(x$MetaData$valLabels[[i]]) > 1)) { + ## The first row name contains the variable name + ## without preceding space. Replace by exact matching. + if (!length(rownames(mat)) > 1) { + # print("HMMMM") + # Handle collapsed vars somehow?????? + } else { + for (j in 2:length(rownames(mat))) { + # TODO Have some way to deal with collapsed cats + catchValue <- + tryCatch({ + x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] + }, error = function(e) { + x$MetaData$valLabels[[i]][[trimws(rownames(mat)[j])]] <- + missingLabels + }) + rownames(mat)[j] <- + gsub(trimws(rownames(mat)[j]), + catchValue, + rownames(mat)[j], + fixed = TRUE + ) + } + } + } + ## Return the entire matrix. + mat + } + ) } - + ## Replace variable names with variable labels if requested. ## Loop over the variable replacing its name with its label. if (varLabels) { lstOneVarTables <- - lapply(seq_along(lstOneVarTables), - function(i) { - ## Each element is a string matrix. - mat <- lstOneVarTables[[i]] - ## Manipulate if a non-NULL label is available. - ## Note MetaData$varLabels is a list. - if (!is.null(x$MetaData$varLabels[[i]])) { - ## The first row name contains the variable name - ## without preceding space. Replace by exact matching. - rownames(mat)[1] <- gsub(paste0("^", x$MetaData$vars[i]), - x$MetaData$varLabels[[i]], - rownames(mat)[1]) - } - ## Return the entire matrix. - mat - }) + lapply( + seq_along(lstOneVarTables), + function(i) { + ## Each element is a string matrix. + mat <- lstOneVarTables[[i]] + ## Manipulate if a non-NULL label is available. + ## Note MetaData$varLabels is a list. + if (!is.null(x$MetaData$varLabels[[i]])) { + ## The first row name contains the variable name + ## without preceding space. Replace by exact matching. + rownames(mat)[1] <- gsub( + paste0("^", x$MetaData$vars[i]), + x$MetaData$varLabels[[i]], + rownames(mat)[1] + ) + } + ## Return the entire matrix. + mat + } + ) } - - + + ## Check if the first row is CatTable element ## if so, pick sample size row from space-padded CatTable element ## if not, pick sample size row from space-padded ContTable element ## Intentionally a one-element list lstStratumSizesRow <- ifelse(x$MetaData$logiFactors[1], - list(spcFmtEltTables$FmtCatTableN), - list(spcFmtEltTables$FmtContTableN)) - + list(spcFmtEltTables$FmtCatTableN), + list(spcFmtEltTables$FmtContTableN) + ) + ## Row-combin n and all variables - out <- do.call(rbind, - ## List concatenation (both are lists) - c(lstStratumSizesRow, lstOneVarTables)) - - + out <- do.call( + rbind, + ## List concatenation (both are lists) + c(lstStratumSizesRow, lstOneVarTables) + ) + + ## Add stratification information to the column header ## NULL element has a length of zero if (length(x$ContTable) > 1) { @@ -188,7 +204,6 @@ print.TableOne <- strataString <- paste0("Stratified by ", strataVarName) ## Name the row dimension with it. 1st dimension name should be empty. names(dimnames(out)) <- c("", strataString) - } else if (length(x$CatTable) > 1) { ## Combine variable names with : in between strataVarName <- attributes(x$CatTable)$strataVarName @@ -196,29 +211,29 @@ print.TableOne <- strataString <- paste0("Stratified by ", strataVarName) ## Name the row dimension with it. 1st dimension name should be empty. names(dimnames(out)) <- c("", strataString) - } else { - names(dimnames(out)) <- c("", "") } - + ## Right-justify Missing column if showing and not removing spaces. if (missing & !noSpaces) { - out[,"Missing"] <- format(out[,"Missing"], justify = "right") + out[, "Missing"] <- format(out[, "Missing"], justify = "right") } - + ## Center-justify column names if asked and not removing spaces. if (padColnames & !noSpaces) { out <- tableone:::ModuleMidJustifyColnames(mat = out) } - + ## Remove spaces if asked. out <- tableone:::ModuleRemoveSpaces(mat = out, noSpaces = noSpaces) - + ## Modular version of quote/print toggle. - out <- tableone:::ModuleQuoteAndPrintMat(matObj = out, - quote = quote, printToggle = printToggle) - + out <- tableone:::ModuleQuoteAndPrintMat( + matObj = out, + quote = quote, printToggle = printToggle + ) + ## Return the result return(invisible(out)) } @@ -227,22 +242,16 @@ print.TableOne <- #' Export TableOne Objects to Markdown #' #' @param x an object created by a tableone function +#' @param missingLabels passed to \code{bllflow::print.TableOne} +#' @param valLabels = TRUE passed to \code{bllflow::print.TableOne} +#' @param varLabels = TRUE passed to \code{bllflow::print.TableOne} #' @param ... arguments passed to \code{\link[knitr]{kable}} #' #' @return A character vector of the table source code #' @export #' -#' @examples -#' -#' library(survival) -#' data(pbc) -#' -#' tableOne <- CreateTableOne(data = pbc) -#' -#' kableone(tableOne) -#' #' @importFrom utils capture.output -kableone <- function(x, missingLabel = "Missing Label", valLabel = TRUE, varLabel = TRUE, ...) { - capture.output(x <- print(x, valLabel = valLabel, varLabel = varLabel, missingLabel = missingLabel)) +kableone <- function(x, missingLabels = "Missing Label", valLabels = TRUE, varLabels = TRUE, ...) { + capture.output(x <- print(x, valLabels = valLabels, varLabels = varLabels, missingLabels = missingLabels)) knitr::kable(x, ...) -} \ No newline at end of file +} diff --git a/R/util-funcs.R b/R/util-funcs.R index 1c1aaa3d..4839ed69 100644 --- a/R/util-funcs.R +++ b/R/util-funcs.R @@ -2,11 +2,11 @@ # This function returns TRUE wherever elements are the same, including NA's, # and false everywhere else. is_equal <- function(v1, v2) { - same <- (v1 == v2) | (is.na(v1) & is.na(v2)) + same <- (v1 == v2) | (is.na(v1) & is.na(v2)) # anything compared to NA equals NA # replaces all instanses of NA with FALSE same[is.na(same)] <- FALSE - + return(same) } @@ -17,7 +17,7 @@ clean_strata_values <- strata_all_combinations_data_frame <- expand.grid(dim_names) strata_args <- c(strata_all_combinations_data_frame, sep = ":") strata_values <- do.call(paste, strata_args) - + return(strata_values) } @@ -33,10 +33,10 @@ clean_strata_values <- # table_to_add_to[, column_name] <- NA # } # } -# +# # return(table_to_add_to) # } -# +# # # Adds groupBy columns to long table # add_group_by_columns <- # function(strata_split_name, @@ -49,7 +49,7 @@ clean_strata_values <- # long_table <- # add_column(paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = ""), # long_table) -# +# # if (!is.null(variable_details)) { # long_table <- # add_column(paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = ""), @@ -65,10 +65,10 @@ clean_strata_values <- # ) # } # } -# +# # return(long_table) # } -# +# # # Fills group by columns with information from variable details # fill_in_group_by_columns <- # function(strata_split_name, @@ -80,7 +80,7 @@ clean_strata_values <- # strata_split_name[[group_by_index]] # long_table_row[[paste(pkg.globals$LongTable.GroupByValue, group_by_index, sep = "")]] <- # strata_split_values[[group_by_index]] -# +# # if (!is.null(variable_details)) { # long_table_row[[paste(pkg.globals$LongTable.GroupByLabel, group_by_index, sep = "")]] <- # variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & @@ -90,9 +90,9 @@ clean_strata_values <- # sep = "")]] <- # variable_details[is_equal(variable_details[[pkg.globals$argument.VariableStart]], strata_split_name[[group_by_index]]) & # is_equal(variable_details[[pkg.globals$argument.CatStartValue]], strata_split_values[[group_by_index]]), pkg.globals$argument.CatStartLabel] -# +# # } # } -# +# # return(long_table_row) # } diff --git a/TestingModules.csv b/TestingModules.csv deleted file mode 100644 index 76d15176..00000000 --- a/TestingModules.csv +++ /dev/null @@ -1,3 +0,0 @@ -"ModuleName","ModuleOperations","DefaultOrder","ModuleID","ModuleDescription" -"StandardizeToInteger","z::[append=TRUE],integer::[append=FALSE,suffix=FALSE]",1,1,"Converts string values to integer values" -"PrepareForModel","center::[append=TRUE,suffix=""_C""],interact::[append=TRUE,suffix=""_X-{var}""],impute::[append=false,imputeOn=mean,suffix=FALSE],num2factor::[append=FALSE,suffix=FALSE],dummy::[append=TRUE,suffix=""_Dummy""],bs::[append=TRUE,suffix=""_bs{num}""]",2,2,"Prepares the module for coxhp model creation" diff --git a/TestingVariables.csv b/TestingVariables.csv deleted file mode 100644 index 40e5c34f..00000000 --- a/TestingVariables.csv +++ /dev/null @@ -1,24 +0,0 @@ -"variable","label","labelLong","variableType","units","operations","integer","role","z" -"age","Age","Age of participent in years","cont","Year",1,TRUE,"predictor",TRUE -"sex","Sex","Sex of the participent","cat",NA,1,FALSE,"predictor",FALSE -"bili","serum bilirunbin","serum bilirunbin(mg/dl)","cont","mg/dl",1,TRUE,"predictor",TRUE -"albumin","serum albumin","serum albumin (g/dl)","cont","g/dl",1,FALSE,"predictor",FALSE -"protime","standardised blood clotting time","standardised blood clotting time in minutes","cont","min",1,FALSE,"predictor",FALSE -"edema","edema","0 no edema, 0.5 untreated or successfully treated - -1 edema despite diuretic therapy","cat",NA,1,FALSE,"predictor",FALSE -"alk.phos","alkaline phosphotase","alkaline phosphotase (U/liter)","cont","U/liter",1,FALSE,"predictor",FALSE -"ascites","presence of ascites","presence of ascites","cat",NA,1,FALSE,"predictor",FALSE -"ast","aspartate aminotransferase","aspartate aminotransferase, once called SGOT (U/ml)","cont","U/ml",1,FALSE,"predictor",FALSE -"chol","serum cholesterol","serum cholesterol (mg/dl)","cont","mg/dl",1,FALSE,"predictor",FALSE -"copper","urine copper","urine copper (ug/day)","cont","ug/day",1,FALSE,"predictor",FALSE -"hepato","presence of hepatomegaly or enlarged liver","presence of hepatomegaly or enlarged liver in participent","cat",NA,1,FALSE,"predictor",FALSE -"platelet","platelet count","platelet count in thousadnds per microliter of blood","cont","thousand/microliter of blood",1,FALSE,"predictor",FALSE -"spiders","blood vessel malformations in the skin","blood vessel malformations in the skin of the participent","cat",NA,1,FALSE,"predictor",FALSE -"stage","histologic stage of disease","histologic stage of disease (needs biopsy)","cat",NA,1,FALSE,"predictor",FALSE -"status","status at endpoint","status at endpoint, 0/1/2 for censored, transplant, dead","cat",NA,1,FALSE,"outcome",FALSE -"time","number of days","number of days between registration and the earlier of death, - -transplantion, or study analysis in July, 1986","cont","days",1,FALSE,"predictor",FALSE -"trt","trt","1/2/NA for D-penicillmain, placebo, not randomised","cat",NA,1,FALSE,"predictor",FALSE -"trig","triglycerides","triglycerides (mg/dl)","cont","mg/dl",1,FALSE,"predictor",FALSE diff --git a/data/cchs2001.RData b/data/cchs2001.RData deleted file mode 100644 index 0bb0cd17a852371e41f50752889eb4313a587237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21548 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 diff --git a/data/cchs2007_2008.RData b/data/cchs2007_2008.RData deleted file mode 100644 index 323cd4b637c4052fb53fe9699aa35ce3431e4466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31344 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 DWZUyN diff --git a/data/cchs2009_2010.RData b/data/cchs2009_2010.RData deleted file mode 100644 index ad8f499775bf21e10d19ceb74fb78cda10a33f33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31952 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

    l$gsHqX3$vL_9b38cAxpJ~ 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 diff --git a/data/cchs2011_2012.RData b/data/cchs2011_2012.RData deleted file mode 100644 index 82bc6067e11549bd7916fe5af849b2b25bf1047c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31200 zcmV(rK<>Z&H+ooF0004LBHlIv03iV!0000G&sfawRiSyIT>vQ&2UJ%gRpOV=} za9dLd7NT5lC&{n&|^l7 zVE&D^&NoQ#&wqDD+|nnHhkZlq(iBWKvwT1UO8lZF0ZOndFQ9T~#OZ_wY$4qW*uzug zM2mqz$J_v(wkUem6r{yalF^u3QgUabE3c8hj~bf1naOUf$P-ShcZ-65W-J#t&WKcJ{wBI- zk$VZ60IUFgd(to+_$iI})Wqcg-PG^*@(S+7o2|S7LvQX)YD)Hz0MuMqViQ@%A_tRm ztWrm!j%$iQzcZ;_^e(NXuJG#U|BUwDMTDy%#^p6y`hvA+jQ$F^IT)xQo?|TAY*2IP zc2fM`X5vt?-0R9uoL46divSpIlffVJ5}nF!*Hj|!#UmUGTJb(4ChiVsI;1Td0gQG# zV(nD<9pO%~H!Jx{$lY!a3u9+$1u=#%pOmD~|0O#Y{=tb?*k`{v_r2xZg!m;O8eFCd z*^04Ke4JjFd6hL^V?*B3PspGArEeYPOfv0?#&P;rLlhSMufN(y06kHt7R{EwrOZQJ zzsvFJS4zptR3z|0`_gUgFq`!|U}W~ND!@G~woWwELRM|vYTjVy{_8?oxlF^_hIxm6 z%PN#n38+gRAOH|BjI0i@t`Y~Le=_uczBo^F;SUr+y7;aIOZn6DeM5EMS?-j7(^*a! zrJ;MvBTu|o_SPz`#vktPA#%aBk}7smqnJ;mX2H-MYu0?zlxA(ysLi`NiJQf__nive z7a2d~KwKsGaoKnJ2>l4+h`a2(`)SnIGyEBzYQ~D*DtR^0B`FhPta;B;b>VS?Lgwa? zcr}`pg7+yBdtX|uH6KV)iCvv@CVMBFzZ8MZNnzBG3=}xPasTkIQlg;-Eh|oZ5bc-B z=*Hx>za=vfivGCx@E27=i{bCoi9cCSW>kokqz@W|C3ljqg;9Z}Ok1EzmZ(3_;}ob7 zUUJ7xD`?f75T7``(EJ>6}i>rz~;&MEsz&Gl#Caf)2S{jo=7(RO1CVX^FxS2Fg7=zk@mYqdCSQJm?Ox+N# zNilio)J9QHj6@oRy9*^TTOP^tyDv5Z%FAS4FN&_ia(2)R=N2*gcp9iM)?do-^jgUR zve0dAOJF8)nkISm^8Zf(q&|LwQN$0e=}24au90N!<*`^If>{84sBjX{qjSo_PWEVS z0z1sb%dly{OG#sqz5|0V8~(vQH6$W`8oxms=1fDFgq$&mjcjKa${1#KehIK^mfb4 zsnFM$6hdbw*VVb`09N)7@VyZYX(3$0Es1U66iR8gValr=%=@N-z(n6^>ojcU0Bm1h z2}0EHgBD#-c;S|2n11SAM8~x(QW7Wu>b#EZ;3MyZf|y$7j+3hq_lV(oLukTgai`WV z$!?sXO?Nhc@R^E0Nur;nsr9|K3#kSdt6Q>Q4FahW+2d%d#65^8##*GIQ4c-4m=9z$ zXFtB|Z1qm^Pb;}=6I~m_)7E2<6Adoy8m{$R_Z5h&Ls^LQkW(7*W6;y&T4P&057lFO zirx9JQ_XI*3ORkjz8Fo*k5~LvEieX4Y7a>IZ6s)V82~0ZKwTu}qn)Hc@ABMBeoEA` z8z@v+rAz-!*%IF2FFNFQW2&5vy!O&WvI-^JT7&WmTR|aGrhTU{1Yq^}>pccTN}ud+ zpXMr#^pj4I6V3As`{j8uJ*&c-z_%!JW>GQh&OqvR5&dd2!`n4mz6T2j!1C5blksh* zy6zzy{J+|oodsTS3Z?2qA-kgznleGcZ(NSBcVO)()#gwOZbRoOeg5`kgVy&Bc(0Q) zzY~`N)yZN}QPKHa1PHl&dJ$(HB@g$hyCiX2LigxZwtaZAL{%*+PS?=Y`N(q|Y9=|I zBb4mVH6n^c6}~-sRfp2UAmu?>V^6y#n7+3X_fTh)QPViiZV1@!SNp{v(}ao>o?J;f zNu%}a+JCPYPS9m+YSK9CRFL7Uyxfv9Dj62yHOX`C&bLq|ej&Axp)BHGnRCNkY8$r( z>Xld1Z*0MfxkExhX$xmD#*Z`W(^KekLBoim*e{{H_`qN|29PQ;Ri80y$)&98XN4sr z_}2LZrr=^hi=p}O7E$F zfC>?vg(h4h!AYRZXSk{}>>Z;tyaG9vWbyOdJdz{I<-2v9cfkQ){i4-LwZ`jPvs;vL zMxs-?&#%(vlk$zvD>P3tx>0EFv`&jN`U=rVO?9w`@CBP+c)m(NFpWUqFPNwSQ_qr$ zZS62g>sah?CtzX9s;L5~`AaNav*Y@=ojy}OqFsz~0=5KkueldczIydeD?A2LC<-_^ zINjN3pF^w08t%TTw~R8R(NhLsEADKx3hpcT`6UvOu=y1aGGOfCiljP9)@YNnhwphK zIOPdw>Me~aE;ZzV)seKW>Jr>=Oy$4fgC^hs`j;Mtsf{h{efg`Ia+Gn80x=~aX!w(uWvPN$B6n&H<*8c|GIL&#pgMGM3ktJ`I=5h40_Smxq z6NeLSfZ{4HcC4GnZ#SsjOaz`dhlQ!aU@*&Cdkjy@#X|lH$vl$tTTQGJ&Suvv>*4e{LlX$Tz?tSC8J^l?hP3ZUI9g#+L zHI>G<2l9gWS7aVn6pN}PQNcGr>j}}xRlAAlezcjavfD~rZ}HVLrr85&yNW$zb2tCy z0)Yuf@cqwAZK$&W2ncMUOGnZ>93;0ow9IQ<1o2DiDX=>>2pJblCwzkr*HL#Oxv3Y_ z*E8|j(Ay1Ql)6bPfbRlSSCBl52CCOlX@gS*@N3y(szqiw;$r?}5xv71ASQ7uXF6(Z zj<|Yx&G{RUF42rDBOekUynb}Dxp_R|-syxf45X>R9z8%KD=I6yDJ5UO!dOb&pIH8V zfEtnY_al~;>Au=O0?syw00T3>Qy-76E6KyG@7~Qbp zSSud;V+4y8CT`*JN497XN#Qx%RIYNwO)OMrND@TO0Jm+Ox<8WhL8ZF}iJ^l_oD3}n z53(=fUKO#0{*~WyUcc36Ay{@@nxhkk>GR8iK;G<$?I>&fBDs>~3kR1_Jw@WtnONb> zyMz*YSDvR|t^2GXZ;ac&X_<79%jtIu1y#p+V&2kd{8rJkAbSrG=1HfqdsS2{U((a4 zTvJU%(J$_F+=9SUr$_WhXlD|l1xte>fo9|3988=+R6s?S!za9xzbp)acBzyYraVtw*!qBYbr zhWf^!8D82af`>E$z?n$T%>_UHWtM;npfOtC=eVqCz0&7k{UNr)O16{$UuQ%HjR(R2 z8JFlez=aLx(807Vj1Nm-UbtnEwtB`!g%B!kt(=6C(hoj1;uh*!{d3i*N(e@&h!MR? zMI>`DE-)dn-2R{~%p_a$l*Y&AiwKbUi2KhXnXf)NrF{!I4I8MCQ?RwCsF!5&gO3R| zNm%e_`MUK2rR_3z+`4065QeR8l?YQ4@oq7%mA#|n`ULvloUbcs4wa0T=Q|C}BhXhhK87Tj# z`Ii7*sr4zByFKn@Af*+=PwrGScH~ntAP&?Ve{rE^G0^~PZJ27crE7mKPF;j_Q&*;2 zfuAEB_XzUQ-k&Aw)$LL&$wrg3COJ@LGF3r<=S>jrBjY|Z6m59cYTrv*c|rt!C`*a* zyN{#VwIMp45Ti>vxfh0R!{^2uEmM>*NWkYfNfw5+YM4wut3tPQx%f+p5xMs-UArSY z2X@w5YQ>WRQ`69^ZzC;@cqB2l-0CX&8B8n4N5Kae`uQ^Atjb>zs<*otC($e>iq6hi<7RNZ z=~1s)><@Q3wq8*}X2-y6D~;S?rE%5@a=YH|Zh82Tr561ygERln&hw1+`~umScg0q+ zA9PUi&?uC5`~9opKa)~YrLy=o3W0}bvziVqQV*2+R=t}&RUDBpJ_pA zwbF~!1tb!Yoh-dVdM7e*Jhnw7`CDR=DKor7ozf!m=&8rm#K<5^u7cS}sl&-LXi+&* zSC<+tN;^Hp~DH2h>utQ;OYsb0xYWM`esQKGrpph#R} z&g#N6{knc_#PWM#-=fML_{6yEr?(_W95{GB8cs~Lqv!E~l2#FuYbV0u-g|VB=<))o zm$6j{Rp4IrjAwbo^wMWMQZ?T>f7Yi#eW77Q0LtuCtFt>uPVxR$DfZx6q=tH0tFO>Y z*!K|p3Ec8fC+Ex+4?UZN-3AMd9t(IalHeoF z&y@}ZGweWX1)-r0{%2xT|3j3FCHsvlu_f=-RSHu*4Lv;KLtRv*T1zizD+H9p-bw{1rggZN zaB-v*Wj85^Y1qre5|U|SDat%vCp)0mU3!a&5Lg5!B>X z&5yNb4qf>29iIRnber&dwBYmev@=+}U|k_NTu!t%*5p6G6e2Gx3~i7@?jeHi1`)QSWOj~timDL;e>?Ggl)=QrmCpsl zet5|!s@OWwTIj#~XROg+`5-Xty4es5J!%gCv3^sWB8`2zq<)Yurt^=2ozWo1pNBCZek69 za|kFm=n*G8XZFY9Z;Xd(?-DW`H%RP(y9wi+>gUOj`z#Po-j z`;tG)mXKK`sl5vbe&jtxj5nM{U4s;xxVBKk9*HF^Ffbahn};T|o4(og=}}D; zZ?t!w+0U&1H|-k()qcBxb0R^>v$CL18LKUVUdaLv{di#TPXYUE;h=ywuXTj&u;*@J z8|XS%v+7YhWSXM%of?Cu-k8JWU^ZtSC-e)Bq*e=md;~BhF+z`2rJw_Woamyf@8hMy z!ljk6!}RSB6qVCQKKMPAwdBK+oY#u576Z3ku;8B+{Z*5cegRzb``*DRigoQwB+9;R z6}MX7C6pH~Qv{S#oiU6O?5r%9nU%eTDAcgCbWlEWEksye0iwRu_#^SE9yJ+UugE>= zfn2xZ{cpp_MB};?nfKLPPH|NvE>V)Yb|c}1Mce6%ki>i zsK5D}jL%5TtM@Spg0|R_)<(%-#Q^`Rzs==_ws&d_R#N?if(9YR?3nx^R(c&lmQD5x z$dh@sXJ8E2^p8`s1wV%qxJVng{9Ubd&en$SyFhSHA2kW`v~A~D-`=B`kQ5psKBXciuO6R*_0%%)jUy17Zg)$i52V~lik|iJ&xWKjwqKAup!tPuF;Wk@tn}Aqu5Wlp9 z6Ny(_lioKP66R%;4|spJd2E8H#ntpZt{?siN!k<@<$Xk5WrU+o!=PsKNr*mj)mAlC z`M!z)A(R$J%+v*kTxR0#CeMhN|9xOAk9%dCyjC{C$dpmN4l%?mO5dPQs;Gyb@U2oH z)+}@BtHj3Rj*~!K)fp8mXy!e&t2R2%_7ve7gS;=r53}JCg0Fr`RZ?q-p;|R2myIC% zl~kR>rG0eZR)shOE)t;W$0SolQst@YeIkotCsXGojrP4Kp3>VDq0*SexkOGCXt=_= z54A4N&n%XL&OpkqK!CuPLUfh!gw7(ZGzbfZU5nsI$y#%m_Lo6HwqqJa;~qhSd-Xu9 zSVKypMR&%38ngNN8!sfPGnEKuyMD7ohy^q0 zchMqoYhOw3)Z%o-3MI$e%aH!GtytaQ0l`OdYdo^yn}iFB+of_&*>8UZal&V(m*JmT z2}PK0(rDkt<>ps;L!qBaDkRP(l<7;lA2E`(_>F%G>6O58#{i8Cs=xsXakFsO)WM}z zWXg}G@LvU@LA2v)@b!VuKiwLjb9|uZPU@L$2b~hw?dn8$^jY!rAYpCn{MihJ>d_yO zh>SX(xtAZRmXQVo=VxqYBP}#iEBNvq?-L#z7{h9$ zD&f$3_i%LVRqD{jST5lfD;HK$r@8*Gc)I@GCkIRM^CzFE%vZ?iR#2Sr(&i~09q8ZT z5boFusT3yq7t$(Y$ET|Q?g-^R3ZnU@24iG-0x}0=K+>}B26g(GoHoNOT(2k=?VpIT zi=3T2`m`hN>r(U}u&ZG%7@@Q9hg9zoFkC`DAKb}h9o96*uyQT?U7%8K?%TrDWvLKI z5%=?*k+ceo zzydDSVJ#q)w0;7!ziiuy72HQ2ro9eJk#OwA5^VX!v7*DLc@)U%0n(GP!0{g~J)ikP zFh%AZ+|pEB8%R<=CAQS+UhSwkbrJQ=&>C@vf(@ z=c>49g$`@Wq+Zvu04$mw@q}ySVJ1Ev!Pv%bBSqG>0a21LE)>gdt(o0p3JH9J!SWhZ z1kU%16&&iz^&zJYP+7j~1Lrm}W2wysWS(?N{-6yA$(d)>H%({qB=dv{36*L8Va8|e z*6^pB{vud#qZLWT7@@VoSZ|;}A8(su)5$~JF)q~hj-R+xx2Y6SZZTb)P6kp!#8g=M zeAwzk9Y%U9Mz3{>9mZay3?zRJF91Zt(f%@a5AwOYs#1o&*{i3QV>r`7n*iy_-Cjuz zXy5~biB7s@{6=2p^4qr^um!V#quRWP2;Ebf;6(!6QXe-`yo=O0c7c6|B@WI7_8tpZ z2hJS8^Wky*yHbd_CbMY{Azpk_E8#h~u=jrjBAJYY);q~qTZ@u*22v(P>%MmTPhM0^ zTcR=EDwb^UI?sH@(*dH(!m`@ysMxxuVb%tXA@BUqAhzzb-nGv3kZ=wJz{B_rz~6UU zyAcZWy^^FdCV8usv!(6==qc}vdcon}=(f(p&%p%B&~@%GKjEDR(~2d^tv|&I8^s#;j`?dR+Y#J@BbOk^I-(pj)t zxsOf?wb4WfnQZrrSln`kC1p#4SjqxlyE0%mG|oX;{A=4Xgzg3;j4`5!b`QEu6;Xzk zWg*#8bT>AGv=0j-m^5_KngfmlKF9Z}0oRimyTKgeKuf)~U4b+u2Ej4d$gozo)ZFA{ zG$i|eB)k+j+AbuLf(|8B<*Ji*sq!F&+HfZ=?~^C&!%CqCm6L=i6~M$?1wwIvdwX;J13nM1AESp z?$aiP&Hcc;;&CnL(dnR?9HY3@#mp*k%ciz%DrgQx6bAxGx$KF<@tFujFoB-%Kz)uS zZYtR(2Gv#1ko5&d^SY)aNH!s>Ir(Hp)@|PcF)L8F7O)6}%b-n*z*mYm@GD6f?1l=w z<2*ASr?5z9~?b4DebDYbG&uL`IE5w7So5W zJ{PSP`J*M>1tEr-?9qyo)a$TN%hBCB6ed_%O#Yc}JU{`{V%x>d>Y=URx=PTy%+6V1 zL*ng!P{kU_!J%|MqWUR8ySbdGo%$2-nYJ|u=19vb_%1sRLY!=%`wQ-=RX2+Bp;H7u z4mj0?tlcxJ$@pG@mq?{7Hh{zGUwH*5hP=ljWv_rv?p@jwW{j2I^?O6(-Qb%)FBa8I z&MPij1&?VXRT@I_=Ts+cghFT9$5vDtRg@OLCFq5;kHx@4rWulsbLy-y?^{a znk&X5L2!oc5_P<}XbBm7GV|WCp$D5kD4sz^2|wv*<(6gvv2S0>8?z}x!e0TIi8BsF z&Y;S)YfYK^x8_0HuXYZ@hx_tIb_KF(gx3!HTbst8s&f)lV+|*$*Uhf8uM|!hVNnh0 zYlnQL7)SGZ>qkHGno%iE4E|H&DUGBbS!vi_DT)3|GZ3gRp8(SlD115S<^J^*U&c77 z2>?Ctdp8<7CBv)Co(2Q!uQ*K6mqG(q%42~&F-o$6>D*6;B20_-d+7h0>x1Xd$mDam z*)~BA%kK3gz)9&O1OymU-KX!EQ?8%o?sd1CHDltS1jvEAW^EwJoxR1irlFyW$c&Bo-G$(oB{ z5>woYE)zSY2<$LUuNkxx1~Nfl^%-0-jWWkcB#LXaEy4Nb)SoY1o8TccnQwp=hU0PH zTtZ!bp=e@BtB6~43~5KT%nvWW5Uw3?u_^}oG7Jz>$D+>u6*WagB)-HWoJt6O6UJZm ztgthE?=xdz3RLV?r|W-a<0o=llWBblnthY;h?Y2>YmI-KBUyGZ4Tv2^)tevIn26~m z>{x6-5e~6^DH-P><31dYbHS)3+Q|Jd$oV5Hw6?-r@yOc0`!v6&tK;_DI%G$$z4{wN zrk2kZgXn8g95A<7bD%HzC4$XYK>9z&TP`lz4UWu{=P$V*@ zpR~+QIRuIx7~k?1yVT*>h=9pL$sSZlj%@Hmx%voL-N17APPaq`sl7MJRSrOhe6cc2 z)dzdQ%)cNZZ8%*%f={|8m!nGIwRI~kVRVJRTPL~5(XHwpRw{5>m;IZUy+q*TPy$%D z3cs99$(S&RbqnWp@Tg@Bm}(+~AKLUbHUS8W-l(qZK~|q&Z4&;p?gFD^mdl` z*-S;Pjr&wcWu7C@YxOl+9RpOa=~GwROb$CyOe(_MLKZQD<$~M|FKOP{@*dlv_t(dj zj*2!<#IcyHt(WJh8Fy#PZGLC%`ZJW@D<_zA*f?*MSEf|5Rr+(w-jQ zoSj9v+kaC%$@5l^WOyp;4gwMy|9>107h%3_enrRwPH6}xqav0IhV6O!y~U6gU>;NR zasjm4^qC+*RSEx-RX1V5!$VR?BsL?A3B^Ez0`FBNo}DT(!;wA%Q>Dw{Y zG-LTpYw}V}db6@=HGgm#GovE2hE(t5l5rrkP|ah>FC)~>VZ&WwI|=m3-nLJ>WR+-7`#e4F-Y? z9I*>2$;O{yHHp4NbT)#shKUavPJ;;4k73yj$z2nJk5*8Y<6cx?Jt7Cs!pT9aPq0~femrrDm%Ey z?Co;lbGMG4a1z-@>1D9$@$pi*{^zm>l{tg*7lDrEKU1(TE7w37aS0KQSSZ&zVcuc! zRVpx@&MHMG(cmFyk>ePgG1?}|f^JF!f&_p~ggB-E0u{&T33NIS^gxh9mW6tt4x5C` z88=5-tbxt$u2wR=;QJF;+&1UarvWF;dM+szb5uNTa7R|}m05?|H!g(G zm;J#I@ZIQhq&5BgQ(FZ_B&hA%8Yj?{X8Z_?_z}}yf#$YVoxZB2fu$l%V`{PEYaoKG zwR2j#iA>X8e%%Y?GOHXTEn=^m>=q&dij5z4GgU4o`413jb2B-QSaVl?BOM3}I|&$N z=8cX(ETX^<87mVNy^+{cKK2bByt&3bN|i}-2svN=M>@_;xSn++Tt2U`uWv|%kUmDU zhv7`

    aJsufU}#PhqIhZDaI(GZ1in#@n1!wNWdxSV=(e}7MdlGw-XNblq~390%I!1Z5jxa5 zhoo!gjHNG)6`p+A^pB{27mdsq%k6~3Y<_-C^a_w`q2|?o_ZZ};J!Q(0__B9uq1&{| zEH}zeptia5kA?1kWve;sXpv<>>EW|xXlWsb9RTe`9cH zfXYsD`gQF4eN|LuXv%0I&kszbS^F>)V)Nj1kEY&Ry;&&*&cRccOGt!Q5)AbHEs^08 z+*W}om}d@^-Pv=djw-WSKr9SkT265S!~;xPGMQAaiqVPg(lfEafQ!Z~s^!pel?Y8^ z)S;F+(QicmAY-gX8MC;ZDLR+cNZ3R-v6LC}G*FN_f-AjRHPzI10`I=v99Kn>S8?~k zJmBSfzTLSvlxS^s9|UZHoBm9i)T0(q7+fIw%?$e0m*J;M;2HI#Q~k|F!}N)F6>J?& zK%65zBrYP2V9q9xh2nItQ2hYOg(H$Fnk1sis<5WnH)^r<>rwL^8O6NQYm;qaqHDn{ zWwxwe+KSU_oJlDzv5awXtD1XXY#34UpT813}i#)Lq=79a@K!p;o+ zt%<(NNO3z=a~D#VS2EI>MF^ z<8Ig!-h#VY%m^xZzYy8vCa)9t9joa#o?Hz-y?UAFv~VDM#CjemX`wvLl1rZ#vhJci zj;L*y9BV->DN62*j2CL)D@Y6)xP!7Ok{}ZP;LngPAykw-n(U7wF~47vX~{@61UIN! zDti+T^s=Wg(y2Gi^gW%ag6;6jn@|5|ay# zkU(n{lD~KKba|SZ0C94U(=OL8o%C4K(dt z#Fl!-d0%RzxQ0F=y>mWkmW2rXV#w--kVtql(3dlDN5oSJ4=)`X=fGIpJk^17UJZbK zcgzNeFdgq_S&i(oSYs^b#;-Wk|hl}3FY8^#jsZ4$nvxFE4!k;3 z93*ip02u)1QIYOb19Gv4Z_6p;)^7wmG?f`R zj^~jtB_epLsh^H1bIWOvC3W z{&sx^nkl)K^i6c@w3y(@Z?yRuLzy>j#7$q2q8zQ>m50&bpOr(kx~Y@f8PT9OhAq@j zo4c`UMzPV|FqAOZnty@0z>PeT=^W|8Iq2HsypI(|GshLKlKX`#RYi5Xwyc$U!u@A6 zTm-*;?IvFLzxu|)NroRP^NVMa1|`Vt^ZcW)K5#Q$2)xj-U`oKYj8M@qyiD<4{3sU- z8g7xYa-Vl(qS6Hpv*1%GZ}I#i7F)y)O?pecK*0PYC-r#H?|Zg8NkIZM|*gywD7_WZLl#v(G3 z4J|c8@-4u*3H*C(PonJJGDEBVV})qWPtjp^?U_TTSYSBPvYyO{^a&IQ`s-Hh{fP~Z z`Rf43&fklwm|wnP#|*}6mUa#~R4V~XAS2eb0w;E`2VjIwnI{A)PCLG!^z*oz{wKm6 z9|gF9Z~s+^rHN40cG!KKkL8U+`X-^q`<8~kp>i2p1Mks6?DF*RaQ`7)5G16 zoLAXln(@id=-^SRJM%1a(^OOlKr@_{<9yb>n5A5L3hjKV$bLYGab1$jl0Zbh0ndz) z0mzFBBt|oyl!3o-M_qeITe_eg+Df3kfz0~9nnHq^Hn}LDdJ2UY075J`h1j7uHuV{pUfkQgs< z@BrAE--!hM#@_mQ>p2A!rV#c0C`%4B9>4G7?icz?8EHYgH`DPSZM8% zLX;Rt4FM|6O3BQnq^Q~xduz|Np|_5mvA!#=!jN|PqIs*PVYa}_>C=D+htdWPB&o1@ zNy_hW_pk_!C#1PBcD48^(O>rvcB5p_Y!Zev@HuPNZYhgWhLz@sdaHJ99JUL-$0+Ix zy()eNwD5{51X}^x$(+OQY1HnVH>&dlF}PyD7>D6JPG9v5QpiDm7*Bn;9*6X9k$uZN zox-)JcmI)vlr2 zX9>#D@v}ZioB9uY96cX8Bb%>bHO!VZcJPAW;%JSLH@GUK!ww5b#6W>LVneT=L=cuh zla?L?%KVPAe#mi=@~r@1$y^|!$Q)0KIz!P&@f+m5iNWoZQ2DCc(=9FUH=e_&Yp`a& ztH6Rox>wo`<#?I&w(_3GHY5!cpN6I)$S<5%e)C`XZ-$7Xz`ja0Jd_p?ldBR*YI!o9 z-KWiMKD(<|`jO*yHAKF5O~-i!P^75W_omY$vsY~Bc;pJLG4B@u0-X@)2Ha3Hy*3ey zj2pQ2Rs2Yl#iA235X9^GIp_^&-%>!g+Jey2!VfRtEi)6z!n#yYu?ly{ozi;w8g(DC z(_B8VL2>}yt-93Mcb(Ag$S}XS_sBsbeR|~Y3gCdeO&+<%kv~LqhLz|o+i&1?;*ru1 zQHneDGu-a72?-5RKksdpH3#tshCJF!nU{}^&hU9MbsEsnT9z+4QI+P@G{lNy98>M+ zm86S*Q`uPMf%SbHyIB&eH*~7~NaQ7eY{`t+V0G{;=S&84csyw4?YP7P{f@?!g*1cv z2Dic4a4J^_{);%mD4E9#wjb4QFU&@VekGj2d6cI!3Tqz5XH2zO-hpK=sJp-{gt@(O zYLKOlTXQcJT|z`bHT}TQ?00)Ki>mQJHp!p+4iix^- zKfb2!({q}Wlhn))`2$hJgBC_-93tuqk_uPvdgNOzEMTBA5woAn)@e%JoRSPjxq6)R zVpDD!$4h$oN6_oVCIY3dcN&w-`eVLCnrVofFEv>@etxmUS!?qV{yq_wN*!!zQDZtV z%~E99G*53@RBDBIs1|%gfyz6FqDQ5tdf^wS?l1INRpV8P&j)X5`RMyI*Jhss{88!{ z{{)7@+~k-Q&XSePqi12xD1&V`iFkGyCz*%Wl`n*hSbhxR0t47;_=^57MzV#LsVfdxLsT?Q1Ip z1tVkXvzQmw;j%|IHpyvqUHQscJr8Xj)TFdV$ZG~P!>N{TusR8t7?9l0G~cR_KZK)Q zl!`|qES@K!4dqjejy<8d>eaw|B7T^)P2}`j-igp3oa0Lo=>Uvs9A4dR>cuuce_pk- zpNI2-dEK+HHEn18eB~OY_`=^A31hwIQe9zbf#}pDQ1y`dgj>D`F8Ew8_v~5u2>fXY z0P(Upz1SZ0aShjgnVXNdXxsqGPNw_^2Wzph--sWY`600ETt32PNkmCzYA&g zNUyale0a;_55o5d(xrg>6hz3$~rGNe3?COZ%Z7;h-pptQLYc{sWXDg%SoQ51pR{hD7j%KDH>8DErK3R_X4aM>E zGvCCjw%4*&ic3cN9>B&A=}DG29@S13BG1`+XI5$qcO=OQ8%2 zC6-cs-He6G#tZO^J-`j_R@oi^ux6s>f4 znwm27e8rx`C-Gd6N#N1sK%53|j4*J);^OZcbm&$rP=u>=dLajuQ1Uv3$9wORBM1~I zHk`#Dm3p>&J$f@v;?^#5RF|yOs6YgMC{+Ygsrl9pxbLXrG2=Y-W&!}{6|MGWIBKSW zeq1*3icsP=d_`=c0!vsw`#UuT?#f!wTFa^dGxk`l->|Vvb=3y~ez-oU6u=UnQPWYS z?xpJdmW}4&$pkj$%5jhz&>ie(CdF|UG@so9l%^EU`lvfwLX&Lfj*Sy))O>|3dFH-U zlDX&UBaY@Uzp1{-W{92tN@&Hil+mF()|TO^FYT3r!vr%Rs+^%>t$C2vTanB-UJ|vT zCxLan4L7WcXrP+BBVbVithir+3ULa_t!wztA{x0T#8>u%wVK{FN$6n7w8#Ei{1yoMiXAxpP z$`6~s9B<+Bi1)j|xKjf*b#>5tqIg4XkHa2!>gk#62JwxGoX^(EPbg*?l%QHkf7L;} zWJm0wPySy^L2iE=1_dG2DmyNH=eQo{O$bwS8Hqi43z7uC-~UOFu)AbrKuyKtT_7-@ zU32H6S)D7LFW;SJ2}x{4_%(n&`_iO3|2~uXpRP4ltP8b0PMIl>LM&>m8p#!~gmR#r?x%UbA<%0e&tS_qoX88djQBYVkD>s?UBJ1#m03 zQ=H1mGT$>FM2yIgRFOnST}AxJy7fe{1NqmA9dcX0_dl6;5=0;zi(7*qm;N?y10=7o zUvE4xwYJN%D~%@~{fGC|()fPn!(SE6zvSs}zD!wsBh@imUA3rtW$Z9L&U8(oH9(W? zB4q|ceV4Fq56k*e#xid+XA_qGWt(Z)j<#xX!u7c64KdiMAnG7$$QJqkA=IeZ>Xo=A z*S@zqsEH|N*{9mXH-UPY7L**_@jvdPr^X(K+#EFTfjU2bHpJ_HbNeEx8EBn2AKCq~ z(+p#ZdCLW4h4d>kQxA^~rccp&obVaOF?V*QDp^%3-Te?oTSzrz=D0i=gC*_{a4z=} zV$*+{IQv6zEnwOP_YQ0qsZ0g9?pb7+5eo^*hZIS8&8FugXk+JcLb7i+PCo#-ML7wj zq|Qw*Qk>%eSS9xJMC3_mY#{rP!ZV%b5G5|Rr&$&oNUX`ivs~# zh;7*=sBI-hIQp1Iofer#ZJmFhjnvC{pbIJ*Ig%O{L<2e`?ttTSJPmxLdt)Vxq--LxI$Dl`FOW`Gm6s3)Qt;(x1plq&mO!eg5(wqE{X_x!DtCy zQs6z?FBI>ko*aG)pk|&Szr=7jG}LjeBM91~reYmg65)J?$enR3qa<*#AxbsAB*^I3Mjq(g!;Tj9apQEusXrD6(D<<;^Bx!(q{i6n_wI)|XYut1=LjX}pRM__E z;%84Z5B6vLupIxr?2_1!^!hXuuN1@S9%d#xb@6hoL0J|>ezF>csLirjW@biH#afvw9u%*cm3EAaFcxWZMtooxkop9e55LLQ75lIwXy$}nxsPb#di zfb$8X9mdc_mgn0WsjQgEM2x)$n#Q8Yz0|cl^W{&J5QMdL@r%^8aXsjuICeIj$^*Bj zX3b5}ERP7>*29E-@5xnZ3fqhKJ#QRgzIyehz4N&lLDN+x{8>Gvm;_(z!^wxjC?cHW z^@CtnL&ZEj=eT;Jy7cksL0Y+P0{~dcRvm)kQA4gazV*(znr9=qx*>`t*4wB^F5e8i zud-c5V&MqtL`;s$lF9Z;J6xhJZ#U%IFtxAXoJSUqD*FIw{^jY*M30L+)uDwrdH>7` zMf&JgtFuy(8iLZMbh-m}r#V+26z16_VR-7xFIYXOjk)M1h5c(-l_H5Kb3H^^7@dqcj3--{{2z5 z(K5e0vYK*>32*O41XmpMq2{W)gxN^V4b4lr6b=u$eT|%Gu>U{-?=MC(@=#iKxE}-5 zoE=+&DjfCP`_{kMF0b_KTnP<;PPFLb0QKxLRVFK>bnJk=Vzmoq0-ycwd#A=6~=x3-rEJl<41{bq@ zx7}ocXapRyweH4?gBkrPVn&J>XF^6Pw?KKX`3p8U?zIIS;2BdNnYX?8>?N2YxiUG6dbiR+=N@o?Rtcs24Ln^K;y?IbO7NjZbl zdeR1q5r@v^{PSVq_ya+OC`2S^O4Sg$r|`%rgk@M+FJxE?3c9QEMJBvaa3T>#rGgJi z3-4eKo8GK>MgU=dVcI{^>GV9xt!o!=J+jt~wzZ5Z>UjZbL9e)D>XdRO*0-?t?~YxP6(+_Kgk&cG#LI%YX*) zb9W)E(vo26w!MlSk~@STsk5F26$tcg{yJeqbw%#Y$F!8`bN#I_6L!5QHw7nU{RiK= z($D19`lF{^X2O%CxI{nmIf=j2S4OvOR=dP~FdytCn}GhfH|Fh_gOSXggB~z1SYK6v zF#!b>pzX@DZL-9cP2#-BE4|@F&3~<0J~b|L*ECnXQ)by9^&})VkQ(+ zI!>WRBknN0M}&t~6xg7HP~CpLbmrSc*SIdjn1vJzf^=e}=>YPo6iWadrD&!xu+c3J zk><&X3gIr(WDcxqoeAxuLC_i-obBj4cicoWrzw(*BNW!S3Zl^id8C-K(PwO$Jui{1 z)@e6#KTHk4c=ybZq^`^R!T zz@&4LDS3IcElu2#?wGiTi1BN`k|WU|c&wBa9gm&)2j3YtZ%HIywMwTdPn#$>v60=* zxwYqlH#L_(q}+H}zB$Ih)qjI1STJT+$$28UD;1d1LJl=3kJY`#T?9y;aKcOyFG+O3 zffrL3Buw~TDevu{a40VB)J*f?B*yI^0n1uBgIqLo#)nhu>A9MV#v<4J-ZTu)niN&K ztRAYU#!nw@{3u)?l7hiL!!4%c8`kXiLlT}|wB(Lm(NjDx=w2H!nIFsM4i9ZB=8MwE z6lK3{&{j}H9&uSQkAm@J^0^xi^$}}`nUEVQJd&2Pkhg`SQ6DB&2rtkRBp5h73ErHV zfEw1Qo^(lBVvX;qR(?(dpS|c-O9m~oy z;Y!T`doM>5{^AFLHqS8~Anm1Ch;<&-e~<{8DT8r$uTd<_=(cv;eV2Hc7dC#~07jB$A) z4qxOjFX+d`HZF2VVGVmGe9TOCl4?IS6P=r^&j3f)5Hgjn;wsG~Fi3a2R>$EB^aJgdiPj=rhuMX9s7aGySkA_8maO(ekBrVu%c zVjOp_tgX7M-#?s-23F3h(B=L3T-%c;M&I>r9?$$%_iw`-!C6+~)X9bU-+@e_7Kv*l z2T%6YmXA^D6x~@6tr<4dA63L@Lk%TBx?m6+){49KP6gV3F5i5NjqHo(=e4GY)?cUL zec154?xSJEm)22&W(@_bCT+n@SY+4h+m}zf|2u->HR?=w_ah8uo393QSWtJ)Js-m~ z#GoAPdjI+JjT!d`lPSW95u=1XGAeRzOs(IyD}ZNcF1=MhYarKWy3x?c9I=?2HyfnU zWo9`wsrC76_gnd6WVuG-kZ0d(fl!$ zjO+KMNb64--yRRE%|8$@52>zly4Q3Zxh({_bfQ~q+^#-ZuapJj(V1MVFbKv>?#lBr z!0s+09Ft2;rDdEUoVMGCbA)J_x@##xNo;P7UDFCnBIJO@bWT~1wRxXSukV0QZxpum9%I~ zSos zUrjh4A=jMCs zZ%{OSTNmByerPsB5~_54oAKbsmqrEwwpH3MP_)IS;b2E z#F13qQQzo9J%7RvQBHmSOqOC5CZ^B8ZeAPrAH`JcwE?zK8&Pwrte6b{CuLGt#fu8Q z+KBs@<4z#0aB{Zv50+#hYd%?o-aImD)IMh(VWsa8#7a~cFl!t_K(vAuKvRTjbjX>x zEBmLR%;k5Ne0K9XP`LIS8&WOz@G$GdpnX>AyM>6L0d$A%mupDCf=0a8!n&e`sQ9wJ z3>Aqk@yydw(7I7MUaDlQL1_ZxSj*)V)k@HxMF}`ge< ztA$vJq=r(YqZ5gLB}dReeWUYzyA~6ymbwTzo0B{Kfk%U6x=VEognXNGA;?}boAUtY z+ua3sz^VQfCtrlz=BCPGV@W&uU&?rpWyR~}evc!e6A6A?*oyIm0iIgFMT6;Sng)u(F6 zLR=(hDoi#nCJtT|>_dBB;pg16WP=s8%}$jOR)cd29Vk}F#&@5Bza|=tfR&69AKUT4 z6_a0KnBl!hI!5v{PC?aaJrPc5w}c|NcXP|L=|mE&lI=qBKQce;No~FqCUAvY@A9@0)K{4jzm;D0o)JR2SR45v46b5qs%}t~N2un1N=^ve+GM4SYNdA&hYD z?>UF<<}+911Lc^WH|`cfsFD48iTO+IVx&mtz~Y=t(400v;X+VZJlg)_hI$2pI}ocu z{yvO6)fj{wJM{dP~V`g%!;K-oz4XmI)x* zuzN7nRt$a_zBR2c80eDPRf2UiBNPHHS^Kske(I>LVYOrX~_%yehN-P zFJDtuFd1@IExSn64qwgvDe} z4I=dsGXI>%Q*V%xg@9b&&e%iI;>nM!x?-DT0-{x|W(#tui$f;`1p>+*sjudUHXuTu zMi<(TV)+EPhcQ$MUkMy0h!n(mY$^WIwtrdVH8<6?4Lo? zRX1U}5D?_l;*jOB_L}URltmz}0E?bP^HjL02Sso+Oq6YR#)kYN)_jt6;ipz+-I3>g)Nv^yB5Ui+HMqvR)f0A zSN!mO1KckVkQyemmVh@ctDMZ8{D6Ks4;um9)!TycEv)8{q{SNewZPs@pFjJ??5$T0 z=ajIYKI9}U`z!-)6^d*Lk~vmwE8w|eE@v;ByQk+USSq{^@M2l_K<2B*1-rt-b*~Kc zaI9Au@FkCeksMf7{^}t0JTZuKXf@zxcT@R)(j2I(y`wo_+7Cp7XwvQ|%3PXUM4Im4 z$W{S%Ajqg}jyg1G++VM-DMPi9k`=gBx2qI2oN*Ox{J+F<8S6^vQG#VxE?@^h9S`%_&WyeX7@k$h5(n}m+ik5o z3a?6``uQFpPN1a&JQdrE=d9EVyMjtFM7sbR5pRbkb9Z>+!o7`$!~wxtLS!ejxE3S{ zHyEuN7vzo=JKAZr28*I3hoy|aOE}GI z(Ym+BNM;6*{sK4L8@MTZzzjBCXbuN!P2u&Bs(1otHm>`-Kq6o@Sn^sLHR>6^E7=^I zhZ4V@k7e3B!S2#*tSZJb1M>wtQ?)*@e>}Lb$LRjxGj=G1Ys+I0s6%rh%>Gi2OIR<9 zJ|^C+0woQ#cBy3Sw6Z>m<(+T43pii5keD3ovsJJM@A#6KQ|O~Qh>*li$!|w& zk#Rouv=tFLw+P&oGUL2C%8zB+!X+<5N$@st?@ycB6XLCOC=X}*H4Flp4yBv6FH-+P3PMm@coK>M zq5bT|eFlzh0%^x?m|WlP1zb541N65F;-E}B^#YNY3s^(rvb^s^Q$E=qVMyZesS`Z~ zRZ$)U?~F#2>Q;);f|VBn^lP_zkffLtRZxl)fXm5-<#Vr`(=MZ z=x?T72RLiIaxgU4;~LFWMdmE_!i5(#sKd+2HuM{5k2(~~aIR~1Yb|&J zJKjaUyY<%7JD8k9YwJeRd-Tn3QMIPJbM0Cif$*gB1inkIf|vka@?bhhsgiL<322_B zA^(>T{VvEIPN&|x*82{8oerOHhzCzS{KF70T?eIM#}UPSr}ZPwnK`SYX-TJprl)uL ztduCmwk(HqtMTbP2cFm-=z}PI=*~m8?vQFu-+sspuwyE8j^b4_^JHz6Z_1h}031T? z)<6ojWpI=}6Rg+)r)Xy&)fs#~az#Nu-N1G|9GQaUB9<#^oC^ z_LhCaE&?9inR6x;uaT!pI~OC=ezzRgrKO)4w&fTp$UzqJ?F)0d8Y%u2;JerHDN*J3 z6cMFqV$ltV{ud=%);YA4V6+QU6Wf_=S)(IXY4j}+oK`2+q@(&f7N%W8p+VA+X$TB% znOBl5i|!$D8R3aXhHB4@z}%dihp!y-0qL;nk1KEk zh<+zK#IK&Jk>j|5`a#w^b6Ptb+uNTddhy{D7~^$?VMgZ^Rl{S$zE1$4u(Rq{#$XYf zH&l2NdL!Zjoe#}SZUqbkxRJB|bJSE?zqjQN*d>3+dfWk@+N$b%N(}N8VkBcgE5>1CC5{ z>R(9|69_Djr4NAMxanRTD&fNuvo?;v(^`e2t8;W9&Oq2X_8re(=%|;TQ;MX;Y(Acs z!*`Xq#o7v@ZSf-LFu0MZkV|hL1ewT@2Ay0bA?Wn(h=*Qg;zDnU>A>=D8k!TKwJAz zM61gf6(&>8cPNZt2H7B-z9PX;E~Li|&6`0iHLuAb@XwRAiY1g&BmTB8#t?#T4ZmYe zCYSXVG*_l^>&VE_J_bDOoO)vL93o5PK4||{5@Q5JLUrJWM7M+TUb{y!eK<(v{njc= zR|II8SbP;-4pBFSOq`BiL{FYi=U>CQRbwenRRreQPKFKbl+E({n><&&WJ8j1?>Q5( zQW@eVw|R6c=frj*k(${ zu6N;@g{QZtaVrQ5XBu#D!>kq;(X2TZk9XMHn0wm5Yk7V6nRo-; zO8(bM*nayQOod4ackt9OB5)^#!Z6$=bMq&Ts6y@NJqh=a$$vxhIz#+NBJMJ3HCyX zx=u*<2!lf5ykK2MWwP1dRB!h!@EsVwN*N^$?w^aa z`V(~TmEDbLs5^70xaj&8@wyyD)V-H92VV3%D1=98OZ1V;1`DD*I}#+7orPxT={wB= z-x&vHs5r`ABlu;MO8?;PO0I%?93hq7n+!{wx}X)gC`hc!a|v)YYURBkp|M>Qo?jX} z*pvmZ`JtSy)TXPAhX5RKIb6xt;$fp?`}{12=N!AUse-tkM02Ag(Xr}o8Z9cvSH4N6 zyqhguoXtqnTvNbK8F0PyDS_N=4v%K$uLn-+f)x65m^2aw$h-lO-_2mN{n%jNRLQwu z-YE%^?3xQ|-N)>dIvMOvvBFU!LF5TVkOd{LplQdtg!@q`pjHRe9t{y5m#P;yV>AGd zaS|#;$~(kF^gsxHyPR3xfei>DKsLA?_7a?pm11;Yqih7A<2eGc*}H#s{L=34OE6U6kW) zyF^hU;e{x?wg5x`3hehzw1x98FB1HNx?(>dg1RjE9uZT23)`qF9(niv63#jdC9bhg_1ta zj(^rtMBhLs$#yuXBixrxcy zw}=Vp7sPxna%M-3ir>8!@rHstLZ70Dq8x<~KV>e?Rt~0JS*}XEvZJP;GqX`EUNm%5 z1q%LcQ2kR@ScA;yI8qx+kEe|t-5r?k06w;^T`%rS1ktC#Z7i-{k|P+=$FeX$=K^Em z(u)A-x}Fz$4rJ4ea6x$5)#cv?OVaYN@QV_21#weu<6KERR$f0=^H&I^)T_K@E2gIjX|VkvqaO$IP(ENIMlDt; zxr-rHZa&fw(B`7dZ@e>`Qs%H5p$9*SlQK|j|D_I}SN4Rm<#8aWL?)s23pBVe7MlLv z!5+@%qB#cl88fhJWeG~Ig%#x^0Wj^!N$ZtB15z4h!9C<3}Ww;E+Her^>CpkkKxP-6>eH86SR?4_w;O z@>wpV_?#Id#wx z>}V#`3DBY<{DI-LaJ$I*@>263ne~_7IJ}(j-xo4L8TPl3(Re*chO@~3)?DG>aNAf= zjjw^-;;B~wi*rbCDAs+BYr{Ty?1Cqlj&nz;(H$l{n^#K?yKjp~RO*Xok2#t6!$)vY zww8rn{cGlCW4>rD(gdgf#zNDQSk+5`S+MYz^Ii>G{;i76w>?}0LLShqk5rR?TB^Q| zI%IIKD}|yd$Y*}U3vMmT?)fXU`54!UFV}H2ZYSv-!c&RFaB!{Yc5Xk=q=Z!MKCs1y zoZ28X!Ip}Arq|K^icaAr_g#rf@cIr48?f(#_B?Vlkvsk#k#8iV$s-^n2Ti{AQVpJ^ zwY%5#&vJF5=xuNZ3NRQYeKOK99HXP^6d}-nRGQL#Le`r^I2E}E8n^A9K8Uo#;NIsO z&-t_;*}o5OGsbV1;LIY4rNyjr zt?ydh>2W7NZQXj_S_19#&5MkPK)busM8GP&RHHF`R2KJmUfl8A55{Y85JLAMJ!0=d zEqi(%%EqhiIDsbcd)qHU?5*fW4hDU`At0GH#nTKG%!Q0(QzUv`S%7K&)60q7uF!@w zg7O&i0v1Kc_`Y~Cx`$6xe;b@VYe(Yz$T$Ag3<~XZhYa%tI;Ujm{W2ydVT&fqpF}|A zfG}?VSzj33-+fJtWp)$rY?ka_jJkp}?Y}b>bq8l`8CP{)B@bWr&sDHH){suUC62rA zEL6sAh*)U{Z9a>E$(j_7OpexEA&Tis@sFuf0esgg;yUEZk=AehAkk~3I|V*mchuBS z3&>5&F9XI$x?x@QdJ?whn zbs@RWjHM}R9-8(gc`80Y$Hs*?W=^0wMWP@;A5J6VPd07K^q{8)5B&rj>*@tsG;GvHjp3BX?bLT6J-+w*Cp6p>!k5s+C!C6@leiepd z(_{`=Dm!}VWbcA1Io%c|sY0Y1f*{E7bzmj4>0RVjRXPPo*qiu1+Edc7A)KJPCHf3xO954WEeDFE;6WWS2MbJe|lT z;*3>o5LXRQs@q__@PCWif=Q?w z6ok-8ZcYXuo<>c+OcX3rW}-bfKP3Zip|L?Mj$pFcygRJVmj_6)(bCAiq_1pGNb`4ar*tfpRR%if`j1Ilq|J^+!gcgkp{~Z>L5>Yc)+=~+D^GiIH zpXoy=HctCpsah-wgT4yMf6o5bCphk{rCF&&t_A-c4CK%J-s)r^3m(aj*LwB7JT(*? zJfYtGt)ga6t!o>WWD$W62{6zq7HH@2`{NZEqMj%hado|hMo$Pz^a0420~Ga~sDP~9j+dzh zX-oiC6tRaSBw9k3oGz}hWOLW_JsX)>acp{q^rR2$3iV3orWF1gWRB3b0oHOaQbm_` ziZT~7%9Xhist-&8EJK`IANvEjg8+mATO-n@E)sd|u-CLj3|7{FA(W6XO6{6rjOPNQ zR^pWgLJgf??8UWHje5PKy$p8-Qv;b9JUlhQR2;sc$O`)v@E~nr*|Q-cW4}I9U=*eT z#Ui3`q|zgVzi57VNJuCl#lcC$ooU)0nhGx`P1dtD42}wD{IJG41`;5-T8rN2c8nYM z-&N+Gl)O{u1Uy{y35pah;pDI|l3WEriCEhD3F|?QLeU-f^j_9#=WjKauhP!5@AHy} zkDMj3^pXaslc&1}BR|?D);?c&W&v03$&UC$Lf z1_*#riR`bpQbZ2k!^UtP$r5@)d&fBYD)R8ZGZ5oZm2wNyd1z5FQ6pgV0UELA@TwGUM zdms76ROofFJ$xH~C#)0zk(lO~q%qy~eKN>&zyAZ%nK#n%#Pa^oaQ9fhvWz(!%wXu) ztEDpqZKBIXQ%sEA5s9#bkvIi-!+9Y5KPYZ={E-1xYijiw*2>*{^`OS694dr~Yy*8E z*Af2+XE_RMU5Aj^A`NSVtiBsL$&1I|kkUwDbQvtt>TqZ z1H7IRpeFJn!2Yk0CiFCTZSC8;8WekQ)ePJC6wsm2@TAX!cN{vy3W}2%K#1;Kjr6%g z^XAguTAL9Iz-HW~Xx8lg&K8yT883i*s}KN2r`G6@59F$*5A)@cxqs~!{7saG#tNib-{#0)a8jogI8qTzq+{l6B_cSf-xF4i(v4jfF zU|Y{cb1W0ET@mRvXD}HA^FR8!0XFDTUwCBK{U`UMowBEoGj^B!0!{zV622fSNZ+-Y zxTvz&zEp2mx`QJz?s7ivz0cskeBC20$^2t|ETG~Al8l|STLKx3skn29t^`0<$->{` zDv^g$_R|9OSqdLKyYLdHx^`S=q^~8G(VgPo>oQl$*$CJ&#PbYS-LWmazS#TfDd5T^+UTe@n{v)W6zJihCE7`^l_Y6*4w<_G;_Oo9|wYs5=`i6 zED+$=cT@wcW z>5p8ycWhcT7ixZG%#sOYh!Qj+*RyqE3AD1I@3HCeG@k?RuQi%M5VR;e%b*WT?iSFU z%F90}G7uU$k#XxcdCg3INBQ7IuTY{7P#jrKoAAPyvH7sH>XVeUI6;j$Kn-)viQ&uL zbFRooxIm2NVDoid$U|k?<}~8!&L=|Vti8!HYzmKa;7%Q63LioeFdegfU&cqBX-r}K&Ocz!E;oVb?a|` zXhlT_79484>i&2wC@S~2*)Bhn?vwY`Ulq7M{%W#i)5yf@HRE9>wZLSZmL3O{RNWq8 zCK#>IkNvsim)rJElcu6RafQ>F%K|`zPPSrx?p0c=XT8rSw{S1tCv1x(o}qr`dO#$Q z_I?pf`Uk!8U01}{)fS7&o{4<-AtyppB&nYzuUqx`%;w+Z8X=^1;m|Nm?*T%few6>t zHRJqnazid+0OG}j+vj{6ux{m}Xe8jgnAy%rs>B5y;OZ`Vn&6w>R&K_rZ4(DH7u z2O6}Y{oX`k+~XRs4ip2GnxUvnvd#a;K#H%y*!NNLI!PFJtEIOcU(*Hp{gaut1`&Z7^tsU3clJB zo4M_ZLIYFEnHsaVW!ln3n&v)8+DKt@4^LU8N!iS?CNrNTn!Mu|*|Z8sTcn#}c($p`#Zeew?k6Pf1!)Li%J{L^6Ye#n^&dsCg_6H^5QoBFg~n*R&fEeA{~WUCx$+uF5yg9VpKD7@M&cX z<8F`mxXoB~4V-K4+~}gl@xF^rTHT>1MLcS^h@Q%@O5I|1@qr*TP(sU96OsjD6jWc|*mDu?{rP%YNsKo(rY?GQ6u{z;dNjI= z7epBqLjStG1-dt0K%ME#wth8KF*J1&O9%ZRib%3}k(D)hO=aI2L9T3U#80*ZBsBg| zApq%myBbf;Z=$*l`p5&>FTy_D#j6I!HGR*P4ve0-vXnoo(_8BTy)$PBiJ!X%%{rw{ zaT#M}`W%wS9f|Vk3LYO4Zrlf{Zm$M4u(~d!U}gz&ge{0OP1&<{I=JE{fSQ{%(E^I7 zI~0O%j39tyz&Dp01}W=v?I9<+t3PC^ZMwKIN&5R1Kc*!cu^bJ@(Gt!HCk!N$G)b=; zccKsr8SehH%bsjtxae==k*!5g@!hgV7rb+t?;Y1UdB}ltS8ahQA#Y|*^$ok-&(FjY zs>tbX;7P!|vsN6L*N_xPfnmYhQ|;p@U$Ly7cmiL%;30P7rx0ytnn@sO3hm&6G(A6gA^0oGwx$G@Ky4-Z{7;I1!zzFp;=b%NOunwa4igr2mwT3Nj?V7qa&eb=uJx zG$VozkS_4Y{)TPrG@7_y?FRh0KJliQ`J;u$>jo<9Fma_=+y>U2jXWEc-LGGf930V^1pzT1WDGA`Tnty`Z7}sgf2m;Z1ef&l4?Iaf z22J;dV`vPj6$=7cvHa)1p~2;Nt$ZA!Z_gru;I?m|9R9?0eQn%5Qo1>F1aErvh8xi8 zFTtmI6gFVCBje~ce9IOuy(ZClhe$m_mwwVI7u6YE?pa>6q#QRSsGY!{HyE6Tq)Va= zM)J3%zWgot4E2@5%FF)&vatrU0pV(jy}sPMgfppO=53hj*+x!+&I*dwFQ;9^S_ccH;#N>W4k28Phs<@al65t&7jVKg9PAF^kprk@+l zuQn^#b5BHVk`q6sk*KSpxdO;ub_s4w3@B-XT#B04sl_uFS+ijN=oRib4PVL}qr7-G zeI#I~UD@aTT_u!xT8iugZZW@$>sc~apej@yQb#}X00000Xr;8500Fu40ivrtwR_)& PJ}?c70ssI200CKAlgwqI diff --git a/data/cchs2012.RData b/data/cchs2012.RData deleted file mode 100644 index fd12840a9a16c0ebffa11ccb4544a6d17d55e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34064 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 diff --git a/data/cchs2013_2014.RData b/data/cchs2013_2014.RData deleted file mode 100644 index 11ded6593e3c63311f7c9e4d7977d780264cfda4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30128 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 diff --git a/data/cchs2014.RData b/data/cchs2014.RData deleted file mode 100644 index 4c2bf1cd4397d2ba06fe395347ac28d527f4adba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31400 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 diff --git a/data/variables.RData b/data/variables.RData deleted file mode 100644 index 171712bd42486305b49cb14d1c228adcd2df3c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5864 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 diff --git a/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv b/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv deleted file mode 100644 index 11a139d4..00000000 --- a/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVarDetails_archived.csv +++ /dev/null @@ -1,1057 +0,0 @@ -variable,dummyVariable,toType,databaseStart,variableStart,fromType,recTo,numValidCat,catLabel,catLabelLong,units,recFrom,catStartLabel,variableStartShortLabel,variableStartLabel,notes -DHHGAGE_A,DHHGAGE_A_cat15_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,1,15,age (12 to 14),age (12 to 14),years,1,12 to 14 years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,2,15,age (15 to 19),age (15 to 19),years,2,15 to 19 years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,3,15,age (20 to 24),age (20 to 24),years,3,20 To 24 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,4,15,age (25 to 29),age (25 to 29),years,4,25 To 29 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,5,15,age (30 to 34),age (30 to 34),years,5,30 To 34 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,6,15,age (35 to 39),age (35 to 39),years,6,35 To 39 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,7,15,age (40 to 44),age (40 to 44),years,7,40 To 44 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,8,15,age (45 to 49),age (45 to 49),years,8,45 To 49 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,9,15,age (50 to 54),age (50 to 54),years,9,50 To 54 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,10,15,age (55 to 59),age (55 to 59),years,10,55 To 59 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_11,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,11,15,age (60 to 64),age (60 to 64),years,11,60 To 64 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_12,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,12,15,age (65 to 69),age (65 to 69),years,12,65 To 69 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_13,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,13,15,age (70 to 74),age (70 to 74),years,13,70 To 74 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_14,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,14,15,age (75 to 79),age (75 to 79),years,14,75 To 79 Years,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_15,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,15,15,age (80 plus),age (80 plus),years,15,80 Years or more,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::a,15,not applicable,not applicable,years,96,not applicable,Age,Age - (G), -DHHGAGE_A,DHHGAGE_A_cat15_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,15,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G),"Not applicable, don't know, refusal, not stated (96-99) were options only in CCHS 2003, but had zero responses" -DHHGAGE_A,DHHGAGE_A_cat15_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,15,else,else,years,else,else,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,1,16,age (12 to 14),age (12 to 14),years,1,12 To 14 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,2,16,age (15 to 17),age (15 to 17),years,2,15 To 17 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,3,16,age (18 to 19),age (18 to 19),years,3,18 To 19 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,4,16,age (20 to 24),age (20 to 24),years,4,20 To 24 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,5,16,age (25 to 29),age (25 to 29),years,5,25 To 29 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,6,16,age (30 to 34),age (30 to 34),years,6,30 To 34 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,7,16,age (35 to 39),age (35 to 39),years,7,35 To 39 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,8,16,age (40 to 44),age (40 to 44),years,8,40 To 44 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,9,16,age (45 to 49),age (45 to 49),years,9,45 To 49 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,10,16,age (50 to 54),age (50 to 54),years,10,50 To 54 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,11,16,age (55 to 59),age (55 to 59),years,11,55 To 59 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_12,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,12,16,age (60 to 64),age (60 to 64),years,12,60 To 64 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_13,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,13,16,age (65 to 69),age (65 to 69),years,13,65 To 69 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_14,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,14,16,age (70 to 74),age (70 to 74),years,14,70 To 74 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_15,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,15,16,age (75 to 79),age (75 to 79),years,15,75 To 79 Years,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_16,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,16,16,age (80 plus),age (80 plus),years,16,80 Years or more,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::a,16,not applicable,not applicable,years,96,not applicable,Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,16,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G), -DHHGAGE_B,DHHGAGE_B_cat16_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,16,else,else,years,else,else,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,13,N/A,Age,converted categorical age (12 to 14),years,1,12 to 14 years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,17,N/A,Age,converted categorical age (15 to 19),years,2,15 to 19 years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,22,N/A,Age,converted categorical age (20 to 24),years,3,20 To 24 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,27,N/A,Age,converted categorical age (25 to 29),years,4,25 To 29 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,32,N/A,Age,converted categorical age (30 to 34),years,5,30 To 34 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,37,N/A,Age,converted categorical age (35 to 39),years,6,35 To 39 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,42,N/A,Age,converted categorical age (40 to 44),years,7,40 To 44 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,47,N/A,Age,converted categorical age (45 to 49),years,8,45 To 49 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,52,N/A,Age,converted categorical age (50 to 54),years,9,50 To 54 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,57,N/A,Age,converted categorical age (55 to 59),years,10,55 To 59 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,62,N/A,Age,converted categorical age (60 to 64),years,11,60 To 64 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,67,N/A,Age,converted categorical age (65 to 69),years,12,65 To 69 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,72,N/A,Age,converted categorical age (70 to 74),years,13,70 To 74 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,77,N/A,Age,converted categorical age (75 to 79),years,14,75 To 79 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,85,N/A,Age,converted categorical age (80 plus),years,15,80 Years or more,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G),"Not applicable, don't know, refusal, not stated (96-99) were options in CCHS 2003, but had zero responses" -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::DHHAGAGE, cchs-82M0013-E-2003-c2-1-General File::DHHCGAGE",cat,NA::b,N/A,else,else,years,else,else,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,13,N/A,Age,converted categorical age (12 to 14),years,1,12 To 14 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,16,N/A,Age,converted categorical age (15 to 17),years,2,15 To 17 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,18.5,N/A,Age,converted categorical age (18 to 19),years,3,18 To 19 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,22,N/A,Age,converted categorical age (20 to 24),years,4,20 To 24 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,27,N/A,Age,converted categorical age (25 to 29),years,5,25 To 29 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,32,N/A,Age,converted categorical age (30 to 34),years,6,30 To 34 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,37,N/A,Age,converted categorical age (35 to 39),years,7,35 To 39 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,42,N/A,Age,converted categorical age (40 to 44),years,8,40 To 44 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,47,N/A,Age,converted categorical age (45 to 49),years,9,45 To 49 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,52,N/A,Age,converted categorical age (50 to 54),years,10,50 To 54 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,57,N/A,Age,converted categorical age (55 to 59),years,11,55 To 59 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,62,N/A,Age,converted categorical age (60 to 64),years,12,60 To 64 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,67,N/A,Age,converted categorical age (65 to 69),years,13,65 To 69 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,72,N/A,Age,converted categorical age (70 to 74),years,14,70 To 74 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,77,N/A,Age,converted categorical age (75 to 79),years,15,75 To 79 Years,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,85,N/A,Age,converted categorical age (80 plus),years,16,80 Years or more,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),Age,Age - (G), -DHHGAGE_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::DHHEGAGE, [DHHGAGE]",cat,NA::b,N/A,else,else,years,else,else,Age,Age - (G), -DHH_SEX,DHH_SEX_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,1,2,Male,Male,N/A,1,Male,Sex,Sex, -DHH_SEX,DHH_SEX_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,2,2,Female,Female,N/A,2,Female,Sex,Sex, -DHH_SEX,DHH_SEX_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Sex,Sex, -DHH_SEX,DHH_SEX_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Sex,Sex, -DHH_SEX,DHH_SEX_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_SEX, cchs-82M0013-E-2003-c2-1-General File::DHHC_SEX, cchs-82M0013-E-2005-c3-1-main-file::DHHE_SEX, [DHH_SEX]",cat,NA::b,2,else,else,N/A,else,else,Sex,Sex, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.118,N/A,Height,converted height (3'8 IN - 44 inches),meters,1,3'8 IN - 44 inches,Height,Height,"2001 and 2003 CCHS use inches, values converted to meters to 3 decimal points" -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.143,N/A,Height,converted height (3'9 IN - 45 inches),meters,2,3'9 IN - 45 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.168,N/A,Height,converted height (3'10 IN - 46 inches),meters,3,3'10 IN - 46 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.194,N/A,Height,converted height (3'11 IN - 47 inches),meters,4,3'11 IN - 47 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.219,N/A,Height,converted height (4'0 IN - 48 inches),meters,5,4'0 IN - 48 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.245,N/A,Height,converted height (4'1 IN - 49 inches),meters,6,4'1 IN - 49 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.270,N/A,Height,converted height (4'2 IN - 50 inches),meters,7,4'2 IN - 50 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.295,N/A,Height,converted height (4'3 IN - 51 inches),meters,8,4'3 IN - 51 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.321,N/A,Height,converted height (4'4 IN - 52 inches),meters,9,4'4 IN - 52 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.346,N/A,Height,converted height (4'5 IN - 53 inches),meters,10,4'5 IN - 53 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.372,N/A,Height,converted height (4'6 IN - 54 inches),meters,11,4'6 IN - 54 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.397,N/A,Height,converted height (4'7 IN - 55 inches),meters,12,4'7 IN - 55 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.422,N/A,Height,converted height (4'8 IN - 56 inches),meters,13,4'8 IN - 56 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.448,N/A,Height,converted height (4'9 IN - 57 inches),meters,14,4'9 IN - 57 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.473,N/A,Height,converted height (4'10 IN - 58 inches),meters,15,4'10 IN - 58 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.499,N/A,Height,converted height (4'11 in - 59 inches),meters,16,4'11 in - 59 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.524,N/A,Height,converted height (5'0 IN - 60 inches),meters,17,5'0 IN - 60 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.549,N/A,Height,converted height (5'1 IN - 61 inches),meters,18,5'1 IN - 61 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.575,N/A,Height,converted height (5'2 IN - 62 inches),meters,19,5'2 IN - 62 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.600,N/A,Height,converted height (5'3 IN - 63 inches),meters,20,5'3 IN - 63 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.626,N/A,Height,converted height (5'4 IN - 64 inches),meters,21,5'4 IN - 64 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.651,N/A,Height,converted height (5'5 IN - 65 inches),meters,22,5'5 IN - 65 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.676,N/A,Height,converted height (5'6 IN - 66 inches),meters,23,5'6 IN - 66 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.702,N/A,Height,converted height (5'7 IN - 67 inches),meters,24,5'7 IN - 67 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.727,N/A,Height,converted height (5'8 IN - 68 inches),meters,25,5'8 IN - 68 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.753,N/A,Height,converted height (5'9 IN - 69 inches),meters,26,5'9 IN - 69 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.778,N/A,Height,converted height (5'10 IN - 70 inches),meters,27,5'10 IN - 70 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.803,N/A,Height,converted height (5'11 IN - 71 inches),meters,28,5'11 IN - 71 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.829,N/A,Height,converted height (6'0 IN - 72 inches),meters,29,6'0 IN - 72 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.854,N/A,Height,converted height (6'1 IN - 73 inches),meters,30,6'1 IN - 73 inches,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,1.930,N/A,Height,converted height (6'2 IN+ - 74+ inches),meters,31,6'2 IN+ - 74+ inches,Height,Height,74+ inches converted to 76 inches -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,NA::a,N/A,not applicable,not applicable,meters,96,not applicable,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,NA::b,N/A,missing,missing,meters,99,not stated (99),Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGHT, cchs-82M0013-E-2003-c2-1-General File::HWTCGHT",cat,NA::b,N/A,else,else,meters,else,else,Height,Height, -HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,copy,N/A,Height,Height,meters,0.914:2.134,Height,Height,"Height (metres)/self-reported - (D,G)",Height is a reported in meters from 2005 CCHS onwards -HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,NA::a,N/A,not applicable,not applicable,meters,9.996,not applicable,Height,"Height (metres)/self-reported - (D,G)", -HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,NA::b,N/A,missing,missing,meters,9.997:9.999,"don't know (9.997), refusal (9.998), not stated (9.999)",Height,"Height (metres)/self-reported - (D,G)", -HWTGHTM,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGHTM, [HWTGHTM] ",cont,NA::b,N/A,else,else,meters,else,else,Height,"Height (metres)/self-reported - (D,G)", -HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,copy,N/A,Weight,Weight - kilograms,kg,27.0:135.0,"Weight - kilograms (D, G)",Weight,"Weight - kilograms (D, G)", -HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,NA::a,N/A,not applicable,not applicable,kg,999.96,not applicable,Weight,"Weight - kilograms (D, G)", -HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,NA::b,N/A,missing,missing,kg,999.97:999.99,don't know (999.97); refusal (999.98); not stated (999.99),Weight,"Weight - kilograms (D, G)", -HWTGWTK,N/A,cont,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK,cont,NA::a,N/A,not applicable,not applicable,kg,996,not applicable,Weight,"Weight - kilograms (D, G)", -HWTGWTK,N/A,cont,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK,cont,NA::b,N/A,missing,missing,kg,997:999,don't know (997); refusal (998); not stated (999),Weight,"Weight - kilograms (D, G)", -HWTGWTK,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGWTK, cchs-82M0013-E-2003-c2-1-General File::HWTCGWTK, cchs-82M0013-E-2005-c3-1-main-file::HWTEGWTK, [HWTGWTK]",cont,NA::b,N/A,else,else,kg,else,else,Weight,"Weight - kilograms (D, G)", -HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI, cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,copy,N/A,BMI,Body Mass Index,kg/m2,11.91:57.9,"BMI / self-report - (D,G)",BMI,"BMI / self-report - (D,G)",CCHS 2001 restricts BMI to ages 20-64 -HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI",cont,NA::a,N/A,not applicable,not applicable,kg/m2,999.6,Not applicable,BMI,"BMI / self-report - (D,G)","CCHS 2001 and 2003 codes not applicable and missing variables as 999.6 and 999.7-999.9 respectively, while CCHS 2005 onwards codes not applicable and missing variables as 999.96 and 999.7-999.99 respectively" -HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI",cont,NA::b,N/A,missing,missing,kg/m2,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),BMI,"BMI / self-report - (D,G)",Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -HWTGBMI,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,NA::a,N/A,not applicable,not applicable,kg/m2,999.96,Not applicable,BMI,"BMI / self-report - (D,G)", -HWTGBMI,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,NA::b,N/A,missing,missing,kg/m2,999.97:999.99,don't know (999.97); refusal (999.98); not stated (999.99),BMI,"BMI / self-report - (D,G)", -HWTGBMI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HWTAGBMI, cchs-82M0013-E-2003-c2-1-General File::HWTCGBMI, cchs-82M0013-E-2005-c3-1-main-file::HWTEGBMI, [HWTGBMI]",cont,NA::b,N/A,else,else,kg/m2,else,else,BMI,"BMI / self-report - (D,G)", -SMKDSTY,SMKDSTY_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,1,6,Daily,Daily smoker,N/A,1:1,Daily,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,2,6,Occassional (former daily),Former daily current occasional smoker,N/A,2:2,Occassional,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,3,6,Always occassional,Never daily current occasional smoker,N/A,3:3,Always occassional,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,4,6,Former daily,Former daily current nonsmoker,N/A,4:4,Former daily,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,5,6,Former occasional,Never daily current nonsmoker (former occasional),N/A,5:5,Former occasional,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,6,6,Never smoked,Never smoked,N/A,6:6,Never smoked,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,NA::b,6,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Smoke status,Type of smoker - (D), -SMKDSTY,SMKDSTY_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKADSTY, cchs-82M0013-E-2003-c2-1-General File::SMKCDSTY, cchs-82M0013-E-2005-c3-1-main-file::SMKEDSTY, [SMKDSTY]",cat,NA::b,6,else,else,N/A,else,else,Smoke status,Type of smoker - (D), -SMKG01C_A,SMKG01C_A_cat10_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,1,10,5 To 11 Years,age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,2,10,12 To 14 Years,age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,3,10,15 To 19 Years,age smoked first whole cigarette (18 to 19),years,3,15 To 19 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,4,10,20 To 24 Years,age smoked first whole cigarette (20 to 24),years,4,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,5,10,25 To 29 Years,age smoked first whole cigarette (25 to 29),years,5,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,6,10,30 To 34 Years,age smoked first whole cigarette (30 to 34),years,6,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,7,10,35 To 39 Years,age smoked first whole cigarette (35 to 39),years,7,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,8,10,40 To 44 Years,age smoked first whole cigarette (40 to 44),years,8,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,9,10,45 To 49 Years,age smoked first whole cigarette (45 to 49),years,9,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,10,10,50 Years or more,age smoked first whole cigarette (50 plus),years,10,50 Years or more,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), -SMKG01C_A,SMKG01C_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,10,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,1,11,5 To 11 Years,age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,2,11,12 To 14 Years,age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,3,11,15 To 17 Years,age smoked first whole cigarette (15 to 17),years,3,15 To 17 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,4,11,18 To 19 Years,age smoked first whole cigarette (18 to 19),years,4,18 To 19 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,5,11,20 To 24 Years,age smoked first whole cigarette (20 to 24),years,5,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,6,11,25 To 29 Years,age smoked first whole cigarette (25 to 29),years,6,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,7,11,30 To 34 Years,age smoked first whole cigarette (30 to 34),years,7,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,8,11,35 To 39 Years,age smoked first whole cigarette (35 to 39),years,8,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,9,11,40 To 44 Years,age smoked first whole cigarette (40 to 44),years,9,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,10,11,45 To 49 Years,age smoked first whole cigarette (45 to 49),years,10,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,11,11,50 Years or more,age smoked first whole cigarette (50 plus),years,11,50 Years or more,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), -SMKG01C_B,SMKG01C_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,11,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,8,N/A,agec1,converted categorical age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,13,N/A,agec1,converted categorical age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,17,N/A,agec1,converted categorical age smoked first whole cigarette (18 to 19),years,3,15 To 19 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,22,N/A,agec1,converted categorical age smoked first whole cigarette (20 to 24),years,4,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,27,N/A,agec1,converted categorical age smoked first whole cigarette (25 to 29),years,5,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,32,N/A,agec1,converted categorical age smoked first whole cigarette (30 to 34),years,6,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,37,N/A,agec1,converted categorical age smoked first whole cigarette (35 to 39),years,7,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,42,N/A,agec1,converted categorical age smoked first whole cigarette (40 to 44),years,8,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,47,N/A,agec1,converted categorical age smoked first whole cigarette (45 to 49),years,9,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,55,N/A,agec1,converted categorical age smoked first whole cigarette (50 plus),years,10,50 Years or more,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG01C, cchs-82M0013-E-2003-c2-1-General File::SMKCG01C",cat,NA::b,N/A,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,8,N/A,agec1,converted categorical age smoked first whole cigarette (5 to 11),years,1,5 To 11 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,13,N/A,agec1,converted categorical age smoked first whole cigarette (12 to 14),years,2,12 To 14 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,16,N/A,agec1,converted categorical age smoked first whole cigarette (15 to 17),years,3,15 To 17 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,18.5,N/A,agec1,converted categorical age smoked first whole cigarette (18 to 19),years,4,18 To 19 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,22,N/A,agec1,converted categorical age smoked first whole cigarette (20 to 24),years,5,20 To 24 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,27,N/A,agec1,converted categorical age smoked first whole cigarette (25 to 29),years,6,25 To 29 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,32,N/A,agec1,converted categorical age smoked first whole cigarette (30 to 34),years,7,30 To 34 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,37,N/A,agec1,converted categorical age smoked first whole cigarette (35 to 39),years,8,35 To 39 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,42,N/A,agec1,converted categorical age smoked first whole cigarette (40 to 44),years,9,40 To 44 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,47,N/A,agec1,converted categorical age smoked first whole cigarette (45 to 49),years,10,45 To 49 Years,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,55,N/A,agec1,converted categorical age smoked first whole cigarette (50 plus),years,11,50 Years or more,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agec1,Age smoked first whole cigarette - (G), -SMKG01C_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG01C, [SMKG01C]",cat,NA::b,N/A,else,else,years,else,else,agec1,Age smoked first whole cigarette - (G), -SMK_01A,SMK_01A_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,1,2,yes,yes,N/A,1,Yes,s100,"In lifetime, smoked 100 or more cigarettes", -SMK_01A,SMK_01A_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,2,2,no,no,N/A,2,No,s100,"In lifetime, smoked 100 or more cigarettes", -SMK_01A,SMK_01A_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,s100,"In lifetime, smoked 100 or more cigarettes", -SMK_01A,SMK_01A_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (97); refusal (98); not stated (99),s100,"In lifetime, smoked 100 or more cigarettes", -SMK_01A,SMK_01A_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_01A, cchs-82M0013-E-2003-c2-1-General File::SMKC_01A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_01A, [SMK_01A]",cat,NA::b,2,else,else,N/A,else,else,s100,"In lifetime, smoked 100 or more cigarettes", -SMKG203_A,SMKG203_A_cat10_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,1,10,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,2,10,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,3,10,15 to 19 Years,age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,4,10,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,5,10,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,6,10,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,7,10,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,8,10,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,9,10,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,10,10,50 Years or more,age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_A,SMKG203_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,10,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,4,11,18 To 19 Years,age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,5,11,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,6,11,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,7,11,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,8,11,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,9,11,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,10,11,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,11,11,50 Years or more,age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::a,11,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,11,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_B,SMKG203_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,11,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,17,N/A,agecigd,converted categorical age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,55,N/A,agecigd,converted categorical age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG203, cchs-82M0013-E-2003-c2-1-General File::SMKCG203",cat,NA::b,N/A,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,16,N/A,agecigd,converted categorical age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,18.5,N/A,agecigd,converted categorical age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,55,N/A,agecigd,converted categorical age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigd,Age started to smoke daily - daily smoker (G), -SMKG203_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG203, [SMKG203]",cat,NA::b,N/A,else,else,years,else,else,agecigd,Age started to smoke daily - daily smoker (G), -SMKG207_A,SMKG207_A_cat10_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,1,10,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,2,10,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,3,10,15 to 19 Years,age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,4,10,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,5,10,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,6,10,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,7,10,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,8,10,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,9,10,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,10,10,50 Years or more,age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::a,10,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,10,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), -SMKG207_A,SMKG207_A_cat10_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,10,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,4,11,18 To 19 Years,age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,5,11,20 To 24 Years,age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,6,11,25 To 29 Years,age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,7,11,30 To 34 Years,age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,8,11,35 To 39 Years,age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,9,11,40 To 44 Years,age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,10,11,45 To 49 Years,age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_11,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,11,11,50 Years or more,age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::a,11,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,11,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), -SMKG207_B,SMKG207_B_cat11_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,11,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,17,N/A,agecigd,converted categorical age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,4,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,5,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,6,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,7,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,8,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,9,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,55,N/A,agecigd,converted categorical age (50 or more) started smoking daily - daily smoker,years,10,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::SMKAG207, cchs-82M0013-E-2003-c2-1-General File::SMKCG207",cat,NA::b,N/A,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,8,N/A,agecigd,converted categorical age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,13,N/A,agecigd,converted categorical age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,16,N/A,agecigd,converted categorical age (15 to 17) started smoking daily - daily smoker,years,3,15 To 17 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,18.5,N/A,agecigd,converted categorical age (18 to 19) started smoking daily - daily smoker,years,4,18 To 19 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,22,N/A,agecigd,converted categorical age (20 to 24) started smoking daily - daily smoker,years,5,20 To 24 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,27,N/A,agecigd,converted categorical age (25 to 29) started smoking daily - daily smoker,years,6,25 To 29 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,32,N/A,agecigd,converted categorical age (30 to 34) started smoking daily - daily smoker,years,7,30 To 34 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,37,N/A,agecigd,converted categorical age (35 to 39) started smoking daily - daily smoker,years,8,35 To 39 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,42,N/A,agecigd,converted categorical age (40 to 44) started smoking daily - daily smoker,years,9,40 To 44 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,47,N/A,agecigd,converted categorical age (45 to 49) started smoking daily - daily smoker,years,10,45 To 49 Years,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,55,N/A,agecigd,converted categorical age (50 plus) started smoking daily - daily smoker,years,11,50 Years or more,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::a,N/A,not applicable,not applicable,years,96,not applicable,agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,N/A,missing,missing,years,97:99,don't know (97); refusal (98); not stated (99),agecigfd,Age started to smoke daily - former daily (G), -SMKG207_cont,N/A,cont,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::SMKEG207, [SMKG207]",cat,NA::b,N/A,else,else,years,else,else,agecigfd,Age started to smoke daily - former daily (G), -SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,copy,N/A,Cigarettes/day - daily ,# of cigarettes smoked daily - daily smoker,cigarettes,1:99,# of cigarettes smoked daily - daily smoker,cigdayd,# of cigarettes smoked daily - daily smoker, -SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,cigdayd,# of cigarettes smoked daily - daily smoker, -SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,NA::b,N/A,missing,missing,cigarettes,997:999,don't know (997); refusal (998); not stated (999),cigdayd,# of cigarettes smoked daily - daily smoker, -SMK_204,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_204, cchs-82M0013-E-2003-c2-1-General File::SMKC_204, cchs-82M0013-E-2005-c3-1-main-file::SMKE_204, [SMK_204]",cont,NA::b,N/A,else,else,cigarettes,else,else,cigdayd,# of cigarettes smoked daily - daily smoker, -SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,copy,N/A,Cigarettes/day - occasional ,# of cigarettes smoked daily - daily smoker,cigarettes,1:60,# of cigarettes smoked daily - occasional smoker,cigdayo,# of cigarettes smoked daily - occasional smoker, -SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,cigdayo,# of cigarettes smoked daily - occasional smoker, -SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,NA::b,N/A,missing,missing,cigarettes,997:999,don't know (997); refusal (998); not stated (999),cigdayo,# of cigarettes smoked daily - occasional smoker, -SMK_05B,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05B, cchs-82M0013-E-2003-c2-1-General File::SMKC_05B, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05B, [SMK_05B]",cont,NA::b,N/A,else,else,cigarettes,else,else,cigdayo,# of cigarettes smoked daily - occasional smoker, -SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,copy,N/A,# days smoked at least 1 cigarette,# days smoked at least 1 cigarette,days,0:30,# days smoked at least 1 cigarette,dayocc,Number of days smoked at least one cigarette - occasional smoker, -SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,NA::a,N/A,not applicable,not applicable,days,96,not applicable,dayocc,Number of days smoked at least one cigarette - occasional smoker, -SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,NA::b,N/A,missing,missing,days,97:99,don't know (97); refusal (98); not stated (99),dayocc,Number of days smoked at least one cigarette - occasional smoker, -SMK_05C,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05C, cchs-82M0013-E-2003-c2-1-General File::SMKC_05C, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05C, [SMK_05C]",cont,NA::b,N/A,else,else,days,else,else,dayocc,Number of days smoked at least one cigarette - occasional smoker, -SMK_05D,SMK_05D_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,1,2,yes,Occasional smoker who previously smoked daily,N/A,1,Yes,evd,Ever smoked cigarettes daily - occasional smoker, -SMK_05D,SMK_05D_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,2,2,no,Occasional smoker never daily,N/A,2,No,evd,Ever smoked cigarettes daily - occasional smoker, -SMK_05D,SMK_05D_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,evd,Ever smoked cigarettes daily - occasional smoker, -SMK_05D,SMK_05D_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),evd,Ever smoked cigarettes daily - occasional smoker, -SMK_05D,SMK_05D_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_05D, cchs-82M0013-E-2003-c2-1-General File::SMKC_05D, cchs-82M0013-E-2005-c3-1-main-file::SMKE_05D, [SMK_05D]",cat,NA::b,2,else,else,N/A,else,else,evd,Ever smoked cigarettes daily - occasional smoker, -SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,copy,N/A,Cigarettes/day - historic daily,Cigarettes/day - historic daily,cigarettes,1:99,# of cigarettes smoke each day - former daily,cigdayf,# of cigarettes smoke each day - former daily, -SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,cigdayf,# of cigarettes smoke each day - former daily, -SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,NA::b,N/A,missing,missing,cigarettes,997:999,don't know (997); refusal (998); not stated (999),cigdayf,# of cigarettes smoke each day - former daily, -SMK_208,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SMKA_208, cchs-82M0013-E-2003-c2-1-General File::SMKC_208, cchs-82M0013-E-2005-c3-1-main-file::SMKE_208, [SMK_208]",cont,NA::b,N/A,else,else,cigarettes,else,else,cigdayf,# of cigarettes smoke each day - former daily, -SMK_09A_A,SMK_09A_A_cat4_1,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,1,4,<1 year,Less than one year ago,years,1,Less than one year ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_A,SMK_09A_A_cat4_2,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,2,4,1 to 2 years,1 year to 2 years ago,years,2,1 year to 2 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_A,SMK_09A_A_cat4_3,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,3,4,3 to 5 years,3 years to 5 years ago,years,3,3 years to 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_A,SMK_09A_A_cat4_4,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,4,4,>5 years,More than 5 years ago,years,4,More than 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_A,SMK_09A_A_cat4_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_A,SMK_09A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_A,SMK_09A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,4,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,1,4,<1 year,Less than one year ago,years,1,Less than 1 year,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,2,4,1 to <2 years,1 year to less than 2 years ago,years,2,1 to <2 years,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,3,4,2 to <3 years,2 years to less than 3 years ago,years,3,2 to <3 years,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,4,4,≥3 years,3 or more years ago,years,4,3 years or more,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_B,SMK_09A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,4,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,0.5,N/A,stpo,converted age - Less than one year ago,years,1,Less than one year ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,1.5,N/A,stpo,converted age - 1 year to 2 years ago,years,2,1 year to 2 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,4,N/A,stpo,converted age - 3 years to 5 years ago,years,3,3 years to 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,6,N/A,stpo,converted age - More than 5 years ago,years,4,More than 5 years ago,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_09A,cat,NA::b,N/A,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,0.5,N/A,stpo,converted age - Less than one year ago,years,1,Less than 1 year,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,1.5,N/A,stpo,converted age - 1 year to less than 2 years ago,years,2,1 to <2 years,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,2.5,N/A,stpo,converted age - 2 years to less than 3 years ago,years,3,2 to <3 years,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,4,N/A,stpo,converted age - 3 or more years ago,years,4,3 years or more,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpd,When did you stop smoking daily - occasional smoker - (G), -SMK_09A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_09A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_09A, [SMK_09A]",cat,NA::b,N/A,else,else,years,else,else,stpd,When did you stop smoking daily - occasional smoker - (G), -SMKG09C,SMKG09C_cat3_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,1,3,3 to 5 years,3 to 5 years,years,1,3 to 5 years,stpdy,Years since stopped smoking daily - former daily, -SMKG09C,SMKG09C_cat3_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,2,3,6 to 10 years,6 to 10 years,years,2,6 to 10 years,stpdy,Years since stopped smoking daily - former daily, -SMKG09C,SMKG09C_cat3_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,3,3,11+ years,11 or more years,years,3,11 or more years,stpdy,Years since stopped smoking daily - former daily, -SMKG09C,SMKG09C_cat3_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,NA::a,3,not applicable,not applicable,years,6,not applicable,stpdy,Years since stopped smoking daily - former daily, -SMKG09C,SMKG09C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,NA::b,3,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpdy,Years since stopped smoking daily - former daily, -SMKG09C,SMKG09C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG09C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG09C, [SMKG09C]",cat,NA::b,3,else,else,years,else,else,stpdy,Years since stopped smoking daily - former daily, -SMK_06A_A,SMK_06A_A_cat4_1,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,1,4,<1 year,Less than one year ago,years,1,Less than one year ago,stpn,When did you stop smoking - never daily, -SMK_06A_A,SMK_06A_A_cat4_2,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,2,4,1 to 2 years,1 year to 2 years ago,years,2,1 year to 2 years ago,stpn,When did you stop smoking - never daily, -SMK_06A_A,SMK_06A_A_cat4_3,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,3,4,3 to 5 years,3 years to 5 years ago,years,3,3 years to 5 years ago,stpn,When did you stop smoking - never daily, -SMK_06A_A,SMK_06A_A_cat4_4,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,4,4,>5 years,More than 5 years ago,years,4,More than 5 years ago,stpn,When did you stop smoking - never daily, -SMK_06A_A,SMK_06A_A_cat4_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, -SMK_06A_A,SMK_06A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, -SMK_06A_A,SMK_06A_A_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,4,else,else,years,else,else,stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,1,4,<1 year,Less than one year ago,years,1,Less than one year ,stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,2,4,1 to 2 years,1 year to less than 2 years ago,years,2,1 year to < 2 years,stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,3,4,2 to 3 years,2 years to less than 3 years ago,years,3,2 years to < 3 years,stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,4,4,≥3 years,3 or more years ago,years,4,3 or more years,stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::a,4,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,4,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, -SMK_06A_B,SMK_06A_B_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,4,else,else,years,else,else,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,0.5,N/A,stpn,converted age - Less than one year ago,years,1,Less than one year ago,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,1.5,N/A,stpn,converted age - 1 year to 2 years ago,years,2,1 year to 2 years ago,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,4,N/A,stpn,converted age - 3 years to 5 years ago,years,3,3 years to 5 years ago,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,6,N/A,stpn,converted age - More than 5 years ago,years,4,More than 5 years ago,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::SMKA_06A,cat,NA::b,N/A,else,else,years,else,else,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,0.5,N/A,stpn,converted age - Less than one year ago,years,1,Less than one year ,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,1.5,N/A,stpn,converted age - 1 year to less than 2 years ago,years,2,1 year to < 2 years,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,2.5,N/A,stpn,converted age - 2 years to less than 3 years ago,years,3,2 years to < 3 years,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,4,N/A,stpn,converted age - 3 or more years ago,years,4,3 or more years,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::a,N/A,not applicable,not applicable,years,6,not applicable,stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,N/A,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpn,When did you stop smoking - never daily, -SMK_06A_cont,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKC_06A, cchs-82M0013-E-2005-c3-1-main-file::SMKE_06A, [SMK_06A]",cat,NA::b,N/A,else,else,years,else,else,stpn,When did you stop smoking - never daily, -SMKG06C,SMKG06C_cat3_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,1,3,3 to 5 years,3 to 5 years,years,1,3 to 5 years,stpny,Years since stopped smoking daily - never daily, -SMKG06C,SMKG06C_cat3_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,2,3,6 to 10 years,6 to 10 years,years,2,6 to 10 years,stpny,Years since stopped smoking daily - never daily, -SMKG06C,SMKG06C_cat3_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,3,3,11+ years,11 or more years,years,3,11 or more years,stpny,Years since stopped smoking daily - never daily, -SMKG06C,SMKG06C_cat3_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,NA::a,3,not applicable,not applicable,years,6,not applicable,stpny,Years since stopped smoking daily - never daily, -SMKG06C,SMKG06C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,NA::b,3,missing,missing,years,7:9,don't know (7); refusal (8); not stated (9),stpny,Years since stopped smoking daily - never daily, -SMKG06C,SMKG06C_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::SMKCG06C, cchs-82M0013-E-2005-c3-1-main-file::SMKEG06C, [SMKG06C]",cat,NA::b,3,else,else,years,else,else,stpny,Years since stopped smoking daily - never daily, -ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,copy,N/A,drinks/week,drinks/week,drinks/week,0:449,drinks per week,drinks/week,Weekly consumption of alcohol,shown as categorical variable in CCHS 2014 cycle -ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,NA::a,N/A,not applicable,not applicable,drinks/week,996,not applicable (996),drinks/week,Weekly consumption of alcohol, -ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,NA::b,N/A,missing,missing,drinks/week,997:999,don't know (997); refusal (998); not stated (999),drinks/week,Weekly consumption of alcohol, -ALWDWKY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDWKY]",cont,NA::b,N/A,else,else,drinks/week,else,else,drinks/week,Weekly consumption of alcohol, -ALW_1,ALW_1_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,1,2,yes,alcohol in the past week,N/A,1,"Past week, had any alcohol",dany,"Past week, had any alcohol", -ALW_1,ALW_1_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,2,2,no,no alcohol in past week,N/A,2,"Past week, had any alcohol",dany,"Past week, had any alcohol", -ALW_1,ALW_1_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,NA::a,2,not applicable,not applicable,N/A,6,Not applicable,dany,"Past week, had any alcohol", -ALW_1,ALW_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),dany,"Past week, had any alcohol", -ALW_1,ALW_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5, [ALW_1]",cat,NA::b,2,else,else,N/A,else,else,dany,"Past week, had any alcohol", -ALC_1,ALC_1_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,1,2,yes,alcohol in the past year,N/A,1,"Past year, have you drank alcohol",d12,"Past year, have you drank alcohol", -ALC_1,ALC_1_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,2,2,no,no alcohol in past week,N/A,2,"Past year, have you drank alcohol",d12,"Past year, have you drank alcohol", -ALC_1,ALC_1_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,NA::a,2,not applicable,not applicable,N/A,6,Not applicable,d12,"Past year, have you drank alcohol", -ALC_1,ALC_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),d12,"Past year, have you drank alcohol", -ALC_1,ALC_1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_1, cchs-82M0013-E-2003-c2-1-General File::ALCC_1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_1, [ALC_1]",cat,NA::b,2,else,else,N/A,else,else,d12,"Past year, have you drank alcohol", -ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,copy,N/A,# of drinks - Sunday,Number of drinks on Sunday,drinks,0:100,Number of drinks on Sunday,DailyConsumptionSunday,Number of drinks on Sunday, -ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionSunday,Number of drinks on Sunday, -ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionSunday,Number of drinks on Sunday, -ALW_2A1,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A1, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A1, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A1, [ALW_2A1]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionSunday,Number of drinks on Sunday, -ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,copy,N/A,# of drinks - Monday,Number of drinks on Monday,drinks,0:100,Number of drinks on Monday,DailyConsumptionMonday,Number of drinks on Monday, -ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionMonday,Number of drinks on Monday, -ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionMonday,Number of drinks on Monday, -ALW_2A2,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A2, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A2, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A2, [ALW_2A2]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionMonday,Number of drinks on Monday, -ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,copy,N/A,# of drinks - Tuesday,Number of drinks on Tuesday,drinks,0:100,Number of drinks on Tuesday,DailyConsumptionTuesday,Number of drinks on Tuesday, -ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionTuesday,Number of drinks on Tuesday, -ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionTuesday,Number of drinks on Tuesday, -ALW_2A3,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A3, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A3, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A3, [ALW_2A3]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionTuesday,Number of drinks on Tuesday, -ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,copy,N/A,# of drinks - Wednesday,Number of drinks on Wednesday,drinks,0:100,Number of drinks on Wednesday,DailyConsumptionWednesday,Number of drinks on Wednesday, -ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionWednesday,Number of drinks on Wednesday, -ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionWednesday,Number of drinks on Wednesday, -ALW_2A4,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A4, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A4, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A4, [ALW_2A4]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionWednesday,Number of drinks on Wednesday, -ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,copy,N/A,# of drinks - Thursday,Number of drinks on Thursday,drinks,0:100,Number of drinks on Thursday,DailyConsumptionThursday,Number of drinks on Thursday, -ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionThursday,Number of drinks on Thursday, -ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionThursday,Number of drinks on Thursday, -ALW_2A5,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A5, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A5, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A5, [ALW_2A5]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionThursday,Number of drinks on Thursday, -ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,copy,N/A,# of drinks - Friday,Number of drinks on Friday,drinks,0:100,Number of drinks on Friday,DailyConsumptionFriday,Number of drinks on Friday, -ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionFriday,Number of drinks on Friday, -ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionFriday,Number of drinks on Friday, -ALW_2A6,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A6, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A6, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A6, [ALW_2A6]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionFriday,Number of drinks on Friday, -ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,copy,N/A,# of drinks - Saturday,Number of drinks on Saturday,drinks,0:100,Number of drinks on Saturday,DailyConsumptionSaturday,Number of drinks on Saturday, -ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,NA::a,N/A,not applicable,not applicable,drinks,996,not applicable,DailyConsumptionSaturday,Number of drinks on Saturday, -ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,NA::b,N/A,missing,missing,drinks,997:999,don't know (997); refusal (998); not stated (999),DailyConsumptionSaturday,Number of drinks on Saturday, -ALW_2A7,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCA_5A7, cchs-82M0013-E-2003-c2-1-General File::ALCC_5A7, cchs-82M0013-E-2005-c3-1-main-file::ALCE_5A7, [ALW_2A7]",cont,NA::b,N/A,else,else,drinks,else,else,DailyConsumptionSaturday,Number of drinks on Saturday, -ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,copy,N/A,drinks/day,drinks/day,drinks/day,0:64,drinks per day,AverageDailyConsumption,Average daily alcohol consumption,"2007-08, 09-10, 2010, 2012 cycles are categorical" -ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,NA::a,N/A,not applicable,not applicable,drinks/day,996,Not applicable,AverageDailyConsumption,Average daily alcohol consumption, -ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,NA::b,N/A,missing,missing,drinks/day,997:999,don't know (997); refusal (998); not stated (9),AverageDailyConsumption,Average daily alcohol consumption, -ALWDDLY,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::ALCADWKY, cchs-82M0013-E-2003-c2-1-General File::ALCCDWKY, cchs-82M0013-E-2005-c3-1-main-file::ALCEDWKY, [ALWDDLY]",cont,NA::b,N/A,else,else,drinks/day,else,else,AverageDailyConsumption,Average daily alcohol consumption, -ALCDTYP,ALCDTYP_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,1,4,Regular,Regular drinker,N/A,1,Regular drinker,DrinkerType,Type of drinker - (D), -ALCDTYP,ALCDTYP_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,2,4,Occasional,Occasional drinker,N/A,2,Occasional drinker,DrinkerType,Type of drinker - (D), -ALCDTYP,ALCDTYP_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,3,4,Former,Former drinker,N/A,3,Former drinker,DrinkerType,Type of drinker - (D), -ALCDTYP,ALCDTYP_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,4,4,Never drank,Never drank,N/A,4,Never drank,DrinkerType,Type of drinker - (D), -ALCDTYP,ALCDTYP_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,NA::a,4,Not applicable,not applicable,N/A,6,not applicable,DrinkerType,Type of drinker - (D), -ALCDTYP,ALCDTYP_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),DrinkerType,Type of drinker - (D),Don't know (7) and refusal (8) not included in 2001 CCHS -ALCDTYP,ALCDTYP_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::ALCADTYP, cchs-82M0013-E-2003-c2-1-General File::ALCCDTYP, cchs-82M0013-E-2005-c3-1-main-file::ALCEDTYP, [ALNDTYP]",cat,NA::b,4,else,else,N/A,else,else,DrinkerType,Type of drinker - (D), -ALCDTTM,ALCDTTM_cat3_1,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,1,3,Regular,Regular Drinker,N/A,1,Regular Drinker,DrinkType12M,Type of drinker (12 months), -ALCDTTM,ALCDTTM_cat3_2,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,2,3,Occasional,Occasional Drinker,N/A,2,Occasional drinker,DrinkType12M,Type of drinker (12 months), -ALCDTTM,ALCDTTM_cat3_3,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,3,3,No drink 12M,No drink in last 12 months,N/A,3,No drink in the last 12 months,DrinkType12M,Type of drinker (12 months), -ALCDTTM,ALCDTTM_cat3_NA::a,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,DrinkType12M,Type of drinker (12 months), -ALCDTTM,ALCDTTM_cat3_NA::b,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),DrinkType12M,Type of drinker (12 months), -ALCDTTM,ALCDTTM_cat3_NA::b,cat,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[ALCDTTM],cat,NA::b,3,else,else,N/A,else,else,DrinkType12M,Type of drinker (12 months), -FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,copy,N/A,Daily juice,Daily juice,N/A,0:20,Daily consumption - fruit juice - (D),Daily juice,Daily consumption - fruit juice - (D), -FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily juice,Daily consumption - fruit juice - (D), -FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily juice,Daily consumption - fruit juice - (D),Don't know (7) and refusal (8) not included in 2001 CCHS -FVCDJUI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADJUI, cchs-82M0013-E-2003-c2-1-General File::FVCCDJUI, cchs-82M0013-E-2005-c3-1-main-file::FVCEDJUI, [FVCDJUI]",cont,NA::b,N/A,else,else,N/A,else,else,Daily juice,Daily consumption - fruit juice - (D), -FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,copy,N/A,Daily fruit,Daily fruit,N/A,0:20,Daily consumption - fruit - (D),Daily fruit,Daily consumption - fruit - (D), -FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily fruit,Daily consumption - fruit - (D), -FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily fruit,Daily consumption - fruit - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -FVCDFRU,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADFRU, cchs-82M0013-E-2003-c2-1-General File::FVCCDFRU, cchs-82M0013-E-2005-c3-1-main-file::FVCEDFRU, [FVCDFRU]",cont,NA::b,N/A,else,else,N/A,else,else,Daily fruit,Daily consumption - fruit - (D), -FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,copy,N/A,Daily salad,Daily salad,N/A,0:20,Daily consumption - green salad - (D),Daily salad,Daily consumption - green salad - (D), -FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily salad,Daily consumption - green salad - (D), -FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily salad,Daily consumption - green salad - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -FVCDSAL,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADSAL, cchs-82M0013-E-2003-c2-1-General File::FVCCDSAL, cchs-82M0013-E-2005-c3-1-main-file::FVCEDSAL, [FVCDSAL]",cont,NA::b,N/A,else,else,N/A,else,else,Daily salad,Daily consumption - green salad - (D), -FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,copy,N/A,Daily potatoes,Daily potatoes,N/A,0:20,Daily consumption - potatoes - (D),Daily potatoes,Daily consumption - potatoes - (D), -FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily potatoes,Daily consumption - potatoes - (D), -FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily potatoes,Daily consumption - potatoes - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -FVCDPOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADPOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDPOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDPOT, [FVCDPOT]",cont,NA::b,N/A,else,else,N/A,else,else,Daily potatoes,Daily consumption - potatoes - (D), -FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,copy,N/A,Daily carrots,Daily carrots,N/A,0:20,Daily consumption - carrots - (D),Daily carrots,Daily consumption - carrots - (D), -FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily carrots,Daily consumption - carrots - (D), -FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily carrots,Daily consumption - carrots - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -FVCDCAR,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADCAR, cchs-82M0013-E-2003-c2-1-General File::FVCCDCAR, cchs-82M0013-E-2005-c3-1-main-file::FVCEDCAR, [FVCDCAR]",cont,NA::b,N/A,else,else,N/A,else,else,Daily carrots,Daily consumption - carrots - (D), -FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,copy,N/A,Daily other vegetables,Daily other vegetables,N/A,0:20,Daily consumption other vegetables - (D),Daily other vegetables,Daily consumption other vegetables - (D), -FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily other vegetables,Daily consumption other vegetables - (D), -FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily other vegetables,Daily consumption other vegetables - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -FVCDVEG,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADVEG, cchs-82M0013-E-2003-c2-1-General File::FVCCDVEG, cchs-82M0013-E-2005-c3-1-main-file::FVCEDVEG, [FVCDVEG]",cont,NA::b,N/A,else,else,N/A,else,else,Daily other vegetables,Daily consumption other vegetables - (D), -FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,copy,N/A,Daily total fruits and vegetables,Daily total fruits and vegetables,N/A,0:47.3,Daily consumption - total fruits and veg. - (D),Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D), -FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,NA::a,N/A,not applicable,not applicable,N/A,999.6,Not applicable,Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D), -FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,NA::b,N/A,missing,missing,N/A,999.7:999.9,don't know (999.7); refusal (999.8); not stated (999.9),Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D),Don't know (999.7) and refusal (999.8) not included in 2001 CCHS -FVCDTOT,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::FVCADTOT, cchs-82M0013-E-2003-c2-1-General File::FVCCDTOT, cchs-82M0013-E-2005-c3-1-main-file::FVCEDTOT, [FVCDTOT]",cont,NA::b,N/A,else,else,N/A,else,else,Daily total fruits and vegetables,Daily consumption - total fruits and veg. - (D), -PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,copy,N/A,Physical Activity,Average daily leisure time energy expenditure in METs,METS,0:43.5,Daily energy expenditure - (D),Physical Activity,Daily energy expenditure - (D), -PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,NA::a,N/A,not applicable,not applicable,METS,99.6,Not applicable,Physical Activity,Daily energy expenditure - (D), -PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,NA::b,N/A,missing,missing,METS,99.7:99.9,don't know (99.7); refusal (99.8); not stated (99.9),Physical Activity,Daily energy expenditure - (D),Don't know (99.7) and refusal (99.8) not included in 2001 CCHS -PACDEE,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::PACADEE, cchs-82M0013-E-2003-c2-1-General File::PACCDEE, cchs-82M0013-E-2005-c3-1-main-file::PACEDEE, [PACDEE]",cont,NA::b,N/A,else,else,METS,else,else,Physical Activity,Daily energy expenditure - (D), -CCC_031,CCC_031_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,1,2,Asthma,Asthma,N/A,1,Yes (Do you have asthma?),Asthma,Do you have asthma?, -CCC_031,CCC_031_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,2,2,No asthma,No asthma,N/A,2,No (Do you have asthma?),Asthma,Do you have asthma?, -CCC_031,CCC_031_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Asthma,Do you have asthma?, -CCC_031,CCC_031_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Asthma,Do you have asthma?, -CCC_031,CCC_031_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_031, cchs-82M0013-E-2003-c2-1-General File::CCCC_031, cchs-82M0013-E-2005-c3-1-main-file::CCCE_031, [CCC_031]",cat,NA::b,2,else,else,N/A,else,else,Asthma,Do you have asthma?, -CCC_051,CCC_051_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,1,2,Arthritis/Rheumatism,Arthritis/Rheumatism,N/A,1,Yes (Do you have arthritis or rheumatism?),Arthritis/Rheumatism,Do you have arthritis or rheumatism?, -CCC_051,CCC_051_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,2,2,No Arthritis/Rheumatism,No Arthritis/Rheumatism,N/A,2,No (Do you have arthritis or rheumatism?),Arthritis/Rheumatism,Do you have arthritis or rheumatism?, -CCC_051,CCC_051_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Arthritis/Rheumatism,Do you have arthritis or rheumatism?, -CCC_051,CCC_051_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Arthritis/Rheumatism,Do you have arthritis or rheumatism?, -CCC_051,CCC_051_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_051, cchs-82M0013-E-2003-c2-1-General File::CCCC_051, cchs-82M0013-E-2005-c3-1-main-file::CCCE_051, [CCC_051]",cat,NA::b,2,else,else,N/A,else,else,Arthritis/Rheumatism,Do you have arthritis or rheumatism?, -CCC_131,CCC_131_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,1,2,Cancer,Cancer,N/A,1,Yes (Do you have cancer?),Cancer,Do you have cancer, -CCC_131,CCC_131_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,2,2,No Cancer,No Cancer,N/A,2,No (Do you have cancer?),Cancer,Do you have cancer, -CCC_131,CCC_131_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Cancer,Do you have cancer, -CCC_131,CCC_131_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Cancer,Do you have cancer, -CCC_131,CCC_131_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_131, cchs-82M0013-E-2003-c2-1-General File::CCCC_131, cchs-82M0013-E-2005-c3-1-main-file::CCCE_131, [CCC_131]",cat,NA::b,2,else,else,N/A,else,else,Cancer,Do you have cancer, -CCC_101,CCC_101_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,1,2,Diabetes,Diabetes,N/A,1,Yes (Do you have diabetes?),Diabetes,Do you have diabetes, -CCC_101,CCC_101_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,2,2,No Diabetes,No Diabetes,N/A,2,No (Do you have diabetes?),Diabetes,Do you have diabetes, -CCC_101,CCC_101_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Diabetes,Do you have diabetes, -CCC_101,CCC_101_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Diabetes,Do you have diabetes, -CCC_101,CCC_101_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_101, cchs-82M0013-E-2003-c2-1-General File::CCCC_101, cchs-82M0013-E-2005-c3-1-main-file::CCCE_101, [CCC_101]",cat,NA::b,2,else,else,N/A,else,else,Diabetes,Do you have diabetes, -CCC_121,CCC_121_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,1,2,Heart Disease,Heart Disease,N/A,1,Yes (Do you have heart disease?),Heart Disease,Do you have heart disease, -CCC_121,CCC_121_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,2,2,No Heart Disease,No Heart Disease,N/A,2,No (Do you have heart disease?),Heart Disease,Do you have heart disease, -CCC_121,CCC_121_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable ,Heart Disease,Do you have heart disease, -CCC_121,CCC_121_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Heart Disease,Do you have heart disease, -CCC_121,CCC_121_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_121, cchs-82M0013-E-2003-c2-1-General File::CCCC_121, cchs-82M0013-E-2005-c3-1-main-file::CCCE_121, [CCC_121]",cat,NA::b,2,else,else,N/A,else,else,Heart Disease,Do you have heart disease, -CCC_151,CCC_151_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,1,2,Stroke,Stroke,N/A,1,Yes (Do you suffer from the effects of stroke?),Stroke,Do you suffer from effects of stroke, -CCC_151,CCC_151_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,2,2,No Stroke,No Stroke,N/A,2,No (Do you suffer from the effects of stroke?),Stroke,Do you suffer from effects of stroke, -CCC_151,CCC_151_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Stroke,Do you suffer from effects of stroke, -CCC_151,CCC_151_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Stroke,Do you suffer from effects of stroke, -CCC_151,CCC_151_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_151, cchs-82M0013-E-2003-c2-1-General File::CCCC_151, cchs-82M0013-E-2005-c3-1-main-file::CCCE_151, [CCC_151]",cat,NA::b,2,else,else,N/A,else,else,Stroke,Do you suffer from effects of stroke, -CCC_071,CCC_071_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,1,2,Hypertension,Hypertension,N/A,1,Yes (Do you have high blood pressure?),Hypertension,Do you have high blood pressure, -CCC_071,CCC_071_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,2,2,No Hypertension,No Hypertension,N/A,2,No (Do you have high blood pressure?),Hypertension,Do you have high blood pressure, -CCC_071,CCC_071_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Hypertension,Do you have high blood pressure, -CCC_071,CCC_071_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Hypertension,Do you have high blood pressure, -CCC_071,CCC_071_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_071, cchs-82M0013-E-2003-c2-1-General File::CCCC_071, cchs-82M0013-E-2005-c3-1-main-file::CCCE_071, [CCC_071]",cat,NA::b,2,else,else,N/A,else,else,Hypertension,Do you have high blood pressure, -CCC_280,CCC_280_cat2_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,1,2,Has a mood disorder,Has a mood disorder,N/A,1,Yes (Do you have a mood disorder?),Mood disorder,Do you have a mood disorder, -CCC_280,CCC_280_cat2_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,2,2,Does not have a mood disorder,Does not have a mood disorder,N/A,2,No (Do you have a mood disorder?),Mood disorder,Do you have a mood disorder, -CCC_280,CCC_280_cat2_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Mood disorder,Do you have a mood disorder, -CCC_280,CCC_280_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Mood disorder,Do you have a mood disorder, -CCC_280,CCC_280_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::CCCC_280, cchs-82M0013-E-2005-c3-1-main-file::CCCE_280, [CCC_280]",cat,NA::b,2,else,else,N/A,else,else,Mood disorder,Do you have a mood disorder, -CCC_091,CCC_091_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,1,2,COPD/emphysema,COPD/emphysema,N/A,1,"Yes (Do you have COPD(eg bronchitis,emphysema)?)",COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", -CCC_091,CCC_091_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,2,2,No COPD/emphysema,No COPD/emphysema,N/A,2,"No (Do you have COPD(eg bronchitis,emphysema)?)",COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", -CCC_091,CCC_091_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", -CCC_091,CCC_091_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", -CCC_091,CCC_091_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_91B, cchs-82M0013-E-2003-c2-1-General File::CCCC_91B, [CCC_091]",cat,NA::b,2,else,else,N/A,else,else,COPD/emphysema,"Do you have COPD(eg bronchitis,emphysema)", -CCC_91E,CCC_91E_cat2_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,1,2,Emphysema,Emphysema,N/A,1,Yes (Do you have emphysema?),emphysema,Do you have emphysema?, -CCC_91E,CCC_91E_cat2_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,2,2,No emphysema,No emphysema,N/A,2,No (Do you have emphysema?),emphysema,Do you have emphysema?, -CCC_91E,CCC_91E_cat2_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,emphysema,Do you have emphysema?, -CCC_91E,CCC_91E_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),emphysema,Do you have emphysema?, -CCC_91E,CCC_91E_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91E, cchs-E-2007-2008-AnnualComponent::CCC_91E",cat,NA::b,2,else,else,N/A,else,else,emphysema,Do you have emphysema?, -CCC_91F,CCC_91F_cat2_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,1,2,COPD,COPD,N/A,1,Yes (Do you have COPD?),COPD,Do you have COPD?, -CCC_91F,CCC_91F_cat2_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,2,2,No COPD,No COPD,N/A,2,No (Do you have COPD?),COPD,Do you have COPD?, -CCC_91F,CCC_91F_cat2_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,COPD,Do you have COPD?, -CCC_91F,CCC_91F_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),COPD,Do you have COPD?, -CCC_91F,CCC_91F_cat2_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2005-c3-1-main-file::CCCE_91F, cchs-E-2007-2008-AnnualComponent::CCC_91F",cat,NA::b,2,else,else,N/A,else,else,COPD,Do you have COPD?, -CCC_111,CCC_111_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,1,2,Epilepsy,Epilepsy,N/A,1,Yes (Do you have epilepsy?),Epilepsy,Do you have epilepsy?, -CCC_111,CCC_111_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,2,2,No Epilepsy,No Epilepsy,N/A,2,No (Do you have epilepsy?),Epilepsy,Do you have epilepsy?, -CCC_111,CCC_111_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Epilepsy,Do you have epilepsy?, -CCC_111,CCC_111_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Epilepsy,Do you have epilepsy?, -CCC_111,CCC_111_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::CCCA_111, cchs-82M0013-E-2003-c2-1-General File::CCCC_111, cchs-82M0013-E-2005-c3-1-main-file::CCCE_111",cat,NA::b,2,else,else,N/A,else,else,Epilepsy,Do you have epilepsy?, -CCC_171,CCC_171_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,1,2,Bowel disorder,Bowel disorder,N/A,1,Yes (Do you have a bowel disorder?),Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, -CCC_171,CCC_171_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,2,2,No bowel disorder,No bowel disorder,N/A,2,No (Do you have a bowel disorder?),Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, -CCC_171,CCC_171_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, -CCC_171,CCC_171_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, -CCC_171,CCC_171_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_171, cchs-82M0013-E-2003-c2-1-General File::CCCC_171, cchs-82M0013-E-2005-c3-1-main-file::CCCE_171, [CCC_171]",cat,NA::b,2,else,else,N/A,else,else,Bowel disorder,Do you have a bowel disorder such as Crohn's Disease or colitis?, -CCC_251,CCC_251_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,1,2,Chronic fatigue,Chronic fatigue,N/A,1,Yes (Do you have chronic fatigue syndrome?),Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, -CCC_251,CCC_251_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,2,2,No chronic fatigue,No chronic fatigue,N/A,2,No (Do you have chronic fatigue syndrome?),Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, -CCC_251,CCC_251_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, -CCC_251,CCC_251_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, -CCC_251,CCC_251_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::CCCA_251, cchs-82M0013-E-2003-c2-1-General File::CCCC_251, cchs-82M0013-E-2005-c3-1-main-file::CCCE_251, [CCC_251]",cat,NA::b,2,else,else,N/A,else,else,Chronic fatigue syndrome,Do you have chronic fatigue syndrome?, -GEN_01,GEN_01_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,1,5,Excellent,Excellent,N/A,1,Excellent,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,2,5,Very good,Very good,N/A,2,Very good,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,3,5,Good,Good,N/A,3,Good ,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,4,5,Fair,Fair,N/A,4,Fair ,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,5,5,Poor,Poor,N/A,5,Poor,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_01,GEN_01_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_01, cchs-82M0013-E-2003-c2-1-General File::GENC_01, cchs-82M0013-E-2005-c3-1-main-file::GENE_01, [GEN_01]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived health,"In general, would you say your health is (excellent, very good, good, fair or poor)?", -GEN_02A,GEN_02A_cat5_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,1,5,Very satisfied,Very satisfied,N/A,1,Very satisfied,Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,2,5,Satisfied,Satisfied,N/A,2,Satisfied,Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,3,5,Neither satisfied or dissatisfied,Neither satisfied or dissatisfied,N/A,3,Neither satisfied or dissatisfied,Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,4,5,Dissatisfied,Dissatisfied,N/A,4,Dissatisfied,Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_5,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,5,5,Very dissatisfied,Very dissatisfied,N/A,5,Very dissatisfied,Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Satisfication with life,How satisfied are you with your life in general, -GEN_02A,GEN_02A_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2003-c2-1-General File::GENC_02A, cchs-82M0013-E-2005-c3-1-main-file::GENE_02A, [GEN_02A]",cat,NA::b,5,else,else,N/A,else,else,Satisfication with life,How satisfied are you with your life in general, -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,0,11,Very dissatisfied,Very dissatisfied,N/A,0,Very dissatisfied,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,1,11,1,1,N/A,1,1,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,2,11,2,2,N/A,2,2,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,3,11,3,3,N/A,3,3,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,4,11,4,4,N/A,4,4,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,5,11,5,5,N/A,5,5,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,6,11,6,6,N/A,6,6,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,7,11,7,7,N/A,7,7,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,8,11,8,8,N/A,8,8,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,9,11,9,9,N/A,9,9,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,10,11,Very satisfied,Very satisfied,N/A,10,Very satisfied,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,NA::a,11,not applicable,not applicable,N/A,96,not applicable ,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,NA::b,11,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02A2,N/A,cont,"CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[GEN_02A2],cat,NA::b,11,else,else,N/A,else,else,Satisfaction with life in general,"Using a scale of 0 to 10, where 0 means ""very dissatisfied"" and 10 means ""Very satisfied"", how do you feel about life as a whole right now?", -GEN_02B,GEN_02B_cat5_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,1,5,Excellent,Excellent,N/A,1,Excellent,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,2,5,Very good,Very good,N/A,2,Very good,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,3,5,Good,Good,N/A,3,Good,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,4,5,Fair,Fair,N/A,4,Fair,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_5,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,5,5,Poor,Poor,N/A,5,Poor,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_02B,GEN_02B_cat5_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::GENC_02B, cchs-82M0013-E-2005-c3-1-main-file::GENE_02B, [GEN_02B]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived mental health,"In general, would you say your mental health is (excellent, very good, good, fair, poor)?", -GEN_07,GEN_07_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,1,5,Not at all,Not at all,N/A,1,Not at all,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,2,5,Not very,Not very,N/A,2,Not very,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,3,5,A bit,A bit,N/A,3,A bit,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,4,5,Quite a bit,Quite a bit,N/A,4,Quite a bit,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,5,5,Extremely,Extremely,N/A,5,Extremely,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_07,GEN_07_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_07, cchs-82M0013-E-2003-c2-1-General File::GENC_07, cchs-82M0013-E-2005-c3-1-main-file::GENE_07, [GEN_07]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived life stress,"Thinking about the amount of stress in your life, would you say that most days are (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,1,5,Not at all,Not at all,N/A,1,Not at all,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,2,5,Not very,Not very,N/A,2,Not very,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,3,5,A bit,A bit,N/A,3,A bit,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,4,5,Quite a bit,Quite a bit,N/A,4,Quite a bit,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,5,5,Extremely,Extremely,N/A,5,Extremely,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_09,GEN_09_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_09, cchs-82M0013-E-2003-c2-1-General File::GENC_09, cchs-82M0013-E-2005-c3-1-main-file::GENE_09, [GEN_09]",cat,NA::b,5,else,else,N/A,else,else,Self-perceived work stress,"Would you say that most days were (not at all stressful, not very stressful, a bit stressful, quite a bit stressful, extremely stressful)?", -GEN_10,GEN_10_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,1,4,Very strong,Very strong,N/A,1,Very strong,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, -GEN_10,GEN_10_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,2,4,Somewhat strong,Somewhat strong,N/A,2,Somewhat strong,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, -GEN_10,GEN_10_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,3,4,Somewhat weak,Somewhat weak,N/A,3,Somewhat weak,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, -GEN_10,GEN_10_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,4,4,Very weak,Very weak,N/A,4,Very weak,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, -GEN_10,GEN_10_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Sense of belonging in the community,How would you describe your sense of belonging to your local community?, -GEN_10,GEN_10_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GENA_10, cchs-82M0013-E-2003-c2-1-General File::GENC_10, cchs-82M0013-E-2005-c3-1-main-file::GENE_10, [GEN_10]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Sense of belonging in the community,How would you describe your sense of belonging to your local community?, -ADL_01,ADL_01_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", -ADL_01,ADL_01_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,2,2,No,No,N/A,2,No,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", -ADL_01,ADL_01_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", -ADL_01,ADL_01_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", -ADL_01,ADL_01_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6A, cchs-82M0013-E-2003-c2-1-General File::RACC_6A, cchs-82M0013-E-2005-c3-1-main-file::RACE_6A, cchs-E-2007-2008-AnnualComponent::RAC_6A, [ADL_01]",cat,NA::b,2,else,else,N/A,else,else,Needs help - preparing meals,"Because of any condition or health problem, do you need the help of another person in preparing meals?", -ADL_02,ADL_02_cat2_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", -ADL_02,ADL_02_cat2_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,2,2,No,No,N/A,2,No,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", -ADL_02,ADL_02_cat2_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", -ADL_02,ADL_02_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", -ADL_02,ADL_02_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_6B1, cchs-E-2007-2008-AnnualComponent::RAC_6B1, [ADL_02]",cat,NA::b,2,else,else,N/A,else,else,Needs help - getting to appointments,"Because of any physical condition or mental condition or health problem, do you need the help of another person with getting to appointments and running errands such as shopping for groceries?", -ADL_03,ADL_03_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", -ADL_03,ADL_03_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,2,2,No,No,N/A,2,No,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", -ADL_03,ADL_03_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", -ADL_03,ADL_03_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", -ADL_03,ADL_03_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6C, cchs-82M0013-E-2003-c2-1-General File::RACC_6C, cchs-82M0013-E-2005-c3-1-main-file::RACE_6C, cchs-E-2007-2008-AnnualComponent::RAC_6C, [ADL_03]",cat,NA::b,2,else,else,N/A,else,else,Needs help - doing housework,"Because of any condition or health problem, do you need the help of another person in doing normal everyday housework?", -ADL_04,ADL_04_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", -ADL_04,ADL_04_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,2,2,No,No,N/A,2,No,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", -ADL_04,ADL_04_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", -ADL_04,ADL_04_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", -ADL_04,ADL_04_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6E, cchs-82M0013-E-2003-c2-1-General File::RACC_6E, cchs-82M0013-E-2005-c3-1-main-file::RACE_6E, cchs-E-2007-2008-AnnualComponent::RAC_6E, [ADL_04]",cat,NA::b,2,else,else,N/A,else,else,Needs help - personal care,"Because of any condition or health problem, do you need the help of another person in personal care such as washing, dressing or eating?", -ADL_05,ADL_05_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", -ADL_05,ADL_05_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,2,2,No,No,N/A,2,No,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", -ADL_05,ADL_05_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", -ADL_05,ADL_05_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", -ADL_05,ADL_05_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_6F, cchs-82M0013-E-2003-c2-1-General File::RACC_6F, cchs-82M0013-E-2005-c3-1-main-file::RACE_6F, cchs-E-2007-2008-AnnualComponent::RAC_6F, [ADL_05]",cat,NA::b,2,else,else,N/A,else,else,Needs help - moving about inside house,"Because of any condition or health problem, do you need the help of another person in moving about inside the house?", -ADL_06,ADL_06_cat2_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", -ADL_06,ADL_06_cat2_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,2,2,No,No,N/A,2,No,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", -ADL_06,ADL_06_cat2_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", -ADL_06,ADL_06_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", -ADL_06,ADL_06_cat2_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_6G, cchs-82M0013-E-2005-c3-1-main-file::RACE_6G, cchs-E-2007-2008-AnnualComponent::RAC_6G, [ADL_06]",cat,NA::b,2,else,else,N/A,else,else,Needs help - looking after finances,"Because of any physical condition or mental condition or health problem, do you need the help of another person with looking after your personal finances such as making bank transactions or paying bills?", -ADLF6R,ADLF6R_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,1,2,Yes,Yes,N/A,1,Yes,Needs help with at least one task - (F),Needs help with at least one task - (F), -ADLF6R,ADLF6R_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,2,2,No,No,N/A,2,No,Needs help with at least one task - (F),Needs help with at least one task - (F), -ADLF6R,ADLF6R_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Needs help with at least one task - (F),Needs help with at least one task - (F), -ADLF6R,ADLF6R_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Needs help with at least one task - (F),Needs help with at least one task - (F), -ADLF6R,ADLF6R_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACAF6, cchs-82M0013-E-2003-c2-1-General File::RACCF6R, cchs-82M0013-E-2005-c3-1-main-file::RACEF6R, cchs-E-2007-2008-AnnualComponent::RACF6R, [ADLF6R]",cat,NA::b,2,else,else,N/A,else,else,Needs help with at least one task - (F),Needs help with at least one task - (F), -RAC_1,RAC_1_cat3_1,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?",CCHS 2003 codes N/A as 96 and missing as 97-99 -RAC_1,RAC_1_cat3_2,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,2,3,Often,Often,N/A,2,Often,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_3,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,3,3,Never ,Never ,N/A,3,Never ,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_NA::a,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,NA::a,3,not applicable,not applicable,N/A,96,not applicable,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_NA::b,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,NA::b,3,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_NA::b,cat,cchs-82M0013-E-2003-c2-1-General File,cchs-82M0013-E-2003-c2-1-General File::RACC_1,cat,NA::b,3,else,else,N/A,else,else,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,2,3,Often,Often,N/A,2,Often,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,3,3,Never ,Never ,N/A,3,Never ,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_1,RAC_1_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_1, cchs-82M0013-E-2005-c3-1-main-file::RACE_1, [RAC_1]",cat,NA::b,3,else,else,N/A,else,else,Has difficulty with activities,"Do you have any difficulty hearing, seeing, communicating, walking, climbing stairs, bending, learning or doing any similar activities?", -RAC_2A,RAC_2A_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, -RAC_2A,RAC_2A_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,2,3,Often,Often,N/A,2,Often,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, -RAC_2A,RAC_2A_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,3,3,Never ,Never ,N/A,3,Never ,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, -RAC_2A,RAC_2A_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, -RAC_2A,RAC_2A_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, -RAC_2A,RAC_2A_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2A, cchs-82M0013-E-2003-c2-1-General File::RACC_2A, cchs-82M0013-E-2005-c3-1-main-file::RACE_2A, [RAC_2A]",cat,NA::b,3,else,else,N/A,else,else,Reduction - activities at home,Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do at home?, -RAC_2B1,RAC_2B1_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,1,4,Sometimes,Sometimes,N/A,1,Sometimes,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B1,RAC_2B1_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,2,4,Often,Often,N/A,2,Often,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B1,RAC_2B1_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,3,4,Never ,Never ,N/A,3,Never ,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B1,RAC_2B1_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,4,4,Not attend school,Not attend school,N/A,4,Not attend school,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B1,RAC_2B1_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B1,RAC_2B1_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B1,RAC_2B1_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B1, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B1, [RAC_2B1] ",cat,NA::b,4,else,else,N/A,else,else,Long-term cond. reduces act. - school,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at school?", -RAC_2B2,RAC_2B2_cat4_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,1,4,Sometimes,else,N/A,1,Sometimes,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2B2,RAC_2B2_cat4_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,2,4,Often,Often,N/A,2,Often,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2B2,RAC_2B2_cat4_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,3,4,Never ,Never ,N/A,3,Never ,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2B2,RAC_2B2_cat4_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,4,4,Has no job,Has no job,N/A,4,Has no job,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2B2,RAC_2B2_cat4_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2B2,RAC_2B2_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2B2,RAC_2B2_cat4_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACC_2B2, cchs-82M0013-E-2005-c3-1-main-file::RACE_2B2, [RAC_2B2]",cat,NA::b,4,else,else,N/A,else,else,Reduction kind/amount act. - at work,"Does a long-term physical condition or mental condition or health problem, reduce the amount or the kind of activity you can do at work?", -RAC_2C,RAC_2C_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", -RAC_2C,RAC_2C_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,2,3,Often,Often,N/A,2,Often,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", -RAC_2C,RAC_2C_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,3,3,Never ,Never ,N/A,3,Never ,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", -RAC_2C,RAC_2C_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", -RAC_2C,RAC_2C_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", -RAC_2C,RAC_2C_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACA_2C, cchs-82M0013-E-2003-c2-1-General File::RACC_2C, cchs-82M0013-E-2005-c3-1-main-file::RACE_2C, [RAC_2C] ",cat,NA::b,3,else,else,N/A,else,else,Reduction - other activities,"Does a long-term physical condition or mental condition or health problem reduce the amount or the kind of activity you can do in other activities, for example, transportation or leisure?", -RACAG5,RACAG5_cat4_1,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,1,4,Injury,Injury,N/A,1,Injury,Cause of health problem - (G),Cause of health problem - (G),"CCHS 2001 has different categories from other cycles, hence a new variable created" -RACAG5,RACAG5_cat4_2,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,2,4,Disease/illness,Disease/illness,N/A,2,Disease/illness,Cause of health problem - (G),Cause of health problem - (G), -RACAG5,RACAG5_cat4_3,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,3,4,Aging,Aging,N/A,3,Aging,Cause of health problem - (G),Cause of health problem - (G), -RACAG5,RACAG5_cat4_4,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,4,4,Other,Other,N/A,4,Other,Cause of health problem - (G),Cause of health problem - (G), -RACAG5,RACAG5_cat4_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Cause of health problem - (G),Cause of health problem - (G), -RACAG5,RACAG5_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Cause of health problem - (G),Cause of health problem - (G), -RACAG5,RACAG5_cat4_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,cchs-82M0013-E-2001-c1-1-general-file::RACAG5,cat,NA::b,4,else,else,N/A,else,else,Cause of health problem - (G),Cause of health problem - (G), -RACG5,RACG5_cat6_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,1,6,Injury,Injury,N/A,1,Injury,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,2,6,Disease/illness,Disease/illness,N/A,2,Disease/illness,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,3,6,Aging,Aging,N/A,3,Aging,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_4,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,4,6,Existed at birth,Existed at birth,N/A,4,Existed at birth,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_5,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,5,6,Work conditions,Work conditions,N/A,5,Work conditions,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_6,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,6,6,Other,Other,N/A,6,Other,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,NA::b,6,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Cause of health problem,Cause of health problem, -RACG5,RACG5_cat6_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCG5, cchs-82M0013-E-2005-c3-1-main-file::RACEG5, [RACG5] ",cat,NA::b,6,else,else,N/A,else,else,Cause of health problem,Cause of health problem, -RACDIMP,RACDIMP_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Impact of health problems,Impact of health problems, -RACDIMP,RACDIMP_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,2,3,Often,Often,N/A,2,Often,Impact of health problems,Impact of health problems, -RACDIMP,RACDIMP_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,3,3,Never ,Never ,N/A,3,Never ,Impact of health problems,Impact of health problems, -RACDIMP,RACDIMP_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Impact of health problems,Impact of health problems, -RACDIMP,RACDIMP_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Impact of health problems,Impact of health problems, -RACDIMP,RACDIMP_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::RACADIMP, cchs-82M0013-E-2003-c2-1-General File::RACCDIMP, cchs-82M0013-E-2005-c3-1-main-file::RACEDIMP, [RACDIMP]",cat,NA::b,3,else,else,N/A,else,else,Impact of health problems,Impact of health problems, -RACDPAL,RACDPAL_cat3_1,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,1,3,Sometimes,Sometimes,N/A,1,Sometimes,Participation and activity limitation,Participation and activity limitation, -RACDPAL,RACDPAL_cat3_2,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,2,3,Often,Often,N/A,2,Often,Participation and activity limitation,Participation and activity limitation, -RACDPAL,RACDPAL_cat3_3,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,3,3,Never ,Never ,N/A,3,Never ,Participation and activity limitation,Participation and activity limitation, -RACDPAL,RACDPAL_cat3_NA::a,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Participation and activity limitation,Participation and activity limitation, -RACDPAL,RACDPAL_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Participation and activity limitation,Participation and activity limitation, -RACDPAL,RACDPAL_cat3_NA::b,cat,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2003-c2-1-General File::RACCDPAL, cchs-82M0013-E-2005-c3-1-main-file::RACEDPAL, [RACDPAL]",cat,NA::b,3,else,else,N/A,else,else,Participation and activity limitation,Participation and activity limitation, -EDUDR04,EDUDR04_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,1,4,Less than high school,Less than High School,N/A,1,< Than Secondary,Education,Highest level/education - respondent 4 levels - (D),Slight change in wording of categories from CCHS 2011 onwards -EDUDR04,EDUDR04_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,2,4,High school graduate,High School Graduate,N/A,2,Secondary grad,Education,Highest level/education - respondent 4 levels - (D), -EDUDR04,EDUDR04_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,3,4,Some post-secondary education,Some post-secondary education,N/A,3,Other post-sec.,Education,Highest level/education - respondent 4 levels - (D), -EDUDR04,EDUDR04_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,4,4,Post-secondary graduate,Post-secondary graduate,N/A,4,Post-sec. grad,Education,Highest level/education - respondent 4 levels - (D), -EDUDR04,EDUDR04_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Education,Highest level/education - respondent 4 levels - (D), -EDUDR04,EDUDR04_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Education,Highest level/education - respondent 4 levels - (D),CCHS 2001 does not have don't know (7) or refusal (8) -EDUDR04,EDUDR04_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::EDUADR04, cchs-82M0013-E-2003-c2-1-General File::EDUCDR04, cchs-82M0013-E-2005-c3-1-main-file::EDUEDR04, [EDUDR04]",cat,NA::b,4,else,else,N/A,else,else,Education,Highest level/education - respondent 4 levels - (D), -SDCGCBG ,SDCGCBG _cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,1,2,Canada,Canada,N/A,1,Canada,Country of birth - (G),Country of birth - (G), -SDCGCBG ,SDCGCBG _cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,2,2,Other,Other,N/A,2,Other,Country of birth - (G),Country of birth - (G), -SDCGCBG ,SDCGCBG _cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Country of birth - (G),Country of birth - (G), -SDCGCBG ,SDCGCBG _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Country of birth - (G),Country of birth - (G),CCHS 2001 does not have don't know (7) or refusal (8) -SDCGCBG ,SDCGCBG _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGCBG, cchs-82M0013-E-2003-c2-1-General File::SDCCGCBG, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCBG, cchs-82M0013-E-2011-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2012-Annual-component::SDCGCB12, cchs-82M0013-E-2013-2014-Annual-component::SDCGCB13, cchs-82M0013-E-2014-Annual-component::SDCGCB13, [SDCGCBG] ",cat,NA::b,2,else,else,N/A,else,else,Country of birth - (G),Country of birth - (G), -SDCFIMM,SDCFIMM_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,1,2,Yes,Yes,N/A,1,Yes,Immigrant status (D),Are you an immigrant?, -SDCFIMM,SDCFIMM_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,2,2,No,No,N/A,2,No,Immigrant status (D),Are you an immigrant?, -SDCFIMM,SDCFIMM_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Immigrant status (D),Are you an immigrant?, -SDCFIMM,SDCFIMM_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Immigrant status (D),Are you an immigrant?, -SDCFIMM,SDCFIMM_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAFIMM, cchs-82M0013-E-2003-c2-1-General File::SDCCFIMM, cchs-82M0013-E-2005-c3-1-main-file::SDCEFIMM, [SDCFIMM]",cat,NA::b,2,else,else,N/A,else,else,Immigrant status (D),Are you an immigrant?, -SDCGRES ,SDCGRES _cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,1,2,0 to 9 years,0 to 9 years,N/A,1,0 to 9 years,Length in Canada,"Length/time in Canada since imm. (D, G)", -SDCGRES ,SDCGRES _cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,2,2,10 years or more,10 years or more,N/A,2,10 years or more,Length in Canada,"Length/time in Canada since imm. (D, G)", -SDCGRES ,SDCGRES _cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Length in Canada,"Length/time in Canada since imm. (D, G)", -SDCGRES ,SDCGRES _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Length in Canada,"Length/time in Canada since imm. (D, G)","CCHS 2001 missing don't know (7), refusal (8)" -SDCGRES ,SDCGRES _cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRES, cchs-82M0013-E-2003-c2-1-General File::SDCCGRES, cchs-82M0013-E-2005-c3-1-main-file::SDCEGRES, [SDCGRES] ",cat,NA::b,2,else,else,N/A,else,else,Length in Canada,"Length/time in Canada since imm. (D, G)", -SDCGCGT,SDCGCGT_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,1,2,White,White,N/A,1,White,Ethnicity,"Cultural or racial origin - (D, G)", -SDCGCGT,SDCGCGT_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,2,2,Non-white,Non-white,N/A,2,Visible minority,Ethnicity,"Cultural or racial origin - (D, G)", -SDCGCGT,SDCGCGT_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Ethnicity,"Cultural or racial origin - (D, G)", -SDCGCGT,SDCGCGT_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Ethnicity,"Cultural or racial origin - (D, G)","CCHS 2001 missing don't know (7), refusal (8)" -SDCGCGT,SDCGCGT_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::SDCAGRAC, cchs-82M0013-E-2003-c2-1-General File::SDCCGRAC, cchs-82M0013-E-2005-c3-1-main-file::SDCEGCGT, [SDCGCGT] ",cat,NA::b,2,else,else,N/A,else,else,Ethnicity,"Cultural or racial origin - (D, G)", -DHHGMS,DHHGMS_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,1,4,Married,Married,N/A,1,Married,Marital Status,Marital status - (G), -DHHGMS,DHHGMS_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,2,4,Common-law,Common-law,N/A,2,Common-law,Marital Status,Marital status - (G), -DHHGMS,DHHGMS_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,3,4,Widow/Sep/Div,Widow/Sep/Div,N/A,3,Widow/separated/divorced,Marital Status,Marital status - (G), -DHHGMS,DHHGMS_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,4,4,Single/Never mar.,Single,N/A,4,Single/never married,Marital Status,Marital status - (G), -DHHGMS,DHHGMS_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Marital Status,Marital status - (G), -DHHGMS,DHHGMS_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Marital Status,Marital status - (G),"CCHS 2001 missing not applicable (6), don't know (7)" -DHHGMS,DHHGMS_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHAGMS, cchs-82M0013-E-2003-c2-1-General File::DHHCGMS, cchs-82M0013-E-2005-c3-1-main-file::DHHEGMS, [DHHGMS] ",cat,NA::b,4,else,else,N/A,else,else,Marital Status,Marital status - (G), -DHH_OWN,DHH_OWN_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,1,2,Yes,Yes,N/A,1,Yes,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?,"In 2011, CCHS changed wording of responses to (1) owner and (2) renter" -DHH_OWN,DHH_OWN_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,2,2,No,No,N/A,2,No,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, -DHH_OWN,DHH_OWN_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, -DHH_OWN,DHH_OWN_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, -DHH_OWN,DHH_OWN_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DHHA_OWN, cchs-82M0013-E-2003-c2-1-General File::DHHC_OWN, cchs-82M0013-E-2005-c3-1-main-file::DHHE_OWN, [DHH_OWN] ",cat,NA::b,2,else,else,N/A,else,else,Dwelling - owned by a member of hsld,Is this dwelling owned by a member of this household?, -FINF1,FINF1_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,1,2,Yes,Yes,N/A,1,Yes,Some food insecurity in past 12 months,Some food insecurity in past 12 months, -FINF1,FINF1_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,2,2,No,No,N/A,2,No,Some food insecurity in past 12 months,Some food insecurity in past 12 months, -FINF1,FINF1_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Some food insecurity in past 12 months,Some food insecurity in past 12 months, -FINF1,FINF1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Some food insecurity in past 12 months,Some food insecurity in past 12 months, -FINF1,FINF1_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File","cchs-82M0013-E-2001-c1-1-general-file::FINAF1, cchs-82M0013-E-2003-c2-1-General File::FINCF1",cat,NA::b,2,else,else,N/A,else,else,Some food insecurity in past 12 months,Some food insecurity in past 12 months, -FSCDHFS,FSCDHFS_cat4_0,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,0,4,Secure,Secure,N/A,0,Secure,Food security,Household food security status - (D),CCHS 2005 has different categories from other CCHS cycles so new variable created -FSCDHFS,FSCDHFS_cat4_1,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,1,4,Without hunger,Without hunger,N/A,1,Without hunger,Food security,Household food security status - (D), -FSCDHFS,FSCDHFS_cat4_2,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,2,4,W/mod. hunger,With moderate hunger,N/A,2,With moderate hunger,Food security,Household food security status - (D), -FSCDHFS,FSCDHFS_cat4_3,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,3,4,W/severe hunger,With severe hunger,N/A,3,With severe hunger,Food security,Household food security status - (D), -FSCDHFS,FSCDHFS_cat4_NA::a,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,Food security,Household food security status - (D), -FSCDHFS,FSCDHFS_cat4_NA::b,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Food security,Household food security status - (D), -FSCDHFS,FSCDHFS_cat4_NA::b,cat,cchs-82M0013-E-2005-c3-1-main-file,[FSCEDHFS],cat,NA::b,4,else,else,N/A,else,else,Food security,Household food security status - (D), -FSCDHFS2,FSCDHFS2_cat3_0,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,0,3,Food secure,Food secure,N/A,0,Food secure,Food security,Household Food Security Status (HC), -FSCDHFS2,FSCDHFS2_cat3_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,1,3,Mod. food insec.,Mod. food insec.,N/A,1,Moderate food insecurity,Food security,Household Food Security Status (HC), -FSCDHFS2,FSCDHFS2_cat3_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,2,3,Sev. food insec.,Sev. food insec.,N/A,2,Severe food insecurity,Food security,Household Food Security Status (HC), -FSCDHFS2,FSCDHFS2_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Food security,Household Food Security Status (HC), -FSCDHFS2,FSCDHFS2_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Food security,Household Food Security Status (HC), -FSCDHFS2,FSCDHFS2_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[FSCDHFS2],cat,NA::b,3,else,else,N/A,else,else,Food security,Household Food Security Status (HC), -INCGPER,INCGPER_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,1,6,No income,No income,Dollars,1,No income,Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,2,6,"Less than $15,000","Less than $15,000",Dollars,2,"Less than $15,000",Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,3,6,"$15,000-$29,999","$15,000-$29,1000",Dollars,3,"$15,000-$29,999",Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,4,6,"$30,000-$49,999","$30,000-$49,1000",Dollars,4,"$30,000-$49,999",Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,5,6,"$50,000-$79,999","$50,000-$79,1000",Dollars,5,"$50,000-$79,999",Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,6,6,"$80,000 or more","$80,000 or more",Dollars,6,"$80,000 or more",Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,NA::a,6,not applicable,not applicable,Dollars,96,not applicable,Personal income,"Total pers. inc. from all sources (D, G)", -INCGPER,INCGPER_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,NA::b,6,missing,missing,Dollars,97:99,don't know (97); refusal (98); not stated (99),Personal income,"Total pers. inc. from all sources (D, G)",CCHS 2001 missing 97 (don't know) and 98 (refusal) -INCGPER,INCGPER_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::INCAGPER, cchs-82M0013-E-2003-c2-1-General File::INCCGPER, cchs-82M0013-E-2005-c3-1-main-file::INCEGPER, [INCGPER]",cat,NA::b,6,else,else,Dollars,else,else,Personal income,"Total pers. inc. from all sources (D, G)", -INCDRCA,INCDRCA_cat10_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,1,10,Decile 1,Decile 2,N/A,1,Decile 1,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,2,10,Decile 2,Decile 3,N/A,2,Decile 2,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,3,10,Decile 3,Decile 4,N/A,3,Decile 3,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,4,10,Decile 4,Decile 5,N/A,4,Decile 4,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,5,10,Decile 5,Decile 6,N/A,5,Decile 5,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,6,10,Decile 6,Decile 7,N/A,6,Decile 6,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,7,10,Decile 7,Decile 8,N/A,7,Decile 7,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,8,10,Decile 8,Decile 9,N/A,8,Decile 8,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,9,10,Decile 9,Decile 10,N/A,9,Decile 9,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,10,10,Decile 10,Decile 11,N/A,10,Decile 10,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,NA::a,10,not applicable,not applicable,N/A,96,not applicable,Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,NA::b,10,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Household income distribution,Household income distribution - (D), -INCDRCA,INCDRCA_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRCA, [INCDRCA]",cat,NA::b,10,else,else,N/A,else,else,Household income distribution,Household income distribution - (D), -INCDRPR,INCDRPR_cat10_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,1,10,Decile 1,Decile 2,N/A,1,Decile 1,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,2,10,Decile 2,Decile 3,N/A,2,Decile 2,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,3,10,Decile 3,Decile 4,N/A,3,Decile 3,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,4,10,Decile 4,Decile 5,N/A,4,Decile 4,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,5,10,Decile 5,Decile 6,N/A,5,Decile 5,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,6,10,Decile 6,Decile 7,N/A,6,Decile 6,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,7,10,Decile 7,Decile 8,N/A,7,Decile 7,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,8,10,Decile 8,Decile 9,N/A,8,Decile 8,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,9,10,Decile 9,Decile 10,N/A,9,Decile 9,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,10,10,Decile 10,Decile 11,N/A,10,Decile 10,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,NA::a,10,not applicable,not applicable,N/A,96,not applicable,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,NA::b,10,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRPR,INCDRPR_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRPR, [INCDRPR]",cat,NA::b,10,else,else,N/A,else,else,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D), -INCDRRS,INCDRRS_cat10_1,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,1,10,Decile 1,Decile 2,N/A,1,Decile 1,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_2,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,2,10,Decile 2,Decile 3,N/A,2,Decile 2,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_3,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,3,10,Decile 3,Decile 4,N/A,3,Decile 3,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_4,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,4,10,Decile 4,Decile 5,N/A,4,Decile 4,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_5,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,5,10,Decile 5,Decile 6,N/A,5,Decile 5,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_6,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,6,10,Decile 6,Decile 7,N/A,6,Decile 6,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_7,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,7,10,Decile 7,Decile 8,N/A,7,Decile 7,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_8,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,8,10,Decile 8,Decile 9,N/A,8,Decile 8,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_9,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,9,10,Decile 9,Decile 10,N/A,9,Decile 9,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_10,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,10,10,Decile 10,Decile 11,N/A,10,Decile 10,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_NA::a,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,NA::a,10,not applicable,not applicable,N/A,96,not applicable,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,NA::b,10,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Household income distribution health region level,Hhld inc. distribution- hr level - (D), -INCDRRS,INCDRRS_cat10_NA::b,cat,"cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2005-c3-1-main-file::INCEDRRS, [INCDRRS]",cat,NA::b,10,else,else,N/A,else,else,Household income distribution health region level,Hhld inc. distribution- hr level - (D), -SLPG01_A,SLPG01_A_cat12_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,1,12,<2 hours,<2 hours,Hours,1,<2 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,2,12,2-<3 hours,2-<3 hours,Hours,2,2-<3 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,3,12,3-<4 hours,3-<4 hours,Hours,3,3-<4 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,4,12,4-<5 hours,4-<5 hours,Hours,4,4-<5 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,5,12,5-<6 hours,5-<6 hours,Hours,5,5-<6 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,6,12,6-<7 hours,6-<7 hours,Hours,6,6-<7 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,7,12,7-<8 hours,7-<8 hours,Hours,7,7-<8 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,8,12,8-<9 hours,8-<9 hours,Hours,8,8-<9 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,9,12,9-<10 hours,9-<10 hours,Hours,9,9-<10 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,10,12,10-<11 hours,10-<11 hours,Hours,10,10-<11 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_11,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,11,12,11-<12 hours,11-<12 hours,Hours,11,11-<12 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_12,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,12,12,>= 12 hours,>= 12 hours,Hours,12,>= 12 hours,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::a,12,not applicable,not applicable,Hours,96,not applicable,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,12,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_A,SLPG01_A_cat12_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,12,else,else,Hours,else,else,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_1,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,1,11,<2 hours,<2 hours,Hours,1,<2 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?,CCHS 2011-2012 onwards omitted 2-<3 hours category -SLPG01,SLPG01_cat11_2,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,2,11,3-<4 hours,3-<4 hours,Hours,2,3-<4 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_3,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,3,11,4-<5 hours,4-<5 hours,Hours,3,4-<5 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_4,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,4,11,5-<6 hours,5-<6 hours,Hours,4,5-<6 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_5,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,5,11,6-<7 hours,6-<7 hours,Hours,5,6-<7 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_6,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,6,11,7-<8 hours,7-<8 hours,Hours,6,7-<8 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_7,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,7,11,8-<9 hours,8-<9 hours,Hours,7,8-<9 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_8,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,8,11,9-<10 hours,9-<10 hours,Hours,8,9-<10 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_9,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,9,11,10-<11 hours,10-<11 hours,Hours,9,10-<11 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_10,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,10,11,11-<12 hours,11-<12 hours,Hours,10,11-<12 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_11,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,11,11,>= 12 hours,>= 12 hours,Hours,11,>= 12 hours,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_NA::a,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::a,11,not applicable,not applicable,Hours,96,not applicable,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_NA::b,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01,SLPG01_cat11_NA::b,cat,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,else,else,Hours,else,else,Number of hours spent sleeping per night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,1,N/A,Hours,converted hours (<2 hours),Hours,1,converted hours (<2 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,2.5,N/A,Hours,convereted hours (2-<3 hours),Hours,2,convereted hours (2-<3 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,3.5,N/A,Hours,converted hours (3-<4 hours),Hours,3,converted hours (3-<4 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,4.5,N/A,Hours,converted hours (4-<5 hours),Hours,4,converted hours (4-<5 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,5.5,N/A,Hours,converted hours (5-<6 hours),Hours,5,converted hours (5-<6 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,6.5,N/A,Hours,converted hours (6-<7 hours),Hours,6,converted hours (6-<7 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,7.5,N/A,Hours,converted hours (7-<8 hours),Hours,7,converted hours (7-<8 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,8.5,N/A,Hours,converted hours (8-<9 hours),Hours,8,converted hours (8-<9 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,9.5,N/A,Hours,converted hours (9-<10 hours),Hours,9,converted hours (9-<10 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,10.5,N/A,Hours,converted hours (10-<11 hours),Hours,10,converted hours (10-<11 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,11.5,N/A,Hours,converted hours (11-<12 hours),Hours,11,converted hours (11-<12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,13,N/A,Hours,converted hours (>= 12 hours),Hours,12,converted hours (>= 12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::a,N/A,not applicable,not applicable,Hours,96,not applicable,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,N/A,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-E-2007-2008-AnnualComponent","cchs-82M0013-E-2001-c1-1-general-file::GENA_03, cchs-E-2007-2008-AnnualComponent::SLP_01",cat,NA::b,N/A,else,else,Hours,else,else,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,1,11,<2 hours,converted hours (<2 hours),Hours,1,converted hours (<2 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,3.5,11,3-<4 hours,converted hours (3-<4 hours),Hours,2,converted hours (3-<4 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,4.5,11,4-<5 hours,converted hours (4-<5 hours),Hours,3,converted hours (4-<5 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,5.5,11,5-<6 hours,converted hours (5-<6 hours),Hours,4,converted hours (5-<6 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,6.5,11,6-<7 hours,converted hours (6-<7 hours),Hours,5,converted hours (6-<7 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,7.5,11,7-<8 hours,converted hours (7-<8 hours),Hours,6,converted hours (7-<8 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,8.5,11,8-<9 hours,converted hours (8-<9 hours),Hours,7,converted hours (8-<9 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,9.5,11,9-<10 hours,converted hours (9-<10 hours),Hours,8,converted hours (9-<10 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,10.5,11,10-<11 hours,converted hours (10-<11 hours),Hours,9,converted hours (10-<11 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,11.5,11,11-<12 hours,converted hours (11-<12 hours),Hours,10,converted hours (11-<12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,13,11,>= 12 hours,converted hours (>= 12 hours),Hours,11,converted hours (>= 12 hours),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::a,11,not applicable,not applicable,Hours,96,not applicable,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,missing,missing,Hours,97:99,don't know (97); refusal (98); not stated (99),No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLPG01_cont,N/A,cont,"cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLPG01],cat,NA::b,11,else,else,Hours,else,else,No./hours spent sleeping each night,How long do you usually spend sleeping each night?, -SLP_02_A,SLP_02_A_cat3_1,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,1,3,Most of the time,Most of the time,N/A,1,Most of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?,CCHS 2001 has different categories from other cycles -SLP_02_A,SLP_02_A_cat3_2,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,2,3,Sometimes,Sometimes,N/A,2,Sometimes,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02_A,SLP_02_A_cat3_3,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,3,3,Never ,Never ,N/A,3,Never ,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02_A,SLP_02_A_cat3_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02_A,SLP_02_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02_A,SLP_02_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_04],cat,NA::b,3,else,else,N/A,else,else,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_1,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,1,5,None of the time,None of the time,N/A,1,None of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_2,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,2,5,Little of the time,Little of the time,N/A,2,Little of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_3,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,3,5,Some of the time,Some of the time,N/A,3,Some of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_4,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,4,5,Most of the time,Most of the time,N/A,4,Most of the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_5,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,5,5,All the time,All the time,N/A,5,All the time,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_02,SLP_02_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_02],cat,NA::b,5,else,else,N/A,else,else,Freq. - trouble sleeping,How often do you have trouble going to sleep or staying asleep?, -SLP_03_A,SLP_03_A_cat3_1,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,1,3,Most of the time,Most of the time,N/A,1,Most of the time,Freq. - find sleep refreshing,How often do you find your sleep refreshing?,CCHS 2001 has different categories from other cycles -SLP_03_A,SLP_03_A_cat3_2,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,2,3,Sometimes,Sometimes,N/A,2,Sometimes,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03_A,SLP_03_A_cat3_3,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,3,3,Never ,Never ,N/A,3,Never ,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03_A,SLP_03_A_cat3_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03_A,SLP_03_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03_A,SLP_03_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_05],cat,NA::b,3,else,else,N/A,else,else,Freq. - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat5_1,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,1,5,None of the time,None of the time,N/A,1,None of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat5_2,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,2,5,Little of the time,Little of the time,N/A,2,Little of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat5_3,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,3,5,Some of the time,Some of the time,N/A,3,Some of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat5_4,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,4,5,Most of the time,Most of the time,N/A,4,Most of the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat5_5,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,5,5,All the time,All the time,N/A,5,All the time,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_03,SLP_03_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_03],cat,NA::b,3,else,else,N/A,else,else,Frequency - find sleep refreshing,How often do you find your sleep refreshing?, -SLP_04_A,SLP_04_A_cat3_1,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,1,3,Most of the time,Most of the time,N/A,1,Most of the time,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?,CCHS 2001 has different categories from other cycles -SLP_04_A,SLP_04_A_cat3_2,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,2,3,Sometimes,Sometimes,N/A,2,Sometimes,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04_A,SLP_04_A_cat3_3,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,3,3,Never ,Never ,N/A,3,Never ,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04_A,SLP_04_A_cat3_NA::a,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04_A,SLP_04_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04_A,SLP_04_A_cat3_NA::b,cat,cchs-82M0013-E-2001-c1-1-general-file,[GENA_06],cat,NA::b,3,else,else,N/A,else,else,Freq. - find it difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_1,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,1,5,None of the time,None of the time,N/A,1,None of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_2,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,2,5,Little of the time,Little of the time,N/A,2,Little of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_3,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,3,5,Some of the time,Some of the time,N/A,3,Some of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_4,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,4,5,Most of the time,Most of the time,N/A,4,Most of the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_5,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,5,5,All the time,All the time,N/A,5,All the time,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -SLP_04,SLP_04_cat5_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[SLP_04],cat,NA::b,5,else,else,N/A,else,else,Frequency - difficult to stay awake,How often do you find it difficult to stay awake when you want to?, -MED_1P,MED_1P_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,1,2,Yes,Yes,N/A,1,Yes,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?",CCHS 2001 does not provide examples of sleeping pills in its literal question -MED_1P,MED_1P_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,2,2,No,No,N/A,2,No,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", -MED_1P,MED_1P_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", -MED_1P,MED_1P_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", -MED_1P,MED_1P_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::DRGA_1P, cchs-82M0013-E-2003-c2-1-General File::MEDC_1P, cchs-82M0013-E-2005-c3-1-main-file::MEDE_1P, [MED_1P] ",cat,NA::b,2,else,else,N/A,else,else,Medication - sleeping pills,"In the past month, did you take sleeping pills such as Imovane, Nytol or Starnoc?", -PAC_7,PAC_7_cat3_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,1,3,Yes,Yes,N/A,1,Yes,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, -PAC_7,PAC_7_cat3_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,2,3,No,No,N/A,2,No,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, -PAC_7,PAC_7_cat3_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,3,3,No work/no school,No work/no school,N/A,3,No work/no school,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, -PAC_7,PAC_7_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, -PAC_7,PAC_7_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, -PAC_7,PAC_7_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7],cat,NA::b,3,else,else,N/A,else,else,Walked to work or school / last 3 mo.,[Other than the ( X ) times you already reported walking for exercise was there any other time / Was there any time] in the past 3 months when you walked to and from work or school?, -PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,copy,N/A,No. of times/3 mo./walking work/school,No. of times walking work/school,N/A,1:270,No. of times walking work/school,No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, -PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,NA::a,N/A,not applicable,not applicable,N/A,996,not applicable,No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, -PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,NA::b,N/A,missing,missing,N/A,997:999,don't know (997); refusal (998); not stated (999),No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, -PAC_7A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7A],cont,NA::b,N/A,else,else,N/A,else,else,No. of times/3 mo./walking work/school,No. of times/3 mo./walking work/school, -PAC_4A,PAC_4A_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,1,6,None,None,hours/week,1,None,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,2,6,Less than one hour,Less than one hour,hours/week,2,Less than one hour,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,3,6,1-5 hours,1-5 hours,hours/week,3,1-5 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,4,6,6-10 hours,6-10 hours,hours/week,4,6-10 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,5,6,11-20 hours,11-20 hours,hours/week,5,11-20 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,6,6,More than 20 hours,More than 20 hours,hours/week,6,More than 20 hours,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,NA::a,6,not applicable,not applicable,hours/week,96,not applicable,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,NA::b,6,missing,missing,hours/week,97:99,don't know (97); refusal (98); not stated (99),No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_4A,PAC_4A_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4A, cchs-82M0013-E-2003-c2-1-General File::PACC_4A, cchs-82M0013-E-2005-c3-1-main-file::PACE_4A",cat,NA::b,6,else,else,hours/week,else,else,No./hours spent - walking work/school,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands?", -PAC_7B,PAC_7B_cat4_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,1,4,1 to 15 minutes,1 to 15 minutes,mins,1,1 to 15 minutes,Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_7B,PAC_7B_cat4_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,2,4,16 to 30 minutes,16 to 30 minutes,mins,2,16 to 30 minutes,Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_7B,PAC_7B_cat4_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,3,4,31 to 60 minutes,31 to 60 minutes,mins,3,31 to 60 minutes,Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_7B,PAC_7B_cat4_4,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,4,4,More than 1 hour,More than 1 hour,mins,4,More than 1 hour,Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_7B,PAC_7B_cat4_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,NA::a,4,not applicable,not applicable,mins,6,not applicable,Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_7B,PAC_7B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,NA::b,4,missing,missing,mins,7:9,don't know (7); refusal (8); not stated (9),Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_7B,PAC_7B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_7B],cat,NA::b,4,else,else,mins,else,else,Time spent - walking to go work/school,About how much time did you spend on each occasion?, -PAC_8,PAC_8_cat3_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,1,3,Yes,Yes,N/A,1,Yes,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, -PAC_8,PAC_8_cat3_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,2,3,No,No,N/A,2,No,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, -PAC_8,PAC_8_cat3_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,3,3,No work/no school,No work/no school,N/A,3,No work/no school,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, -PAC_8,PAC_8_cat3_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, -PAC_8,PAC_8_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, -PAC_8,PAC_8_cat3_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8],cat,NA::b,3,else,else,N/A,else,else,Bicycled to work or school / last 3 mo.,[Other than the ( X ) times you already reported bicycling was there any other time / Was there any other time] in the past 3 months when you bicycled to and from work or school?, -PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,copy,N/A,No. of times/3 mo./biking work/school,No. of times biking work/school,times/3 mos.,1:200,No. of times biking work/school,No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, -PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,NA::a,N/A,not applicable,not applicable,times/3 mos.,996,not applicable,No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, -PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,NA::b,N/A,missing,missing,times/3 mos.,997:999,don't know (997); refusal (998); not stated (999),No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, -PAC_8A,N/A,cont,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8A],cont,NA::b,N/A,else,else,times/3 mos.,else,else,No. of times/3 mo./bicycl. work/school,No. of times/3 mo./bicycl. work/school, -PAC_4B,PAC_4B_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,1,6,None,None,hours/week,1,None,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,2,6,Less than one hour,Less than one hour,hours/week,2,Less than one hour,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,3,6,1-5 hours,1-5 hours,hours/week,3,1-5 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,4,6,6-10 hours,6-10 hours,hours/week,4,6-10 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,5,6,11-20 hours,11-20 hours,hours/week,5,11-20 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,6,6,More than 20 hours,More than 20 hours,hours/week,6,More than 20 hours,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,NA::a,6,not applicable,not applicable,hours/week,96,not applicable,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,NA::b,6,missing,missing,hours/week,97:99,don't know (97); refusal (98); not stated (99),No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_4B,PAC_4B_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file","cchs-82M0013-E-2001-c1-1-general-file::PACA_4B, cchs-82M0013-E-2003-c2-1-General File::PACC_4B, cchs-82M0013-E-2005-c3-1-main-file::PACE_4B",cat,NA::b,6,else,else,hours/week,else,else,No. of hrs. biking - to work/school,"In a typical week, how much time did you usually spend bicycling to work or to school or while doing errands?", -PAC_8B,PAC_8B_cat4_1,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,1,4,1 to 15 minutes,1 to 15 minutes,mins,1,1 to 15 minutes,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -PAC_8B,PAC_8B_cat4_2,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,2,4,16 to 30 minutes,16 to 30 minutes,mins,2,16 to 30 minutes,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -PAC_8B,PAC_8B_cat4_3,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,3,4,31 to 60 minutes,31 to 60 minutes,mins,3,31 to 60 minutes,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -PAC_8B,PAC_8B_cat4_4,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,4,4,More than 1 hour,More than 1 hour,mins,4,More than 1 hour,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -PAC_8B,PAC_8B_cat4_NA::a,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,NA::a,4,not applicable,not applicable,mins,6,not applicable,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -PAC_8B,PAC_8B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,NA::b,4,missing,missing,mins,7:9,don't know (7); refusal (8); not stated (9),Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -PAC_8B,PAC_8B_cat4_NA::b,cat,"cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component",[PAC_8B],cat,NA::b,4,else,else,mins,else,else,Time spent - bicycl. to go work/school,About how much time did you spend on each occasion?, -HUIGVIS,HUIGVIS_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,1,5,No visual probl.,No visual problems,N/A,1,No visual probl.,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGVIS,HUIGVIS_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,2,5,Corr. by lenses,Corrected by lenses,N/A,2,Corr. by lenses,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGVIS,HUIGVIS_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,3,5,Hypermet/n corr,Hypermetropia/no correction,N/A,3,Hypermet/n corr,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGVIS,HUIGVIS_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,4,5,Myopia/n corr,Myopia/no correction,N/A,4,Myopia/n corr,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGVIS,HUIGVIS_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,5,5,Myopia & hypermet,Myopia & hypermetropia,N/A,5,Myopia & hypermet,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGVIS,HUIGVIS_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGVIS,HUIGVIS_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) -HUIGVIS,HUIGVIS_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGVIS, cchs-82M0013-E-2003-c2-1-General File::HUICGVIS, cchs-82M0013-E-2005-c3-1-main-file::HUIEGVIS, [HUIGVIS] ",cat,NA::b,5,else,else,N/A,else,else,"Vision trouble - function code - (D, G)","Vision trouble - function code - (D, G)", -HUIGHER,HUIGHER_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,1,3,No hearing prob,No hearing problem,N/A,1,No hearing prob,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", -HUIGHER,HUIGHER_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,2,3,Hear corrected,Hearing corrected,N/A,2,Hear corrected,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", -HUIGHER,HUIGHER_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,3,3,Hear n-corrected,Hearing not-corrected,N/A,3,Hear n-corrected,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", -HUIGHER,HUIGHER_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", -HUIGHER,HUIGHER_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) -HUIGHER,HUIGHER_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGHER, cchs-82M0013-E-2003-c2-1-General File::HUICGHER, cchs-82M0013-E-2005-c3-1-main-file::HUIEGHER, [HUIGHER] ",cat,NA::b,3,else,else,N/A,else,else,"Hearing problems - function code (D, G)","Hearing problems - function code (D, G)", -HUIGSPE,HUIGSPE_cat2_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,1,2,No speech prob,No speech problem,N/A,1,No speech prob,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", -HUIGSPE,HUIGSPE_cat2_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,2,2,Part/not underst,Part/not underst,N/A,2,Part/not underst,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", -HUIGSPE,HUIGSPE_cat2_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", -HUIGSPE,HUIGSPE_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,NA::b,2,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) -HUIGSPE,HUIGSPE_cat2_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGSPE, cchs-82M0013-E-2003-c2-1-General File::HUICGSPE, cchs-82M0013-E-2005-c3-1-main-file::HUIEGSPE, [HUIGSPE] ",cat,NA::b,2,else,else,N/A,else,else,"Speech trouble - function code - (D, G)","Speech trouble - function code - (D, G)", -HUIGMOB,HUIGMOB_cat4_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,1,4,No mobil. Prob.,No mobil. Prob.,N/A,1,No mobil. Prob.,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", -HUIGMOB,HUIGMOB_cat4_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,2,4,Mob-no aid req.,Mob-no aid req.,N/A,2,Mob-no aid req.,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", -HUIGMOB,HUIGMOB_cat4_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,3,4,Need mech supp.,Need mech supp.,N/A,3,Need mech supp.,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", -HUIGMOB,HUIGMOB_cat4_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,4,4,Can't walk,Can't walk,N/A,4,Can't walk,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", -HUIGMOB,HUIGMOB_cat4_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,NA::a,4,not applicable,not applicable,N/A,6,not applicable,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", -HUIGMOB,HUIGMOB_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,NA::b,4,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) -HUIGMOB,HUIGMOB_cat4_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGMOB, cchs-82M0013-E-2003-c2-1-General File::HUICGMOB, cchs-82M0013-E-2005-c3-1-main-file::HUIEGMOB, [HUIGMOB]",cat,NA::b,4,else,else,N/A,else,else,"Mobility trouble - function code (D, G)","Mobility trouble - function code (D, G)", -HUIGDEX,HUIGDEX_cat3_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,1,3,No dext prob,No problems,N/A,1,No dext prob,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", -HUIGDEX,HUIGDEX_cat3_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,2,3,Dext/no help,No help needed,N/A,2,Dext/no help,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", -HUIGDEX,HUIGDEX_cat3_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,3,3,Dext/need help,Needs help,N/A,3,Dext/need help,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", -HUIGDEX,HUIGDEX_cat3_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,NA::a,3,not applicable,not applicable,N/A,6,not applicable,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", -HUIGDEX,HUIGDEX_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,NA::b,3,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)",CCHS 2001 does not include don't know (7) or refusal (8) -HUIGDEX,HUIGDEX_cat3_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIAGDEX, cchs-82M0013-E-2003-c2-1-General File::HUICGDEX, cchs-82M0013-E-2005-c3-1-main-file::HUIEGDEX, [HUIGDEX] ",cat,NA::b,3,else,else,N/A,else,else,"Dexterity trouble - function code (D, G)","Dexterity trouble - function code (D, G)", -HUIDEMO,HUIDEMO_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,1,5,Happy in life,Happy in life,N/A,1,Happy in life,Emotional problems - function code - (D),Emotional problems - function code - (D),CCHS 2007 onwards uses emotional levels which coincide with HUI Mark 3 -HUIDEMO,HUIDEMO_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,2,5,Somewhat happy,Somewhat happy,N/A,2,Somewhat happy,Emotional problems - function code - (D),Emotional problems - function code - (D), -HUIDEMO,HUIDEMO_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,3,5,Somewhat unhappy,Somewhat unhappy,N/A,3,Somewhat unhappy,Emotional problems - function code - (D),Emotional problems - function code - (D), -HUIDEMO,HUIDEMO_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,4,5,Very unhappy,Very unhappy,N/A,4,Very unhappy,Emotional problems - function code - (D),Emotional problems - function code - (D), -HUIDEMO,HUIDEMO_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,5,5,Life not worth,Life not worth,N/A,5,Life not worth,Emotional problems - function code - (D),Emotional problems - function code - (D), -HUIDEMO,HUIDEMO_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Emotional problems - function code - (D),Emotional problems - function code - (D), -HUIDEMO,HUIDEMO_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Emotional problems - function code - (D),Emotional problems - function code - (D),CCHS 2001 does not include don't know (7) or refusal (8) -HUIDEMO,HUIDEMO_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADEMO, cchs-82M0013-E-2003-c2-1-General File::HUICDEMO, cchs-82M0013-E-2005-c3-1-main-file::HUIEDEMO, [HUIDEMO]",cat,NA::b,5,else,else,N/A,else,else,Emotional problems - function code - (D),Emotional problems - function code - (D), -HUIDCOG,HUIDCOG_cat6_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,1,6,No cognit prob,No cognition problems,N/A,1,No cognit prob,Cognition prob. - function code - (D),Cognition prob. - function code - (D),CCHS 2007 onwards uses cognition levels which coincide with HUI Mark 3 -HUIDCOG,HUIDCOG_cat6_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,2,6,Little difficult,Little difficulty,N/A,2,Little difficulty,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUIDCOG,HUIDCOG_cat6_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,3,6,Some forgetful,Some forgetful,N/A,3,Some forgetful,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUIDCOG,HUIDCOG_cat6_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,4,6,Forget/dif think,Forgetful/difficulty thinking,N/A,4,Forget/dif think,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUIDCOG,HUIDCOG_cat6_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,5,6,Very forgetful,Very forgetful,N/A,5,Very forgetful,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUIDCOG,HUIDCOG_cat6_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,6,6,Can't remember,Can't remember,N/A,6,Can't remember,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUIDCOG,HUIDCOG_cat6_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUIDCOG,HUIDCOG_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,NA::b,6,missing,missing,N/A,97:99,don't know (97); refusal (98); not stated (99),Cognition prob. - function code - (D),Cognition prob. - function code - (D),CCHS 2001 does not include don't know (97) or refusal (98) -HUIDCOG,HUIDCOG_cat6_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADCOG, cchs-82M0013-E-2003-c2-1-General File::HUICDCOG, cchs-82M0013-E-2005-c3-1-main-file::HUIEDCOG, [HUIDCOG] ",cat,NA::b,6,else,else,N/A,else,else,Cognition prob. - function code - (D),Cognition prob. - function code - (D), -HUPDPAD,HUPDPAD_cat5_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,1,5,No pain/discomf,No pain/discomf,N/A,1,No pain/discomf,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUPDPAD,HUPDPAD_cat5_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,2,5,Doesn't prev act,Doesn't prev act,N/A,2,Doesn't prev act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUPDPAD,HUPDPAD_cat5_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,3,5,Prevents few act,Prevents few act,N/A,3,Prevents few act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUPDPAD,HUPDPAD_cat5_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,4,5,Prev. some act,Prev. some act,N/A,4,Prev. some act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUPDPAD,HUPDPAD_cat5_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,5,5,Prev. most act,Prev. most act,N/A,5,Prev. most act,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUPDPAD,HUPDPAD_cat5_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,NA::a,5,not applicable,not applicable,N/A,6,not applicable,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUPDPAD,HUPDPAD_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,NA::b,5,missing,missing,N/A,7:9,don't know (7); refusal (8); not stated (9),Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D),CCHS 2001 does not include don't know (7) or refusal (8) -HUPDPAD,HUPDPAD_cat5_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADPAD, cchs-82M0013-E-2003-c2-1-General File::HUICDPAD, cchs-82M0013-E-2005-c3-1-main-file::HUIEDPAD, [HUPDPAD] ",cat,NA::b,5,else,else,N/A,else,else,Act. prevent/pain - function code - (D),Act. prevent/pain - function code - (D), -HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,copy,N/A,HUI score,Health Utility Index (HUI3) - (D),N/A,-0.359:1,Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), -HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,NA::a,N/A,not applicable,not applicable,N/A,99.996,not applicable (99.996),Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), -HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,NA::b,N/A,missing,missing,N/A,99.997:99.999,"don't know (99.997), refusal (99.998), not stated (99.999)",Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), -HUIDHSI,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::HUIADHSI, cchs-82M0013-E-2003-c2-1-General File::HUICDHSI, cchs-82M0013-E-2005-c3-1-main-file::HUIEDHSI, [HUIDHSI]",cont,NA::b,N/A,else,else,N/A,else,else,Health Utility Index (HUI3) - (D),Health Utility Index (HUI3) - (D), -GEOGPRV,GEOGPRV_cat11_1,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,1,11,NL,Nfld. & Labrador,N/A,10,Nfld. & Labrador,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_2,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,2,11,PEI,Prince Edward Island,N/A,11,Prince Edward Island,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_3,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,3,11,NS,Nova Scotia,N/A,12,Nova Scotia,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_4,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,4,11,NB,New Brunswick,N/A,13,New Brunswick,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_5,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,5,11,QC,Quebec,N/A,24,Quebec,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_6,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,6,11,ON,Ontario,N/A,35,Ontario,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_7,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,7,11,MB,Manitoba,N/A,46,Manitoba,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_8,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,8,11,SK,Saskatchewan,N/A,47,Saskatchewan,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_9,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,9,11,AB,Alberta,N/A,48,Alberta,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_10,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,10,11,BC,British Columbia,N/A,59,British Columbia,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_11,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,11,11,YT/NT/NU,Yukon/NWT/Nunavut,N/A,60,Yukon/NWT/Nunavut,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_NA::a,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,NA::a,11,not applicable,not applicable,N/A,96,not applicable,Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,NA::b,11,missing,missing,N/A,97:99,"don't know (97), refusal (98), not stated (99)",Province,Province of residence of respondent - (G), -GEOGPRV,GEOGPRV_cat11_NA::b,cat,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","cchs-82M0013-E-2001-c1-1-general-file::GEOAGPRV, cchs-82M0013-E-2003-c2-1-General File::GEOCGPRV, cchs-82M0013-E-2005-c3-1-main-file::GEOEGPRV, [GEOGPRV]",cat,NA::b,11,else,else,N/A,else,else,Province,Province of residence of respondent - (G), -HWTGBMI_derived,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","DerivedVar::[HWTGHTM, HWTGWTK]",N/A,Func::BMI_derived,N/A,N/A,N/A,kg/m2,N/A,N/A,Derived BMI,Derived Body Mass Index,BMI variable derived from the harmonized height and weight variables -PackYears_derived,N/A,cont,"cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","DerivedVar::[SMKDSTY, DHHGAGE_cont, SMK_09A_B, SMKG09C, SMKG203_cont, SMKG207_cont, SMK_204, SMK_05B, SMK_208, SMK_05C, SMKG01C_cont, SMK_01A]",N/A,Func::PackYears_fun,N/A,N/A,N/A,Years,N/A,N/A,PackYears,Smoking pack-years,PackYears variable derived from various harmonized smoking variables -Pct_time_derived,N/A,cont,"cchs-82M0013-E-2001-c1-1-general-file, cchs-82M0013-E-2003-c2-1-General File, cchs-82M0013-E-2005-c3-1-main-file, cchs-E-2007-2008-AnnualComponent, CCHS-82M0013-E-2009-2010-Annualcomponent, CCHS-82M0013-E-2010-AnnualComponent, cchs-82M0013-E-2011-2012-Annual-component, cchs-82M0013-E-2012-Annual-component, cchs-82M0013-E-2013-2014-Annual-component, cchs-82M0013-E-2014-Annual-component","DerivedVar::[DHHGAGE_cont, SDCGCBG, SDCGRES]",N/A,Func::Pct_time_fun,N/A,N/A,N/A,%,N/A,N/A,PctTime,Percentage of time in Canada,"Percent time in Canada derived from Age, immigration status, and time in Canada variables " \ No newline at end of file diff --git a/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv b/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv deleted file mode 100644 index 1dc92257..00000000 --- a/inst/extdata/CCHS MSW/Study Specifications/PoRT MSW - cchsVariables_archived.csv +++ /dev/null @@ -1,135 +0,0 @@ -variable,label,labelLong,section,subject,variableType,units -ADL_01,Help preparing meals,Needs help - preparing meals,health behaviour,Assistance/Difficulty,Categorical,N/A -ADL_02,Help appointments/errands,Needs help - getting to appointments/errands,health behaviour,Assistance/Difficulty,Categorical,N/A -ADL_03,Help housework,Needs help - doing housework,Health behaviour,Assistance/Difficulty,Categorical,N/A -ADL_04,Help personal care,Needs help - personal care,Health behaviour,Assistance/Difficulty,Categorical,N/A -ADL_05,Help move inside house,Needs help - moving about inside house,Health behaviour,Assistance/Difficulty,Categorical,N/A -ADL_06,Help personal finances,Needs help - looking after finances,Health behaviour,Assistance/Difficulty,Categorical,N/A -ADLF6R,Help tasks,Needs help with at least one task - (F),Health behaviour,Assistance/Difficulty,Categorical,N/A -ALC_1,Alcohol past year,"Past year, have you drank alcohol",health behaviour,Alcohol,Categorical,N/A -ALCDTTM,Drinker type 12M,Type of drinker (12 months),health behaviour,Alcohol,Categorical,N/A -ALCDTYP,Drinker type,Type of drinker - (D),health behaviour,Alcohol,Categorical,N/A -ALW_1,Any alcohol past week,"Past week, had any alcohol",health behaviour,Alcohol,Categorical,N/A -ALW_5A1,DailyConsumptionSunday,Number of drinks on Sunday,health behaviour,Alcohol,Continuous,drinks -ALW_5A2,# of drinks - Monday,Number of drinks on Monday,health behaviour,Alcohol,Continuous,drinks -ALW_5A3,# of drinks - Sunday,Number of drinks on Tuesday,health behaviour,Alcohol,Continuous,drinks -ALW_5A4,# of drinks - Sunday,Number of drinks on Wednesday,health behaviour,Alcohol,Continuous,drinks -ALW_5A5,# of drinks - Sunday,Number of drinks on Thursday,health behaviour,Alcohol,Continuous,drinks -ALW_5A6,# of drinks - Sunday,Number of drinks on Friday,health behaviour,Alcohol,Continuous,drinks -ALW_5A7,# of drinks - Sunday,Number of drinks on Saturday,health behaviour,Alcohol,Continuous,drinks -ALWDDLY,Average daily consumption,Average daily alcohol consumption,health behaviour,Alcohol,Continuous,drinks/day -ALWDWKY,Drinks last week,Weekly consumption of alcohol,health behaviour,Alcohol,Continuous,drinks/week -CCC_031,Asthma,Do you have asthma?,chronic disease,Asthma,Categorical,N/A -CCC_051,Arthritis/Rheumatism,Do you have arthritis or rheumatism?,chronic disease,Arthritis/Rheumatism,Categorical,N/A -CCC_071,Hypertension,Do you have high blood pressure,chronic disease,Hypertension,Categorical,N/A -CCC_091,COPD/Emphysema,"Do you have COPD (eg bronchitis, emphysema)",chronic disease,COPD/emphysema,Categorical,N/A -CCC_101,Diabetes,Do you have diabetes,chronic disease,Diabetes,Categorical,N/A -CCC_111,Epilepsy,Do you have epilepsy?,chronic disease,Epilepsy,Categorical,N/A -CCC_121,Heart Disease,Do you have heart disease,chronic disease,Heart Disease,Categorical,N/A -CCC_131,Active Cancer,Do you have cancer,chronic disease,Cancer,Categorical,N/A -CCC_151,Stroke,Do you suffer from effects of stroke,chronic disease,Stroke,Categorical,N/A -CCC_171,Bowel disorder,Do you have a bowel disorder such as Crohn's disease or colitis?,chronic disease,Bowel disorder,Categorical,N/A -CCC_251,Chronic fatigue,Do you have chronic fatigue syndrome?,chronic disease,Chronic fatigue syndrome,Categorical,N/A -CCC_280,Mood disorder,Do you have a mood disorder,chronic disease,Mood disorder,Categorical,N/A -CCC_91E,Emphysema,Do you have emphysema?,chronic disease,Emphysema,Categorical,N/A -CCC_91F,COPD,Do you have COPD?,chronic disease,COPD,Categorical,N/A -DHH_OWN,Home ownership,Dwelling - owned by a member of hsld,Sociodemographic,Home ownership,Categorical,N/A -DHH_SEX,Sex,Sex,demographic,Sex,Categorical,N/A -DHHGAGE_A,Age,Age,demographic,Age,Categorical,Years -DHHGAGE_B,Age,Age,demographic,Age,Categorical,Years -DHHGAGE_cont,Age,Converted categorical age,demographic,Age,Continuous,Years -DHHGMS,Marital status,Marital status - (G),Sociodemographic,Marital Status,Categorical,N/A -EDUDR04,Highest education,Highest level/education,Sociodemographic,Education,Categorical,N/A -FINF1,Food insecurity 12M,Some food insecurity in past 12 months,Sociodemographic,Food security,Categorical,N/A -FSCDHFS,Food security,Household food security status - (D),Sociodemographic,Food security,Categorical,N/A -FSCDHFS2,HC food security,Household food security status - (HC),Sociodemographic,Food security,Categorical,N/A -FVCDCAR,Carrot consumption,Daily consumption - carrots (D),health behaviour,Fruits/vegetables,Continuous,N/A -FVCDFRU,Fruit consumption,Daily consumption - fruit - (D),health behaviour,Fruits/vegetables,Continuous,N/A -FVCDJUI,Juice consumption,Daily consumption - fruit juice (D),health behaviour,Fruits/vegetables,Continuous,N/A -FVCDPOT,Potato consumption,Daily consumption - potatoes (D),health behaviour,Fruits/vegetables,Continuous,N/A -FVCDSAL,Salad consumption,Daily consumption - green salad - (D),health behaviour,Fruits/vegetables,Continuous,N/A -FVCDTOT,Total fruit/veg consumption,Daily consumptoin - total fruits and veg. - (D),health behaviour,Fruits/vegetables,Continuous,N/A -FVCDVEG,Other veg consumption,Daily consumption other vegetables - (D),health behaviour,Fruits/vegetables,Continuous,N/A -GEN_01,Self perceived health,Self perceived health,health behaviour,Self-perceived health,Categorical,N/A -GEN_02A,Life satisfaction_cat,Satisfaction with life,health behaviour,Satisfaction with life,Categorical,N/A -GEN_02A2,Life satisfaction_cont,Satisfaction with life in general,health behaviour,Satisfaction with life,Continuous,N/A -GEN_02B,Self-perceived mental health,Self-perceived mental health,health behaviour,Mental health,Categorical,N/A -GEN_07,Self-perceived life stress,Self perceived life stress,health behaviour,Mental health,Categorical,N/A -GEN_09,Self-perceived work stress,Self perceived work stress,health behaviour,Mental health,Categorical,N/A -GEN_10,Sense of belonging ,Sense of belonging in the community,health behaviour,Mental health,Categorical,N/A -GEOGPRV,Province,Province of residence of respondent (G),Demographics,Province,Categorical,N/A -HUIDCOG,HUI Cognition,Cognition prob. - function code - (D),Health behaviour,Health utility index,Categorical,N/A -HUIDEMO,HUI Emotion,Emotional problems - function code - (D),Health behaviour,Health utility index,Categorical,N/A -HUIDHSI,Overall HUI,Health Utility Index (HUI3) - (D),Health behaviour,Health utility index,Continuous,N/A -HUIGDEX,HUI Dexterity,"Dexterity trouble - function code (D, G)",Health behaviour,Health utility index,Categorical,N/A -HUIGHER,HUI Hearing,"Hearing problems - function code (D, G)",Health behaviour,Health utility index,Categorical,N/A -HUIGMOB,HUI Mobility,"Mobility trouble - function code (D, G)",Health behaviour,Health utility index,Categorical,N/A -HUIGSPE,HUI Speech,"Speech trouble - function code - (D, G)",Health behaviour,Health utility index,Categorical,N/A -HUIGVIS,HUI Vision,"Vision trouble - function code - (D, G)",Health behaviour,Health utility index,Categorical,N/A -HUPDPAD,HUI Pain,Act. prevent/pain - function code - (D),Health behaviour,Health utility index,Categorical,N/A -HWTGHTM,Height,"Height (metres)/self-reported - (D,G)",Sociodemographic,Height,Continuous,meters -HWTGWTK,Weight,"Weight - kilograms (D, G)",Sociodemographic,Weight,Continuous,kg -HWTGBMI,BMI,"BMI / self-report - (D,G)",health behaviour,BMI,Continuous,kg/m2 -HWTGBMI_derived,Derived BMI,Derived Body Mass Index,health behaviour,BMI,Continuous,kg/m2 -INCDRCA,Household income distribution,Household income distribution - (D),Sociodemographic,Income,Categorical,N/A -INCDRPR,Household income distribution provincial level,Hhld inc. distribution-prov. level - (D),Sociodemographic,Income,Categorical,N/A -INCDRRS,Household income distribution health region level,Hhld inc. distribution- hr level - (D),Sociodemographic,Income,Categorical,N/A -INCGPER,Personal Income,"Total pers. inc. from all sources (D, G)",Sociodemographic,Income,Categorical,N/A -MED_1P,Sleeping pills,"In the past month, did you take sleeping pills",Health behaviour,Sleep,Categorical,N/A -PAC_4A,Time walk work/school in week,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands",Health behaviour,Exercise,Categorical,hours/week -PAC_4B,Time bike work/school in week,"In a typical week in the past 3 months, how many hours did you usually spend walking to work or to school or while doing errands",Health behaviour,Exercise,Categorical,hours/week -PAC_7,Walk to work/school,Walked to work or school / last 3 mo.,Health behaviour,Exercise,Categorical,N/A -PAC_7A,Number times walk work/school,No. of times/3 mo./walking work/school,Health behaviour,Exercise,Continuous,N/A -PAC_7B,Time walk work/school,Time spent - walking to go work/school,Health behaviour,Exercise,Categorical,mins -PAC_8,Bike to work/school,Bicycled to work or school / last 3 mo.,Health behaviour,Exercise,Categorical,N/A -PAC_8A,Number times bike work/school,No. of times/3 mo./bicycl. work/school,Health behaviour,Exercise,Continuous,times/3 mos. -PAC_8B,Time bike work/school,Time spent - walking to go work/school,Health behaviour,Exercise,Categorical,N/A -PACDEE,Physical activity,Daily energy expenditure - (D),health behaviour,Exercise,Continuous,METS -RAC_1,Difficulty activities,Has difficulty with activities,Health behaviour,Assistance/Difficulty,Categorical,N/A -RAC_2A,Reduction activities at home,Reduction - activities at home,Health behaviour,Assistance/Difficulty,Categorical,N/A -RAC_2B1,Reduction activities at school,Long-term cond. reduces act. - school,Health behaviour,Assistance/Difficulty,Categorical,N/A -RAC_2B2,Reduction activities at work,Reduction kind/amount act. - at work,Health behaviour,Assistance/Difficulty,Categorical,N/A -RAC_2C,Reduction other activities,Reduction - other activities,Health behaviour,Assistance/Difficulty,Categorical,N/A -RACAG5,Cause health problem,Cause of Health problem,Health behaviour,Health problems,Categorical,N/A -RACDIMP,Impact health problem,Impact of health problems,Health behaviour,Health problems,Categorical,N/A -RACDPAL,Particpation/activity limitation,Participation and activity limitation,Health behaviour,Health problems,Categorical,N/A -RACG5,Cause health problem,Cause of Health problem,Health behaviour,Health problems,Categorical,N/A -SDCFIMM,Immigrant status,Immigrant Status (D),Sociodemographic,Migration,Categorical,N/A -SDCGCBG ,Country of birth,Country of birth - (G),Sociodemographic,Migration,Categorical,N/A -SDCGCGT,Ethnicity,"Cultural or racial origin - (D, G)",Sociodemographic,Ethnicity,Categorical,N/A -SDCGRES ,Time in Canada,"Length/time in Canada since imm. (D, G)",Sociodemographic,Migration,Categorical,N/A -SLP_02,Trouble sleeping,Freq. - trouble sleeping,Health behaviour,Sleep,Categorical,N/A -SLP_02_A,Trouble sleeping,Freq. - trouble sleeping,Health behaviour,Sleep,Categorical,N/A -SLP_03,Sleep refreshing,Freq. - find sleep refreshing,Health behaviour,Sleep,Categorical,N/A -SLP_03_A,Sleep refreshing,Freq. - find sleep refreshing,Health behaviour,Sleep,Categorical,N/A -SLP_04,Difficulty awake,Freq. - diffficult to stay awake,Health behaviour,Sleep,Categorical,N/A -SLP_04_A,Difficulty awake,Freq. - diffficult to stay awake,Health behaviour,Sleep,Categorical,N/A -SLPG01,Hours sleep,No./hours spent sleeping each night,Health behaviour,Sleep,Categorical,N/A -SLPG01_A,Hours sleep,No./hours spent sleeping each night,Health behaviour,Sleep,Categorical,N/A -SLPG01_cont,Hours sleep,No./hours spent sleeping each night,Health behaviour,Sleep,Continuous,N/A -SMK_01A,s100,"In lifetime, smoked 100 or more cigarettes",health behaviour,Smoking,Categorical,N/A -SMK_05C,dayocc,# days smoked at least 1 cigarette,health behaviour,Smoking,Continuous,days -SMK_05D,evd,Ever smoked cigarettes daily - occasional smoker,health behaviour,Smoking,Categorical,N/A -SMK_06A_A,stpn,When did you stop smoking daily - never daily,health behaviour,Smoking,Categorical,Years -SMK_06A_B,stpn,When did you stop smoking daily - occasional,health behaviour,Smoking,Categorical,Years -SMK_06A_cont,stpn,When did you stop smoking daily - occasional,health behaviour,Smoking,Continuous,Years -SMK_09A_A,stpd,When did you stop smoking daily - former daily,health behaviour,Smoking,Categorical,Years -SMK_09A_B,stpd,When did you stop smoking daily - former daily,health behaviour,Smoking,Categorical,Years -SMK_09A_cont,stpd,When did you stop smoking daily - former daily,health behaviour,Smoking,Continuous,Years -SMK_204,cigdayd,# of cigarettes smoked daily - daily smoker,health behaviour,Smoking,Continuous,cigarettes -SMK_05B,cigdayo,# of cigarettes smoked daily - occasional smoker,health behaviour,Smoking,Continuous,cigarettes -SMK_208,cigdayf,# of cigarettes smoke each day - former daily,health behaviour,Smoking,Continuous,cigarettes -SMKDSTY,Smoking status,Type of smoker,health behaviour,Smoking,Categorical,N/A -SMKG01C_A,agec1 ,Age smoked first cigarette,health behaviour,Smoking,Categorical,Years -SMKG01C_B,agec1 ,Age smoked first cigarette,health behaviour,Smoking,Categorical,Years -SMKG01C_cont,agec1,Age smoked first cigarette,health behaviour,Smoking,Continuous,Years -SMKG06C,stpny,Years since stopped smoking daily - never daily,health behaviour,Smoking,Categorical,Years -SMKG09C,stpdy,Years since stopped smoking daily - former daily,health behaviour,Smoking,Categorical,Years -SMKG203_A,agecigd,Age started to smoke daily - daily smoker (G),health behaviour,Smoking,Categorical,Years -SMKG203_B,agecigd,Age started to smoke daily - daily smoker (G),health behaviour,Smoking,Categorical,Years -SMKG203_cont,agecigd,Age started to smoke daily - daily smoker (G),health behaviour,Smoking,Continuous,Years -SMKG207_A,agecigfd,Age started to smoke daily - former daily smoker,health behaviour,Smoking,Categorical,Years -SMKG207_B,agecigfd,Age started to smoke daily - former daily smoker,health behaviour,Smoking,Categorical,Years -SMKG207_cont,agecigfd,Age started to smoke daily - former daily smoker,health behaviour,Smoking,Continuous,Years -PackYears_derived,PackYears,Smoking pack-years,health behaviour,Smoking,Continuous,Years -Pct_time_derived,PctTime,Percentage of time in Canada,Sociodemographic,Migration,Continuous,% \ No newline at end of file diff --git a/inst/extdata/Meeting Version - Modules.csv b/inst/extdata/Meeting Version - Modules.csv deleted file mode 100644 index b1de785c..00000000 --- a/inst/extdata/Meeting Version - Modules.csv +++ /dev/null @@ -1,3 +0,0 @@ -ModuleName,ModuleOperations,DefaultOrder,ModuleID,ModuleDescription -StandardizeToInteger,"integer::[append=FALSE,suffix=FALSE]",1,1,Converts string values to integer values -PrepareForModel,"center::[append=TRUE,suffix=""_C""],interact::[append=TRUE,suffix=""_X-{var}""],impute::[append=false,imputeOn=mean,suffix=FALSE],num2factor::[append=FALSE,suffix=FALSE],dummy::[append=TRUE,suffix=""_Dummy""],bs::[append=TRUE,suffix=""_bs{num}""]",2,2,Prepares the module for coxhp model creation \ No newline at end of file diff --git a/inst/extdata/Meeting Version - Variables.csv b/inst/extdata/Meeting Version - Variables.csv deleted file mode 100644 index 4f43d6ae..00000000 --- a/inst/extdata/Meeting Version - Variables.csv +++ /dev/null @@ -1,9 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,required,operations,centre,interaction,RCS,dummy,impute,2factor,min,max,outlier -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,TRUE,2,TRUE,FALSE,4,FALSE,FALSE,FALSE,,, -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,TRUE,"1 ,2",FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,,, -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,FALSE,2,TRUE,age,3,FALSE,mean,FALSE,,, -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,FALSE,2,TRUE,age,3,TRUE,mean,TRUE,,, -stage,,,,,,,,,2,TRUE,FALSE,FALSE,FALSE,mean,FALSE,,, -,,,,,,,,,,,,,,mean,FALSE,,, \ No newline at end of file diff --git a/inst/extdata/Meeting Version - variableDetails.csv b/inst/extdata/Meeting Version - variableDetails.csv deleted file mode 100644 index 0ce1a821..00000000 --- a/inst/extdata/Meeting Version - variableDetails.csv +++ /dev/null @@ -1,21 +0,0 @@ -variable,VariableRole,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,low,high,interval -sex,predictor,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,2,2,N/A -sex,predictor,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,1,1,N/A -sex,predictor,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A,N/A -age,predictor,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A,N/A -age,predictor,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A,N/A -age,predictor,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A,N/A -age,predictor,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A,N/A -age,predictor,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,NA,NA,N/A -edema,predictor,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,0,0,N/A -edema,predictor,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,0.5,0.5,N/A -edema,predictor,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,1,1,N/A -edema,predictor,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,NA,NA,N/A -ageGroup,created,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,0,20,"[,)" -ageGroup,created,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,20,40,"[,)" -ageGroup,created,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,40,80,"[,)" -ageGroup,created,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,80,105,"[,]" -bili,predictor,,,,,,,,,,,,,,,,,,,, -albumin,predictor,,,,,,,,,,,,,,,,,,,, -protime,predictor,,,,,,,,,,,,,,,,,,,, -status,outcome,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/inst/extdata/PBC-variableDetails - Copy.csv b/inst/extdata/PBC-variableDetails - Copy.csv deleted file mode 100644 index f9066827..00000000 --- a/inst/extdata/PBC-variableDetails - Copy.csv +++ /dev/null @@ -1,44 +0,0 @@ -variable,toType,databaseStart,variableStart,fromType,recTo,catLabel,catLabelLong,units,recFrom,catStartLabel,notes,interval -AGE ,cont,survival-pbc,[age],cont,copy,NA,NA,years,26:79,NA,,"[,]" -AGE ,cont,survival-pbc,[age],cont,NA,NA,NA,years,else,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,copy,NA,NA,g/dl,1:5,NA,,"[,]" -ALBUMIN,cont,survival-pbc,[albumin],cont,NA,NA,NA,g/dl,else,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,copy,NA,NA,U/liter,289:13863,NA,,"[,]" -ALK_PHOS,cont,survival-pbc,[alk.phos],cont,NA,NA,NA,U/liter,else,NA,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,1,not present,ascites not present,NA,0,ascites not present,,"[,]" -ASCITES,cat,survival-pbc,[ascites],cat,2,present,ascites present,NA,1,ascites present,,"[,]" -AST,cont,survival-pbc,[ast],cont,copy,NA,NA,U/ml,26:458,NA,ast was once called SGOT,"[,]" -AST,cont,survival-pbc,[ast],cont,NA,NA,NA,U/ml,else,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,copy,NA,NA,mg/dl,0:28,NA,,"[,]" -BILI,cont,survival-pbc,[bili],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,copy,NA,NA,mg/dl,120:1775,NA,,"[,]" -CHOL,cont,survival-pbc,[chol],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,copy,NA,NA,ug/day,4:588,NA,,"[,]" -COPPER,cont,survival-pbc,[copper],cont,NA,NA,NA,ug/day,else,NA,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,1,no edema,no edema in participent,NA,0,no edema,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,2,untreated or successfully treated,untreated or successfully treated,NA,0.5,untreated or successfully treated,,"[,]" -EDEMA,cat,survival-pbc,[edema],cat,3,edema despite diuretic therapy,edema despite diuretic therapy,NA,1,edema despite diuretic therapy,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,1,not present,no presence of hepatomegaly or enlarged liver,NA,0,no presence of hepatomegaly or enlarged liver,,"[,]" -HEPATO,cat,survival-pbc,[hepato],cat,2,present,presence of hepatomegaly or enlarged liver,NA,1,presence of hepatomegaly or enlarged liver,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,copy,NA,NA,thousand/microliter of blood,62:721,NA,,"[,]" -PLATELET,cont,survival-pbc,[platelet],cont,NA,NA,NA,thousand/microliter of blood,else,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,copy,NA,NA,minutes,9:18,NA,,"[,]" -PROTIME,cont,survival-pbc,[protime],cont,NA,NA,NA,minutes,else,NA,,"[,]" -SEX,cat,survival-pbc,[sex],cat,1,male,male,NA,m,male,,"[,]" -SEX,cat,survival-pbc,[sex],cat,2,female,female,NA,f,female,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,1,not present,blood vessel malformations in the skin not present,NA,0,blood vessel malformations in the skin not present,,"[,]" -SPIDERS,cat,survival-pbc,[spiders],cat,2,present,blood vessel malformations in the skin ,NA,1,blood vessel malformations in the skin,,"[,]" -STAGE,cat,survival-pbc,[stage],cat,copy,histologic stage of disease,histologic stage of disease(needs biopsy),NA,1:4,histologic stage of disease (needs biopsy),,"[,]" -STAGE,cat,survival-pbc,[stage],cat,NA,histologic stage of disease,histologic stage of disease(needs biopsy),NA,else,histologic stage of disease (needs biopsy),,"[,]" -STATUS,cat,survival-pbc,[status],cat,1,censored,status at endpoint for censored,NA,0,status at endpoint for censored,,"[,]" -STATUS,cat,survival-pbc,[status],cat,2,transplant,status at endpoint for transplant,NA,1,status at endpoint for transplant,,"[,]" -STATUS,cat,survival-pbc,[status],cat,3,dead,status at endpoint for dead,NA,2,status at endpoint for dead,,"[,]" -STATUS,cat,survival-pbc,[status],cat,NA,else,else,NA,else,else,,"[,]" -TIME,cont,survival-pbc,[time],cont,copy,NA,NA,NA,41:4795,NA,,"[,]" -TIME,cont,survival-pbc,[time],cont,NA,NA,NA,NA,else,NA,,"[,]" -TRT,cat,survival-pbc,[trt],cat,1,D-penicillmain,D-penicillmain,NA,1,D-penicillmain,,"[,]" -TRT,cat,survival-pbc,[trt],cat,2,placebo,placebo,NA,2,placebo,,"[,]" -TRT,cat,survival-pbc,[trt],cat,NA,not randomised,not randomised,NA,else,not randomised,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,copy,NA,NA,mg/dl,33:598,NA,,"[,]" -TRIG,cont,survival-pbc,[trig],cont,NA,NA,NA,mg/dl,else,NA,,"[,]" -AGE_GROUP,cat,survival-pbc,DerivedVar::[AGE],cont,Func::CustomAgeGroupCalculation,NA,NA,NA,else,NA,NA,"[,]" \ No newline at end of file diff --git a/inst/extdata/PBC-variableDetails.csv b/inst/extdata/PBC-variableDetails.csv deleted file mode 100644 index e1c8b508..00000000 --- a/inst/extdata/PBC-variableDetails.csv +++ /dev/null @@ -1,18 +0,0 @@ -variable,label,labelLong,variableType,variableDummy,valueLabelLong,valueLabel,target,method,reference,databaseStart,variableStart,variableStartType,validCatN,validCatNStart,value,valueLabelStart,units,interval,from -sex,Sex,Sex,category,sex_cat2_1,Female,Femle,pbcDemo,map1_1,Yes,pbc,sex,cat,2,2,2,female,NA,N/A,2 -sex,Sex,Sex,category,sex_cat2_2,Male,Male,pbcDemo,map1_1,No,pbc,sex,cat,2,2,1,male,N/A,N/A,1 -sex,Sex,Sex,category,sex_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,sex,cat,2,2,NA,N/A,N/A,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_1,Age Restricted Cubic Spline Knot 1,Age RCS 1,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,1,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_2,Age Restricted Cubic Spline Knot 2,Age RCS 2,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,2,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_3,Age Restricted Cubic Spline Knot 3,Age RCS 3,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,3,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,Age Restricted Cubic Spline Knot 4,Age RCS 4,pbcDemo,rcs4,NA,pbc,age,cont,N/A,N/A,4,N/A,years,N/A,N/A -age,Age (years),Age (years),continuous,age_rcs4_4,missing,missing,pbcDemo,rcs4,N/A,pbc,age,cont,N/A,N/A,NA,N/A,years,N/A,NA -edema,Edema,Edema,category,edema_cat3_1,No edema,No edema,pbcDemo,map1_1,Yes,pbc,edema,cat,3,3,1,No edema,N/A,N/A,0 -edema,Edema,Edema,category,edema_cat3_2,Untreated or successfully treated,Untreated or successfully treated,pbcDemo,map1_1,No,pbc,edema,cat,3,3,2,Untreated or successfully treated,N/A,N/A,0.5 -edema,Edema,Edema,category,edema_cat3_3,Edema despite diuretic therapy,Edema despite diuretic therapy,pbcDemo,map1_1,No,pbc,edema,cat,3,3,3,Edema despite diuretic therapy,N/A,N/A,1 -edema,Edema,Edema,category,edema_cat3_3,missing,missing,pbcDemo,map1_1,N/A,pbc,edema,cat,3,3,NA,Edema despite diuretic therapy,N/A,N/A,NA -ageGroup,Age group,Age (four categories),category,age_group_cat4_1,< 20 years,< 20,table1,map1_1,yes,pbc,age,cont,4,N/A,1,N/A,years,"[,)",0:20 -ageGroup,Age group,Age (four categories),category,age_group_cat4_2,20 - 40 years,20 - 40,table1,map1_1,no,pbc,age,cont,4,N/A,2,N/A,years,"[,)",20:40 -ageGroup,Age group,Age (four categories),category,age_group_cat4_3,40 - 80 years,40 - 80,table1,map1_1,no,pbc,age,cont,4,N/A,3,N/A,years,"[,)",40:80 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,80+ years,80+,table1,map1_1,no,pbc,age,cont,4,N/A,4,N/A,years,"[,]",80:105 -ageGroup,Age group,Age (four categories),category,age_group_cat4_4,missing or out of range,missing,table1,map1_1,no,pbc,age,cont,4,N/A,NA,N/A,,,else \ No newline at end of file diff --git a/inst/extdata/PBC-variables - Copy.csv b/inst/extdata/PBC-variables - Copy.csv deleted file mode 100644 index a22f2994..00000000 --- a/inst/extdata/PBC-variables - Copy.csv +++ /dev/null @@ -1,22 +0,0 @@ -variable,label,labelLong,variableType,units -age,Age,Age of participent in years,cont,Year -sex,Sex,Sex of the participent,cat,NA -bili,serum bilirunbin,serum bilirunbin(mg/dl),cont,mg/dl -albumin,serum albumin,serum albumin (g/dl),cont,g/dl -protime,standardised blood clotting time,standardised blood clotting time in minutes,cont,min -edema,edema,"0 no edema, 0.5 untreated or successfully treated -1 edema despite diuretic therapy",cat,NA -alk.phos,alkaline phosphotase,alkaline phosphotase (U/liter),cont,U/liter -ascites,presence of ascites,presence of ascites,cat,NA -ast,aspartate aminotransferase,"aspartate aminotransferase, once called SGOT (U/ml)",cont,U/ml -chol,serum cholesterol,serum cholesterol (mg/dl),cont,mg/dl -copper,urine copper,urine copper (ug/day),cont,ug/day -hepato,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,cat,NA -platelet,platelet count,platelet count in thousadnds per microliter of blood,cont,thousand/microliter of blood -spiders,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,cat,NA -stage,histologic stage of disease,histologic stage of disease (needs biopsy),cat,NA -status,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",cat,NA -time,number of days,"number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986",cont,days -trt,trt,"1/2/NA for D-penicillmain, placebo, not randomised",cat,NA -trig,triglycerides,triglycerides (mg/dl),cont,mg/dl \ No newline at end of file diff --git a/inst/extdata/PBC-variables.csv b/inst/extdata/PBC-variables.csv deleted file mode 100644 index 99b4b214..00000000 --- a/inst/extdata/PBC-variables.csv +++ /dev/null @@ -1,17 +0,0 @@ -variable,dataStart,labelLong,label,units,type,variableType,algorithm,role,required,centre,interaction,RCS,dummy,impute,min,max,outlier,operations -age,pbc,Age (years),Age (years),years,Demographic,Continuous,PBC_demo,"predictor, table1",TRUE,TRUE,NA,4,NA,FALSE,40,70,delete,"data cleaning, finish data cleaning, impute missing data, transform data" -sex,pbc,Sex,Sex,,Demographic,Categorical,PBC_demo,"strata, table1-strata",TRUE,FALSE,NA,NA,TRUE,FALSE,NA,NA,delete,transform data -bili,pbc,Serum bilirunbin,Bilirubin,mg/dl,Lab,Continuous,PBC_demo,"predictor, table1",FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" -albumin,pbc,Serum albumin,Albumin,g/dl,Lab,Continuous,PBC_demo,"predictor, table2",FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" -protime,pbc,standardised blood clotting time,Prothrombin time,seconds,Lab,Continuous,PBC_demo,"predictor, table3",FALSE,TRUE,age,3,NA,TRUE,NA,NA,missing,"finish data cleaning,transform data" -edema,pbc,Edema,Edema,,Physical sign,Categorical,PBC_demo,"predictor, table4",FALSE,TRUE,age,3,TRUE,TRUE,NA,NA,missing,"finish data cleaning,transform data" -alk.phos,pbc,alkaline phosphotase,alkaline phosphotase (U/liter),,U/liter,cont,,"intermdiate, table1",,,,,,,,,, -ascites,pbc,presence of ascites,presence of ascites,,NA,cat,,table1,,,,,,,,,, -hepato,pbc,presence of hepatomegaly or enlarged liver,presence of hepatomegaly or enlarged liver in participent,,NA,cat,,table1,,,,,,,,,, -platelet,pbc,platelet count,platelet count in thousadnds per microliter of blood,,thousand/microliter of blood,cont,,table1,,,,,,,,,, -spiders,pbc,blood vessel malformations in the skin,blood vessel malformations in the skin of the participent,,NA,cat,,table1,,,,,,,,,, -stage,pbc,histologic stage of disease,histologic stage of disease (needs biopsy),,NA,cat,,table1,,,,,,,,,, -status,pbc,status at endpoint,"status at endpoint, 0/1/2 for censored, transplant, dead",,NA,cat,,,,,,,,,,,, -time,pbc,number of days,"number of days between registration and the earlier of death, -transplantion, or study analysis in July, 1986",,days,cont,PBC_demo,outcome,,,,,,,,,, -trt,pbc,trt,"1/2/NA for D-penicillmain, placebo, not randomised",,NA,cat,,filer,,,,,,,,,, \ No newline at end of file diff --git a/inst/extdata/bllFlow-variables.csv b/inst/extdata/bllFlow-variables.csv deleted file mode 100644 index 63f170d6..00000000 --- a/inst/extdata/bllFlow-variables.csv +++ /dev/null @@ -1,29 +0,0 @@ -column_name,description,example,table_1,model_description,summary_stat,validation_data,variable_transformation,notes -variable,a predicted risk or exposure that is used in either Table 1 or model,age,yes,yes,,,,a predicted risk or variable -group_by_,a variable that is used to group (aggegrate),age_cat5,yes,,,,,e.g. group_by_1 with values of age_cat5 indicates aggregated data for age_cat5 -group_by_label_,description of the group variable,age in 5 categories,yes,,,,, -group_by_value_,value of the variable we are grouping by,"1,2,3,4,5",yes,,,,, -group_by_value_label_,"if the group is a categorical variable, then the description of the category in the group_by_value column. Otherwise NA",[10 -19) years,yes,,,,, -group_by_sex,"what sex this row is grouped under. Allowed values are, ""male"", ""female"" and ""NA"" for not grouped under a sex",,yes,,,,, -h0t1Year,H0t for 1 year,,,yes,,,, -rcs_knot,predictor spline knots,AgeC_rcs1_knot,,yes,,,, -mean,mean,,yes,,yes,,, -sd,standard deviation ,,yes,,yes,,, -prevalence,prevalence,,yes,,yes,,, -n,number of observations,,yes,,yes,,, -observed_risk_