From d636573a2895909fd580ea89f7047279568004e6 Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Wed, 10 Jun 2026 09:28:36 -0400 Subject: [PATCH 1/5] fix(v3): regenerate NAMESPACE and repair smoking worksheet derivations Regenerate NAMESPACE and man/ with roxygen2: removes ~40 stale exports left from the v3 refactor (alcohol, BMI, ADL, worksheet tooling) that made the package fail R CMD INSTALL, and adds the missing importFrom(dplyr, case_when). Repair nine defects in the smoking rows of variable_details.csv (and variables.csv where feeder lists are mirrored): - Rename phantom Func:: references (calculate_SMKG040, calculate_SMKG203/207_continuous and _from_combined) to the actual calculate_*_cont functions. - Match DerivedVar feeder lists to function signatures: SMKG040_cont from [SMKG203_cont, SMKG207_cont]; SMKG203_cont/SMKG207_cont 2015+ from [SMK_005|SMK_030, SMKG040_cont]; cigs_per_day feeder order [SMKDSTY_original, SMK_204, SMK_208] (feeders pass positionally); pack_years_der occasional slots take SMK_05B/SMK_05C as in v2. - Split time_quit_smoking_daily into PUMF and Master blocks so the Master-only SMK_09C feeder no longer blocks PUMF derivation. - Correct the SMKDSTY_cat5 2015+ map to the post-2015 SMKDVSTY codes (1 daily, 2 occasional, 3 former daily, 4-5 former occ/experimental, 6 never); the pre-2015 collapse rules had been applied, classifying former-daily smokers as occasional and never-smokers as NA(b). - Drop the false cchs2019_2020_p claim from SMKG040/SMKG040_cont (raw SMKG040 exists only in 2015-16 and 2017-18 PUMF). - Add a cchs2015_2016_p exception mapping SMKG035 code 11 to NA(a): the official 2015-16 PUMF pools valid skip and not stated into code 11 (StatCan data dictionary p. 123; not in the errata). Rebuild data/variable_details.RData and data/variables.RData from the corrected CSVs. Validated by harmonizing 1% samples of CCHS 2001, 2015-16, and 2019-20 PUMF end-to-end through rec_with_table(): all unified smoking variables derive with plausible non-missing rates and category distributions matching the raw data. Fixes #184. Fixes #185. --- NAMESPACE | 59 +++---- data/variable_details.RData | Bin 83488 -> 85438 bytes data/variables.RData | Bin 24985 -> 25659 bytes inst/extdata/variable_details.csv | 146 +++++++++--------- inst/extdata/variables.csv | 4 +- man/ALCDTTM.Rd | 35 ----- man/ALCDTYP.Rd | 40 ----- man/ALWDDLY.Rd | 27 ---- man/ALWDWKY.Rd | 32 ---- man/ALW_1.Rd | 36 ----- man/ALW_2A1.Rd | 36 ----- man/ALW_2A2.Rd | 36 ----- man/ALW_2A3.Rd | 36 ----- man/ALW_2A4.Rd | 36 ----- man/ALW_2A5.Rd | 36 ----- man/ALW_2A6.Rd | 36 ----- man/ALW_2A7.Rd | 36 ----- man/CCC_091_fun1.Rd | 44 ++++++ man/CCC_091_fun2.Rd | 46 ++++++ man/COPD_Emph_der_fun1.Rd | 10 +- man/COPD_Emph_der_fun2.Rd | 10 +- man/EDUDR04_fun.Rd | 67 ++++++++ man/PACK_YEARS_CONSTANTS.Rd | 28 ++++ man/active_transport3_fun.Rd | 6 +- man/adjust_bmi.Rd | 89 +++++++++++ man/adjusted_bmi_fun.Rd | 99 ------------ man/adl_fun.Rd | 119 -------------- man/adl_score_5_fun.Rd | 81 ---------- man/assess_adl.Rd | 116 ++++++++++++++ man/binge_drinker_fun.Rd | 108 ------------- man/bmi_fun.Rd | 95 ------------ man/bmi_fun_cat.Rd | 72 --------- man/calculate_binge_drinking.Rd | 130 ++++++++++++++++ man/calculate_bmi.Rd | 77 +++++++++ man/calculate_drinking_risk_long.Rd | 108 +++++++++++++ man/calculate_drinking_risk_short.Rd | 115 ++++++++++++++ man/calculate_time_quit_smoking.Rd | 8 +- man/calculate_time_quit_smoking_complete.Rd | 43 +++--- ...lculate_time_quit_smoking_complete_stub.Rd | 7 +- man/categorize_bmi.Rd | 72 +++++++++ man/categorize_immigration.Rd | 64 ++++++++ man/check_worksheet.Rd | 26 ++++ man/compare_value_based_on_interval.Rd | 1 + man/dot-append_to_list.Rd | 19 +++ man/dot-check_column_order.Rd | 25 +++ man/dot-check_excessive_quoting.Rd | 23 +++ man/dot-check_line_endings.Rd | 23 +++ man/dot-check_row_sorting.Rd | 25 +++ man/dot-check_trailing_empty_columns.Rd | 23 +++ man/dot-create_column_order_error.Rd | 32 ++++ man/dot-create_excessive_quoting_error.Rd | 32 ++++ man/dot-create_file_not_found_error.Rd | 20 +++ man/dot-create_invalid_csv_error.Rd | 22 +++ man/dot-create_line_ending_crlf_error.Rd | 22 +++ man/dot-create_missing_id_column_error.Rd | 22 +++ ...dot-create_trailing_empty_columns_error.Rd | 22 +++ man/dot-create_unsorted_rows_error.Rd | 22 +++ man/dot-fix_column_order_errors.Rd | 21 +++ man/dot-fix_empty_column_errors.Rd | 21 +++ man/dot-fix_unsorted_rows_error.Rd | 21 +++ man/dot-load_cep_variables.Rd | 12 ++ man/dot-parse_csv_text.Rd | 20 +++ man/dot-parse_variable_start.Rd | 12 ++ man/energy_exp_fun.Rd | 4 +- man/energy_exp_fun_cat.Rd | 33 ++++ man/fix_worksheet.Rd | 32 ++++ man/get_data_variable_name.Rd | 1 + man/immigration_fun.Rd | 73 --------- man/label_data.Rd | 4 +- man/load_schema.Rd | 30 ++++ man/low_drink_long_fun.Rd | 125 --------------- man/low_drink_score_fun.Rd | 78 ---------- man/low_drink_score_fun1.Rd | 88 ----------- man/low_drink_short_fun.Rd | 124 --------------- man/multiple_conditions_fun1.Rd | 76 ++++----- man/multiple_conditions_fun2.Rd | 70 +++++---- man/multiple_conditions_fun3.Rd | 80 ++++++++++ man/pack_years_fun.Rd | 8 +- man/recode_columns.Rd | 1 + man/recode_variable_NA_formating.Rd | 1 + ...ondition_fun1.Rd => resp_condition_fun.Rd} | 36 ++--- man/resp_condition_fun2.Rd | 74 --------- man/resp_condition_fun3.Rd | 71 --------- man/score_adl.Rd | 96 ++++++++++++ man/score_adl_6.Rd | 104 +++++++++++++ man/set_data_labels.Rd | 20 ++- 86 files changed, 2049 insertions(+), 1891 deletions(-) delete mode 100644 man/ALCDTTM.Rd delete mode 100644 man/ALCDTYP.Rd delete mode 100644 man/ALWDDLY.Rd delete mode 100644 man/ALWDWKY.Rd delete mode 100644 man/ALW_1.Rd delete mode 100644 man/ALW_2A1.Rd delete mode 100644 man/ALW_2A2.Rd delete mode 100644 man/ALW_2A3.Rd delete mode 100644 man/ALW_2A4.Rd delete mode 100644 man/ALW_2A5.Rd delete mode 100644 man/ALW_2A6.Rd delete mode 100644 man/ALW_2A7.Rd create mode 100644 man/CCC_091_fun1.Rd create mode 100644 man/CCC_091_fun2.Rd create mode 100644 man/EDUDR04_fun.Rd create mode 100644 man/PACK_YEARS_CONSTANTS.Rd create mode 100644 man/adjust_bmi.Rd delete mode 100644 man/adjusted_bmi_fun.Rd delete mode 100644 man/adl_fun.Rd delete mode 100644 man/adl_score_5_fun.Rd create mode 100644 man/assess_adl.Rd delete mode 100644 man/binge_drinker_fun.Rd delete mode 100644 man/bmi_fun.Rd delete mode 100644 man/bmi_fun_cat.Rd create mode 100644 man/calculate_binge_drinking.Rd create mode 100644 man/calculate_bmi.Rd create mode 100644 man/calculate_drinking_risk_long.Rd create mode 100644 man/calculate_drinking_risk_short.Rd create mode 100644 man/categorize_bmi.Rd create mode 100644 man/categorize_immigration.Rd create mode 100644 man/check_worksheet.Rd create mode 100644 man/dot-append_to_list.Rd create mode 100644 man/dot-check_column_order.Rd create mode 100644 man/dot-check_excessive_quoting.Rd create mode 100644 man/dot-check_line_endings.Rd create mode 100644 man/dot-check_row_sorting.Rd create mode 100644 man/dot-check_trailing_empty_columns.Rd create mode 100644 man/dot-create_column_order_error.Rd create mode 100644 man/dot-create_excessive_quoting_error.Rd create mode 100644 man/dot-create_file_not_found_error.Rd create mode 100644 man/dot-create_invalid_csv_error.Rd create mode 100644 man/dot-create_line_ending_crlf_error.Rd create mode 100644 man/dot-create_missing_id_column_error.Rd create mode 100644 man/dot-create_trailing_empty_columns_error.Rd create mode 100644 man/dot-create_unsorted_rows_error.Rd create mode 100644 man/dot-fix_column_order_errors.Rd create mode 100644 man/dot-fix_empty_column_errors.Rd create mode 100644 man/dot-fix_unsorted_rows_error.Rd create mode 100644 man/dot-load_cep_variables.Rd create mode 100644 man/dot-parse_csv_text.Rd create mode 100644 man/dot-parse_variable_start.Rd create mode 100644 man/energy_exp_fun_cat.Rd create mode 100644 man/fix_worksheet.Rd delete mode 100644 man/immigration_fun.Rd create mode 100644 man/load_schema.Rd delete mode 100644 man/low_drink_long_fun.Rd delete mode 100644 man/low_drink_score_fun.Rd delete mode 100644 man/low_drink_score_fun1.Rd delete mode 100644 man/low_drink_short_fun.Rd create mode 100644 man/multiple_conditions_fun3.Rd rename man/{resp_condition_fun1.Rd => resp_condition_fun.Rd} (55%) delete mode 100644 man/resp_condition_fun2.Rd delete mode 100644 man/resp_condition_fun3.Rd create mode 100644 man/score_adl.Rd create mode 100644 man/score_adl_6.Rd diff --git a/NAMESPACE b/NAMESPACE index 27a1615a..2f55e71c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,21 +1,12 @@ # Generated by roxygen2: do not edit by hand -export(ALCDTTM) -export(ALCDTYP) -export(ALWDDLY) -export(ALWDWKY) -export(ALW_1) -export(ALW_2A1) -export(ALW_2A2) -export(ALW_2A3) -export(ALW_2A4) -export(ALW_2A5) -export(ALW_2A6) -export(ALW_2A7) +export(CCC_091_fun1) +export(CCC_091_fun2) export(COPD_Emph_der_fun1) export(COPD_Emph_der_fun2) export(DPSDPP) export(DPSDSF) +export(EDUDR04_fun) export(GEN_02A2) export(LBFA_31A) export(LBFA_31A_a) @@ -29,18 +20,14 @@ export(SPS_5_fun) export(active_transport1_fun) export(active_transport2_fun) export(active_transport3_fun) -export(adjusted_bmi_fun) -export(adl_fun) -export(adl_score_5_fun) +export(adjust_bmi) export(age_cat_fun) export(any_missing) export(apply_database_heuristics) +export(assess_adl) export(assess_quit_pathway) export(assign_missing) export(auto_detect_database) -export(binge_drinker_fun) -export(bmi_fun) -export(bmi_fun_cat) export(cache_pattern) export(calculate_SMKDSTY_cat3) export(calculate_SMKDSTY_cat5) @@ -70,9 +57,14 @@ export(calculate_SMK_207) export(calculate_SMK_208) export(calculate_age_first_cigarette) export(calculate_age_start_smoking) +export(calculate_binge_drinking) +export(calculate_bmi) export(calculate_cigs_per_day) +export(calculate_drinking_risk_long) +export(calculate_drinking_risk_short) export(calculate_pack_years) export(calculate_pack_years_categorical) +export(calculate_pct_time) export(calculate_smoke_simple) export(calculate_smoked_100_lifetime) export(calculate_time_quit_smoking) @@ -80,7 +72,9 @@ export(calculate_time_quit_smoking_complete) export(calculate_time_quit_smoking_complete_stub) export(calculate_time_quit_smoking_daily) export(calculate_time_quit_smoking_daily_stub) -export(check_recode_blocks) +export(categorize_bmi) +export(categorize_immigration) +export(categorize_pct_time) export(check_worksheet) export(clean_variables) export(clear_complete_patterns_cache) @@ -88,15 +82,11 @@ export(clear_missing_patterns_cache) export(diet_score_fun) export(diet_score_fun_cat) export(energy_exp_fun) +export(energy_exp_fun_cat) export(extract_years_from_database_names) export(find_variable_in_data) export(fix_worksheet) export(food_insecurity_der) -export(generate_coverage_matrix) -export(generate_smoking_summary_table) -export(generate_subgroup_summary_table) -export(generate_subject_coverage_matrix) -export(generate_variable_list_table) export(get_cached_pattern) export(get_complete_pattern) export(get_copy_mappings) @@ -106,11 +96,9 @@ export(get_missing_pattern) export(get_missing_pattern_auto) export(get_missing_pattern_bulk) export(get_priority_missing) -export(get_recommendation) export(get_smoking_variables) export(get_source_mappings) export(get_source_variants) -export(get_sub_subject) export(get_variable_bounds) export(get_variable_details) export(get_variable_limits) @@ -119,34 +107,25 @@ export(get_variable_type) export(get_variables) export(has_cached_pattern) export(if_else2) -export(immigration_fun) export(is_equal) -export(is_primary_recommendation) export(list_subjects) export(load_schema) export(load_worksheet_metadata) export(load_worksheet_schemas) -export(low_drink_long_fun) -export(low_drink_score_fun) -export(low_drink_score_fun1) -export(low_drink_short_fun) export(merge_rec_data) export(multiple_conditions_fun1) export(multiple_conditions_fun2) +export(multiple_conditions_fun3) export(pack_years_fun) export(pack_years_fun_cat) -export(parse_database_years) -export(parse_notes_tags) -export(pct_time_fun) -export(pct_time_fun_cat) export(rec_with_table) -export(resp_condition_fun1) -export(resp_condition_fun2) -export(resp_condition_fun3) +export(resp_condition_fun) +export(score_adl) +export(score_adl_6) export(set_data_labels) export(smoke_simple_fun) -export(source_r_robust) export(time_quit_smoking_fun) +importFrom(dplyr,case_when) importFrom(dplyr,do) importFrom(dplyr,rowwise) importFrom(dplyr,select) diff --git a/data/variable_details.RData b/data/variable_details.RData index b4fa7f5424748121bbe3c872c2b72e7879bb8031..3d3205005b7d90378d10b06a068e537d5602f8b3 100644 GIT binary patch literal 85438 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
*Q2Z=#b8U=Vq*oj!u|F|^PBGd#`SgxC$BX5q=e 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

vHdK6|c8^(8EQM4x{! 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

TdW)TK_X(P_mePE(Fhzmn&JC?%a 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 cXq$;7rXv27b2+qP}~bKmdtuJ8HQ`q$TWtzLUq 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 literal 24985 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 3.0 kcal/kg/day),N/A,N/A,Active,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA -energy_exp_cat3,energy_exp_cat3_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,NA::a,3,not applicable,not applicable,N/A,N/A,not applicable,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA -energy_exp_cat3,energy_exp_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,NA::b,3,missing,missing,N/A,N/A,missing,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA +energy_exp_cat3,energy_exp_cat3_catN/A_Func::energy_exp_fun_cat,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,N/A,Func::energy_exp_fun_cat,N/A,N/A,N/A,N/A,N/A,N/A,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA +energy_exp_cat3,energy_exp_cat3_1,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,1,3,Inactive,Inactive (< 1.5 kcal/kg/day),N/A,N/A,Inactive,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA +energy_exp_cat3,energy_exp_cat3_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,2,3,Moderately active,Moderately active (1.5 - < 3.0 kcal/kg/day),N/A,N/A,Moderately active,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA +energy_exp_cat3,energy_exp_cat3_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,3,3,Active,Active (>= 3.0 kcal/kg/day),N/A,N/A,Active,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA +energy_exp_cat3,energy_exp_cat3_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,NA::a,3,not applicable,not applicable,N/A,N/A,not applicable,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA +energy_exp_cat3,energy_exp_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],NA,cat,NA::b,3,missing,missing,N/A,N/A,missing,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",NA,3.0.0,2026-06-04,active,NA,NA,NA FINF1,FINF1_cat2_1,cat,"cchs2001_p, cchs2003_p","cchs2001_p::FINAF1, cchs2003_p::FINCF1",NA,cat,1,2,Yes,Yes,N/A,1,Yes,Food insecurity 12M,Some food insecurity in past 12 months,NA,2.2.0,2025-06-30,active,NA,NA,NA FINF1,FINF1_cat2_2,cat,"cchs2001_p, cchs2003_p","cchs2001_p::FINAF1, cchs2003_p::FINCF1",NA,cat,2,2,No,No,N/A,2,No,Food insecurity 12M,Some food insecurity in past 12 months,NA,2.2.0,2025-06-30,active,NA,NA,NA FINF1,FINF1_cat2_NAa,cat,"cchs2001_p, cchs2003_p","cchs2001_p::FINAF1, cchs2003_p::FINCF1",NA,cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Food insecurity 12M,Some food insecurity in past 12 months,NA,2.2.0,2025-06-30,active,NA,NA,NA @@ -2413,12 +2413,12 @@ pack_years_cat,pack_years_cat_cat5_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cc pack_years_cat,pack_years_cat_cat5_4,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],,N/A,4,5,Very heavy (30+),Very heavy smoker (30 or more pack-years),,"[30,165]",Very heavy,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),pack_years_der >= 30 & pack_years_der <= 165,3.0.0-alpha,2026-01-04,pending_review,"Clearer labels. 5-category. Status=pending: cut-points need epi review. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, pack_years_cat,pack_years_cat_cat5_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],,N/A,NA::a,5,not applicable,not applicable,,N/A,not applicable,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),pack_years_der is NA::a,3.0.0-alpha,2026-01-04,pending_review,"Clearer labels. 5-category. Status=pending: cut-points need epi review. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, pack_years_cat,pack_years_cat_cat5_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],,N/A,NA::b,5,missing,missing,,N/A,missing,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),pack_years_der is NA::b,3.0.0-alpha,2026-01-04,pending_review,"Clearer labels. 5-category. Status=pending: cut-points need epi review. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,"[0,165]",Pack-years (PUMF),Pack-years,Cumulative smoking exposure in pack-years (derived),PUMF wrapper using midpoint-derived age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::a,N/A,not applicable,not applicable,pack-years,N/A,not applicable,Pack-years,Cumulative smoking exposure in pack-years (derived),Valid skip - never smoker (SMKDSTY_original=6),3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::b,N/A,missing,missing,pack-years,N/A,missing,Pack-years,Cumulative smoking exposure in pack-years (derived),"Missing required input(s): status, age, initiation, or intensity",3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,"[0,165]",Pack-years (Master),Pack-years,Cumulative smoking exposure in pack-years (derived),Master wrapper using true continuous age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, -pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::a,N/A,not applicable,not applicable,pack-years,N/A,not applicable,Pack-years,Cumulative smoking exposure in pack-years (derived),Valid skip - never smoker (SMKDSTY_original=6),3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, -pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::b,N/A,missing,missing,pack-years,N/A,missing,Pack-years,Cumulative smoking exposure in pack-years (derived),"Missing required input(s): status, age, initiation, or intensity",3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, +pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,"[0,165]",Pack-years (PUMF),Pack-years,Cumulative smoking exposure in pack-years (derived),PUMF wrapper using midpoint-derived age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::a,N/A,not applicable,not applicable,pack-years,N/A,not applicable,Pack-years,Cumulative smoking exposure in pack-years (derived),Valid skip - never smoker (SMKDSTY_original=6),3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::b,N/A,missing,missing,pack-years,N/A,missing,Pack-years,Cumulative smoking exposure in pack-years (derived),"Missing required input(s): status, age, initiation, or intensity",3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,"[0,165]",Pack-years (Master),Pack-years,Cumulative smoking exposure in pack-years (derived),Master wrapper using true continuous age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, +pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::a,N/A,not applicable,not applicable,pack-years,N/A,not applicable,Pack-years,Cumulative smoking exposure in pack-years (derived),Valid skip - never smoker (SMKDSTY_original=6),3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, +pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::b,N/A,missing,missing,pack-years,N/A,missing,Pack-years,Cumulative smoking exposure in pack-years (derived),"Missing required input(s): status, age, initiation, or intensity",3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, PAYDVADL,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVADL],NA,cont,copy,N/A,No. minutes of leisure activities,No. minutes of leisure activities,minutes/week,"[0,4140]",No. minutes of leisure activities,Leisure activities (12-17 years old),Time spent - leisure activity in a week (12-17 years old),NA,2.1.0,2025-06-30,active,NA,NA,NA PAYDVADL,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVADL],NA,cont,NA::a,N/A,not applicable,not applicable,minutes/week,99996,not applicable,Leisure activities (12-17 years old),Time spent - leisure activity in a week (12-17 years old),NA,2.1.0,2025-06-30,active,NA,NA,NA PAYDVADL,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVADL],NA,cont,NA::b,N/A,missing,missing,minutes/week,"[99997,99999]",don't know (99997); refusal (99998); not stated (99999),Leisure activities (12-17 years old),Time spent - leisure activity in a week (12-17 years old),NA,2.1.0,2025-06-30,active,NA,NA,NA @@ -2984,7 +2984,7 @@ SMK_030,SMK_030_cat2_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, c SMK_030,SMK_030_cat2_NAa,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_05, cchs2023_m::SPU_05, [SMK_030]",,cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Ever daily (2015+),Smoked daily - lifetime (2015+ era-specific name for SMK_05D),BACKWARD COMPATIBILITY: Superseded by SMK_05D. Era-specific pass-through (2015-2018 PUMF and Master).,3.0.0-alpha,2026-01-05,active,v3.0.0: Maintained for backward compatibility. SMK_030 is the 2015+ era-specific name.,, SMK_030,SMK_030_cat2_NAb,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_05, cchs2023_m::SPU_05, [SMK_030]",,cat,NA::b,2,missing,missing,N/A,"[7,9]",don't know (7); refusal (8); not stated (9),Ever daily (2015+),Smoked daily - lifetime (2015+ era-specific name for SMK_05D),BACKWARD COMPATIBILITY: Superseded by SMK_05D. Era-specific pass-through (2015-2018 PUMF and Master).,3.0.0-alpha,2026-01-05,active,v3.0.0: Maintained for backward compatibility. SMK_030 is the 2015+ era-specific name.,, SMK_030,SMK_030_cat2_NAb,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_05, cchs2023_m::SPU_05, [SMK_030]",,cat,NA::b,2,missing,missing,N/A,else,else,Ever daily (2015+),Smoked daily - lifetime (2015+ era-specific name for SMK_05D),BACKWARD COMPATIBILITY: Superseded by SMK_05D. Era-specific pass-through (2015-2018 PUMF and Master).,3.0.0-alpha,2026-01-05,active,v3.0.0: Maintained for backward compatibility. SMK_030 is the 2015+ era-specific name.,, -SMK_040,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,N/A,Func::calculate_SMKG040,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking cigarettes daily (all ever-daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, ever-daily) for Master 2001-2023.",, +SMK_040,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,N/A,Func::calculate_SMKG040_cont,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking cigarettes daily (all ever-daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, ever-daily) for Master 2001-2023.",, SMK_040,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking cigarettes daily (all ever-daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, ever-daily) for Master 2001-2023.",, SMK_040,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking cigarettes daily (all ever-daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, ever-daily) for Master 2001-2023.",, SMK_040,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",,cont,copy,N/A,years,Age in years,years,"[8,99]",Age in years,Age daily (ever),Age started smoking cigarettes daily (all ever-daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, ever-daily) for Master 2001-2023.",, @@ -3122,7 +3122,7 @@ SMK_203,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_ SMK_203,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,NA::a,N/A,not applicable,not applicable,years,96,not applicable,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, SMK_203,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,NA::b,N/A,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily (curr),Age started smoking cigarettes daily (current daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, SMK_203,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,NA::b,N/A,missing,missing,years,else,else,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, -SMK_203,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,N/A,Func::calculate_SMKG203_from_combined,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, +SMK_203,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,N/A,Func::calculate_SMKG203_cont,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, SMK_203,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, SMK_203,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, current daily) for Master 2001-2023.",, SMK_204,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_204, cchs2003_p::SMKC_204, cchs2005_p::SMKE_204, cchs2015_2016_p::SMK_045, cchs2017_2018_p::SMK_045, cchs2019_2020_p::SMK_045, cchs2022_p::CSS_25, cchs2023_p::CSS_25, cchs2001_m::SMKA_204, cchs2003_m::SMKC_204, cchs2005_m::SMKE_204, cchs2015_2016_m::SMK_045, cchs2017_2018_m::SMK_045, cchs2019_2020_m::SMK_045, cchs2021_m::SMK_045, cchs2022_m::CSS_25, cchs2023_m::CSS_25, [SMK_204]",ICES confirmed,cont,copy,N/A,Cigs/day - daily,# of cigarettes smoked daily - daily smoker,cigarettes,"[1,99]",# of cigarettes smoked daily - daily smoker,Cigs/day (current),Number of cigarettes smoked daily - daily smokers,,3.0.0-alpha,2026-01-04,active,"Migrated from production. Converted deprecated _i suffix to _m. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, @@ -3133,9 +3133,9 @@ SMK_207,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_ SMK_207,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, [SMK_207]",,cont,NA::a,N/A,not applicable,not applicable,years,96,not applicable,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, SMK_207,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, [SMK_207]",,cont,NA::b,N/A,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, SMK_207,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, [SMK_207]",,cont,NA::b,N/A,missing,missing,years,else,else,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, -SMK_207,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_030, SMK_040]",,N/A,Func::calculate_SMKG207_from_combined,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, -SMK_207,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_030, SMK_040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, -SMK_207,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_030, SMK_040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, +SMK_207,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_030, SMK_040]",,N/A,Func::calculate_SMKG207_cont,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),Evidence-based minimum age 8 (Holford et al.),3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, +SMK_207,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_030, SMK_040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, +SMK_207,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_030, SMK_040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),,3.0.0-alpha,2026-01-04,active,"NEW: Age started daily (continuous, former daily) for Master 2001-2023.",, SMK_208,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_208, cchs2003_p::SMKC_208, cchs2005_p::SMKE_208, cchs2015_2016_p::SMK_075, cchs2017_2018_p::SMK_075, cchs2019_2020_p::SMK_075, cchs2001_m::SMKA_208, cchs2003_m::SMKC_208, cchs2005_m::SMKE_208, cchs2015_2016_m::SMK_075, cchs2017_2018_m::SMK_075, cchs2019_2020_m::SMK_075, cchs2021_m::SMK_075, cchs2022_m::SPU_20, cchs2023_m::SPU_20, [SMK_208]",ICES confirmed,cont,copy,N/A,Cigs/day - fmr daily,Cigarettes/day - former daily,cigarettes,"[1,99]",# of cigarettes smoke each day - former daily,Cigs/day (former),Number of cigarettes smoked daily - former daily smokers,,3.0.0-alpha,2026-01-04,active,"Migrated from production. Converted deprecated _i suffix to _m. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, SMK_208,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_208, cchs2003_p::SMKC_208, cchs2005_p::SMKE_208, cchs2015_2016_p::SMK_075, cchs2017_2018_p::SMK_075, cchs2019_2020_p::SMK_075, cchs2001_m::SMKA_208, cchs2003_m::SMKC_208, cchs2005_m::SMKE_208, cchs2015_2016_m::SMK_075, cchs2017_2018_m::SMK_075, cchs2019_2020_m::SMK_075, cchs2021_m::SMK_075, cchs2022_m::SPU_20, cchs2023_m::SPU_20, [SMK_208]",ICES confirmed,cont,NA::a,N/A,not applicable,not applicable,cigarettes,996,not applicable,Cigs/day (former),Number of cigarettes smoked daily - former daily smokers,,3.0.0-alpha,2026-01-04,active,"Migrated from production. Converted deprecated _i suffix to _m. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, SMK_208,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_208, cchs2003_p::SMKC_208, cchs2005_p::SMKE_208, cchs2015_2016_p::SMK_075, cchs2017_2018_p::SMK_075, cchs2019_2020_p::SMK_075, cchs2001_m::SMKA_208, cchs2003_m::SMKC_208, cchs2005_m::SMKE_208, cchs2015_2016_m::SMK_075, cchs2017_2018_m::SMK_075, cchs2019_2020_m::SMK_075, cchs2021_m::SMK_075, cchs2022_m::SPU_20, cchs2023_m::SPU_20, [SMK_208]",ICES confirmed,cont,NA::b,N/A,missing,missing,cigarettes,"[997,999]",don't know (997); refusal (998); not stated (999),Cigs/day (former),Number of cigarettes smoked daily - former daily smokers,,3.0.0-alpha,2026-01-04,active,"Migrated from production. Converted deprecated _i suffix to _m. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, @@ -3195,8 +3195,10 @@ SMKDSTY_cat3,SMKDSTY_cat3_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_ SMKDSTY_cat3,SMKDSTY_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",,cat,NA::b,3,missing,missing,N/A,"[97,99]",don't know (97); refusal (98); not stated (99),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat3,SMKDSTY_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",,cat,NA::b,3,missing,missing,N/A,else,else,Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_1,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",ICES confirmed,cat,1,5,Daily,Current daily smoker,N/A,1,Daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, -SMKDSTY_cat5,SMKDSTY_cat5_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,2,5,Occasional,Current occasional smoker,N/A,"[2,3]",Occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat5,SMKDSTY_cat5_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,2,5,Occasional,Current occasional smoker,N/A,2,Occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_4,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,4,5,Former occasional,Former occasional,N/A,"[4,5]",Former occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat5,SMKDSTY_cat5_3,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,3,5,Former daily,Former daily smoker,N/A,3,Former daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat5,SMKDSTY_cat5_5,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,5,5,Never smoked,Never smoked,N/A,6,Never smoked,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",ICES confirmed,cat,2,5,Occasional,Current occasional smoker,N/A,2,Occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",ICES confirmed,cat,3,5,Former daily,Former daily smoker,N/A,3,Former daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",ICES confirmed,cat,3,5,Former daily,Former daily smoker,N/A,4,Former daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, @@ -3280,7 +3282,8 @@ SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,37,11,35-39 years,Midpoint of 35-39 years,years,8,35-39 years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,42,11,40-44 years,Midpoint of 40-44 years,years,9,40-44 years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,47,11,45-49 years,Midpoint of 45-49 years,years,10,45-49 years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, -SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,55,11,50+ years,Assumed midpoint for 50+,years,11,50+ years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, +SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,55,11,50+ years,Assumed midpoint for 50+,years,11,50+ years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, +SMKG01C_cont,N/A,cont,"cchs2015_2016_p",cchs2015_2016_p::SMKG035,,cat,NA::a,11,not applicable,not applicable,years,11,50+ years,Age 1st cig,Age smoked first whole cigarette,StatCan defect in 2015-2016 PUMF: SMKG035 code 11 pools valid skip (~44k) and not stated (~1.3k) with true age 50+ (~95); official data dictionary lists 11 = 45737 with no 96/99 rows. Mapped to NA::a (dominant class). See cchsflow-data#3.,3.0.0-alpha,2026-01-04,active,Added 2015-2016 exception row for StatCan SMKG035 defect.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,NA::b,11,missing,missing,years,else,else,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, @@ -3313,20 +3316,20 @@ SMKG01C_pre2005,SMKG01C_pre2005_cat10_10,cat,"cchs2001_m, cchs2003_m","cchs2001_ SMKG01C_pre2005,SMKG01C_pre2005_cat10_NAa,cat,"cchs2001_m, cchs2003_m","cchs2001_m::SMKA_01C, cchs2003_m::SMKC_01C",ICES altered,cont,NA::a,10,not applicable,not applicable,years,996,not applicable,Age 1st cig (pre-2005 cat),"Age smoked first cigarette (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG01C_pre2005,SMKG01C_pre2005_cat10_NAb,cat,"cchs2001_m, cchs2003_m","cchs2001_m::SMKA_01C, cchs2003_m::SMKC_01C",ICES altered,cont,NA::b,10,missing,missing,years,"[997,999]",don't know (997); refusal (998); not stated (999),Age 1st cig (pre-2005 cat),"Age smoked first cigarette (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG01C_pre2005,SMKG01C_pre2005_cat10_NAb,cat,"cchs2001_m, cchs2003_m","cchs2001_m::SMKA_01C, cchs2003_m::SMKC_01C",ICES altered,cont,NA::b,10,missing,missing,years,else,else,Age 1st cig (pre-2005 cat),"Age smoked first cigarette (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_1,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily/former daily smoker,years,1,5 To 11 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily/former daily smoker,years,2,12 To 14 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_3,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily/former daily smoker,years,3,15 To 17 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_4,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,4,11,18 To 19 Years,age (18 to 19) started smoking daily - daily/former daily smoker,years,4,18 To 19 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_5,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,5,11,20 To 24 Years,age (20 to 24) started smoking daily - daily/former daily smoker,years,5,20 To 24 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_6,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,6,11,25 To 29 Years,age (25 to 29) started smoking daily - daily/former daily smoker,years,6,25 To 29 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_7,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,7,11,30 To 34 Years,age (30 to 34) started smoking daily - daily/former daily smoker,years,7,30 To 34 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_8,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,8,11,35 To 39 Years,age (35 to 39) started smoking daily - daily/former daily smoker,years,8,35 To 39 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_9,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,9,11,40 To 44 Years,age (40 to 44) started smoking daily - daily/former daily smoker,years,9,40 To 44 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_10,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,10,11,45 To 49 Years,age (45 to 49) started smoking daily - daily/former daily smoker,years,10,45 To 49 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_11,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,11,11,50 Years or more,age (50 or more) started smoking daily - daily/former daily smoker,years,11,50 Years or more,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_NAa,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_NAb,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily smoking,Age started smoking daily - ever-daily (categorical),Don't know (97) and refusal (98) not included in CCHS 2015-2016 and CCHS 2017-2018,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040,SMKG040_cat11_NAb,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],DGM,cat,NA::b,11,missing,missing,years,else,else,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_1,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily/former daily smoker,years,1,5 To 11 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_2,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily/former daily smoker,years,2,12 To 14 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_3,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily/former daily smoker,years,3,15 To 17 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_4,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,4,11,18 To 19 Years,age (18 to 19) started smoking daily - daily/former daily smoker,years,4,18 To 19 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_5,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,5,11,20 To 24 Years,age (20 to 24) started smoking daily - daily/former daily smoker,years,5,20 To 24 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_6,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,6,11,25 To 29 Years,age (25 to 29) started smoking daily - daily/former daily smoker,years,6,25 To 29 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_7,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,7,11,30 To 34 Years,age (30 to 34) started smoking daily - daily/former daily smoker,years,7,30 To 34 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_8,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,8,11,35 To 39 Years,age (35 to 39) started smoking daily - daily/former daily smoker,years,8,35 To 39 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_9,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,9,11,40 To 44 Years,age (40 to 44) started smoking daily - daily/former daily smoker,years,9,40 To 44 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_10,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,10,11,45 To 49 Years,age (45 to 49) started smoking daily - daily/former daily smoker,years,10,45 To 49 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_11,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,11,11,50 Years or more,age (50 or more) started smoking daily - daily/former daily smoker,years,11,50 Years or more,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_NAa,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_NAb,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily smoking,Age started smoking daily - ever-daily (categorical),Don't know (97) and refusal (98) not included in CCHS 2015-2016 and CCHS 2017-2018,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, +SMKG040,SMKG040_cat11_NAb,cat,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],DGM,cat,NA::b,11,missing,missing,years,else,else,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG040,SMKG040_cat11_1,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",DGM,cont,1,11,5 To 11 Years,age (5 to 11) started smoking daily - daily/former daily smoker,years,"[5,12)",5 To 11 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG040,SMKG040_cat11_2,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",DGM,cont,2,11,12 To 14 Years,age (12 to 14) started smoking daily - daily/former daily smoker,years,"[12,15)",12 To 14 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG040,SMKG040_cat11_3,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",DGM,cont,3,11,15 To 17 Years,age (15 to 17) started smoking daily - daily/former daily smoker,years,"[15,18)",15 To 17 Years,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, @@ -3341,27 +3344,27 @@ SMKG040,SMKG040_cat11_11,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, SMKG040,SMKG040_cat11_NAa,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",DGM,cont,NA::a,11,not applicable,not applicable,years,996,not applicable,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG040,SMKG040_cat11_NAb,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",DGM,cont,NA::b,11,missing,missing,years,"[997,999]",don't know (997); refusal (998); not stated (999),Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG040,SMKG040_cat11_NAb,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",DGM,cont,NA::b,11,missing,missing,years,else,else,Age daily smoking,Age started smoking daily - ever-daily (categorical),,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, -SMKG040_cont,N/A,cont,"cchs2001_p, cchs2003_p","DerivedVar::[SMKG203_pre2005, SMKG207_pre2005]",,N/A,Func::calculate_SMKG040,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (ever),Age started smoking daily - ever-daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2001_p, cchs2003_p","DerivedVar::[SMKG203_pre2005, SMKG207_pre2005]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, -SMKG040_cont,N/A,cont,"cchs2001_p, cchs2003_p","DerivedVar::[SMKG203_pre2005, SMKG207_pre2005]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, -SMKG040_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","DerivedVar::[SMKG203_2005plus, SMKG207_2005plus]",,N/A,Func::calculate_SMKG040,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (ever),Age started smoking daily - ever-daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","DerivedVar::[SMKG203_2005plus, SMKG207_2005plus]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, -SMKG040_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","DerivedVar::[SMKG203_2005plus, SMKG207_2005plus]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,8,11,5-11 years,Midpoint of 5-11 years,years,1,5-11 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,13,11,12-14 years,Midpoint of 12-14 years,years,2,12-14 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,16,11,15-17 years,Midpoint of 15-17 years,years,3,15-17 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,18.5,11,18-19 years,Midpoint of 18-19 years,years,4,18-19 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,22,11,20-24 years,Midpoint of 20-24 years,years,5,20-24 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,27,11,25-29 years,Midpoint of 25-29 years,years,6,25-29 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,32,11,30-34 years,Midpoint of 30-34 years,years,7,30-34 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,37,11,35-39 years,Midpoint of 35-39 years,years,8,35-39 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,42,11,40-44 years,Midpoint of 40-44 years,years,9,40-44 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,47,11,45-49 years,Midpoint of 45-49 years,years,10,45-49 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,55,11,50+ years,Assumed midpoint for 50+,years,11,50+ years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKG040],,cat,NA::b,11,missing,missing,years,else,else,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, -SMKG040_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,N/A,Func::calculate_SMKG040,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking daily grouped - ever-daily,Master pre-2015: derive from SMK_203 + SMK_207,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2001_p, cchs2003_p","DerivedVar::[SMKG203_cont, SMKG207_cont]",,N/A,Func::calculate_SMKG040_cont,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (ever),Age started smoking daily - ever-daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2001_p, cchs2003_p","DerivedVar::[SMKG203_cont, SMKG207_cont]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, +SMKG040_cont,N/A,cont,"cchs2001_p, cchs2003_p","DerivedVar::[SMKG203_cont, SMKG207_cont]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, +SMKG040_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","DerivedVar::[SMKG203_cont, SMKG207_cont]",,N/A,Func::calculate_SMKG040_cont,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (ever),Age started smoking daily - ever-daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","DerivedVar::[SMKG203_cont, SMKG207_cont]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, +SMKG040_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","DerivedVar::[SMKG203_cont, SMKG207_cont]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,8,11,5-11 years,Midpoint of 5-11 years,years,1,5-11 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,13,11,12-14 years,Midpoint of 12-14 years,years,2,12-14 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,16,11,15-17 years,Midpoint of 15-17 years,years,3,15-17 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,18.5,11,18-19 years,Midpoint of 18-19 years,years,4,18-19 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,22,11,20-24 years,Midpoint of 20-24 years,years,5,20-24 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,27,11,25-29 years,Midpoint of 25-29 years,years,6,25-29 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,32,11,30-34 years,Midpoint of 30-34 years,years,7,30-34 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,37,11,35-39 years,Midpoint of 35-39 years,years,8,35-39 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,42,11,40-44 years,Midpoint of 40-44 years,years,9,40-44 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,47,11,45-49 years,Midpoint of 45-49 years,years,10,45-49 years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,55,11,50+ years,Assumed midpoint for 50+,years,11,50+ years,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p",[SMKG040],,cat,NA::b,11,missing,missing,years,else,else,Age daily (ever),Age started smoking daily grouped - ever-daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, +SMKG040_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,N/A,Func::calculate_SMKG040_cont,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking daily grouped - ever-daily,Master pre-2015: derive from SMK_203 + SMK_207,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, SMKG040_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, SMKG040_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","DerivedVar::[SMK_203, SMK_207]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily - ever-daily (derived),,3.0.0-alpha,2026-01-04,active,,, SMKG040_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMK_040]",,cont,copy,N/A,years,Midpoint of 12-14 years,years,"[8,95]",Age in years (8 to 95),Age daily (ever),Age started smoking daily grouped - ever-daily,Master: direct pass-through of continuous values,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2015-2021.,, @@ -3457,14 +3460,14 @@ SMKG203_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, SMKG203_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","cchs2005_p::SMKEG203, [SMKG203]",,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age daily (ever),Age started smoking daily grouped - current daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","cchs2005_p::SMKEG203, [SMKG203]",,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily (ever),Age started smoking daily grouped - current daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","cchs2005_p::SMKEG203, [SMKG203]",,cat,NA::b,11,missing,missing,years,else,else,Age daily (ever),Age started smoking daily grouped - current daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, -SMKG203_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMKG040]",,N/A,Func::calculate_SMKG203_continuous,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (curr),Age started smoking daily - current daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, -SMKG203_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMKG040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (curr),Age started smoking daily - current daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, -SMKG203_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMKG040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (curr),Age started smoking daily - current daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, +SMKG203_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMKG040_cont]",,N/A,Func::calculate_SMKG203_cont,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (curr),Age started smoking daily - current daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, +SMKG203_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMKG040_cont]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (curr),Age started smoking daily - current daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, +SMKG203_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMKG040_cont]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (curr),Age started smoking daily - current daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,copy,N/A,years,Midpoint of 12-14 years,years,"[8,95]",Age in years (8 to 95),Age daily (ever),Age started smoking daily grouped - current daily,Master: direct pass-through of continuous values,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,NA::a,N/A,not applicable,not applicable,years,996,not applicable,Age daily (ever),Age started smoking daily grouped - current daily,Master: valid skip (not in universe),3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,NA::b,N/A,missing,missing,years,"[997,999]",don't know (997); refusal (998); not stated (999),Age daily (ever),Age started smoking daily grouped - current daily,Master: missing (don't know/refused),3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, [SMK_203]",,cont,NA::b,N/A,missing,missing,years,else,else,Age daily (curr),Age started smoking daily - current daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, -SMKG203_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,N/A,Func::calculate_SMKG203_from_combined,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking daily grouped - current daily,Master post-2015: filter SMK_040 by current daily status,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, +SMKG203_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,N/A,Func::calculate_SMKG203_cont,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking daily grouped - current daily,Master post-2015: filter SMK_040 by current daily status,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily grouped - current daily,,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily grouped - current daily,,3.0.0-alpha,2026-01-04,active,Removed _i. Clearer label. PUMF only for 2001-2021.,, SMKG203_pre2005,SMKG203_pre2005_cat10_1,cat,"cchs2001_p, cchs2003_p","cchs2001_p::SMKAG203, cchs2003_p::SMKCG203",ICES altered,cat,1,10,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,Age 1st cig (daily),"Age started smoking daily - current daily (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, @@ -3548,15 +3551,15 @@ SMKG207_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, SMKG207_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","cchs2005_p::SMKEG207, [SMKG207]",,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age daily (ever),Age started smoking daily grouped - former daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, SMKG207_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","cchs2005_p::SMKEG207, [SMKG207]",,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age daily (ever),Age started smoking daily grouped - former daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, SMKG207_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p","cchs2005_p::SMKEG207, [SMKG207]",,cat,NA::b,11,missing,missing,years,else,else,Age daily (ever),Age started smoking daily grouped - former daily,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, -SMKG207_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMK_030, SMKG040]",,N/A,Func::calculate_SMKG207_continuous,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (fmr),Age started smoking daily - former daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, -SMKG207_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMK_030, SMKG040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (fmr),Age started smoking daily - former daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, -SMKG207_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_005, SMK_030, SMKG040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (fmr),Age started smoking daily - former daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, +SMKG207_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_030, SMKG040_cont]",,N/A,Func::calculate_SMKG207_cont,N/A,N/A,Age in years (pseudo-continuous),years,N/A,Age in years (1 to 55),Age daily (fmr),Age started smoking daily - former daily (derived),PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, +SMKG207_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_030, SMKG040_cont]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (fmr),Age started smoking daily - former daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, +SMKG207_cont,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMK_030, SMKG040_cont]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (fmr),Age started smoking daily - former daily (derived),,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, SMKG207_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, [SMK_207]",,cat,copy,N/A,years,Midpoint of 12-14 years,years,"[8,95]",Age in years (8 to 95),Age daily (ever),Age started smoking daily grouped - former daily,Master: direct pass-through of continuous values,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, SMKG207_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, [SMK_207]",,cat,NA::a,N/A,not applicable,not applicable,years,996,not applicable,Age daily (ever),Age started smoking daily grouped - former daily,Master: valid skip (not in universe),3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, SMKG207_cont,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, [SMK_207]",,cat,NA::b,N/A,missing,missing,years,"[997,999]",don't know (997); refusal (998); not stated (999),Age daily (ever),Age started smoking daily grouped - former daily,Master: missing (don't know/refused),3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, -SMKG207_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_030, SMK_040]",,N/A,Func::calculate_SMKG207_from_combined,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking daily grouped - former daily,Master 2015+: filter by former daily status,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, -SMKG207_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_030, SMK_040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily grouped - former daily,,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, -SMKG207_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_005, SMK_030, SMK_040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily grouped - former daily,,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, +SMKG207_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_030, SMK_040]",,N/A,Func::calculate_SMKG207_cont,N/A,N/A,Age in years,years,N/A,Age in years,Age daily (ever),Age started smoking daily grouped - former daily,Master 2015+: filter by former daily status,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, +SMKG207_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_030, SMK_040]",,cont,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Age daily (ever),Age started smoking daily grouped - former daily,,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, +SMKG207_cont,N/A,cont,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_030, SMK_040]",,cont,NA::b,N/A,missing,missing,years,N/A,missing,Age daily (ever),Age started smoking daily grouped - former daily,,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Clearer label. PUMF only for 2001-2021.,, SMKG207_pre2005,SMKG207_pre2005_cat10_1,cat,"cchs2001_p, cchs2003_p","cchs2001_p::SMKAG207, cchs2003_p::SMKCG207",ICES altered,cat,1,10,5 To 11 Years,age (5 to 11) started smoking daily - daily smoker,years,1,5 To 11 Years,Age daily fmr (pre-2005 cat),"Age started smoking daily - former daily (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG207_pre2005,SMKG207_pre2005_cat10_2,cat,"cchs2001_p, cchs2003_p","cchs2001_p::SMKAG207, cchs2003_p::SMKCG207",ICES altered,cat,2,10,12 To 14 Years,age (12 to 14) started smoking daily - daily smoker,years,2,12 To 14 Years,Age daily fmr (pre-2005 cat),"Age started smoking daily - former daily (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, SMKG207_pre2005,SMKG207_pre2005_cat10_3,cat,"cchs2001_p, cchs2003_p","cchs2001_p::SMKAG207, cchs2003_p::SMKCG207",ICES altered,cat,3,10,15 to 19 years,age (15 to 19) started smoking daily - daily smoker,years,3,15 to 19 Years,Age daily fmr (pre-2005 cat),"Age started smoking daily - former daily (pre-2005, 10-category)",,3.0.0-alpha,2026-01-04,active,Migrated from production. Converted deprecated _i suffix to _m.,, @@ -3827,8 +3830,11 @@ time_quit_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,Func::calculate_time_quit_smoking_complete,2,,,years,N/A,,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,NA::b,2,missing,missing,years,N/A,missing,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,Func::calculate_time_quit_smoking_daily,2,,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,NA::b,2,missing,missing,years,N/A,missing,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,Func::calculate_time_quit_smoking_daily,2,,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,Func::calculate_time_quit_smoking_daily,2,,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,NA::b,2,missing,missing,years,N/A,missing,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,NA::b,2,missing,missing,years,N/A,missing,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, WTS_M,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p","cchs2001_p::WTSAM, cchs2003_p::WTSC_M, cchs2005_p::WTSE_M, [WTS_M]",NA,N/A,copy,N/A,N/A,N/A,N/A,"[1.07,71809.93]",N/A,Weight,Weights,NA,2.2.0,2025-06-30,active,NA,NA,NA WTS_S,N/A,cont,"cchs2009_m, cchs2010_m, cchs2012_m",[WTS_S],NA,N/A,copy,N/A,N/A,N/A,N/A,"[2.94,65198.17]",N/A,Weight - Share,NA,NA,2.2.0,2025-06-30,active,NA,NA,NA diff --git a/inst/extdata/variables.csv b/inst/extdata/variables.csv index e0f22989..8d3784e8 100644 --- a/inst/extdata/variables.csv +++ b/inst/extdata/variables.csv @@ -79,7 +79,7 @@ CCC_91E,Emphysema,Do you have emphysema?,Categorical,"cchs2005_p, cchs2007_2008_ CCC_91F,COPD,Do you have COPD?,Categorical,"cchs2005_p, cchs2007_2008_p, cchs2005_m, cchs2007_2008_m","cchs2005_p::CCCE_91F, cchs2007_2008_p::CCC_91F, cchs2005_m::CCCE_91F, cchs2007_2008_m::CCC_91F",Chronic condition,Health status,N/A,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA CCCG102_2005plus,Age of diabetes diagnosis,How old were you when this was first diagnosed?,Categorical,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p","cchs2005_p::CCCEG102, cchs2015_2016_p::CCCG100, cchs2017_2018_p::CCCG100, [CCCG102]",Chronic condition,Health status,years,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA CCCG102_pre2005,Age of diabetes diagnosis,How old were you when this was first diagnosed?,Categorical,cchs2003_p,[CCCCG102],Chronic condition,Health status,years,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA -cigs_per_day,Cigs/day,"Cigarettes per day when smoking daily (ever-daily smokers, unified)",Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMK_204, SMK_208, SMKDSTY_original]",Smoking,Health behaviour,cigarettes,"{recommended:primary} {sub_subject:intensity} Universe: ever-daily smokers (SMKDSTY_original 1, 2, 4). Combines current (SMK_204) and former (SMK_208) daily intensity. Not supported: cchs2022_p / cchs2023_p (SMK_208 is Master-only via SPU in 2022/2023).",Unified daily smoking intensity for pack-years and dose-response analyses.,3.0.0-alpha,2026-04-24,Dropped cchs2022_p/cchs2023_p (SMK_208 uses SPU_20 which is Master-only).,,,active,Cascade-narrowed: dropped cchs2022_m/cchs2023_m (SMKDSTY_original feeder no longer covers those cycles). +cigs_per_day,Cigs/day,"Cigarettes per day when smoking daily (ever-daily smokers, unified)",Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, SMK_204, SMK_208]",Smoking,Health behaviour,cigarettes,"{recommended:primary} {sub_subject:intensity} Universe: ever-daily smokers (SMKDSTY_original 1, 2, 4). Combines current (SMK_204) and former (SMK_208) daily intensity. Not supported: cchs2022_p / cchs2023_p (SMK_208 is Master-only via SPU in 2022/2023).",Unified daily smoking intensity for pack-years and dose-response analyses.,3.0.0-alpha,2026-04-24,Dropped cchs2022_p/cchs2023_p (SMK_208 uses SPU_20 which is Master-only).,,,active,Cascade-narrowed: dropped cchs2022_m/cchs2023_m (SMKDSTY_original feeder no longer covers those cycles). COPD_Emph_der,COPD/Emphysema,COPD/Emphysema,Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2009_m, cchs2010_m, cchs2012_m","DerivedVar::[DHHGAGE_cont, CCC_91E, CCC_91F], DerivedVar::[DHHGAGE_cont, CCC_091]",Chronic condition,Health status,N/A,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA DEN_132,Visited dental professional - last time,Visited dental professional - last time,Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008p, cchs2009_2010_p, cchs2011_2012_p, cchs2013_2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008m, cchs2009_2010_m, cchs2011_2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m","cchs2001_m::DENA_132, cchs2003_m::DENC_132, cchs2005_m::DENE_132, cchs2015_2016_m::DEN_035, cchs2017_2018_m::DEN_035, cchs2001_p::DENA_132, cchs2003_p::DENC_132, cchs2005_p::DENE_132, cchs2015_2016_p::DEN_035, cchs2017_2018_p::DEN_035, [DEN_132]",Oral Health,Dental Visits,N/A,NA,"Dental module was Optional Content. Ontario excluded in 2007-2008, 2011-2012, and 2015-2016.",3.0.0,NA,NA,NA,NA,active,NA DEPDVSEV,Depression scale - severity of depression,Depression scale - severity of depression,Categorical,"cchs2015_2016_p, cchs2017_2018_p",[DEPDVPHQ],Chronic condition,Health status,N/A,NA,This module is a validated instrument to measure self-reported depression. It is called PHQ-9 and was developed by Spitzer et al (1999). It was first introduced in the CCHS in 2015.,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA @@ -125,7 +125,7 @@ EHG2_02,High school diploma,Completed high school diploma or equivalent,Categori EHG2_03,Other certificate/diploma/degree,"Other education - certificate, diploma or degree",Categorical,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[EHG2_03],Education,Sociodemographics,N/A,Feeder variable for EDUDR04 derived function (2015+ cycles),NA,3.0.0,2026-06-04,NA,NA,NA,active,NA EHG2_04,Highest credential completed,"Highest certificate, diploma or degree completed",Categorical,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[EHG2_04],Education,Sociodemographics,N/A,Feeder variable for EDUDR04 derived function (2015+ cycles),NA,3.0.0,2026-06-04,NA,NA,NA,active,NA energy_exp,Daily energy expenditure,Daily energy expenditure,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::PACADEE, cchs2003_p::PACCDEE, cchs2005_p::PACEDEE, cchs2015_2016_p::[DHHGAGE_cont, PAA_045, PAA_050, PAA_075, PAA_080, PAADVDYS, PAADVVIG, PAYDVTOA, PAYDVADL, PAYDVVIG, PAYDVDYS], cchs2017_2018_p::[DHHGAGE_cont, PAA_045, PAA_050, PAA_075, PAA_080, PAADVDYS, PAADVVIG, PAYDVTOA, PAYDVADL, PAYDVVIG, PAYDVDYS], cchs2019_2020_p::[DHHGAGE_cont, PAA_045, PAA_050, PAA_075, PAA_080, PAADVDYS, PAADVVIG, PAYDVTOA, PAYDVADL, PAYDVVIG, PAYDVDYS], cchs2001_m::PACADEE, cchs2003_m::PACCDEE, cchs2005_m::PACEDEE, cchs2015_2016_m::[DHH_AGE, PAA_045, PAA_050, PAA_075, PAA_080, PAADVDYS, PAADVVIG, PAYDVTOA, PAYDVADL, PAYDVVIG, PAYDVDYS], cchs2017_2018_m::[DHH_AGE, PAA_045, PAA_050, PAA_075, PAA_080, PAADVDYS, PAADVVIG, PAYDVTOA, PAYDVADL, PAYDVVIG, PAYDVDYS], cchs2019_2020_m::[DHH_AGE, PAA_045, PAA_050, PAA_075, PAA_080, PAADVDYS, PAADVVIG, PAYDVTOA, PAYDVADL, PAYDVVIG, PAYDVDYS], [PACDEE]",Exercise,Health behaviour,METS,Extended to 2019-2020 per L0-L4 analysis,NA,3.0.0,2026-01-18,Added cchs2019_2020_p - all input variables already support 2019-2020,NA,NA,active,"CEP-003: PA harmonization - 2019-2020 extension, PAADVWHO, label fixes" -energy_exp_cat3,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],Exercise,Health behaviour,N/A,"Derived from energy_exp using CCHS cutpoints: <1.5 inactive, 1.5-3 moderate, 3+ active",NA,3.0.0,2026-06-04,NA,NA,NA,active,NA +energy_exp_cat3,Categorical physical activity,"Categorical physical activity (Inactive, Moderately active, Active)",Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",DerivedVar::[energy_exp],Exercise,Health behaviour,N/A,"Derived from energy_exp using CCHS cutpoints: <1.5 inactive, 1.5-3 moderate, 3+ active",NA,3.0.0,2026-06-04,NA,NA,NA,active,NA FINF1,Food insecurity 12M,Some food insecurity in past 12 months,Categorical,"cchs2001_p, cchs2003_p","cchs2001_p::FINAF1, cchs2003_p::FINCF1",Food security,Sociodemographics,N/A,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA FLU_160,Ever had a flu shot,Have you ever had a flu shot?,Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2009_m, cchs2010_m, cchs2012_m","cchs2001_p::FLUA_160, cchs2003_p::FLUC_160, cchs2005_p::FLUE_160, cchs2015_2016_p::FLU_005, cchs2017_2018_p::FLU_005, [FLU_160]",Vaccination,Health care use,N/A,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA FLU_162,Last time had flu shot,When did you have your last flu shot?,Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2009_m, cchs2010_m, cchs2012_m","cchs2001_p::FLUA_162, cchs2003_p::FLUC_162, cchs2005_p::FLUE_162, cchs2015_2016_p::FLU_010, cchs2017_2018_p::FLU_010, [FLU_162]",Vaccination,Health care use,N/A,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA diff --git a/man/ALCDTTM.Rd b/man/ALCDTTM.Rd deleted file mode 100644 index 726211fc..00000000 --- a/man/ALCDTTM.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALCDTTM} -\alias{ALCDTTM} -\title{Type of drinker (12 months)} -\usage{ -ALCDTTM(ALCDTTM) -} -\arguments{ -\item{ALCDTTM}{cchsflow variable name for type of drinker (12 months)} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a categorical variable derived by Statistics Canada that uses - various intermediate alcohol variables to categorize individuals into 3 - distinct groups: - - \enumerate{ - \item Regular Drinker - \item Occasional Drinker - \item No drink in the last 12 months. - } -} -\details{ -This variable was introduced in the 2007-2008 cycle of the CCHS, and - became the sole derived variable that categorized people into various - drinker types from 2009 onwards. Unlike ALCDTYP, this variable does not - distinguish between former and never drinkers. -} -\examples{ -library(cchsflow) - ?ALCDTTM - -} diff --git a/man/ALCDTYP.Rd b/man/ALCDTYP.Rd deleted file mode 100644 index 975c0661..00000000 --- a/man/ALCDTYP.Rd +++ /dev/null @@ -1,40 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALCDTYP} -\alias{ALCDTYP} -\title{Type of drinker} -\usage{ -ALCDTYP(ALCDTYP) -} -\arguments{ -\item{ALCDTYP}{cchsflow variable name for type of drinker} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a categorical variable derived by Statistics Canada that uses - various intermediate alcohol variables to categorize individuals into 4 - distinct groups: - - \enumerate{ - \item Regular Drinker - \item Occasional Drinker - \item Former Drinker - \item Never Drinker - } -} -\details{ -This variable is used in CCHS cycles from 2001 to 2007. How it was - derived remained consistent during these years. - - Starting in 2007, Statistics Canada created a derived variable that looked - at drinking type in the last 12 months. This new derived variable did not - distinguish between former and never drinkers. If your research requires you - to differentiate between former and never drinkers, we recommend using - earlier cycles of the CCHS. -} -\examples{ -library(cchsflow) - ?ALCDTYP - -} diff --git a/man/ALWDDLY.Rd b/man/ALWDDLY.Rd deleted file mode 100644 index ed4eca54..00000000 --- a/man/ALWDDLY.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALWDDLY} -\alias{ALWDDLY} -\title{Average daily alcohol consumption} -\usage{ -ALWDDLY(ALWDDLY) -} -\arguments{ -\item{ALWDDLY}{cchsflow variable name for average daily alcohol consumption} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the mean daily consumption of alcohol. This takes the value of ALWDWKY and - divides it by 7. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow, and - how it was derived remains consistent. -} -\examples{ -library(cchsflow) - ?ALWDDLY - -} diff --git a/man/ALWDWKY.Rd b/man/ALWDWKY.Rd deleted file mode 100644 index 5e58f3f0..00000000 --- a/man/ALWDWKY.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALWDWKY} -\alias{ALWDWKY} -\title{Number of drinks consumed in the past week} -\usage{ -ALWDWKY(ALWDWKY) -} -\arguments{ -\item{ALWDWKY}{cchsflow variable name for number of drinks consumed in the -past week} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the amount of alcohol that is consumed in a week. This is calculated by - adding the number of drinks consumed each day in the past week. - Respondents of each CCHS cycle are asked how much alcohol they have - consumed each day in the past week (ie. how much alcohol did you consume on - Sunday, how much did you consume on Monday etc.). Each day is considered an - individual variable and ALWDWKY takes the sum of all daily variables. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow, and - how it was derived remains consistent. -} -\examples{ -library(cchsflow) - ?ALWDWKY - -} diff --git a/man/ALW_1.Rd b/man/ALW_1.Rd deleted file mode 100644 index 9e615df9..00000000 --- a/man/ALW_1.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_1} -\alias{ALW_1} -\title{Any alcohol past week} -\usage{ -ALW_1(ALW_1) -} -\arguments{ -\item{ALW_1}{cchsflow variable name for any alcohol past week} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a categorical variable derived by Statistics Canada that determines - if alcohol was consumed in the past week. The variable is optional in - selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_1 - -} diff --git a/man/ALW_2A1.Rd b/man/ALW_2A1.Rd deleted file mode 100644 index 261cc914..00000000 --- a/man/ALW_2A1.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A1} -\alias{ALW_2A1} -\title{Number of drinks - Sunday} -\usage{ -ALW_2A1(ALW_2A1) -} -\arguments{ -\item{ALW_2A1}{cchsflow variable name for number of drinks on Sunday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Sunday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A1 - -} diff --git a/man/ALW_2A2.Rd b/man/ALW_2A2.Rd deleted file mode 100644 index 7afbca3f..00000000 --- a/man/ALW_2A2.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A2} -\alias{ALW_2A2} -\title{Number of drinks - Monday} -\usage{ -ALW_2A2(ALW_2A2) -} -\arguments{ -\item{ALW_2A2}{cchsflow variable name for number of drinks on Monday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Monday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A2 - -} diff --git a/man/ALW_2A3.Rd b/man/ALW_2A3.Rd deleted file mode 100644 index 073eb5d0..00000000 --- a/man/ALW_2A3.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A3} -\alias{ALW_2A3} -\title{Number of drinks - Tuesday} -\usage{ -ALW_2A3(ALW_2A3) -} -\arguments{ -\item{ALW_2A3}{cchsflow variable name for number of drinks on Tuesday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Tuesday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A3 - -} diff --git a/man/ALW_2A4.Rd b/man/ALW_2A4.Rd deleted file mode 100644 index 0bc4fe21..00000000 --- a/man/ALW_2A4.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A4} -\alias{ALW_2A4} -\title{Number of drinks - Wednesday} -\usage{ -ALW_2A4(ALW_2A4) -} -\arguments{ -\item{ALW_2A4}{cchsflow variable name for number of drinks on Wednesday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Wednesday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A4 - -} diff --git a/man/ALW_2A5.Rd b/man/ALW_2A5.Rd deleted file mode 100644 index c7712ead..00000000 --- a/man/ALW_2A5.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A5} -\alias{ALW_2A5} -\title{Number of drinks - Thursday} -\usage{ -ALW_2A5(ALW_2A5) -} -\arguments{ -\item{ALW_2A5}{cchsflow variable name for number of drinks on Thursday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Thursday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A5 - -} diff --git a/man/ALW_2A6.Rd b/man/ALW_2A6.Rd deleted file mode 100644 index 5a3447f5..00000000 --- a/man/ALW_2A6.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A6} -\alias{ALW_2A6} -\title{Number of drinks - Friday} -\usage{ -ALW_2A6(ALW_2A6) -} -\arguments{ -\item{ALW_2A6}{cchsflow variable name for number of drinks on Friday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Friday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A6 - -} diff --git a/man/ALW_2A7.Rd b/man/ALW_2A7.Rd deleted file mode 100644 index 161e1d0e..00000000 --- a/man/ALW_2A7.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{ALW_2A7} -\alias{ALW_2A7} -\title{Number of drinks - Saturday} -\usage{ -ALW_2A7(ALW_2A7) -} -\arguments{ -\item{ALW_2A7}{cchsflow variable name for number of drinks on Saturday} -} -\description{ -\strong{NOTE:} this is not a function. - - This is a continuous variable derived by Statistics Canada that quantifies - the number of alcoholic drinks consumed on Saturday. The variable is - optional in selected provinces and territories. -} -\details{ -This variable is present in every CCHS cycle used in cchsflow. In -2007 and 2008, the variable is optional for Newfoundland and Labrador, Nova -Scotia, Ontario, British Columbia and Nunavut.In 2009 and 2010, the variable -is optional for Newfoundland and Labrador, Ontario, and Saskatchewan. In -2011, the variable is optional for Newfoundland and Labrador, Quebec, -Ontario, Manitoba, and Saskatchewan. In 2012, the variable is optional for -Newfoundland and Labrador, Quebec, Ontario, Manitoba, Nunavut, and -Saskatchewan.In 2013, the variable is optional for Quebec, Ontario, Prince -Edward Island, Manitoba, Yukon, and Saskatchewan. In 2014, the variable is -optional for Nunavut, Quebec, Ontario, Prince Edward Island, Manitoba, -Newfoundland and Labrador, Saskatchewan, and British Columbia. -} -\examples{ -library(cchsflow) - ?ALW_2A7 - -} diff --git a/man/CCC_091_fun1.Rd b/man/CCC_091_fun1.Rd new file mode 100644 index 00000000..981f0977 --- /dev/null +++ b/man/CCC_091_fun1.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/respiratory-condition.R +\name{CCC_091_fun1} +\alias{CCC_091_fun1} +\title{CCC_091_fun1} +\usage{ +CCC_091_fun1(CCC_91A, CCC_91B) +} +\arguments{ +\item{CCC_91A}{variable indicating if respondent has chronic bronchitis} + +\item{CCC_91B}{variable indicating if respondent has emphysema or COPD} +} +\value{ +a categorical variable (CCC_091) with 2 levels: + + \enumerate{ + \item respondent has COPD, emphysema, or chronic bronchitis + \item respondent does not have COPD, emphysema, or chronic bronchitis + } +} +\description{ +This is one of 2 functions used to derive CCC_091 + (COPD/emphysema/chronic bronchitis) for CCHS cycles (2001-2003) in which + the concept is split across two separate questions: CCC_91A (chronic + bronchitis) and CCC_91B (emphysema/COPD combined). A respondent is + considered to have the condition if they answered yes to either question. +} +\examples{ +# Using CCC_091_fun1() to derive CCC_091 for 2001/2003 cycles. +# CCC_091_fun1() is specified in variable_details.csv along with the +# CCHS variables and cycles included. + +library(cchsflow) + +CCC_091_2001 <- suppressWarnings(rec_with_table( + cchs2001_p, c("CCC_91A", "CCC_91B", "CCC_091") +)) + +head(CCC_091_2001) +} +\seealso{ +\code{\link{CCC_091_fun2}} +} diff --git a/man/CCC_091_fun2.Rd b/man/CCC_091_fun2.Rd new file mode 100644 index 00000000..2a0ea536 --- /dev/null +++ b/man/CCC_091_fun2.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/respiratory-condition.R +\name{CCC_091_fun2} +\alias{CCC_091_fun2} +\title{CCC_091_fun2} +\usage{ +CCC_091_fun2(CCC_91A, CCC_91E, CCC_91F) +} +\arguments{ +\item{CCC_91A}{variable indicating if respondent has chronic bronchitis} + +\item{CCC_91E}{variable indicating if respondent has emphysema} + +\item{CCC_91F}{variable indicating if respondent has COPD} +} +\value{ +a categorical variable (CCC_091) with 2 levels: + + \enumerate{ + \item respondent has COPD, emphysema, or chronic bronchitis + \item respondent does not have COPD, emphysema, or chronic bronchitis + } +} +\description{ +This is one of 2 functions used to derive CCC_091 + (COPD/emphysema/chronic bronchitis) for CCHS cycles (2005-2008) in which + the concept is split across three separate questions: CCC_91A (chronic + bronchitis), CCC_91E (emphysema), and CCC_91F (COPD). A respondent is + considered to have the condition if they answered yes to any question. +} +\examples{ +# Using CCC_091_fun2() to derive CCC_091 for 2005/2007-08 cycles. +# CCC_091_fun2() is specified in variable_details.csv along with the +# CCHS variables and cycles included. + +library(cchsflow) + +CCC_091_2005 <- suppressWarnings(rec_with_table( + cchs2005_p, c("CCC_91A", "CCC_91E", "CCC_91F", "CCC_091") +)) + +head(CCC_091_2005) +} +\seealso{ +\code{\link{CCC_091_fun1}} +} diff --git a/man/COPD_Emph_der_fun1.Rd b/man/COPD_Emph_der_fun1.Rd index b8e8db55..b785eb13 100644 --- a/man/COPD_Emph_der_fun1.Rd +++ b/man/COPD_Emph_der_fun1.Rd @@ -4,10 +4,10 @@ \alias{COPD_Emph_der_fun1} \title{COPD_Emph_der_fun1} \usage{ -COPD_Emph_der_fun1(DHHGAGE_cont, CCC_91E, CCC_91F) +COPD_Emph_der_fun1(age, CCC_91E, CCC_91F) } \arguments{ -\item{DHHGAGE_cont}{continuous age variable.} +\item{age}{continuous age variable.} \item{CCC_91E}{variable indicating if respondent has Emphysema} @@ -24,7 +24,7 @@ a categorical variable (COPD_Emph_der) with 3 levels: } \description{ This is one of 2 functions used to create a derived variable - (COPD_Emph_der) that determines if a respondents has either COPD or + (COPD_Emph_der) that determines if a respondents has either COPD or Emphysema. 2 different functions have been created to account for the fact that different respiratory variables are used across CCHS cycles. This function is for CCHS cycles (2005-2008) that use COPD and Emphysema as @@ -43,7 +43,7 @@ This is one of 2 functions used to create a derived variable library(cchsflow) COPD2005 <- suppressWarnings(rec_with_table( - cchs2005_p, c( + cchs2005_p, c( "DHHGAGE_cont", "CCC_91E", "CCC_91F", "COPD_Emph_der" ) @@ -53,7 +53,7 @@ head(COPD2005) COPD2007_2008 <- suppressWarnings(rec_with_table( cchs2007_2008_p, c( - "DHHGAGE_cont", "CCC_91E", "CCC_91F", + "DHHGAGE_cont", "CCC_91E", "CCC_91F", "COPD_Emph_der" ) )) diff --git a/man/COPD_Emph_der_fun2.Rd b/man/COPD_Emph_der_fun2.Rd index 7d2646be..25825d35 100644 --- a/man/COPD_Emph_der_fun2.Rd +++ b/man/COPD_Emph_der_fun2.Rd @@ -4,10 +4,10 @@ \alias{COPD_Emph_der_fun2} \title{COPD_Emph_der_fun2} \usage{ -COPD_Emph_der_fun2(DHHGAGE_cont, CCC_091) +COPD_Emph_der_fun2(age, CCC_091) } \arguments{ -\item{DHHGAGE_cont}{continuous age variable.} +\item{age}{continuous age variable.} \item{CCC_091}{variable indicating if respondent has either COPD or Emphysema} } @@ -22,7 +22,7 @@ a categorical variable (COPD_Emph_der) with 3 levels: } \description{ This is one of 2 functions used to create a derived variable - (COPD_Emph_der) that determines if a respondents has either COPD or + (COPD_Emph_der) that determines if a respondents has either COPD or Emphysema. 2 different functions have been created to account for the fact that different respiratory variables are used across CCHS cycles. This function is for CCHS cycles (2001-2003, 2009-2014) that use COPD and @@ -41,7 +41,7 @@ This is one of 2 functions used to create a derived variable library(cchsflow) COPD2001 <- suppressWarnings(rec_with_table( - cchs2001_p, c( + cchs2001_p, c( "DHHGAGE_cont", "CCC_091", "COPD_Emph_der" ) @@ -51,7 +51,7 @@ head(COPD2001) COPD2014 <- suppressWarnings(rec_with_table( cchs2007_2008_p, c( - "DHHGAGE_cont", "CCC_091", + "DHHGAGE_cont", "CCC_091", "COPD_Emph_der" ) )) diff --git a/man/EDUDR04_fun.Rd b/man/EDUDR04_fun.Rd new file mode 100644 index 00000000..3ff2664b --- /dev/null +++ b/man/EDUDR04_fun.Rd @@ -0,0 +1,67 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/education.R +\name{EDUDR04_fun} +\alias{EDUDR04_fun} +\title{Derive 4-category education variable (EDUDR04)} +\usage{ +EDUDR04_fun(EHG2_01, EHG2_02, EHG2_03, EHG2_04) +} +\arguments{ +\item{EHG2_01}{Highest grade of elementary or high school. Codes: +1 = Grade 8 or lower; 2 = Grade 9-10; 3 = Grade 11-13; +6 = not applicable / valid skip (NA(a)); +7/8/9 = don't know / refusal / not stated (NA(b)).} + +\item{EHG2_02}{Completed a high school diploma or equivalent. Codes: +1 = Yes; 2 = No; +6 = not applicable / valid skip (NA(a)); +7/8/9 = don't know / refusal / not stated (NA(b)).} + +\item{EHG2_03}{Other education - certificate/diploma/degree. Codes: +1 = Yes; 2 = No; +6 = not applicable / valid skip (NA(a)); +7/8/9 = don't know / refusal / not stated (NA(b)).} + +\item{EHG2_04}{Highest certificate, diploma or degree completed. Codes: +\itemize{ + \item 1 = Less than high school diploma or its equivalent + \item 2 = High school diploma or equivalency certificate + \item 3 = Trade certificate or diploma + \item 4 = College/CEGEP/other non-university certificate or diploma + \item 5 = University certificate or diploma below bachelor's level + \item 6 = Bachelor's degree + \item 7 = University certificate/diploma/degree above bachelor's level + \item 96 = not applicable / valid skip (NA(a)) + \item 97/98/99 = don't know / refusal / not stated (NA(b)) +}} +} +\value{ +a categorical variable (EDUDR04) with 4 levels, or a tagged NA: + \enumerate{ + \item Less than secondary school graduation + \item Secondary school graduation, no post-secondary + \item Some post-secondary education + \item Post-secondary graduation + } + Returns \code{tagged_na("a")} when the education module was not applicable + and \code{tagged_na("b")} when a required input is missing or no rule + applies. +} +\description{ +Derives the 4-category highest-education variable (EDUDR04) for + CCHS cycles 2015-2016 onwards, where the pre-2015 derived variable EDUDR04 + is no longer provided. It reconstructs the equivalent 4-level + classification from the four raw education-module questions introduced in + 2015-2016 (EHG2_01 through EHG2_04). +} +\examples{ +# Post-secondary graduate with bachelor's degree +EDUDR04_fun(3, 1, 1, 6) + +# Less than high school +EDUDR04_fun(1, 2, 2, 96) + +# High school graduate, no post-secondary +EDUDR04_fun(3, 1, 2, 96) + +} diff --git a/man/PACK_YEARS_CONSTANTS.Rd b/man/PACK_YEARS_CONSTANTS.Rd new file mode 100644 index 00000000..d2653b7b --- /dev/null +++ b/man/PACK_YEARS_CONSTANTS.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/smoking-validation-constants.R +\docType{data} +\name{PACK_YEARS_CONSTANTS} +\alias{PACK_YEARS_CONSTANTS} +\title{Pack-years calculation constants} +\format{ +An object of class \code{list} of length 6. +} +\usage{ +PACK_YEARS_CONSTANTS +} +\description{ +These constants are used in calculate_pack_years() and related +pack-years calculation functions. They cannot be expressed in +variable_details.csv because they are calculation parameters, not +recoding bounds. +} +\details{ +Evidence base: +- MIN_PACK_YEARS: 100 cigarettes / 7300 = 0.0137 (NHIS/BRFSS "established smoker") +- MIN_PACK_YEARS_ALT: 50 cigarettes / 7300 = 0.007 (youth/experimental smoker) +- MAX_PACK_YEARS: Empirical ceiling from ATBC (162) and Pain & Health (165) studies +} +\seealso{ +harmonization-development/smoking/05-pack-years/L2_semantic_mapping.md +} +\keyword{datasets} diff --git a/man/active_transport3_fun.Rd b/man/active_transport3_fun.Rd index 98994ea8..42e2eca2 100644 --- a/man/active_transport3_fun.Rd +++ b/man/active_transport3_fun.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/active-transportation.R \name{active_transport3_fun} \alias{active_transport3_fun} -\title{Daily active transportation (2015-2018)} +\title{Daily active transportation (2015-2020)} \usage{ active_transport3_fun(PAYDVTTR, PAADVTRV) } @@ -19,11 +19,11 @@ Continuous variable for active transportation (active_transport) \description{ This function creates a derived variable for daily time spent traveling in active ways. This includes walking and biking. This function is -used for CCHS 2015-2018. +used for CCHS 2015-2020. } \examples{ # Using active_transport3_fun() to determine daily time spent -# traveling in active ways values across CCHS 2015-2018. +# traveling in active ways values across CCHS 2015-2020. # active_transport3_fun() is specified in variable_details.csv along with the CCHS # variables and cycles included. diff --git a/man/adjust_bmi.Rd b/man/adjust_bmi.Rd new file mode 100644 index 00000000..ff9b3642 --- /dev/null +++ b/man/adjust_bmi.Rd @@ -0,0 +1,89 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bmi.R +\name{adjust_bmi} +\alias{adjust_bmi} +\title{Calculate bias-corrected BMI} +\usage{ +adjust_bmi(sex, height_m, weight_kg, output_format = "tagged_na") +} +\arguments{ +\item{sex}{Sex (1 = male, 2 = female). CCHS missing codes (6-9) are +handled automatically.} + +\item{height_m}{Height in metres.} + +\item{weight_kg}{Weight in kilograms.} + +\item{output_format}{Output missing data format: "tagged_na" (default) or +"original".} + +\item{...}{Arguments passed from deprecated aliases.} +} +\value{ +Numeric vector of bias-corrected BMI values. +} +\description{ +Applies sex-specific correction from Connor Gorber et al. (2008) to +account for self-reporting bias in height and weight. Source-agnostic — +works with both PUMF and Master data via worksheet routing. +} +\details{ +## Correction formulas + +Connor Gorber et al. (2008) derived sex-specific linear corrections +from measured vs self-reported anthropometrics: + +- Male: -1.07575 + 1.07592 * BMI +- Female: -0.12374 + 1.05129 * BMI + +## PUMF vs Master + +This function is source-agnostic. The worksheet routes different source +variables to the same parameters depending on database type: + +| Parameter | PUMF source | Master source | +|-----------|-------------|---------------| +| sex | DHH_SEX | DHH_SEX | +| height_m | HWTGHTM (grouped) | HWTDHTM (continuous) | +| weight_kg | HWTGWTK (grouped) | HWTDWTK (continuous) | +} +\examples{ +# Scalar — male +adjust_bmi(sex = 1, height_m = 1.75, weight_kg = 70) + +# Scalar — female +adjust_bmi(sex = 2, height_m = 1.65, weight_kg = 60) + +# Vector +adjust_bmi( + sex = c(1, 2, 1), + height_m = c(1.75, 1.65, 1.80), + weight_kg = c(70, 60, 80) +) + +# Dataframe +library(dplyr) +data.frame(sex = c(1, 2), ht = c(1.75, 1.65), wt = c(70, 60)) \%>\% + mutate(adj_bmi = adjust_bmi(sex, ht, wt)) + +# Standalone with rec_with_table +\dontrun{ +result <- rec_with_table( + cchs2015_2016_p, + variables = variables, + variable_details = variable_details, + log = TRUE +) +result$HWTGCOR_der +} + +} +\references{ +Connor Gorber, S., et al. (2008). The accuracy of self-reported height +and weight in a nationally representative sample of Canadian adults. +*Obesity*, 16(10), 2326-2332. +} +\seealso{ +[calculate_bmi()] for standard BMI, [categorize_bmi()] for + WHO categories. +} diff --git a/man/adjusted_bmi_fun.Rd b/man/adjusted_bmi_fun.Rd deleted file mode 100644 index d2f4cdb6..00000000 --- a/man/adjusted_bmi_fun.Rd +++ /dev/null @@ -1,99 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/bmi.R -\name{adjusted_bmi_fun} -\alias{adjusted_bmi_fun} -\title{Adjusted Body Mass Index (BMI) derived variable} -\usage{ -adjusted_bmi_fun(DHH_SEX, HWTGHTM, HWTGWTK) -} -\arguments{ -\item{DHH_SEX}{CCHS variable for sex; 1 = male, 2 = female} - -\item{HWTGHTM}{CCHS variable for height (in meters)} - -\item{HWTGWTK}{CCHS variable for weight (in kilograms)} -} -\value{ -numeric value for adjusted BMI in the HWTGCOR_der variable -} -\description{ -This function creates a harmonized adjusted BMI variable. -A systematic review of the literature concluded that the use of -self-reported data among adults underestimates weight and overestimates -height, resulting in lower estimates of obesity than those obtained from -measured data. Using data from the 2005 Canadian Community Health Survey -(CCHS) subsample, where both measured and self-reported values were -collected, correction equations have been developed -(Connor Gorber et al. 2008). Differences between corrected estimates of -obesity from the CCHS and measured estimates from the Canadian Health -Measures Survey is monitored over time to determine if the bias in -self-reported values is changing and if new correction equations need to be -developed. Adjusted BMI variable is first introduced in the CCHS 2015 cycle. - - adjusted_bmi_fun() creates a derived variable (HWTGCOR_der) that is - harmonized across all CCHS cycles. This function takes the BMI by dividing - weight by the square of height, and adds a correction value based on sex. -} -\details{ -For HWTGCOR_der, there are no restrictions to age, height, weight, - or pregnancy status. While pregnancy was consistent across all CCHS cycles, - its variable (MAM_037) was not available in the PUMF CCHS datasets so it - could not be harmonized and included into the function. - - HWTGCOR_der uses the CCHS variables for sex, height and weight that have been - transformed by cchsflow. In order to generate a value for adjusted BMI - across CCHS cycles, sex, height and weight must be transformed and - harmonized. -} -\note{ -In earlier CCHS cycles (2001 and 2003), height was collected in inches; - while in later CCHS cycles (2005+) it was collected in meters. To harmonize - values across cycles, height was converted to meters (to 3 decimal points). - Weight was collected in kilograms across all CCHS cycles, so no - transformations were required in the harmonization process. -} -\examples{ -# Using adjusted_bmi_fun() to create adjusted BMI values between cycles -# adjusted_bmi_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform the derived BMI variable, use rec_with_table() for each cycle -# and specify HWTGCOR_der, along with sex (DHH_SEX), height (HWTGHTM) and -# weight (HWTGWTK).Then by using merge_rec_data(), you can combined -# HWTGBMI_der across cycles. - -library(cchsflow) -adjustedbmi2001 <- rec_with_table( - cchs2001_p, c( - "HWTGHTM", - "HWTGWTK", - "DHH_SEX", - "HWTGCOR_der" - ) -) - -head(adjustedbmi2001) - -adjustedbmi2011_2012 <- rec_with_table( - cchs2011_2012_p, c( - "HWTGHTM", - "HWTGWTK", - "DHH_SEX", - "HWTGCOR_der" - ) -) - -tail(adjustedbmi2011_2012) - -combined_bmi <- merge_rec_data(adjustedbmi2001, adjustedbmi2011_2012) -head(combined_bmi) -tail(combined_bmi) - -# adjusted_bmi_fun() can also generate a value for BMI if you input your sex, -# and a value for height and weight. Let's say your sex is male, height is -# 170cm (1.7m) and your weight is 50kg, your BMI can be calculated as follows: - -library(cchsflow) -adjusted_BMI <- adjusted_bmi_fun(DHH_SEX = 1, HWTGHTM = 1.7, HWTGWTK = 50) -print(adjusted_BMI) -} diff --git a/man/adl_fun.Rd b/man/adl_fun.Rd deleted file mode 100644 index 1b5272df..00000000 --- a/man/adl_fun.Rd +++ /dev/null @@ -1,119 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/adl.R -\name{adl_fun} -\alias{adl_fun} -\title{Derived needs help with tasks} -\usage{ -adl_fun(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) -} -\arguments{ -\item{ADL_01}{Needs help preparing meals} - -\item{ADL_02}{Needs help getting to appointments/errands} - -\item{ADL_03}{Needs help doing housework} - -\item{ADL_04}{Needs help doing personal care} - -\item{ADL_05}{Needs help moving inside house} -} -\value{ -A derived variable (ADL_der) with 2 categories: - \enumerate{ - \item - Needs help with tasks - \item - Does not need help with tasks - } -} -\description{ -This derived variable (ADL_der) is based on the CCHS derived - variable ADLF6R which flags respondents who need help with tasks based on - their response to the various activities of daily living (ADL) variables. -} -\details{ -The CCHS derived variable ADLF6R uses different ADL variables across - the various CCHS survey cycles. This newly derived variable (ADL_der) uses - ADL variables that are consistent across CCHS cycles. - - In the 2001 CCHS survey cycle, the ADLF6R variable examines the following - ADL variables: - \enumerate{ - \item ADL_01 - Needs help preparing meals - \item ADL_02 - Needs help getting to appointments/errands - \item ADL_03 - Needs help doing housework - \item ADL_04 - Needs help doing personal care - \item ADL_05 - Needs help moving inside house - \item ADL_07 - Needs help doing heavy household chores - } - - In the 2003-2005 CCHS survey cycles, the ADLF6R variable examines the - following ADL variables: - \enumerate{ - \item ADL_01 - Needs help preparing meals - \item ADL_02 - Needs help getting to appointments/errands - \item ADL_03 - Needs help doing housework - \item ADL_04 - Needs help doing personal care - \item ADL_05 - Needs help moving inside house - \item ADL_06 - Needs help doing finances - \item ADL_07 - Needs help doing heavy household chores - } - - In the 2007-2014 CCHS survey cycles, the ADLF6R variable examines the - following ADL variables: - \enumerate{ - \item ADL_01 - Needs help preparing meals - \item ADL_02 - Needs help getting to appointments/errands - \item ADL_03 - Needs help doing housework - \item ADL_04 - Needs help doing personal care - \item ADL_05 - Needs help moving inside house - \item ADL_06 - Needs help doing finances - } - - This newly derived variable (ADL_der) uses ADL_01 to ADL_05 which are - consistent across all survey cycles. For any single CCHS survey year, - it is appropriate to use ADLF6R. ADL_der is recommended when using multiple - survey cycles. -} -\examples{ -# Using adl_fun() to create ADL_der values across CCHS cycles -# adl_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform ADL_der, use rec_with_table() for each CCHS cycle -# and specify ADL_der, along with the various ADL variables. -# Then by using merge_rec_data() you can combine ADL_der across cycles. - -library(cchsflow) -adl2001 <- rec_with_table( - cchs2001_p, c( - "ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_der" - ) -) - -head(adl2001) - -adl2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_der" - ) -) - -tail(adl2009_2010) - -combined_adl <- merge_rec_data(adl2001, adl2009_2010) - -head(combined_adl) - -tail(combined_adl) - -# Using adl_fun() to generate to ADL_der based on user inputted values. -# -# Let's say you do not need help preparing meals, you need help getting to -# appointments or errands, you need help doing housework, do not need help -# doing personal care, and do not need help moving inside the house. Using -# adl_fun() we can check if you need help doing tasks - -ADL_der <- adl_fun(2, 1, 1, 2, 2) - -print(ADL_der) - -} diff --git a/man/adl_score_5_fun.Rd b/man/adl_score_5_fun.Rd deleted file mode 100644 index 48190a75..00000000 --- a/man/adl_score_5_fun.Rd +++ /dev/null @@ -1,81 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/adl.R -\name{adl_score_5_fun} -\alias{adl_score_5_fun} -\title{The number of activities of daily living tasks that require help.} -\usage{ -adl_score_5_fun(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) -} -\arguments{ -\item{ADL_01}{Needs help preparing meals.} - -\item{ADL_02}{Needs help getting to appointments/errands.} - -\item{ADL_03}{Needs help doing housework.} - -\item{ADL_04}{Needs help doing personal care.} - -\item{ADL_05}{Needs help moving inside house.} -} -\value{ -A derived variable (ADL_score_5) with 6 categories: -\enumerate{ - \item 0 - Needs help with 0 tasks - \item 1 - Needs help with at least 1 task - \item 2 - Needs help with at least 2 tasks - \item 3 - Needs help with at least 3 tasks - \item 4 - Needs help with at least 4 tasks - \item 5 - Needs help with at least 5 tasks -} -} -\description{ -A 6 category variable (ADL_score_5) representing the number of - activities of daily living tasks that require help. This variable tallies - the number of daily living tasks that a respondent requires help with based - on various ADL variables that a respondent answered yes or no to. The ADL - variables used are common across all CCHS cycles from 2001 to 2014. -} -\examples{ -# Use adl_score_5_fun() to create the variable ADL_score_5 across CCHS -# cycles adl_score_5_fun() is specified in variable_details.csv along with -# the CCHS variables and cycles included. - -# To transform ADL_score_5, use rec_with_table() for each CCHS cycle -# and specify ADL_score_5, along with the various ADL variables. -# Then by using merge_rec_data() you can combine ADL_der across cycles. - -library(cchsflow) -adl2001 <- rec_with_table( - cchs2001_p, c( - "ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_score_5" - ) -) - -head(adl2001) - -adl2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_score_5" - ) -) - -tail(adl2009_2010) - -combined_adl <- merge_rec_data(adl2001, adl2009_2010) - -head(combined_adl) - -tail(combined_adl) - -# Using adl_score_5_fun() to generate to ADL_score_5 based on user inputted -# values. -# Let's say you do not need help preparing meals, you need help getting to -# appointments or errands, you need help doing housework, do not need help -# doing personal care, and do not need help moving inside the house. Using -# adl_score_5_fun() we can check the number of tasks you need help with - -ADL_score_5 <- adl_score_5_fun(2, 1, 1, 2, 2) - -print(ADL_score_5) - -} diff --git a/man/assess_adl.Rd b/man/assess_adl.Rd new file mode 100644 index 00000000..bb4a9012 --- /dev/null +++ b/man/assess_adl.Rd @@ -0,0 +1,116 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/adl.R +\name{assess_adl} +\alias{assess_adl} +\title{Enhanced Activities of Daily Living (ADL) help indicator} +\usage{ +assess_adl( + ADL_01, + ADL_02, + ADL_03, + ADL_04, + ADL_05, + min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, + validate_params = NULL, + log_level = "silent" +) +} +\arguments{ +\item{ADL_01}{Help needed preparing meals (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{ADL_02}{Help needed getting to appointments/errands (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{ADL_03}{Help needed doing housework (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{ADL_04}{Help needed doing personal care (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{ADL_05}{Help needed moving inside house (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{min_ADL_01, max_ADL_01, min_ADL_02, max_ADL_02, min_ADL_03, max_ADL_03, min_ADL_04, max_ADL_04, min_ADL_05, max_ADL_05}{Validation parameters (defaults from variable_details.csv)} + +\item{validate_params}{Auto-detect validation mode (default NULL for auto-detection)} + +\item{log_level}{Logging level: "silent" (default), "warning", "verbose"} +} +\value{ +**Data Type**: Numeric binary indicator +**Missing Data Handling**: +- Returns `haven::tagged_na("a")` for not applicable cases +- Returns `haven::tagged_na("b")` for missing/invalid responses +**Values**: 1 = needs help with ≥1 task, 2 = no help needed with any task +} +\description{ +**Purpose**: Create binary indicator for ADL help requirements using variables consistent across CCHS cycles +**Method**: Examines 5 core ADL tasks available in all cycles (2001-2018) +**Clinical Context**: Functional limitation assessment for population health research +} +\details{ +**Transformation Warnings**: +⚠️ **CAUTION - Temporal Changes**: Original CCHS derived variable ADLF6R uses +different ADL components across cycles. This function uses consistent 5-item +subset for cross-cycle comparability. + +⚠️ **CAUTION - Population Restrictions**: ADL questions typically restricted +to respondents with activity limitations. Not applicable responses preserved. + +**Calculation Details**: +- Uses ADL_01 through ADL_05 (consistent across all CCHS cycles) +- Any "needs help" (=1) response results in overall score of 1 +- All "no help needed" (=2) responses result in overall score of 2 +- Missing Data: Comprehensive preprocessing of CCHS codes (6,7,8,9) +- Priority: Not applicable > Missing > Valid responses +} +\note{ +v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced with comprehensive preprocessing and modern missing data handling +} +\examples{ +# Standard cchsflow workflow (primary usage) +library(cchsflow) +result <- rec_with_table( + cchs2013_2014_p, + c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADLF6R_der") +) + +# Scalar usage examples +# assess_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) +# (meals, appts, house, care, move) +assess_adl(1, 2, 2, 2, 2) # Returns: 1 (needs help with meals only) +assess_adl(2, 2, 2, 2, 2) # Returns: 2 (no help needed with any task) +assess_adl(1, 1, 1, 1, 1) # Returns: 1 (needs help with all tasks) + +# Vector processing with missing data and edge cases +assess_adl( + c(1, 2, 6, 7, 8, 9), # Mixed valid/CCHS codes + c(2, 2, 2, 2, 2, 2), + c(2, 2, 2, 2, 2, 2), + c(2, 2, 2, 2, 2, 2), + c(2, 2, 2, 2, 2, 2) +) # Returns: c(1, 2, tagged_na("a"), tagged_na("b"), tagged_na("b"), tagged_na("b")) + +# Vector with string missing values +assess_adl( + c(1, 2, "Not applicable"), + c(2, 2, 2), + c(2, 2, 2), + c(2, 2, 2), + c(2, 2, 2) +) # Returns: c(1, 2, tagged_na("a")) + +} +\references{ +Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. +JAMA, 185(12), 914-919. +} +\seealso{ +\code{\link{score_adl}} for count-based ADL scoring +\code{\link{score_adl_6}} for 6-item ADL scoring +} diff --git a/man/binge_drinker_fun.Rd b/man/binge_drinker_fun.Rd deleted file mode 100644 index c497e8da..00000000 --- a/man/binge_drinker_fun.Rd +++ /dev/null @@ -1,108 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{binge_drinker_fun} -\alias{binge_drinker_fun} -\title{Binge drinking} -\usage{ -binge_drinker_fun( - DHH_SEX, - ALW_1, - ALW_2A1, - ALW_2A2, - ALW_2A3, - ALW_2A4, - ALW_2A5, - ALW_2A6, - ALW_2A7 -) -} -\arguments{ -\item{DHH_SEX}{sex of respondent (1 - male, 2 - female)} - -\item{ALW_1}{Drinks in the last week (1 - yes, 2 - no)} - -\item{ALW_2A1}{Number of drinks on Sunday} - -\item{ALW_2A2}{Number of drinks on Monday} - -\item{ALW_2A3}{Number of drinks on Tuesday} - -\item{ALW_2A4}{Number of drinks on Wednesday} - -\item{ALW_2A5}{Number of drinks on Thursday} - -\item{ALW_2A6}{Number of drinks on Friday} - -\item{ALW_2A7}{Number of drinks on Saturday} -} -\value{ -Categorical variable (binge_drinker) with two categories: - - \enumerate{ - \item 1 - binge drinker - \item 2 - non-binge drinker - } -} -\description{ -This function creates a derived categorical variable that - flags for binge drinking based on the number drinks consumed on a single - day. -} -\details{ -In health research, binge drinking is defined as having an excess - amount of alcohol in a single day. For males, this is defined as having five - or more drinks; and for females it is four or more drinks. In the CCHS, - respondents are asked to count the number of drinks they had during each - day of the last week. -} -\examples{ - -# Using binge_drinker_fun() to create binge_drinker values across CCHS cycles -# binge_drinker_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform binge_drinker, use rec_with_table() for each CCHS cycle -# and specify binge_drinker, along with the various alcohol and sex -# variables. Then by using bind_rows() you can combine binge_drinker -# across cycles. - -library(cchsflow) -binge2001 <- rec_with_table( - cchs2001_p, c( - "ALW_1", "DHH_SEX", "ALW_2A1", "ALW_2A2", "ALW_2A3", "ALW_2A4", - "ALW_2A5", "ALW_2A6", "ALW_2A7", "binge_drinker" - ) -) - -head(binge2001) - -binge2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "ALW_1", "DHH_SEX", "ALW_2A1", "ALW_2A2", "ALW_2A3", "ALW_2A4", - "ALW_2A5", "ALW_2A6", "ALW_2A7", "binge_drinker" - ) -) - -tail(binge2009_2010) - -combined_binge <- bind_rows(binge2001, binge2009_2010) - -head(combined_binge) - -tail(combined_binge) - -# Using binge_drinker_fun() to generate binge_drinker with user-inputted -# values. -# -# Let's say you are a male, and you had drinks in the last week. Let's say -# you had 3 drinks on Sunday, 1 drink on -# Monday, 6 drinks on Tuesday, 0 drinks on Wednesday, 3 drinks on Thurday, -# 8 drinks on Friday, and 2 drinks on Saturday. Using binge_drinker_fun(), -# we can check if you would be classified as a drinker. - -binge <- binge_drinker_fun(DHH_SEX = 1, ALW_1 = 1, ALW_2A1 = 3, ALW_2A2 = 1, - ALW_2A3 = 6, ALW_2A4 = 0, ALW_2A5 = 3, - ALW_2A6 = 8, ALW_2A7 = 2) - -print(binge) -} diff --git a/man/bmi_fun.Rd b/man/bmi_fun.Rd deleted file mode 100644 index b5c8c3c2..00000000 --- a/man/bmi_fun.Rd +++ /dev/null @@ -1,95 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/bmi.R -\name{bmi_fun} -\alias{bmi_fun} -\title{Body Mass Index (BMI) derived variable} -\usage{ -bmi_fun(HWTGHTM, HWTGWTK) -} -\arguments{ -\item{HWTGHTM}{CCHS variable for height (in meters)} - -\item{HWTGWTK}{CCHS variable for weight (in kilograms)} -} -\value{ -numeric value for BMI in the HWTGBMI_der variable -} -\description{ -This function creates a harmonized BMI variable. The BMI - variable provided by the CCHS calculates BMI using methods that vary across - cycles, leading to measurement error when using multiple CCHS cycles. In - certain CCHS cycles (2001-2003, 2007+), there are age restrictions in which - respondents under the age of 20 and over the age of 64 were not included. - Across all CCHS cycles, female respondents who identified as being pregnant - were excluded; and in certain CCHS cycles (2003-2007, 2013-2014), females - who did not answer the pregnancy question were coded as NS (not stated) for - HWTGBMI. As well, in certain CCHS cycles (2001-2003, 2009-2014), respondents - outside certain height and weight ranges (0.914-2.108m for height, - 0-260kg for weight) were excluded from HWTGBMI. - - bmi_fun() creates a derived variable (HWTGBMI_der) that is harmonized across - all CCHS cycles. This function divides weight by the square of height. -} -\details{ -For HWTGBMI_der, there are no restrictions to age, height, weight, - or pregnancy status. While pregnancy was consistent across all CCHS cycles, - its variable (MAM_037) was not available in the PUMF CCHS datasets so it - could not be harmonized and included into the function. - - For any single CCHS survey year, it is appropriate to use the CCHS BMI - variable (HWTGBMI) that is also available on cchsflow. HWTGBMI_der is - recommended when using multiple survey cycles. - - HWTGBMI_der uses the CCHS variables for height and weight that have been - transformed by cchsflow. In order to generate a value for BMI across CCHS - cycles, height and weight must be transformed and harmonized. -} -\note{ -In earlier CCHS cycles (2001 and 2003), height was collected in inches; - while in later CCHS cycles (2005+) it was collected in meters. To harmonize - values across cycles, height was converted to meters (to 3 decimal points). - Weight was collected in kilograms across all CCHS cycles, so no - transformations were required in the harmonization process. -} -\examples{ -# Using bmi_fun() to create BMI values between cycles -# bmi_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform the derived BMI variable, use rec_with_table() for each cycle -# and specify HWTGBMI_der, along with height (HWTGHTM) and weight (HWTGWTK). -# Then by using merge_rec_data(), you can combined HWTGBMI_der across -# cycles. - -library(cchsflow) -bmi2001 <- rec_with_table( - cchs2001_p, c( - "HWTGHTM", - "HWTGWTK", "HWTGBMI_der" - ) -) - -head(bmi2001) - -bmi2011_2012 <- rec_with_table( - cchs2011_2012_p, c( - "HWTGHTM", - "HWTGWTK", "HWTGBMI_der" - ) -) - -tail(bmi2011_2012) - -combined_bmi <- merge_rec_data(bmi2001, bmi2011_2012) -head(combined_bmi) -tail(combined_bmi) - -# Using bmi_fun() to generate a BMI value with user inputted height and -# weight values. bmi_fun() can also generate a value for BMI if you input a -# value for height and weight. Let's say your height is 170cm (1.7m) and -# your weight is 50kg, your BMI can be calculated as follows: - -library(cchsflow) -BMI <- bmi_fun(HWTGHTM = 1.7, HWTGWTK = 50) -print(BMI) -} diff --git a/man/bmi_fun_cat.Rd b/man/bmi_fun_cat.Rd deleted file mode 100644 index 5dbdb765..00000000 --- a/man/bmi_fun_cat.Rd +++ /dev/null @@ -1,72 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/bmi.R -\name{bmi_fun_cat} -\alias{bmi_fun_cat} -\title{Categorical BMI (international standard)} -\usage{ -bmi_fun_cat(HWTGBMI_der) -} -\arguments{ -\item{HWTGBMI_der}{derived variable that calculates numeric value for BMI. -See \code{\link{bmi_fun}} for documentation on how variable -was derived.} -} -\value{ -value for BMI categories in the HWTGBMI_der_cat4 variable. -} -\description{ -This function creates a categorical derived variable -(HWTGBMI_der_cat4) that categorizes derived BMI (HWTGBMI_der). -} -\details{ -The categories were based on international standards and are divided -into four categories: underweight for BMI < 18.5 (1), normal weight for BMI -between 18.5 to 25 (2), overweight for BMI between 25 to 30 (3), and obese -for BMI over 30 (4). - -HWTGBMI_der_cat4 uses the derived variable HWTGBMI_der. HWTGBMI_der uses -height and weight that have been transformed by cchsflow. In order to -categorize BMI across CCHS cycles, height and weight variables must be -transformed and harmonized. -} -\examples{ - -# Using bmi_fun_cat() to categorize BMI across CCHS cycles -# bmi_fun_cat() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform HWTGBMI_der_cat4 across all cycles, use rec_with_table() for -# each CCHS cycle. -# Since HWTGBMI_der is also a derived variable, you will have to specify -# the variables that are derived from it. - -library(cchsflow) - -bmi_cat_2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "HWTGHTM", - "HWTGWTK", - "HWTGBMI_der", - "HWTGBMI_der_cat4" - ) -) - -head(bmi_cat_2009_2010) - -bmi_cat_2011_2012 <- rec_with_table( - cchs2011_2012_p,c( - "HWTGHTM", - "HWTGWTK", - "HWTGBMI_der", - "HWTGBMI_der_cat4" - ) -) - -tail(bmi_cat_2011_2012) - -combined_bmi_cat <- suppressWarnings(merge_rec_data -(bmi_cat_2009_2010,bmi_cat_2011_2012)) - -head(combined_bmi_cat) -tail(combined_bmi_cat) -} diff --git a/man/calculate_binge_drinking.Rd b/man/calculate_binge_drinking.Rd new file mode 100644 index 00000000..5c485c8f --- /dev/null +++ b/man/calculate_binge_drinking.Rd @@ -0,0 +1,130 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/alcohol.R +\name{calculate_binge_drinking} +\alias{calculate_binge_drinking} +\title{Identify binge drinking patterns with sex-specific thresholds} +\usage{ +calculate_binge_drinking( + DHH_SEX, + ALW_1, + ALW_2A1, + ALW_2A2, + ALW_2A3, + ALW_2A4, + ALW_2A5, + ALW_2A6, + ALW_2A7, + min_DHH_SEX = 1, + max_DHH_SEX = 2, + min_ALW_1 = 1, + max_ALW_1 = 2, + min_ALW_2A1 = 0, + max_ALW_2A1 = 995, + min_ALW_2A2 = 0, + max_ALW_2A2 = 995, + min_ALW_2A3 = 0, + max_ALW_2A3 = 995, + min_ALW_2A4 = 0, + max_ALW_2A4 = 995, + min_ALW_2A5 = 0, + max_ALW_2A5 = 995, + min_ALW_2A6 = 0, + max_ALW_2A6 = 995, + min_ALW_2A7 = 0, + max_ALW_2A7 = 995, + validate_params = NULL, + log_level = "silent" +) +} +\arguments{ +\item{DHH_SEX}{CCHS variable for sex (1=male, 2=female). Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_1}{Had drinks in past week (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A1}{Number of drinks on Sunday. Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A2}{Number of drinks on Monday. Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A3}{Number of drinks on Tuesday. Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A4}{Number of drinks on Wednesday. Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A5}{Number of drinks on Thursday. Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A6}{Number of drinks on Friday. Accepts raw CCHS codes or preprocessed values.} + +\item{ALW_2A7}{Number of drinks on Saturday. Accepts raw CCHS codes or preprocessed values.} +} +\value{ +Integer binge drinking indicator. Missing data handled as: + \itemize{ + \item \code{haven::tagged_na("a")} for not applicable cases (no drinking in past week) + \item \code{haven::tagged_na("b")} for missing/invalid responses + } + Values: 1 = binge drinker, 2 = non-binge drinker. +} +\description{ +Identify binge drinking patterns based on sex-specific daily consumption thresholds. Examines +daily alcohol consumption across the week, applying sex-specific binge criteria for acute +alcohol risk assessment in population health research. +} +\details{ +Only applied to respondents who had alcohol in past week. Non-drinkers receive not applicable status. +Enhanced preprocessing may identify different patterns compared to legacy if_else2() implementation. + +Calculation criteria: Males: Binge = ≥5 drinks on any single day; Females: Binge = ≥4 drinks on any single day. +Comprehensive preprocessing of CCHS codes (6,7,8,9 and 996-999) is applied. Priority: Not applicable > Missing > Valid assessment. +} +\note{ +v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive preprocessing and modern missing data handling +} +\examples{ +# Standard cchsflow workflow (primary usage) +library(cchsflow) +result <- rec_with_table( + cchs2013_2014_p, + c( + "DHH_SEX", "ALW_1", "ALW_2A1", "ALW_2A2", "ALW_2A3", + "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDBINGE_der" + ) +) + +# Scalar usage examples with variable labels +# calculate_binge_drinking(DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) +# (sex, drinks, sun, mon, tue, wed, thu, fri, sat) +calculate_binge_drinking(1, 1, 3, 1, 6, 0, 3, 8, 2) # Returns: 1L (male binge: 6 drinks Tue, 8 drinks Fri) +calculate_binge_drinking(2, 1, 1, 2, 2, 3, 0, 1, 2) # Returns: 2L (female non-binge: all days ≤3 drinks) +calculate_binge_drinking(1, 1, 4, 4, 4, 4, 4, 4, 4) # Returns: 2L (male non-binge: all days <5 drinks) +calculate_binge_drinking(2, 1, 0, 0, 0, 0, 4, 0, 0) # Returns: 1L (female binge: 4 drinks Thu exactly threshold) +calculate_binge_drinking(1, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) + +# Vector processing with missing data and edge cases +calculate_binge_drinking( + c(1, 2, 6, 7, 8, 9), # Mixed valid/CCHS codes for sex + c(1, 1, 1, 2, 1, 1), # Mixed drinking statuses + c(5, 4, 2, 0, 7, 996), # Mixed Sunday drinks with CCHS codes + c(0, 0, 0, 0, 8, 997), # Mixed Monday drinks + c(0, 0, 0, 0, 9, 998), # Tuesday + c(0, 0, 0, 0, 0, 999), # Wednesday + c(0, 0, 0, 0, 0, 0), # Thursday + c(0, 0, 0, 0, 0, 0), # Friday + c(0, 0, 0, 0, 0, 0) # Saturday +) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("a"), tagged_na("b"), tagged_na("b")) + +# Vector with string missing values +calculate_binge_drinking( + c(1, 2, "Not applicable"), # Mixed sex with string NA + c(1, 1, 1), + c(6, 3, 2), c(0, 0, 0), c(0, 0, 0), c(0, 0, 0), + c(0, 0, 0), c(0, 0, 0), c(0, 0, 0) +) # Returns: c(1L, 2L, tagged_na("b")) + +} +\references{ +Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines +for low-risk drinking. Canadian Centre on Substance Abuse. +} +\seealso{ +\\code{\\link{calculate_drinking_risk_short}} for short-term drinking risk assessment +\\code{\\link{calculate_drinking_risk_long}} for long-term drinking risk assessment +} diff --git a/man/calculate_bmi.Rd b/man/calculate_bmi.Rd new file mode 100644 index 00000000..27d830a9 --- /dev/null +++ b/man/calculate_bmi.Rd @@ -0,0 +1,77 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bmi.R +\name{calculate_bmi} +\alias{calculate_bmi} +\title{Calculate Body Mass Index (BMI)} +\usage{ +calculate_bmi(height_m, weight_kg, output_format = "tagged_na") +} +\arguments{ +\item{height_m}{Height in metres.} + +\item{weight_kg}{Weight in kilograms.} + +\item{output_format}{Output missing data format: "tagged_na" (default) or +"original".} + +\item{...}{Arguments passed from deprecated aliases.} +} +\value{ +Numeric vector of BMI values (kg/m^2). Missing inputs produce + tagged NAs with priority: NA::b (not stated) over NA::a (not applicable). +} +\description{ +Calculates BMI from height and weight using the standard formula: +weight (kg) / height (m)^2. Source-agnostic — works with both PUMF +and Master data via worksheet routing. +} +\details{ +## PUMF vs Master + +This function is source-agnostic. The worksheet routes different source +variables to the same parameters depending on database type: + +| Parameter | PUMF source | Master source | +|-----------|-------------|---------------| +| height_m | HWTGHTM (grouped) | HWTDHTM (continuous) | +| weight_kg | HWTGWTK (grouped) | HWTDWTK (continuous) | + +PUMF values are midpoint-imputed from grouped categories; Master values +are true continuous measurements. The BMI formula is identical — the +precision difference comes from the input variables. +} +\examples{ +# Scalar +calculate_bmi(height_m = 1.75, weight_kg = 70) + +# Vector +calculate_bmi( + height_m = c(1.75, 1.60, NA), + weight_kg = c(70, 55, 70) +) + +# Dataframe +library(dplyr) +data.frame(ht = c(1.75, 1.60), wt = c(70, 55)) \%>\% + mutate(bmi = calculate_bmi(ht, wt)) + +# Standalone with rec_with_table +\dontrun{ +result <- rec_with_table( + cchs2015_2016_p, + variables = variables, + variable_details = variable_details, + log = TRUE +) +result$HWTGBMI_der +} + +} +\references{ +World Health Organization. (2000). Obesity: preventing and managing the +global epidemic. WHO Technical Report Series, 894. +} +\seealso{ +[adjust_bmi()] for bias-corrected BMI, [categorize_bmi()] for + WHO categories. +} diff --git a/man/calculate_drinking_risk_long.Rd b/man/calculate_drinking_risk_long.Rd new file mode 100644 index 00000000..35d09ebb --- /dev/null +++ b/man/calculate_drinking_risk_long.Rd @@ -0,0 +1,108 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/alcohol.R +\name{calculate_drinking_risk_long} +\alias{calculate_drinking_risk_long} +\title{Assess long-term alcohol health risks using Low-Risk Guidelines} +\usage{ +calculate_drinking_risk_long( + DHH_SEX, + ALWDWKY, + ALC_1, + ALW_1, + ALW_2A1, + ALW_2A2, + ALW_2A3, + ALW_2A4, + ALW_2A5, + ALW_2A6, + ALW_2A7, + min_DHH_SEX = 1, + max_DHH_SEX = 2, + min_ALWDWKY = 0, + max_ALWDWKY = 995, + min_ALC_1 = 1, + max_ALC_1 = 2, + min_ALW_1 = 1, + max_ALW_1 = 2, + min_ALW_2A1 = 0, + max_ALW_2A1 = 995, + min_ALW_2A2 = 0, + max_ALW_2A2 = 995, + min_ALW_2A3 = 0, + max_ALW_2A3 = 995, + min_ALW_2A4 = 0, + max_ALW_2A4 = 995, + min_ALW_2A5 = 0, + max_ALW_2A5 = 995, + min_ALW_2A6 = 0, + max_ALW_2A6 = 995, + min_ALW_2A7 = 0, + max_ALW_2A7 = 995, + validate_params = NULL, + log_level = "silent" +) +} +\arguments{ +\item{DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7}{As in calculate_drinking_risk_short()} +} +\value{ +Integer long-term risk indicator. Missing data handled as: + \itemize{ + \item \code{haven::tagged_na("a")} for not applicable cases (non-drinkers) + \item \code{haven::tagged_na("b")} for missing/invalid responses + } + Values: 1 = increased long-term risk, 2 = no increased long-term risk. +} +\description{ +Assess long-term health risks from drinking patterns following Canada's Low-Risk Guidelines. +Evaluates daily and weekly consumption against sex-specific chronic risk thresholds for +long-term health outcomes assessment. +} +\details{ +Risk criteria: Males: ≥4 drinks/day OR ≥20 drinks/week; Females: ≥3 drinks/day OR ≥15 drinks/week. +Focus on chronic health risks (liver disease, cancer, cardiovascular). Same preprocessing and +missing data handling as short-term version. +} +\note{ +v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive long-term risk assessment +} +\examples{ +# Standard cchsflow workflow (primary usage) +library(cchsflow) +result <- rec_with_table( + cchs2013_2014_p, + c( + "DHH_SEX", "ALWDWKY", "ALC_1", "ALW_1", "ALW_2A1", "ALW_2A2", + "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDLOWL_der" + ) +) + +# Scalar usage examples with variable labels +# calculate_drinking_risk_long(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) +# (sex, weekly, year, week, sun, mon, tue, wed, thu, fri, sat) +calculate_drinking_risk_long(1, 20, 1, 1, 0, 0, 4, 0, 0, 0, 0) # Returns: 1L (male long-term risk: 4 drinks/day OR 20/week) +calculate_drinking_risk_long(2, 14, 1, 1, 2, 2, 2, 2, 2, 2, 2) # Returns: 2L (female no risk: <3 drinks/day AND <15/week) +calculate_drinking_risk_long(1, 19, 1, 1, 3, 3, 3, 3, 3, 3, 1) # Returns: 2L (male no risk: <4 drinks/day AND <20/week) +calculate_drinking_risk_long(2, 15, 1, 1, 2, 2, 2, 2, 2, 2, 3) # Returns: 1L (female risk: 15 drinks/week exactly threshold) +calculate_drinking_risk_long(1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) + +# Vector processing with missing data and edge cases +calculate_drinking_risk_long( + c(1, 2, 6, 8, 9), # Mixed valid/CCHS codes for sex + c(20, 15, 8, 996, 997), # Mixed weekly drinks with CCHS codes + c(1, 1, 1, 1, 2), # Mixed alcohol use statuses + c(1, 1, 1, 2, 1), # Mixed weekly drinking statuses + c(4, 3, 2, 0, 7), # Mixed Sunday drinks + c(0, 0, 0, 0, 8), c(0, 0, 0, 0, 9), c(0, 0, 0, 0, 0), + c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0) +) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("b"), tagged_na("a")) + +} +\references{ +Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines +for low-risk drinking. Canadian Centre on Substance Abuse. +} +\seealso{ +\code{\link{calculate_drinking_risk_short}} for short-term drinking risk assessment +\code{\link{calculate_binge_drinking}} for binge drinking assessment +} diff --git a/man/calculate_drinking_risk_short.Rd b/man/calculate_drinking_risk_short.Rd new file mode 100644 index 00000000..85444fe9 --- /dev/null +++ b/man/calculate_drinking_risk_short.Rd @@ -0,0 +1,115 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/alcohol.R +\name{calculate_drinking_risk_short} +\alias{calculate_drinking_risk_short} +\title{Assess short-term alcohol health risks using Low-Risk Guidelines} +\usage{ +calculate_drinking_risk_short( + DHH_SEX, + ALWDWKY, + ALC_1, + ALW_1, + ALW_2A1, + ALW_2A2, + ALW_2A3, + ALW_2A4, + ALW_2A5, + ALW_2A6, + ALW_2A7, + min_DHH_SEX = 1, + max_DHH_SEX = 2, + min_ALWDWKY = 0, + max_ALWDWKY = 995, + min_ALC_1 = 1, + max_ALC_1 = 2, + min_ALW_1 = 1, + max_ALW_1 = 2, + min_ALW_2A1 = 0, + max_ALW_2A1 = 995, + min_ALW_2A2 = 0, + max_ALW_2A2 = 995, + min_ALW_2A3 = 0, + max_ALW_2A3 = 995, + min_ALW_2A4 = 0, + max_ALW_2A4 = 995, + min_ALW_2A5 = 0, + max_ALW_2A5 = 995, + min_ALW_2A6 = 0, + max_ALW_2A6 = 995, + min_ALW_2A7 = 0, + max_ALW_2A7 = 995, + validate_params = NULL, + log_level = "silent" +) +} +\arguments{ +\item{DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7}{As in calculate_binge_drinking()} + +\item{ALWDWKY}{Total drinks in past week. Accepts raw CCHS codes or preprocessed values.} + +\item{ALC_1}{Had drinks in past year (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +} +\value{ +Integer short-term risk indicator. Missing data handled as: + \itemize{ + \item \code{haven::tagged_na("a")} for not applicable cases (non-drinkers) + \item \code{haven::tagged_na("b")} for missing/invalid responses + } + Values: 1 = increased short-term risk, 2 = no increased short-term risk. +} +\description{ +Assess short-term health risks from drinking patterns following Canada's Low-Risk Guidelines. +Evaluates daily and weekly consumption against sex-specific acute risk thresholds for +injury and overdose risk assessment. +} +\details{ +Based on Canada's Low-Risk Alcohol Drinking Guidelines. Thresholds may differ from other national guidelines. +Non-drinkers (past year or week) receive "no increased risk" classification. + +Risk criteria: Males: >4 drinks/day OR >15 drinks/week; Females: >3 drinks/day OR >10 drinks/week. +Comprehensive preprocessing with priority handling is applied. Non-drinkers are automatically +classified as "no increased risk". +} +\note{ +v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive risk assessment and missing data handling +} +\examples{ +# Standard cchsflow workflow (primary usage) +library(cchsflow) +result <- rec_with_table( + cchs2013_2014_p, + c( + "DHH_SEX", "ALWDWKY", "ALC_1", "ALW_1", "ALW_2A1", "ALW_2A2", + "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDLOWI_der" + ) +) + +# Scalar usage examples with variable labels +# calculate_drinking_risk_short(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) +# (sex, weekly, year, week, sun, mon, tue, wed, thu, fri, sat) +calculate_drinking_risk_short(1, 20, 1, 1, 0, 0, 5, 0, 0, 0, 0) # Returns: 1L (male short-term risk: 5 drinks/day OR 20/week) +calculate_drinking_risk_short(2, 8, 1, 1, 2, 1, 2, 1, 1, 1, 0) # Returns: 2L (female no risk: ≤2 drinks/day AND ≤10/week) +calculate_drinking_risk_short(1, 15, 1, 1, 3, 3, 3, 3, 3, 0, 0) # Returns: 2L (male no risk: ≤3 drinks/day AND ≤15/week) +calculate_drinking_risk_short(2, 11, 1, 1, 2, 2, 2, 2, 2, 1, 0) # Returns: 1L (female risk: 11 drinks/week exceeds 10) +calculate_drinking_risk_short(1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) + +# Vector processing with missing data and edge cases +calculate_drinking_risk_short( + c(1, 2, 6, 8, 9), # Mixed valid/CCHS codes for sex + c(16, 11, 5, 996, 997), # Mixed weekly drinks with CCHS codes + c(1, 1, 1, 1, 2), # Mixed alcohol use statuses + c(1, 1, 1, 2, 1), # Mixed weekly drinking statuses + c(4, 3, 1, 0, 7), # Mixed Sunday drinks + c(0, 0, 0, 0, 8), c(0, 0, 0, 0, 9), c(0, 0, 0, 0, 0), + c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0) +) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("b"), tagged_na("a")) + +} +\references{ +Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines +for low-risk drinking. Canadian Centre on Substance Abuse. +} +\seealso{ +\code{\link{calculate_binge_drinking}} for binge drinking assessment +\code{\link{calculate_drinking_risk_long}} for long-term drinking risk assessment +} diff --git a/man/calculate_time_quit_smoking.Rd b/man/calculate_time_quit_smoking.Rd index fe0637d7..710148df 100644 --- a/man/calculate_time_quit_smoking.Rd +++ b/man/calculate_time_quit_smoking.Rd @@ -4,15 +4,12 @@ \alias{calculate_time_quit_smoking} \title{Combined time since quit smoking} \usage{ -calculate_time_quit_smoking(SMK_09A_cont, SMK_06A_cont, SMKDVSTP) +calculate_time_quit_smoking(SMK_09A_cont, SMK_06A_cont) } \arguments{ \item{SMK_09A_cont}{Years since stopped daily (from worksheet midpoint recode)} \item{SMK_06A_cont}{Years since quit occasional (from worksheet midpoint recode)} - -\item{SMKDVSTP}{Derived smoking status (for context; primary routing uses -availability of SMK_09A_cont and SMK_06A_cont)} } \value{ Continuous years since quit; NA::a for current/never smokers, @@ -21,6 +18,5 @@ Continuous years since quit; NA::a for current/never smokers, \description{ Combines cessation timing from multiple sources with priority logic. Provides a single continuous "years since quit" value regardless - of smoking history pathway. Uses SMKDVSTP (derived smoking status) to - confirm former-smoker status. + of smoking history pathway. } diff --git a/man/calculate_time_quit_smoking_complete.Rd b/man/calculate_time_quit_smoking_complete.Rd index f6763d57..d423f4f3 100644 --- a/man/calculate_time_quit_smoking_complete.Rd +++ b/man/calculate_time_quit_smoking_complete.Rd @@ -10,7 +10,6 @@ calculate_time_quit_smoking_complete( SMK_06A_cont, SMK_09A_cont, SMK_10A_cont, - SMKDVSTP, output_format = "tagged_na" ) } @@ -25,8 +24,6 @@ calculate_time_quit_smoking_complete( \item{SMK_10A_cont}{Numeric vector. Years since quit completely (gradual)} -\item{SMKDVSTP}{Numeric vector. Master continuous years since quit completely} - \item{output_format}{Character. Output format ("tagged_na" or "original")} } \value{ @@ -36,45 +33,43 @@ Numeric vector of continuous years since completely quit (0-80+), with: } \description{ Pathway-aware years since the respondent completely quit smoking. Uses -SMKDVSTP (StatCan derived continuous) on Master when available, falling -back to pathway-aware PUMF midpoint logic. +cat5 smoking status and the quit-timing gate to route to the appropriate +continuous input (SMK_06A_cont / SMK_09A_cont / SMK_10A_cont). Not +supported: 2001 (SMK_10A missing), 2022 (_cont feeders skip 2022), and +cchs2023_p (SMK_10A_cont is Master-only in 2023). } \details{ **Implementation method**: 3-step architecture - **Step 1**: clean_variables() - Clean all inputs -- **Step 2**: Master priority + PUMF pathway-aware logic +- **Step 2**: Pathway-aware logic (cat5 + gate routing) - **Step 3**: Output cleaning **Routing logic**: -1. SMKDVSTP available (Master 2003+): use directly -2. Former occasional (SMKDSTY_cat5 == 4): use SMK_06A_cont -3. Former daily, direct quit (cat5 == 3, gate == 1): use SMK_09A_cont -4. Former daily, gradual reducer (cat5 == 3, gate == 2): use SMK_10A_cont -5. Former daily, 2001 fallback (no gate): use SMK_09A_cont as proxy +1. Former occasional (SMKDSTY_cat5 == 4): use SMK_06A_cont +2. Former daily, direct quit (cat5 == 3, gate == 1): use SMK_09A_cont +3. Former daily, gradual reducer (cat5 == 3, gate == 2): use SMK_10A_cont +4. Former daily, no gate available: use SMK_09A_cont as proxy } \examples{ \dontrun{ -# Master path - SMKDVSTP available +# Former occasional calculate_time_quit_smoking_complete( - SMKDSTY_cat5 = 3, SMK_10_gate = 1, - SMK_06A_cont = NA, SMK_09A_cont = NA, SMK_10A_cont = NA, - SMKDVSTP = 7.0 + SMKDSTY_cat5 = 4, SMK_10_gate = NA, + SMK_06A_cont = 5.0, SMK_09A_cont = NA, SMK_10A_cont = NA ) -# Returns: 7.0 +# Returns: 5.0 -# PUMF - former occasional +# Former daily, direct quit calculate_time_quit_smoking_complete( - SMKDSTY_cat5 = 4, SMK_10_gate = NA, - SMK_06A_cont = 5.0, SMK_09A_cont = NA, SMK_10A_cont = NA, - SMKDVSTP = NA + SMKDSTY_cat5 = 3, SMK_10_gate = 1, + SMK_06A_cont = NA, SMK_09A_cont = 3.5, SMK_10A_cont = NA ) -# Returns: 5.0 +# Returns: 3.5 -# PUMF - former daily, gradual reducer +# Former daily, gradual reducer calculate_time_quit_smoking_complete( SMKDSTY_cat5 = 3, SMK_10_gate = 2, - SMK_06A_cont = NA, SMK_09A_cont = 5.0, SMK_10A_cont = 2.0, - SMKDVSTP = NA + SMK_06A_cont = NA, SMK_09A_cont = 5.0, SMK_10A_cont = 2.0 ) # Returns: 2.0 (when they quit completely, not when they stopped daily) } diff --git a/man/calculate_time_quit_smoking_complete_stub.Rd b/man/calculate_time_quit_smoking_complete_stub.Rd index 1e0f55fc..1c3dd0e5 100644 --- a/man/calculate_time_quit_smoking_complete_stub.Rd +++ b/man/calculate_time_quit_smoking_complete_stub.Rd @@ -10,7 +10,6 @@ calculate_time_quit_smoking_complete_stub( SMK_06A_cont, SMK_09A_cont, SMK_10A_cont, - SMKDVSTP, output_format = "tagged_na" ) } @@ -25,8 +24,6 @@ calculate_time_quit_smoking_complete_stub( \item{SMK_10A_cont}{Numeric vector. Years since quit completely (gradual)} -\item{SMKDVSTP}{Numeric vector. Master continuous years since quit completely} - \item{output_format}{Character. Output format ("tagged_na" or "original")} } \value{ @@ -35,8 +32,8 @@ Vector of continuous years since cessation \description{ DOCUMENTATION ONLY - canonical implementation is in smoking-cessation.R. -Pathway-aware years since completely quit smoking. Uses SMKDVSTP (Master) -when available, then routes by quit pathway on PUMF. +Pathway-aware years since completely quit smoking. Routes by cat5 smoking +status and quit-timing gate to the appropriate continuous input. } \examples{ \dontrun{ diff --git a/man/categorize_bmi.Rd b/man/categorize_bmi.Rd new file mode 100644 index 00000000..c6cbe006 --- /dev/null +++ b/man/categorize_bmi.Rd @@ -0,0 +1,72 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bmi.R +\name{categorize_bmi} +\alias{categorize_bmi} +\title{Categorize BMI into WHO categories} +\usage{ +categorize_bmi(bmi, output_format = "tagged_na") +} +\arguments{ +\item{bmi}{Continuous BMI value (from [calculate_bmi()] or any source).} + +\item{output_format}{Output missing data format: "tagged_na" (default) or +"original".} + +\item{...}{Arguments passed from deprecated aliases.} +} +\value{ +Integer vector: 1 = underweight (< 18.5), 2 = normal (18.5-24.9), + 3 = overweight (25.0-29.9), 4 = obese (>= 30.0). +} +\description{ +Maps continuous BMI to the standard 4-category WHO classification. +Source-agnostic — works with BMI from any source (PUMF, Master, or +external data). +} +\details{ +## WHO BMI classification + +Uses the standard WHO adult BMI classification (WHO, 2000): + +| Category | BMI range | Code | +|----------|-----------|------| +| Underweight | < 18.5 | 1 | +| Normal weight | 18.5-24.9 | 2 | +| Overweight | 25.0-29.9 | 3 | +| Obese | >= 30.0 | 4 | + +This function accepts BMI from any source — the `bmi` parameter is +fully semantic. The worksheet routes HWTGBMI_der (PUMF) or +HWTDBMI_der (Master) to the same function. +} +\examples{ +# Scalar +categorize_bmi(bmi = 27.3) + +# Vector +categorize_bmi(bmi = c(16, 22, 27, 35)) + +# Dataframe +library(dplyr) +data.frame(bmi = c(16.5, 22.0, 27.3, 35.0)) \%>\% + mutate(bmi_cat = categorize_bmi(bmi)) + +# Standalone with rec_with_table +\dontrun{ +result <- rec_with_table( + cchs2015_2016_p, + variables = variables, + variable_details = variable_details, + log = TRUE +) +result$HWTGBMI_der_cat4 +} + +} +\references{ +World Health Organization. (2000). Obesity: preventing and managing the +global epidemic. WHO Technical Report Series, 894. +} +\seealso{ +[calculate_bmi()], [adjust_bmi()] +} diff --git a/man/categorize_immigration.Rd b/man/categorize_immigration.Rd new file mode 100644 index 00000000..03d7e7bf --- /dev/null +++ b/man/categorize_immigration.Rd @@ -0,0 +1,64 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/immigration.R +\name{categorize_immigration} +\alias{categorize_immigration} +\title{Calculate immigration category} +\usage{ +categorize_immigration(immigrant_status, born_canada, ethnicity, years) +} +\arguments{ +\item{immigrant_status}{Immigrant status: 1 = immigrant, 2 = non-immigrant +(SDCFIMM; covers both PUMF and master).} + +\item{born_canada}{Country of birth: 1 = Canada, 2 = outside Canada. +Use SDCGCBG for PUMF cycles; SDCGCB for master cycles.} + +\item{ethnicity}{Ethnicity: 1 = White, any value > 1 = visible minority. +Use SDCGCGT (2-category) for PUMF cycles or SDCDCGT_cat7 (7-category) +for master cycles — both use 1 = White, so the function handles either.} + +\item{years}{Time in Canada in years (continuous). Values < 10 are treated +as recent; values >= 10 as established. Use SDCGRES_cont (midpoints 4.5 +or 15 derived from categorical SDCGRES) for PUMF cycles; SDCDRES (raw +continuous 0-97) for master cycles. Not used for Canada-born respondents +(categories 1 and 2).} +} +\value{ +Integer 1-6, \code{tagged_na("a")} (not applicable), or + \code{tagged_na("b")} (missing / unmatched): + \itemize{ + \item 1 — White, Canada-born + \item 2 — Visible minority, Canada-born + \item 3 — White immigrant, 0-9 years in Canada + \item 4 — Visible minority immigrant, 0-9 years in Canada + \item 5 — White immigrant, 10+ years in Canada + \item 6 — Visible minority immigrant, 10+ years in Canada + } +} +\description{ +Derives a 6-category immigration classification combining +immigrant status, country of birth, ethnicity (white / visible minority), +and recency of arrival. Works for both PUMF and master CCHS files; the +worksheet supplies database-appropriate feeder variables for each cycle block. +} +\examples{ +library(cchsflow) + +# PUMF usage +immigration2009_2010 <- rec_with_table( + cchs2009_2010_p, + c("SDCFIMM", "SDCGCBG", "SDCGCGT", "SDCGRES_cont", "immigration_der") +) +head(immigration2009_2010) + +# Scalar usage — PUMF style (SDCGCGT 2-cat, SDCGRES_cont midpoints 4.5/15) +categorize_immigration( + immigrant_status = 1, born_canada = 2, ethnicity = 2, years = 4.5 +) # -> 4 (visible minority immigrant, recent) + +# Scalar usage — master style (SDCDCGT_cat7 7-cat, SDCDRES raw continuous) +categorize_immigration( + immigrant_status = 1, born_canada = 2, ethnicity = 5, years = 15 +) # -> 6 (visible minority immigrant, established) + +} diff --git a/man/check_worksheet.Rd b/man/check_worksheet.Rd new file mode 100644 index 00000000..47245b6b --- /dev/null +++ b/man/check_worksheet.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{check_worksheet} +\alias{check_worksheet} +\title{Check a CSV worksheet for formatting errors} +\usage{ +check_worksheet(file_path, file_type = c("variables", "variable_details")) +} +\arguments{ +\item{file_path}{Path to the CSV file to check} + +\item{file_type}{Type of file being checked. Either "variables" or +"variable_details".} +} +\value{ +A list of errors found. Each error is a named list containing +information about the error. +} +\description{ +Check a CSV worksheet for formatting errors +} +\examples{ +\dontrun{ +check_worksheet("inst/extdata/variables.csv", "variables") +} +} diff --git a/man/compare_value_based_on_interval.Rd b/man/compare_value_based_on_interval.Rd index 6455cd1b..e88b1359 100644 --- a/man/compare_value_based_on_interval.Rd +++ b/man/compare_value_based_on_interval.Rd @@ -30,3 +30,4 @@ comparison is true \description{ Compare values on the scientific notation interval } +\keyword{internal} diff --git a/man/dot-append_to_list.Rd b/man/dot-append_to_list.Rd new file mode 100644 index 00000000..1ad14afc --- /dev/null +++ b/man/dot-append_to_list.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.append_to_list} +\alias{.append_to_list} +\title{Add an item to a list} +\usage{ +.append_to_list(x, item) +} +\arguments{ +\item{x}{the list} + +\item{item}{the item to add} +} +\value{ +the new list +} +\description{ +Add an item to a list +} diff --git a/man/dot-check_column_order.Rd b/man/dot-check_column_order.Rd new file mode 100644 index 00000000..aab6f466 --- /dev/null +++ b/man/dot-check_column_order.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.check_column_order} +\alias{.check_column_order} +\title{Check the columns order in a worksheet} +\usage{ +.check_column_order(csv_data, expected_columns, error_ctx) +} +\arguments{ +\item{csv_data}{A data.frame containing the worksheet rows} + +\item{expected_columns}{The worksheet column in their expected order} + +\item{error_ctx}{Information used when creating the error object. A named +list with the following fields: +* file_type: The type of worksheet the CSV contains. Can be "variables" or + "variable_details". +* file_path: The file path to the worksheet} +} +\value{ +The list of column order errors found in the worksheet +} +\description{ +Check the columns order in a worksheet +} diff --git a/man/dot-check_excessive_quoting.Rd b/man/dot-check_excessive_quoting.Rd new file mode 100644 index 00000000..9bcf842b --- /dev/null +++ b/man/dot-check_excessive_quoting.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.check_excessive_quoting} +\alias{.check_excessive_quoting} +\title{Check a worksheet for excessive quoting} +\usage{ +.check_excessive_quoting(parsed_csv, error_ctx) +} +\arguments{ +\item{error_ctx}{Information used when creating the error object. A named +list with the following fields: +* file_type: The type of worksheet the CSV contains. Can be "variables" or + "variable_details". +* file_path: The file path to the worksheet} + +\item{csv_text}{String containing the worksheet contents} +} +\value{ +list of errors +} +\description{ +Check a worksheet for excessive quoting +} diff --git a/man/dot-check_line_endings.Rd b/man/dot-check_line_endings.Rd new file mode 100644 index 00000000..f0aee505 --- /dev/null +++ b/man/dot-check_line_endings.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.check_line_endings} +\alias{.check_line_endings} +\title{Check whether a worksheet has the correct line endings} +\usage{ +.check_line_endings(parsed_csv, error_ctx) +} +\arguments{ +\item{error_ctx}{Information used when creating the error object. A named +list with the following fields: +* file_type: The type of worksheet the CSV contains. Can be "variables" or + "variable_details". +* file_path: The file path to the worksheet} + +\item{csv_text}{A string containing the worksheet contents} +} +\value{ +The list of line ending errors found in the worksheet +} +\description{ +Check whether a worksheet has the correct line endings +} diff --git a/man/dot-check_row_sorting.Rd b/man/dot-check_row_sorting.Rd new file mode 100644 index 00000000..5d11fa7f --- /dev/null +++ b/man/dot-check_row_sorting.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.check_row_sorting} +\alias{.check_row_sorting} +\title{Check the rows order in a worksheet} +\usage{ +.check_row_sorting(csv_data, id_column_name, error_ctx) +} +\arguments{ +\item{csv_data}{A data.frame containing the worksheet rows} + +\item{id_column_name}{Name of the column to check for sorting} + +\item{error_ctx}{Information used when creating the error object. A named +list with the following fields: +* file_type: The type of worksheet the CSV contains. Can be "variables" or + "variable_details". +* file_path: The file path to the worksheet} +} +\value{ +The list of row order errors found in the worksheet +} +\description{ +Check the rows order in a worksheet +} diff --git a/man/dot-check_trailing_empty_columns.Rd b/man/dot-check_trailing_empty_columns.Rd new file mode 100644 index 00000000..c789b99b --- /dev/null +++ b/man/dot-check_trailing_empty_columns.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.check_trailing_empty_columns} +\alias{.check_trailing_empty_columns} +\title{Check a worksheet for trailing empty columns} +\usage{ +.check_trailing_empty_columns(csv_data, error_ctx) +} +\arguments{ +\item{csv_data}{Data.frame containing the worksheet rows} + +\item{error_ctx}{Information used when creating the error object. A named +list with the following fields: +* file_type: The type of worksheet the CSV contains. Can be "variables" or + "variable_details". +* file_path: The file path to the worksheet} +} +\value{ +List of errors +} +\description{ +Check a worksheet for trailing empty columns +} diff --git a/man/dot-create_column_order_error.Rd b/man/dot-create_column_order_error.Rd new file mode 100644 index 00000000..eec87cc6 --- /dev/null +++ b/man/dot-create_column_order_error.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_column_order_error} +\alias{.create_column_order_error} +\title{Create an error for when the worksheet columns are in the wrong order} +\usage{ +.create_column_order_error( + file_type, + file_path, + expected_column, + col_num, + actual_column +) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{expected_column}{The column expected at the offending position} + +\item{col_num}{The position of the column with the wrong header} + +\item{actual_column}{The actual column value} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create an error for when the worksheet columns are in the wrong order +} diff --git a/man/dot-create_excessive_quoting_error.Rd b/man/dot-create_excessive_quoting_error.Rd new file mode 100644 index 00000000..6fc4d0a4 --- /dev/null +++ b/man/dot-create_excessive_quoting_error.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_excessive_quoting_error} +\alias{.create_excessive_quoting_error} +\title{Create an error for when the worksheet has excessive quoting} +\usage{ +.create_excessive_quoting_error( + file_type, + file_path, + row_num, + col_num, + cell_value +) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{row_num}{Row number with excessive quotes} + +\item{col_num}{Column number with excessive quotes} + +\item{cell_value}{Value of the cell with excessive quotes} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create an error for when the worksheet has excessive quoting +} diff --git a/man/dot-create_file_not_found_error.Rd b/man/dot-create_file_not_found_error.Rd new file mode 100644 index 00000000..cf166510 --- /dev/null +++ b/man/dot-create_file_not_found_error.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_file_not_found_error} +\alias{.create_file_not_found_error} +\title{Create the error object for when the worksheet could not be found} +\usage{ +.create_file_not_found_error(file_type, file_path) +} +\arguments{ +\item{file_path}{The invalid path} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create the error object for when the worksheet could not be found +} diff --git a/man/dot-create_invalid_csv_error.Rd b/man/dot-create_invalid_csv_error.Rd new file mode 100644 index 00000000..9cf71f9a --- /dev/null +++ b/man/dot-create_invalid_csv_error.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_invalid_csv_error} +\alias{.create_invalid_csv_error} +\title{Create the error for when the worksheet is not valid CSV} +\usage{ +.create_invalid_csv_error(file_type, file_path, error_message) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{error_message}{Reason(s) for why the worksheet is invalid CSV} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create the error for when the worksheet is not valid CSV +} diff --git a/man/dot-create_line_ending_crlf_error.Rd b/man/dot-create_line_ending_crlf_error.Rd new file mode 100644 index 00000000..4a4236ea --- /dev/null +++ b/man/dot-create_line_ending_crlf_error.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_line_ending_crlf_error} +\alias{.create_line_ending_crlf_error} +\title{Create an error for when the worksheet has invalid line endings} +\usage{ +.create_line_ending_crlf_error(file_type, file_path, row_num) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{row_num}{Index of the row with the invalid line ending} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create an error for when the worksheet has invalid line endings +} diff --git a/man/dot-create_missing_id_column_error.Rd b/man/dot-create_missing_id_column_error.Rd new file mode 100644 index 00000000..7ff70354 --- /dev/null +++ b/man/dot-create_missing_id_column_error.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_missing_id_column_error} +\alias{.create_missing_id_column_error} +\title{Create an error for when the worksheet is missing the ID column} +\usage{ +.create_missing_id_column_error(file_type, file_path, id_column_name) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{id_column_name}{Name of the expected ID column} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create an error for when the worksheet is missing the ID column +} diff --git a/man/dot-create_trailing_empty_columns_error.Rd b/man/dot-create_trailing_empty_columns_error.Rd new file mode 100644 index 00000000..6f4c40e6 --- /dev/null +++ b/man/dot-create_trailing_empty_columns_error.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_trailing_empty_columns_error} +\alias{.create_trailing_empty_columns_error} +\title{Create an error for when the worksheet has trailing empty columns} +\usage{ +.create_trailing_empty_columns_error(file_type, file_path, col_num) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{col_num}{Position of the trailing empty column} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create an error for when the worksheet has trailing empty columns +} diff --git a/man/dot-create_unsorted_rows_error.Rd b/man/dot-create_unsorted_rows_error.Rd new file mode 100644 index 00000000..94575d7d --- /dev/null +++ b/man/dot-create_unsorted_rows_error.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.create_unsorted_rows_error} +\alias{.create_unsorted_rows_error} +\title{Create an error for when the worksheet rows are unsorted} +\usage{ +.create_unsorted_rows_error(file_type, file_path, id_column_name) +} +\arguments{ +\item{file_path}{Path to the worksheet} + +\item{id_column_name}{Name of the column that should be sorted} + +\item{file_type:}{The type of worksheet. Can be "variables" or +"variable_details".} +} +\value{ +A named list +} +\description{ +Create an error for when the worksheet rows are unsorted +} diff --git a/man/dot-fix_column_order_errors.Rd b/man/dot-fix_column_order_errors.Rd new file mode 100644 index 00000000..657886d0 --- /dev/null +++ b/man/dot-fix_column_order_errors.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fix-worksheet.R +\name{.fix_column_order_errors} +\alias{.fix_column_order_errors} +\title{Reorder columns to match expected order in a CSV worksheet} +\usage{ +.fix_column_order_errors(csv_data, column_order_errors) +} +\arguments{ +\item{csv_data}{A data frame containing the CSV data.} + +\item{column_order_errors}{A list of column order error objects from +\code{check_worksheet}.} +} +\value{ +The reordered data frame +} +\description{ +Reorder columns to match expected order in a CSV worksheet +} +\keyword{internal} diff --git a/man/dot-fix_empty_column_errors.Rd b/man/dot-fix_empty_column_errors.Rd new file mode 100644 index 00000000..fdc837ba --- /dev/null +++ b/man/dot-fix_empty_column_errors.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fix-worksheet.R +\name{.fix_empty_column_errors} +\alias{.fix_empty_column_errors} +\title{Remove empty trailing columns from CSV data} +\usage{ +.fix_empty_column_errors(csv_data, empty_column_errors) +} +\arguments{ +\item{csv_data}{A data frame containing the CSV data.} + +\item{empty_column_errors}{A list of empty column error objects from +\code{check_worksheet}.} +} +\value{ +The data frame with empty columns removed. +} +\description{ +Remove empty trailing columns from CSV data +} +\keyword{internal} diff --git a/man/dot-fix_unsorted_rows_error.Rd b/man/dot-fix_unsorted_rows_error.Rd new file mode 100644 index 00000000..c1fdecd4 --- /dev/null +++ b/man/dot-fix_unsorted_rows_error.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fix-worksheet.R +\name{.fix_unsorted_rows_error} +\alias{.fix_unsorted_rows_error} +\title{Sort rows alphabetically by the ID column} +\usage{ +.fix_unsorted_rows_error(csv_data, unsorted_row_errors) +} +\arguments{ +\item{csv_data}{A data frame containing the CSV data.} + +\item{unsorted_row_errors}{A list of unsorted row error objects from +\code{check_worksheet}. Each error contains an \code{id_column_name} field.} +} +\value{ +The sorted data frame +} +\description{ +Sort rows alphabetically by the ID column +} +\keyword{internal} diff --git a/man/dot-load_cep_variables.Rd b/man/dot-load_cep_variables.Rd new file mode 100644 index 00000000..d19531a9 --- /dev/null +++ b/man/dot-load_cep_variables.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/variable-discovery.R +\name{.load_cep_variables} +\alias{.load_cep_variables} +\title{Load variables from CEP worksheets} +\usage{ +.load_cep_variables(cep_dir) +} +\description{ +Load variables from CEP worksheets +} +\keyword{internal} diff --git a/man/dot-parse_csv_text.Rd b/man/dot-parse_csv_text.Rd new file mode 100644 index 00000000..4d20e7bc --- /dev/null +++ b/man/dot-parse_csv_text.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/check-worksheet.R +\name{.parse_csv_text} +\alias{.parse_csv_text} +\title{Parse the worksheet contents} +\usage{ +.parse_csv_text(csv_text) +} +\arguments{ +\item{csv_text}{String containing the contents of the worksheet} +} +\value{ +A list of list of strings. The top level list contains the rows in +the worksheet. The second level contains the cell values of each row. For +example, for the following CSV file `a,b,c\n1,2,3` the result of this +function would be, `list(list('a', 'b', 'c'), list('1', '2', '3'))` +} +\description{ +Parse the worksheet contents +} diff --git a/man/dot-parse_variable_start.Rd b/man/dot-parse_variable_start.Rd new file mode 100644 index 00000000..68039a4d --- /dev/null +++ b/man/dot-parse_variable_start.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/variable-discovery.R +\name{.parse_variable_start} +\alias{.parse_variable_start} +\title{Parse variableStart field into named list} +\usage{ +.parse_variable_start(vs) +} +\description{ +Parse variableStart field into named list +} +\keyword{internal} diff --git a/man/energy_exp_fun.Rd b/man/energy_exp_fun.Rd index 1f5749a4..c31d13f1 100644 --- a/man/energy_exp_fun.Rd +++ b/man/energy_exp_fun.Rd @@ -5,7 +5,7 @@ \title{Daily energy expenditure in leisure activity} \usage{ energy_exp_fun( - DHHGAGE_cont, + age, PAA_045, PAA_050, PAA_075, @@ -19,7 +19,7 @@ energy_exp_fun( ) } \arguments{ -\item{DHHGAGE_cont}{continuous age variable.} +\item{age}{continuous age variable.} \item{PAA_045}{number of hours of sports, fitness, or recreational activity that make you sweat or breathe harder for CCHS 2015-2018 for 18+ years old.} diff --git a/man/energy_exp_fun_cat.Rd b/man/energy_exp_fun_cat.Rd new file mode 100644 index 00000000..b608b3cf --- /dev/null +++ b/man/energy_exp_fun_cat.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/physical-activity.R +\name{energy_exp_fun_cat} +\alias{energy_exp_fun_cat} +\title{Categorize energy expenditure into 3 activity levels} +\usage{ +energy_exp_fun_cat(energy_exp) +} +\arguments{ +\item{energy_exp}{Continuous energy expenditure in kcal/kg/day.} +} +\value{ +A categorical variable with 3 levels: + \enumerate{ + \item Inactive (< 1.5 kcal/kg/day) + \item Moderately active (1.5 to < 3.0 kcal/kg/day) + \item Active (>= 3.0 kcal/kg/day) + } + Returns \code{"NA(a)"} if energy_exp is tagged NA(a) (not applicable), + or \code{"NA(b)"} otherwise (missing). +} +\description{ +Categorizes the continuous energy expenditure variable + (energy_exp) into 3 physical activity levels using CCHS cutpoints: + inactive (< 1.5), moderately active (1.5 to < 3.0), and active (>= 3.0 + kcal/kg/day). +} +\examples{ +energy_exp_fun_cat(0.5) # 1 (Inactive) +energy_exp_fun_cat(2.0) # 2 (Moderately active) +energy_exp_fun_cat(4.0) # 3 (Active) + +} diff --git a/man/fix_worksheet.Rd b/man/fix_worksheet.Rd new file mode 100644 index 00000000..aef9c2d6 --- /dev/null +++ b/man/fix_worksheet.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fix-worksheet.R +\name{fix_worksheet} +\alias{fix_worksheet} +\title{Fix formatting issues in a CSV worksheet} +\usage{ +fix_worksheet(file_path, file_type = c("variables", "variable_details")) +} +\arguments{ +\item{file_path}{Path to the CSV file to fix} + +\item{file_type}{Type of file being fixed. Either "variables" or +"variable_details".} +} +\value{ +A list of error objects, each with an added \code{fixed} field: + \itemize{ + \item fixed: Boolean indicating if the error was fixed + } + Returns an empty list if no errors were found. +} +\description{ +Automatically corrects formatting violations in a CSV worksheet + based on the errors detected by \code{check_worksheet}. +} +\examples{ +\dontrun{ +errors <- fix_worksheet("inst/extdata/variables.csv", "variables") +fixed_count <- sum(sapply(errors, function(e) e$fixed)) +print(sprintf("Fixed \%d errors", fixed_count)) +} +} diff --git a/man/get_data_variable_name.Rd b/man/get_data_variable_name.Rd index f7117dd0..a61fd805 100644 --- a/man/get_data_variable_name.Rd +++ b/man/get_data_variable_name.Rd @@ -28,3 +28,4 @@ the data equivalent of variable_being_checked Retrieves the name of the column inside data to use for calculations } +\keyword{internal} diff --git a/man/immigration_fun.Rd b/man/immigration_fun.Rd deleted file mode 100644 index b10bc19d..00000000 --- a/man/immigration_fun.Rd +++ /dev/null @@ -1,73 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/immigration.R -\name{immigration_fun} -\alias{immigration_fun} -\title{Immigration by ethnicity and settlement} -\usage{ -immigration_fun(SDCFIMM, SDCGCBG, SDCGCGT, SDCGRES) -} -\arguments{ -\item{SDCFIMM}{Immigrant status (1-immigrant, 2-non-immigrant)} - -\item{SDCGCBG}{Country of birth (1-Canada, 2-Outside of Canada)} - -\item{SDCGCGT}{Cultural or racial origin (1-white, 2-visible minority)} - -\item{SDCGRES}{Length/time in Canada since immigration (1- 0-9 years, 2- 10+ -years)} -} -\value{ -Categorical variable (immigration_der) with six categories: - - \itemize{ - \item 1 - White Canada-born - \item 2 - Non-white Canadian born - \item 3 - White immigrant born outside of Canada (0-9 years in Canada) - \item 4 - Non-white immigrant born outside of Canada (0-9 years in Canada) - \item 5 - White immigrant born outside of Canada (10+ years in Canada) - \item 6 - Non-white immigrant born outside of Canada (10+ years in Canada) -} -} -\description{ -This function creates a categorical variable based on -immigrant status (SDCFIMM), country of birth (SDCGCBG), ethnicity (SDCGCGT), -and time in Canada (SDCGRES). -} -\details{ -immigration_der uses the CCHS variables that have been transformed by -cchsflow. In order to generate a value for BMI across CCHS cycles, -the following SDC variables must be transformed and harmonized. -} -\examples{ -# Using immigration_fun() to create immigration_der values across CCHS cycles -# immigration_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform immigration_der, use rec_with_table() for each CCHS cycle -# and specify immigration_der, along with the various SDC variables. -# Then by using merge_rec_data() you can combine immigration_der across cycles. - -library(cchsflow) -immigration2001 <- rec_with_table( - cchs2001_p, c( - "SDCFIMM", "SDCGCBG", "SDCGCGT", "SDCGRES", "immigration_der" - ) -) - -head(immigration2001) - -immigration2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "SDCFIMM", "SDCGCBG", "SDCGCGT", "SDCGRES", "immigration_der" - ) -) - -tail(immigration2009_2010) - -combined_immigration <- merge_rec_data(immigration2001, immigration2009_2010) - -head(combined_immigration) - -tail(combined_immigration) - -} diff --git a/man/label_data.Rd b/man/label_data.Rd index 45ff906f..08755606 100644 --- a/man/label_data.Rd +++ b/man/label_data.Rd @@ -7,7 +7,7 @@ label_data(label_list, data_to_label) } \arguments{ -\item{label_list}{the label list object that contains extracted labels +\item{label_list}{The label list that contains labels from variable details} \item{data_to_label}{The data that is to be labeled} @@ -16,5 +16,5 @@ from variable details} Returns labeled data } \description{ -Attaches labels to the DataToLabel to preserve metadata +Labels a dataframe according to a given label list. } diff --git a/man/load_schema.Rd b/man/load_schema.Rd new file mode 100644 index 00000000..e6b14213 --- /dev/null +++ b/man/load_schema.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/load-schema.R +\name{load_schema} +\alias{load_schema} +\title{Load schema configuration from YAML} +\usage{ +load_schema(file_type) +} +\arguments{ +\item{file_type}{Either "variables" or "variable_details"} +} +\value{ +List containing schema configuration: + \itemize{ + \item expected_column_order: Character vector of column names in expected order + \item id_column_name: Name of the ID column used for row sorting (variables only) + } +} +\description{ +Loads the YAML schema configuration for a given file type. + The schema contains the expected column order and other metadata used + for validating CSV worksheets. +} +\examples{ +\dontrun{ +schema <- load_schema("variables") +schema$expected_column_order +schema$id_column_name +} +} diff --git a/man/low_drink_long_fun.Rd b/man/low_drink_long_fun.Rd deleted file mode 100644 index 7c8cdd68..00000000 --- a/man/low_drink_long_fun.Rd +++ /dev/null @@ -1,125 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{low_drink_long_fun} -\alias{low_drink_long_fun} -\title{Long term risks due to drinking} -\usage{ -low_drink_long_fun( - DHH_SEX, - ALWDWKY, - ALC_1, - ALW_1, - ALW_2A1, - ALW_2A2, - ALW_2A3, - ALW_2A4, - ALW_2A5, - ALW_2A6, - ALW_2A7 -) -} -\arguments{ -\item{DHH_SEX}{Sex of respondent (1 - male, 2 - female)} - -\item{ALWDWKY}{Number of drinks consumed in the past week} - -\item{ALC_1}{Drinks in the past year (1 - yes, 2 - no)} - -\item{ALW_1}{Drinks in the last week (1 - yes, 2 - no)} - -\item{ALW_2A1}{Number of drinks on Sunday} - -\item{ALW_2A2}{Number of drinks on Monday} - -\item{ALW_2A3}{Number of drinks on Tuesday} - -\item{ALW_2A4}{Number of drinks on Wednesday} - -\item{ALW_2A5}{Number of drinks on Thursday} - -\item{ALW_2A6}{Number of drinks on Friday} - -\item{ALW_2A7}{Number of drinks on Saturday} -} -\value{ -Categorical variable (ALWDVLTR_der) with two categories: - - \itemize{ - \item 1 - Increased long term health risk - \item 2 - No increased long term health risk - } -} -\description{ -This function creates a categorical variable that - flags for increased long term health risks due to their drinking habits, - according to Canada's Low-Risk Alcohol Drinking Guideline. -} -\details{ -The classification of drinkers according to their long term health -risks comes from guidelines in Alcohol and Health in Canada: A Summary of -Evidence and Guidelines for Low-risk Drinking, and is based on the alcohol -consumption reported over the past week. Short-term or acute risks include -injury and overdose. - -Categories are based on CCHS 2015-2016's variable (ALWDVLTR) where long -term health risk are increased when drinking more than 10 drinks a week for -women, with no more than 2 drinks a day most days, and more than 15 drinks a -week for men, with no more than 3 drinks a day most days. - -See \url{https://osf.io/ykau5/} for more details on the guideline. -See \url{https://osf.io/ycxaq/} for more details on the derivation of the -function on page 8. -} -\examples{ - -# Using low_drink_long_fun() to create ALWDVLTR_der values across CCHS cycles -# low_drink_long_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform ALWDVLTR_der, use rec_with_table() for each CCHS cycle -# and specify ALWDVLTR_der, along with the various alcohol and sex -# variables. -# Using merge_rec_data(), you can combine ALWDVLTR_der across cycles. - -library(cchsflow) -long_low_drink2001 <- rec_with_table( - cchs2001_p, c( - "ALW_1", "DHH_SEX", "ALW_2A1", "ALW_2A2", "ALW_2A3", "ALW_2A4", - "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDWKY", "ALC_1","ALWDVLTR_der" - ) -) - -head(long_low_drink2001) - -long_low_drink2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "ALW_1", "DHH_SEX", "ALW_2A1", "ALW_2A2", "ALW_2A3", "ALW_2A4", - "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDWKY", "ALC_1","ALWDVLTR_der" - ) -) - -tail(long_low_drink2009_2010) - -combined_long_low_drink <- bind_rows(long_low_drink2001, -long_low_drink2009_2010) - -head(combined_long_low_drink) - -tail(combined_long_low_drink) - -# Using low_drink_long_fun() to generate ALWDVLTR_der with user-inputted -# values. -# -# Let's say you are a male, you had drinks in the last week and in the last -# year. Let's say you had 5 drinks on Sunday, 1 drink on Monday, 6 drinks on -# Tuesday, 4 drinks on Wednesday, 4 drinks on Thursday, 8 drinks on Friday, -# and 2 drinks on Saturday with a total of 30 drinks in a week. -# Using low_drink_long_fun(), we can check if you would be classified as -# having an increased long term health risk due to drinking. - -long_term_drink <- low_drink_long_fun(DHH_SEX = 1, ALWDWKY = 30, ALC_1 = 1, - ALW_1 = 1, ALW_2A1 = 5, ALW_2A2 = 1, ALW_2A3 = 6, ALW_2A4 = 4, ALW_2A5 = 4, - ALW_2A6 = 8, ALW_2A7 = 2) - -print(long_term_drink) -} diff --git a/man/low_drink_score_fun.Rd b/man/low_drink_score_fun.Rd deleted file mode 100644 index be397086..00000000 --- a/man/low_drink_score_fun.Rd +++ /dev/null @@ -1,78 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{low_drink_score_fun} -\alias{low_drink_score_fun} -\title{Low drinking score (all cycles)} -\usage{ -low_drink_score_fun(DHH_SEX, ALWDWKY) -} -\arguments{ -\item{DHH_SEX}{Sex of respondent (1 - male, 2 - female)} - -\item{ALWDWKY}{Number of drinks consumed in the past week} -} -\value{ -Low risk drinking score (low_drink_score) with four categories: -\itemize{ - \item 1 - Low risk (0 points) - \item 2 - Marginal risk (1-2 points) - \item 3 - Medium risk (3-4 points) - \item 4 - High risk (5-9 points) - } -} -\description{ -This function creates a derived variable based on their drinking -habits and flags for health and social problems from their pattern of -alcohol use according to Canada's Low-Risk Alcohol Drinking Guideline. -} -\details{ -The low risk drinking score is based on the scoring system in -Canada's Low-Risk Alcohol Drinking Guideline. The score is divided into two -steps. Step 1 allocates points based on sex and the number of drinks -that you usually have each week. In step 2, one point will be awarded for -each item that is true related to drinking habits. The total score is -obtained from adding the points in step 1 and step 2. -} -\note{ -Step 2 is not included in this function because the questions in -step 2 are not asked in any of the CCHS cycles. The score is only based on -step 1. - -See \url{https://osf.io/eprg7/} for more details on the guideline and score. -} -\examples{ - -# Using low_drink_score_fun() to create low_drink_score values across -# CCHS cycles low_drink_score_fun() is specified in variable_details.csv -# along with the CCHS variables and cycles included. - -# To transform low_drink_score, use rec_with_table() for each CCHS cycle -# and specify low_drink_score, along with the various alcohol and sex -# variables. -# Using merge_rec_data(), you can combine low_drink_score across cycles. - -library(cchsflow) -low_drink2001 <- rec_with_table( - cchs2001_p, c( - "DHH_SEX", "ALWDWKY", "low_risk_score" - ) -) - -head(low_drink2001) - -low_drink2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "DHH_SEX", "ALWDWKY", "low_risk_score" - ) -) - -tail(low_drink2009_2010) - -combined_low_drink <- bind_rows(low_drink2001, -low_drink2009_2010) - -head(combined_low_drink) - -tail(combined_low_drink) - -} diff --git a/man/low_drink_score_fun1.Rd b/man/low_drink_score_fun1.Rd deleted file mode 100644 index f14c6426..00000000 --- a/man/low_drink_score_fun1.Rd +++ /dev/null @@ -1,88 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{low_drink_score_fun1} -\alias{low_drink_score_fun1} -\title{Low drinking score (select cycles)} -\usage{ -low_drink_score_fun1(DHH_SEX, ALWDWKY, ALC_005, ALC_1) -} -\arguments{ -\item{DHH_SEX}{Sex of respondent (1 - male, 2 - female)} - -\item{ALWDWKY}{Number of drinks consumed in the past week} - -\item{ALC_005}{In lifetime, ever had a drink? (1 - yes, 2 - no)} - -\item{ALC_1}{Past year, have you drank alcohol? (1 - yes, 2 - no)} -} -\value{ -Low risk drinking score (low_drink_score1) with four categories: -\itemize{ - \item 1 - Low risk - never drank (0 points) - \item 2 - Low risk - former drinker (0 points) - \item 3 - Marginal risk (1-2 points) - \item 4 - Medium risk (3-4 points) - \item 5 - High risk (5-9 points) - } -} -\description{ -This function creates a derived variable based on their drinking -habits and flags for health and social problems from their pattern of -alcohol use according to Canada's Low-Risk Alcohol Drinking Guideline. -} -\details{ -The low risk drinking score is based on the scoring system in -Canada's Low-Risk Alcohol Drinking Guideline. The score is divided into two -steps. Step 1 allocates points based on sex and the number of drinks -that you usually have each week. In step 2, one point will be awarded for -each item that is true related to drinking habits. The total score is -obtained from adding the points in step 1 and step 2. - -This score has two 0 point categories: low risk (never drank) and low risk -(former drinker). The two drinking groups are derived from 'ever had a drink -in lifetime'. 'Ever had a drink in lifetime' is only available in CCHS -2001-2008 and 2015-2018. -} -\note{ -Step 2 is not included in this function because the questions in -step 2 are not asked in any of the CCHS cycles. The score is only based on -step 1. - -See \url{https://osf.io/eprg7/} for more details on the guideline and score. -} -\examples{ - -# Using low_drink_score_fun1() to create low_drink_score values across -# CCHS cycles low_drink_score_fun1() is specified in variable_details.csv -# along with the CCHS variables and cycles included. - -# To transform low_drink_score1, use rec_with_table() for each CCHS cycle -# and specify low_drink_score1, along with the various alcohol and sex -# variables. -# Using merge_rec_data(), you can combine low_drink_score1 across cycles. - -library(cchsflow) -low_drink2001 <- rec_with_table( - cchs2001_p, c( - "DHH_SEX", "ALWDWKY", "ALC_005", "ALC_1", "low_risk_score" - ) -) - -head(low_drink2001) - -low_drink2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "DHH_SEX", "ALWDWKY", "ALC_005", "ALC_1", "low_risk_score" - ) -) - -tail(low_drink2009_2010) - -combined_low_drink1 <- bind_rows(low_drink2001, -low_drink2009_2010) - -head(combined_low_drink1) - -tail(combined_low_drink1) - -} diff --git a/man/low_drink_short_fun.Rd b/man/low_drink_short_fun.Rd deleted file mode 100644 index e34705e3..00000000 --- a/man/low_drink_short_fun.Rd +++ /dev/null @@ -1,124 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/alcohol.R -\name{low_drink_short_fun} -\alias{low_drink_short_fun} -\title{Short term risks due to drinking} -\usage{ -low_drink_short_fun( - DHH_SEX, - ALWDWKY, - ALC_1, - ALW_1, - ALW_2A1, - ALW_2A2, - ALW_2A3, - ALW_2A4, - ALW_2A5, - ALW_2A6, - ALW_2A7 -) -} -\arguments{ -\item{DHH_SEX}{Sex of respondent (1 - male, 2 - female)} - -\item{ALWDWKY}{Number of drinks consumed in the past week} - -\item{ALC_1}{Drinks in the past year (1 - yes, 2 - no)} - -\item{ALW_1}{Drinks in the last week (1 - yes, 2 - no)} - -\item{ALW_2A1}{Number of drinks on Sunday} - -\item{ALW_2A2}{Number of drinks on Monday} - -\item{ALW_2A3}{Number of drinks on Tuesday} - -\item{ALW_2A4}{Number of drinks on Wednesday} - -\item{ALW_2A5}{Number of drinks on Thursday} - -\item{ALW_2A6}{Number of drinks on Friday} - -\item{ALW_2A7}{Number of drinks on Saturday} -} -\value{ -Categorical variable (ALWDVSTR_der) with two categories: - - \itemize{ - \item 1 - Increased short term health risk - \item 2 - No increased short term health risk - } -} -\description{ -This function creates a categorical variable that - flags for increased short term health risks due to their drinking habits, - according to Canada's Low-Risk Alcohol Drinking Guideline. -} -\details{ -The classification of drinkers according to their short term health -risks comes from guidelines in Alcohol and Health in Canada: A Summary of -Evidence and Guidelines for Low-risk Drinking, and is based on the alcohol -consumption reported over the past week. Short-term or acute risks include -injury and overdose. - -Categories are based on CCHS 2015-2016's variable (ALWDVSTR) where short -term health risk are increased when drinking more than 3 drinks (for women) -or 4 drinks (for men) on any single occasion. - -See \url{https://osf.io/ykau5/} for more details on the guideline. -See \url{https://osf.io/ycxaq/} for more details on derivation of the -function on page 9. -} -\examples{ - -# Using low_drink_short_fun() to create ALWDVSTR_der values across CCHS cycles -# low_drink_short_fun() is specified in variable_details.csv along with the -# CCHS variables and cycles included. - -# To transform ALWDVSTR_der, use rec_with_table() for each CCHS cycle -# and specify ALWDVSTR_der, along with the various alcohol and sex -# variables. -# Using merge_rec_data(), you can combine ALWDVSTR_der across cycles. - -library(cchsflow) -short_low_drink2001 <- rec_with_table( - cchs2001_p, c( - "ALW_1", "DHH_SEX", "ALW_2A1", "ALW_2A2", "ALW_2A3", "ALW_2A4", - "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDWKY", "ALC_1","ALWDVSTR_der" - ) -) - -head(short_low_drink2001) - -short_low_drink2009_2010 <- rec_with_table( - cchs2009_2010_p, c( - "ALW_1", "DHH_SEX", "ALW_2A1", "ALW_2A2", "ALW_2A3", "ALW_2A4", - "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDWKY", "ALC_1","ALWDVSTR_der" - ) -) - -tail(short_low_drink2009_2010) - -combined_short_low_drink <- bind_rows(short_low_drink2001, -short_low_drink2009_2010) - -head(combined_short_low_drink) - -tail(combined_short_low_drink) - -# Using low_drink_short_fun() to generate ALWDVSTR_der with user-inputted -# values. -# -# Let's say you are a male, you had drinks in the last week and in the last -# year. Let's say you had 5 drinks on Sunday, 1 drink on Monday, 6 drinks on -# Tuesday, 4 drinks on Wednesday, 4 drinks on Thursday, 8 drinks on Friday, -# and 2 drinks on Saturday with a total of 30 drinks in a week. -# Using low_drink_short_fun(), we can check if you would be classified as -# having an increased short term health risk due to drinking. - -short_term_drink <- low_drink_short_fun(DHH_SEX = 1, ALWDWKY = 30, ALC_1 = 1, - ALW_1 = 1, ALW_2A1 = 5, ALW_2A2 = 1, ALW_2A3 = 6, ALW_2A4 = 4, ALW_2A5 = 4, - ALW_2A6 = 8, ALW_2A7 = 2) - -print(short_term_drink) -} diff --git a/man/multiple_conditions_fun1.Rd b/man/multiple_conditions_fun1.Rd index ca7c359f..1549fbc9 100644 --- a/man/multiple_conditions_fun1.Rd +++ b/man/multiple_conditions_fun1.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/number-conditions.R \name{multiple_conditions_fun1} \alias{multiple_conditions_fun1} -\title{Number of chronic conditions (5 chronic conditions)} +\title{Number of chronic conditions (5 chronic conditions, without mood disorder)} \usage{ multiple_conditions_fun1( CCC_121, @@ -14,7 +14,7 @@ multiple_conditions_fun1( ) } \arguments{ -\item{CCC_121}{variable indicating if respondent has heart disease (1 = +\item{CCC_121}{variable indicating if respondent has heart disease (1 = respondent has heart disease, 2 = respondent does not have heart disease)} \item{CCC_131}{variable indicating if respondent has active cancer (1 = @@ -32,7 +32,7 @@ disorder)} respiratory condition (1 = respondent is over the age of 35 and has a respiratory condition, 2 = respondent is under the age of 35 and has a respiratory conditions, 3 = respondent does not have a respiratory -condition). See \code{\link{resp_condition_fun1}} for +condition). See \code{\link{resp_condition_fun}} for documentation on how variable was derived.} \item{CCC_051}{variable indicating if respondent has arthritis or @@ -46,10 +46,10 @@ A categorical variable indicating the number of chronic conditions } \description{ This function generates a derived variable (number_conditions) - that counts the number of chronic conditions a respondent has. This function - takes 5 CCHS-defined conditions (heart disease, cancer, stroke, bowel - disorder, and arthritis), and well one derived variable (respiratory - condition) to count the number of conditions a respondent has. + for the 2001 CCHS cycle. It counts five CCHS-defined conditions (heart + disease, cancer, stroke, bowel disorder, and arthritis) plus the derived + respiratory condition variable. Mood disorder (CCC_280) was not collected + in the 2001 cycle. } \details{ mood disorder (CCC_280) was not asked to respondents in the 2001 @@ -59,36 +59,42 @@ mood disorder (CCC_280) was not asked to respondents in the 2001 from 2003 to 2014. } \examples{ - # Using rec_with_table() to generate multiple_conditions in a CCHS - # cycle. - - # multiple_conditions_fun1() is specified in variable_details.csv along with - # the CCHS variables and cycles included. - - # To generate multiple_conditions, use rec_with_table() and specify the - # multiple_conditions, along with the variables that are derived from it. - # Since resp_condition_der is also a derived variable, you will have to - # specify the variables that are derived from it. In this example, data - # from the 2001 CCHS will be used, so DHHGAGE_cont, CCC_091, and CCC_91A, - # and CCC_031 will be specified along with resp_condition_der. - +# Using rec_with_table() to generate multiple_conditions in a CCHS +# cycle. + +# multiple_conditions_fun1() is specified in variable_details.csv along with +# the CCHS variables and cycles included. + +# To generate multiple_conditions, use rec_with_table() and specify the +# multiple_conditions, along with the variables that are derived from it. +# Since resp_condition_der is also a derived variable, you will have to +# specify the variables that are derived from it. In this example, data +# from the 2001 CCHS will be used, so DHHGAGE_cont, CCC_091, and CCC_91A, +# and CCC_031 will be specified along with resp_condition_der. + library(cchsflow) - conditions_2001 <- suppressWarnings(rec_with_table(cchs2001_p, - c("DHHGAGE_cont", "CCC_091", - "CCC_91A", "CCC_031", "CCC_121","CCC_131","CCC_151", "CCC_171","CCC_280", - "resp_condition_der","CCC_051", "number_conditions"))) - - head(conditions_2001) - - # Generating multiple_conditions with user inputted values - # Let's say you are an individual that has heart disease, bowel disorder, - # and arthritis. multiple_conditions_fun1() can be used to count the number - # of chronic conditions you have - +conditions_2001 <- suppressWarnings(rec_with_table( + cchs2001_p, + c( + "DHHGAGE_cont", "CCC_091", + "CCC_91A", "CCC_031", "CCC_121", "CCC_131", "CCC_151", "CCC_171", "CCC_280", + "resp_condition_der", "CCC_051", "number_conditions" + ) +)) + +head(conditions_2001) + +# Generating multiple_conditions with user inputted values +# Let's say you are an individual that has heart disease, bowel disorder, +# and arthritis. multiple_conditions_fun1() can be used to count the number +# of chronic conditions you have + library(cchsflow) - num_conditions <- multiple_conditions_fun1(CCC_121 = 1, CCC_131 = 2, - CCC_151 = 2, CCC_171 = 1, resp_condition_der = 3, CCC_051 = 1) - +num_conditions <- multiple_conditions_fun1( + CCC_121 = 1, CCC_131 = 2, + CCC_151 = 2, CCC_171 = 1, resp_condition_der = 3, CCC_051 = 1 +) + print(num_conditions) } diff --git a/man/multiple_conditions_fun2.Rd b/man/multiple_conditions_fun2.Rd index 4b456fd6..6e3bc896 100644 --- a/man/multiple_conditions_fun2.Rd +++ b/man/multiple_conditions_fun2.Rd @@ -15,7 +15,7 @@ multiple_conditions_fun2( ) } \arguments{ -\item{CCC_121}{variable indicating if respondent has heart disease (1 = +\item{CCC_121}{variable indicating if respondent has heart disease (1 = respondent has heart disease, 2 = respondent does not have heart disease)} \item{CCC_131}{variable indicating if respondent has active cancer (1 = @@ -38,7 +38,7 @@ survey cycle.} respiratory condition. (1 = respondent is over the age of 35 and has a respiratory condition, 2 = respondent is under the age of 35 and has a respiratory conditions, 3 = respondent does not have a respiratory -condition). See \code{\link{resp_condition_fun1}} for +condition). See \code{\link{resp_condition_fun}} for documentation on how variable was derived.} \item{CCC_051}{variable indicating if respondent has arthritis or @@ -61,43 +61,51 @@ This function generates a derived variable (number_conditions) mood disorder (CCC_280) was not asked to respondents in the 2001 CCHS survey cycle. This mean respondents in this cycle will only be able to have a maximum of 6 chronic conditions as opposed to 7 for respondents in - other cycles. \code{\link{multiple_conditions_fun1}} is used for CCHS cycles - from 2003 to 2014. + other cycles. \code{\link{multiple_conditions_fun1}} is used for the 2001 + CCHS cycle. } \examples{ - # Using rec_with_table() to generate multiple_conditions in a CCHS - # cycle. - - # multiple_conditions_fun2() is specified in variable_details.csv along with - # the CCHS variables and cycles included. - - # To generate multiple_conditions, use rec_with_table() and specify the - # multiple_conditions, along with the variables that are derived from it. - # Since resp_condition_der is also a derived variable, you will have to - # specify the variables that are derived from it. In this example, data - # from the 2010 CCHS will be used, so DHHGAGE_cont, CCC_091, and CCC_031 - # will be specified along with resp_condition_der. - +# Using rec_with_table() to generate multiple_conditions in a CCHS +# cycle. + +# multiple_conditions_fun2() is specified in variable_details.csv along with +# the CCHS variables and cycles included. + +# To generate multiple_conditions, use rec_with_table() and specify the +# multiple_conditions, along with the variables that are derived from it. +# Since resp_condition_der is also a derived variable, you will have to +# specify the variables that are derived from it. In this example, data +# from the 2010 CCHS will be used, so DHHGAGE_cont, CCC_091, and CCC_031 +# will be specified along with resp_condition_der. + library(cchsflow) - conditions_2009_2010 <- suppressWarnings(rec_with_table(cchs2009_2010_p, - c("DHHGAGE_cont", "CCC_091", - "CCC_031", "CCC_121","CCC_131","CCC_151", "CCC_171","CCC_280", - "resp_condition_der","CCC_051", "number_conditions"))) - - head(conditions_2009_2010) - - # Generating multiple_conditions with user inputted values - # Let's say you are an individual that has heart disease, bowel disorder, - # and arthritis. multiple_conditions_fun2() can be used to count the number - # of chronic conditions you have - +conditions_2009_2010 <- suppressWarnings(rec_with_table( + cchs2009_2010_p, + c( + "DHHGAGE_cont", "CCC_091", + "CCC_031", "CCC_121", "CCC_131", "CCC_151", "CCC_171", "CCC_280", + "resp_condition_der", "CCC_051", "number_conditions" + ) +)) + +head(conditions_2009_2010) + +# Generating multiple_conditions with user inputted values +# Let's say you are an individual that has heart disease, bowel disorder, +# and arthritis. multiple_conditions_fun2() can be used to count the number +# of chronic conditions you have + library(cchsflow) - num_conditions <- multiple_conditions_fun2(CCC_121 = 1, CCC_131 = 2, - CCC_151 = 2, CCC_171 = 1, CCC_280 = 2, resp_condition_der = 3, CCC_051 = 1) +num_conditions <- multiple_conditions_fun2( + CCC_121 = 1, CCC_131 = 2, + CCC_151 = 2, CCC_171 = 1, CCC_280 = 2, resp_condition_der = 3, CCC_051 = 1 +) print(num_conditions) } \seealso{ \code{\link{multiple_conditions_fun1}} + +\code{\link{multiple_conditions_fun3}} } diff --git a/man/multiple_conditions_fun3.Rd b/man/multiple_conditions_fun3.Rd new file mode 100644 index 00000000..0447e1b4 --- /dev/null +++ b/man/multiple_conditions_fun3.Rd @@ -0,0 +1,80 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/number-conditions.R +\name{multiple_conditions_fun3} +\alias{multiple_conditions_fun3} +\title{Number of chronic conditions (5 chronic conditions, without bowel disorder)} +\usage{ +multiple_conditions_fun3( + CCC_121, + CCC_131, + CCC_151, + CCC_280, + resp_condition_der, + CCC_051 +) +} +\arguments{ +\item{CCC_121}{variable indicating if respondent has heart disease (1 = +respondent has heart disease, 2 = respondent does not have heart disease)} + +\item{CCC_131}{variable indicating if respondent has active cancer (1 = +respondent has active cancer, 2 = respondent does not have active cancer)} + +\item{CCC_151}{variable indicating if respondent suffers from the effects +of a stroke (1 = respondent suffers from stroke effects, 2 = respondent +does not suffer from stroke effects)} + +\item{CCC_280}{variable indicating if respondent has a mood disorder (1 = +respondent has a mood disorder, 2 = respondent does not have a mood +disorder)} + +\item{resp_condition_der}{derived variable indicating if respondent has a +respiratory condition (1 = respondent is over the age of 35 and has +a respiratory condition, 2 = respondent is under the age of 35 and has a +respiratory condition, 3 = respondent does not have a respiratory +condition). See \code{\link{resp_condition_fun}} for documentation on how +variable was derived.} + +\item{CCC_051}{variable indicating if respondent has arthritis or +rheumatism (1 = respondent has arthritis or rheumatism, 2 = respondent +does not have arthritis or rheumatism)} +} +\value{ +A categorical variable indicating the number of chronic conditions + a respondent has. Respondents with 5 or more conditions are grouped in the + "5+" category. +} +\description{ +This function generates a derived variable (number_conditions) + for CCHS 2015-2016 and 2017-2018 cycles (PUMF and master). Bowel disorder + (CCC_171) is excluded because it was not collected in the PUMF for these + cycles; mood disorder (CCC_280) is included. This function counts five + CCHS-defined conditions (heart disease, cancer, stroke, mood disorder, and + arthritis) plus the derived respiratory condition variable. +} +\details{ +Bowel disorder (CCC_171) was not collected in the PUMF for + cchs2015_2016_p and cchs2017_2018_p. To maintain consistency across PUMF + and master for these cycles, CCC_171 is excluded from both. + \code{\link{multiple_conditions_fun1}} is used for 2001 cycles; + \code{\link{multiple_conditions_fun2}} is used for 2003-2014 cycles. +} +\examples{ +library(cchsflow) +conditions_2015_2016 <- suppressWarnings(rec_with_table( + cchs2015_2016_p, + c( + "DHHGAGE_cont", "CCC_091", + "CCC_031", "CCC_121", "CCC_131", "CCC_151", "CCC_280", + "resp_condition_der", "CCC_051", "number_conditions" + ) +)) + +head(conditions_2015_2016) + +} +\seealso{ +\code{\link{multiple_conditions_fun1}} + +\code{\link{multiple_conditions_fun2}} +} diff --git a/man/pack_years_fun.Rd b/man/pack_years_fun.Rd index 6bd248fb..d095ede6 100644 --- a/man/pack_years_fun.Rd +++ b/man/pack_years_fun.Rd @@ -5,7 +5,7 @@ \title{Smoking pack-years} \usage{ pack_years_fun( - SMKDSTY_A, + SMKDSTY_original, DHHGAGE_cont, time_quit_smoking, SMKG203_cont, @@ -19,7 +19,7 @@ pack_years_fun( ) } \arguments{ -\item{SMKDSTY_A}{variable used in CCHS cycles 2001-2014 that classifies an +\item{SMKDSTY_original}{variable used in CCHS cycles 2001-2014 that classifies an individual's smoking status.} \item{DHHGAGE_cont}{continuous age variable.} @@ -84,7 +84,7 @@ library(cchsflow) pack_years2009_2010 <- rec_with_table( cchs2009_2010_p, c( - "SMKDSTY_A", "DHHGAGE_cont", "SMK_09A_B", "SMKG09C", "time_quit_smoking", + "SMKDSTY_original", "DHHGAGE_cont", "SMK_09A_B", "SMKG09C", "time_quit_smoking", "SMKG203_cont", "SMKG207_cont", "SMK_204", "SMK_05B", "SMK_208", "SMK_05C", "SMK_01A", "SMKG01C_cont", "pack_years_der" ) @@ -94,7 +94,7 @@ head(pack_years2009_2010) pack_years2011_2012 <- rec_with_table( cchs2011_2012_p,c( - "SMKDSTY_A", "DHHGAGE_cont", "SMK_09A_B", "SMKG09C", "time_quit_smoking", + "SMKDSTY_original", "DHHGAGE_cont", "SMK_09A_B", "SMKG09C", "time_quit_smoking", "SMKG203_cont", "SMKG207_cont", "SMK_204", "SMK_05B", "SMK_208", "SMK_05C", "SMK_01A", "SMKG01C_cont", "pack_years_der" ) diff --git a/man/recode_columns.Rd b/man/recode_columns.Rd index df92a507..1e15f82d 100644 --- a/man/recode_columns.Rd +++ b/man/recode_columns.Rd @@ -34,3 +34,4 @@ Returns recoded and labeled data Recodes columns from passed row and returns just table with those columns and same rows as the data } +\keyword{internal} diff --git a/man/recode_variable_NA_formating.Rd b/man/recode_variable_NA_formating.Rd index 0713f1b1..dbfd48ff 100644 --- a/man/recode_variable_NA_formating.Rd +++ b/man/recode_variable_NA_formating.Rd @@ -17,3 +17,4 @@ an appropriately coded tagged NA \description{ Recodes the NA depending on the var type } +\keyword{internal} diff --git a/man/resp_condition_fun1.Rd b/man/resp_condition_fun.Rd similarity index 55% rename from man/resp_condition_fun1.Rd rename to man/resp_condition_fun.Rd index 82b666d7..ec4cfb2f 100644 --- a/man/resp_condition_fun1.Rd +++ b/man/resp_condition_fun.Rd @@ -1,15 +1,17 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/respiratory-condition.R -\name{resp_condition_fun1} -\alias{resp_condition_fun1} -\title{resp_condition_fun1} +\name{resp_condition_fun} +\alias{resp_condition_fun} +\title{resp_condition_fun} \usage{ -resp_condition_fun1(DHHGAGE_cont, CCC_091, CCC_031) +resp_condition_fun(age, CCC_091, CCC_031) } \arguments{ -\item{DHHGAGE_cont}{continuous age variable.} +\item{age}{continuous age variable (DHHGAGE_cont for _p cycles, DHH_AGE for +_m cycles).} -\item{CCC_091}{variable indicating if respondent has either COPD or Emphysema} +\item{CCC_091}{variable indicating if respondent has COPD, emphysema, or +bronchitis} \item{CCC_031}{variable indicating if respondent has asthma} } @@ -23,17 +25,14 @@ a categorical variable (resp_condition_der) with 3 levels: } } \description{ -This is one of 3 functions used to create a derived variable - (resp_condition_der) that determines if a respondents has a respiratory - condition. 3 different functions have been created to account for the fact - that different respiratory variables are used across CCHS cycles. This - function is for CCHS cycles (2009-2014) that only use COPD and Emphysema as - a combined variable. Asthma is used across CCHS cycles as a separate - variable. +This function is used to create a derived variable + (resp_condition_der) that determines if a respondent has a respiratory + condition. It uses the combined COPD, Emphysema, and Bronchitis variable + (CCC_091) and Asthma (CCC_031) across all CCHS cycles. } \examples{ -# Using resp_condition_fun1() to create values across CCHS cycles -# (2009-2014) resp_condition_fun1() is specified in +# Using resp_condition_fun() to create values across CCHS cycles +# (2009-2014) resp_condition_fun() is specified in # variable_details.csv along with the CCHS variables and cycles included. # To transform resp_condition_der, use rec_with_table() for each CCHS cycle @@ -44,7 +43,7 @@ This is one of 3 functions used to create a derived variable library(cchsflow) resp2009_2010 <- suppressWarnings(rec_with_table( - cchs2009_2010_p, c( + cchs2009_2010_p, c( "DHHGAGE_cont", "CCC_091", "CCC_031", "resp_condition_der" ) @@ -62,11 +61,8 @@ resp2011_2012 <- suppressWarnings(rec_with_table( tail(resp2011_2012) combined_resp <- - suppressWarnings(merge_rec_data(resp2009_2010, resp2011_2012)) + suppressWarnings(merge_rec_data(resp2009_2010, resp2011_2012)) head(combined_resp) tail(combined_resp) } -\seealso{ -\code{\link{resp_condition_fun2}}, \code{\link{resp_condition_fun3}} -} diff --git a/man/resp_condition_fun2.Rd b/man/resp_condition_fun2.Rd deleted file mode 100644 index 4600f20a..00000000 --- a/man/resp_condition_fun2.Rd +++ /dev/null @@ -1,74 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/respiratory-condition.R -\name{resp_condition_fun2} -\alias{resp_condition_fun2} -\title{resp_condition_fun2} -\usage{ -resp_condition_fun2(DHHGAGE_cont, CCC_91E, CCC_91F, CCC_91A, CCC_031) -} -\arguments{ -\item{DHHGAGE_cont}{continuous age variable.} - -\item{CCC_91E}{variable indicating if respondent has emphysema} - -\item{CCC_91F}{variable indicating if respondent has COPD} - -\item{CCC_91A}{variable indicating if respondent has chronic bronchitis} - -\item{CCC_031}{variable indicating if respondent has asthma} -} -\value{ -a categorical variable (resp_condition_der) with 3 levels: - - \enumerate{ - \item respondent is over the age of 35 and has a respiratory condition - \item respondent is under the age of 35 and has a respiratory condition - \item respondent does not have a respiratory condition - } -} -\description{ -This is one of 3 functions used to create a derived variable - (resp_condition_der) that determines if a respondents has a respiratory - condition. This function is for CCHS cycles (2005-2007) that use COPD & - Emphysema as separate variables, as well as Bronchitis. Asthma is used - across CCHS cycles as a separate variable. -} -\examples{ - -# Using resp_condition_fun2() to create values across CCHS cycles -# (2005-2007) resp_condition_fun2() is specified in -# variable_details.csv along with the CCHS variables and cycles included. - -# To transform resp_condition_der, use rec_with_table() for each CCHS cycle -# and specify resp_condition_der, along with the various respiratory -# variables. Then by using merge_rec_data() you can combine -# resp_condition_der across cycles. - -library(cchsflow) - -resp2005 <- suppressWarnings(rec_with_table( - cchs2005_p, c( - "DHHGAGE_cont", "CCC_91E", "CCC_91F", "CCC_91A", "CCC_031", - "resp_condition_der" - ) -)) - -head(resp2005) - -resp2007_2008 <- suppressWarnings(rec_with_table( - cchs2007_2008_p, c( - "DHHGAGE_cont", "CCC_91E", "CCC_91F", "CCC_91A", "CCC_031", - "resp_condition_der" - ) -)) - -tail(resp2007_2008) - -combined_resp <- suppressWarnings(merge_rec_data(resp2005, resp2007_2008)) - -head(combined_resp) -tail(combined_resp) -} -\seealso{ -\code{\link{resp_condition_fun1}}, \code{\link{resp_condition_fun3}} -} diff --git a/man/resp_condition_fun3.Rd b/man/resp_condition_fun3.Rd deleted file mode 100644 index d2076d0a..00000000 --- a/man/resp_condition_fun3.Rd +++ /dev/null @@ -1,71 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/respiratory-condition.R -\name{resp_condition_fun3} -\alias{resp_condition_fun3} -\title{resp_condition_fun3} -\usage{ -resp_condition_fun3(DHHGAGE_cont, CCC_091, CCC_91A, CCC_031) -} -\arguments{ -\item{DHHGAGE_cont}{continuous age variable.} - -\item{CCC_091}{variable indicating if respondent has either COPD or Emphysema} - -\item{CCC_91A}{variable indicating if respondent has chronic bronchitis} - -\item{CCC_031}{variable indicating if respondent has asthma} -} -\value{ -a categorical variable (resp_condition_der) with 3 levels: - - \enumerate{ - \item respondent is over the age of 35 and has a respiratory condition - \item respondent is under the age of 35 and has a respiratory condition - \item respondent does not have a respiratory condition - } -} -\description{ -This is one of 3 functions used to create a derived variable - (resp_condition_der) that determines if a respondents has a respiratory - condition. This function for CCHS cycles (2001-2003) that use COPD and - Emphysema as a combined variable, as well as Bronchitis. Asthma is used - across CCHS cycles as a separate variable. -} -\examples{ -# Using resp_condition_fun3() to create values across CCHS cycles -# (2001-2003) resp_condition_fun3() is specified in -# variable_details.csv along with the CCHS variables and cycles included. - -# To transform resp_condition_der, use rec_with_table() for each CCHS cycle -# and specify resp_condition_der, along with the various respiratory -# variables. Then by using merge_rec_data() you can combine -# resp_condition_der across cycles. - -library(cchsflow) - -resp2001 <- suppressWarnings(rec_with_table( - cchs2001_p, c( - "DHHGAGE_cont", "CCC_091", "CCC_91A", "CCC_031", - "resp_condition_der" - ) -)) - -head(resp2001) - -resp2003 <- suppressWarnings(rec_with_table( - cchs2003_p,c( - "DHHGAGE_cont", "CCC_091", "CCC_91A", "CCC_031", - "resp_condition_der" - ) -)) - -tail(resp2003) - -combined_resp <- suppressWarnings(merge_rec_data(resp2001, resp2003)) - -head(combined_resp) -tail(combined_resp) -} -\seealso{ -\code{\link{resp_condition_fun1}}, \code{\link{resp_condition_fun2}} -} diff --git a/man/score_adl.Rd b/man/score_adl.Rd new file mode 100644 index 00000000..9646e184 --- /dev/null +++ b/man/score_adl.Rd @@ -0,0 +1,96 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/adl.R +\name{score_adl} +\alias{score_adl} +\title{Enhanced ADL help score (count of tasks requiring help)} +\usage{ +score_adl( + ADL_01, + ADL_02, + ADL_03, + ADL_04, + ADL_05, + min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, + validate_params = NULL, + log_level = "silent" +) +} +\arguments{ +\item{ADL_01, ADL_02, ADL_03, ADL_04, ADL_05}{ADL variables as in assess_adl()} + +\item{min_ADL_01, max_ADL_01, min_ADL_02, max_ADL_02, min_ADL_03, max_ADL_03, min_ADL_04, max_ADL_04, min_ADL_05, max_ADL_05}{Validation parameters (defaults from variable_details.csv)} + +\item{validate_params}{Auto-detect validation mode (default NULL for auto-detection)} + +\item{log_level}{Logging level: "silent" (default), "warning", "verbose"} +} +\value{ +**Data Type**: Numeric count (0-5) +**Missing Data Handling**: +- Returns `haven::tagged_na("a")` if any input is not applicable +- Returns `haven::tagged_na("b")` if any input is missing/invalid +**Values**: 0-5 representing count of tasks requiring help +} +\description{ +**Purpose**: Count number of ADL tasks requiring help (0-5 scale) for granular functional assessment +**Method**: Sums "needs help" responses across 5 consistent ADL items +**Clinical Context**: Graduated disability measure for research and clinical assessment +} +\details{ +**Transformation Warnings**: +⚠️ **CAUTION - Methodological Changes**: Count-based scoring provides more +granular assessment than binary indicator but requires complete data for valid interpretation. + +**Calculation Details**: +- Counts number of ADL tasks with "needs help" response (=1) +- Range: 0 (independent) to 5 (maximum dependence) +- Missing data in ANY item invalidates entire score +- Preserves not applicable semantics across all items +} +\note{ +v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced scoring with comprehensive missing data validation +} +\examples{ +# Standard cchsflow workflow (primary usage) +library(cchsflow) +result <- rec_with_table( + cchs2013_2014_p, + c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADLSCORE_der") +) + +# Scalar usage examples +# score_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) +# (meals, appts, house, care, move) +score_adl(2, 2, 2, 2, 2) # Returns: 0 (no help needed) +score_adl(1, 2, 1, 2, 2) # Returns: 2 (help with 2 tasks: meals and housework) +score_adl(1, 1, 1, 1, 1) # Returns: 5 (complete dependence) +score_adl(1, 2, 2, 2, 2) # Returns: 1 (help with 1 task: meals only) + +# Vector processing with missing data +score_adl( + c(1, 2, 6, 7), # Mixed valid/missing codes + c(1, 2, 2, 2), + c(2, 1, 2, 2), + c(2, 2, 2, 2), + c(2, 2, 2, 2) +) # Returns: c(2, 1, tagged_na("a"), tagged_na("b")) + +# Vector with mixed missing types +score_adl( + c(1, 2, "Missing", haven::tagged_na("a")), + c(1, 2, 2, 2), + c(2, 2, 2, 2), + c(2, 2, 2, 2), + c(2, 2, 2, 2) +) # Returns: c(2, 1, tagged_na("b"), tagged_na("a")) + +} diff --git a/man/score_adl_6.Rd b/man/score_adl_6.Rd new file mode 100644 index 00000000..eab1e1ec --- /dev/null +++ b/man/score_adl_6.Rd @@ -0,0 +1,104 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/adl.R +\name{score_adl_6} +\alias{score_adl_6} +\title{Enhanced 6-item ADL help score with comprehensive validation} +\usage{ +score_adl_6( + ADL_01, + ADL_02, + ADL_03, + ADL_04, + ADL_05, + ADL_06, + min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, + min_ADL_06 = ADL_VALIDATION_BOUNDS$response$min, + max_ADL_06 = ADL_VALIDATION_BOUNDS$response$max, + validate_params = NULL, + log_level = "silent" +) +} +\arguments{ +\item{ADL_01, ADL_02, ADL_03, ADL_04, ADL_05}{Core ADL variables as in other functions} + +\item{ADL_06}{Help needed doing finances (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} + +\item{min_ADL_01, max_ADL_01, min_ADL_02, max_ADL_02, min_ADL_03, max_ADL_03, min_ADL_04, max_ADL_04, min_ADL_05, max_ADL_05, min_ADL_06, max_ADL_06}{Validation parameters (defaults from variable_details.csv)} + +\item{validate_params}{Auto-detect validation mode (default NULL for auto-detection)} + +\item{log_level}{Logging level: "silent" (default), "warning", "verbose"} +} +\value{ +**Data Type**: Numeric count (0-6) +**Missing Data Handling**: Same as 5-item version +**Values**: 0-6 representing count of tasks requiring help +} +\description{ +**Purpose**: Count ADL help requirements using 6-item scale including financial management +**Method**: Extends 5-item ADL to include financial management (available 2003+) +**Clinical Context**: Comprehensive functional assessment including instrumental ADL component +} +\details{ +**Transformation Warnings**: +⚠️ **CAUTION - Temporal Changes**: ADL_06 (finances) available only in CCHS +2003-2014 cycles. Use 5-item version for 2001 or 2015+ analyses. + +⚠️ **CAUTION - Population Restrictions**: Financial management questions may +have different age restrictions or applicability rules across cycles. + +**Calculation Details**: +- Extends 5-item ADL with financial management component +- Range: 0 (independent) to 6 (maximum dependence) +- Same missing data handling as 5-item version +- Recommended for 2003-2014 cycle analyses +} +\note{ +v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced 6-item scoring for comprehensive functional assessment +} +\examples{ +# Standard cchsflow workflow (primary usage) +library(cchsflow) +result <- rec_with_table( + cchs2007_2008_p, + c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_06", "ADLSCORE6_der") +) + +# Scalar usage examples +# score_adl_6(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, ADL_06) +# (meals, appts, house, care, move, finances) +score_adl_6(2, 2, 2, 2, 2, 2) # Returns: 0 (independent with all tasks) +score_adl_6(1, 2, 1, 2, 2, 1) # Returns: 3 (help with 3 tasks: meals, housework, finances) +score_adl_6(1, 1, 1, 1, 1, 1) # Returns: 6 (complete dependence) +score_adl_6(2, 2, 2, 2, 2, 1) # Returns: 1 (help only with finances) + +# Vector processing with missing data and edge cases +score_adl_6( + c(1, 2, 6, 96), # Mixed valid/categorical age codes + c(1, 2, 2, 2), + c(2, 1, 2, 2), + c(2, 2, 2, 2), + c(2, 2, 2, 2), + c(2, 2, 2, 97) # "Don't know" for finances +) # Returns: c(2, 1, tagged_na("a"), tagged_na("b")) + +# Vector demonstrating financial component (ADL_06) +score_adl_6( + c(2, 2, 2), # No help with basic ADLs + c(2, 2, 2), + c(2, 2, 2), + c(2, 2, 2), + c(2, 2, 2), + c(1, "Refusal", 2) # Different financial help needs +) # Returns: c(1, tagged_na("b"), 0) + +} diff --git a/man/set_data_labels.Rd b/man/set_data_labels.Rd index 01726bbb..bdc1deab 100644 --- a/man/set_data_labels.Rd +++ b/man/set_data_labels.Rd @@ -2,28 +2,32 @@ % Please edit documentation in R/label-utils.R \name{set_data_labels} \alias{set_data_labels} -\title{Set Data Labels} +\title{Set data labels} \usage{ set_data_labels(data_to_label, variable_details, variables_sheet = NULL) } \arguments{ -\item{data_to_label}{newly transformed dataset} +\item{variable_details}{A dataframe containing the details of each variable, +with category labels in the 'catLabel' column.} -\item{variable_details}{variable_details.csv} +\item{variables_sheet}{(Optional) A dataframe containing variable labels in +the 'label' column.} -\item{variables_sheet}{variables.csv} +\item{data_to_lab.el}{A dataframe of CCHS data that lacks labels.} } \value{ -labeled data_to_label +The dataframe with labelled CCHS variables. } \description{ -sets labels for passed database, Uses the names of final -variables in variable_details/variables_sheet as well as the labels contained +Set variable labels for a working CCHS dataframe. The function +extracts variables from the provided dataframe and assigns labels according +the provided variables and variable_details dataframes. in the passed dataframes } \examples{ library(cchsflow) -library(sjlabelled) +library(sjlabelled) # used to get labels in the example. + bmi2001 <- rec_with_table( cchs2001_p, c( "HWTGHTM", From e3fbf85f3fa30f93b6941d299bada9786127ae5d Mon Sep 17 00:00:00 2001 From: Rafidul Islam Date: Wed, 10 Jun 2026 16:40:30 -0400 Subject: [PATCH 2/5] Cleaned csv worksheets to follow csv-conventiond.md and rebuild RData as a result --- data/variable_details.RData | Bin 85438 -> 90815 bytes data/variables.RData | Bin 25659 -> 31803 bytes inst/extdata/variable_details.csv | 46 +++++++++++++++--------------- inst/extdata/variables.csv | 18 ++++++------ 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/data/variable_details.RData b/data/variable_details.RData index 3d3205005b7d90378d10b06a068e537d5602f8b3..ac679ec9889d9ae8ea2020e4d044bdb42fbf3908 100644 GIT binary patch delta 84790 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 z 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 literal 25659 zcmaI719W6f*RVYkJDJ$FlZkC~Y}>Xq$;7rXv27b2+qP}~bKmdtuJ8HQ`q$TWtzLUq z?cUXApM9!NRo5Yifcp0D3-qE>%bHX&o=}x_Zevd8!&lBt?rGrOD4cadTx|ch@r3LY z`OgGNSBwZ;@^VWnD>IMYaY8H|EG$l}G?j@J-i^%@2b%A0p8EE&m$JWV`gRE|T=)YT zUgPXJa0&6iXjM6~2nBwDeL#T}fEIw?JAl}#9bWF>U*aFe0mW6wG?-H9gELw)GBVOK zGWea^KXC?Wx*ZN?3#GQY?#F*_wcTHs?cB}QH@m7HCDZGG^b|^^Fz`B^fIq+Wfx2zC zd+9I)jN5_yO7w)k_CqprpRhsvfZV*a-+s*V<-i=eJ}P^_X$R+)?Ho~Tw{cTfWaa=s zP-Nwn7*iJgOiY9;bPleI&&`~aS7272#X{ekcatdFgWrEw;Kp@tKVT^#j#IC+rXXc= zZML%=0`X@}RHG=fI79YtP(oe3b%F}+irF+1ra#b1t|C`; z)z|knVoDr0$53f<}4!30S9X>{8 zTF7+28&NUoT#smU&kuN!!kX8xo;%+pvo+z3l^Pa|HDpv1jU^|vRTI!yTT96BSb>Fi z-kBAaCupqgqf7AsFAd36aJrKcU|o7e39u|(TOom!%%U8P(^3(wvJz%WHOQ>IuO6eZ zU^HpfTb%5mq#&~}AYNNFUQ{c$qk=+h-dI?s%5fM1NIv4Ra0VcV{hl@@5O&w3Su+0=d~KXZ*VP zV5yqAW%DJt*3RFfH@=&c;astNhp>Yr%@B~c88P0l(z)fa3Q$bK1 z6iT(IYV=jIlvQFm0t`O|kLx&6LkC_HcF6d2f(NfECs+j>tI}Xes+W}%003nb1=Ik* zGiADFSs4(G?5Zxa4i+$~st9A()R#ebr@FNqr=+FjSk_2geCa)?VKr~J&@B3UufTph zs<9{`vfp7=AwiTCIHr5!xw*YI_LMS}nexr)mFh-5(k$y`Onl0?*hM2%cU)sjRsYLkCOg%V{{YP2ALXs+T9dQ`;+ zO&2ZMD%-921iekolmx8|ZpS*6P9h37K$Woku{|*~zvLcPPqT-n1qNhzg6$K7X zhNENUAli*%CaI2QgAN22W{q}i3G10*M=r2&s3~)OSvxMFvNAZcqjM7wuk}!AsY7~o zKCi~ck;5<~2{h{<_up^HGOe_s-XZy388)3tes%6mMwVfzGU2QuQ$VeWTox}?WMx~% z%ASy}_wc)iAG1Z6{~Q>!Xt#K})>sz5zN#9()~6;^C%Fqj*O^!7LEy_ID<#Y|rMNT; zPdCBc4@=s)u#D~k(-V%c-PkqoU9pik!JhJry*sh(hs@uD%d{6!4EP>gNlCTIo!wnq zr z{;&L4%A9eTrkxb)zsTsj!)1s^d^I&)W}ejTeY<&%U!G|Js2s; z3!ny;#0%xmCn}kMr+`ths3|()-g_ z2m+4m-^TS##6(03%JCC;VZ(<}jqn}?@dgo&Oi8(>ebZ77iYLXDI9ju9cv8TRL=#GC ztnd>!GBRPw$!qFg>EPUSZV==?QdK#9$PjvAf@S1gbF0q)O;#hIvB@v8zvGjPBswgh zu7G^Za-~jF74u$-MWZx+#of>hx}v0kJy8s>|}@5p)q`%Ex}d96xv?dVvoPl6Y*5owpiA5P#%(ngCx@n7wT(jzQp; zEwH?oO2G8ys;NUSQed6Wp6&XN^047gmP_3-$ZQjF;qnUt^`D!dcJ>$I>&npKnyJC= z^{X}^({M;hg{=ikoMl%aGR%9SKL{3Ak`q~ZPQ4bTQ~uaMl5XPQi!HS@sr3tf^O(OV zcWcaZi0YVLTfkp#(7q6!+DpD&q)=^{Iu>2bT)=*akAi}4{sCxdR#~4Mi9p_Or@oC| zIsqQLHPnUV3mR9rxNPG{HLdTM$LepD2Ow+bqF~DADNLtuUA40d9Vc^d64sQANKkA% z=D+o!_8bSBzFWDdI;bV=jL{g&&6LpqJgTta5kb3TuYX8=p9--Z4v+p-$ry@G>&6k7 zR$L<*XN4L3)a&Q`-gNG*tNHK*VPL=Sis&u-QhBQH&hbl9vZ2Q3I0|Hh06c(+5CMT| z{mj!J({`x`03nR%SxfjH4Oh?A%>BU-v74VgS4v2zJJ7P8Whk&8RE)Ya)uL=OAN{Hm!zN0r31`d8m(9Dl_y8H8MLhoAW~{>NYFir{EeDax642qt8> z`0<~9$B)xOIr%~6vYx8H<{SUieR+eXKEB2+CxH;eIVQm;vF=WLNOdiN ztUy7T-=6 z#k)F3QiG&k>#xaCY47H_?*T`sibq$9hGv%r;4%F9%nnI!6s|$+wz>GNKoIHPsiu|x z;iJC{Bes!?XaJ%92jka)TV?1ym^u49h4k?Oe4cz%%u-pWowuF4NI_9gT8E;kE15}Y zHL0p}WO|G}2sUVTT&z))hjs9g)u&)X?DK-!{O16;^BN@8uLEa+bV4-ypKsGvK3qdn zOcYe`-b<(W7YhSHB7~xdw<5;#_kw(ZIR4SF-Z;zqaMl6>qNm@C@WMTQe{VyFnC=MS zo!-cuY9{R7xb2dhB|ZeC!Q^KEd_ZqI@8(<&frUnJ7E(K4EjZ4V3?qLPD75=KnzJo;t&~B54q5tyNGWF zXlDtFcZNC_ep82lijr?JvlPVQ^jbQ@6KH6>^4L~ISZ)EHT-VOc!d^(h$KFm9hyF&% zzXT@~MmC>u6}2pN4Ck^~n7AaVn&XQ?!WUgG zJ{3jOh>qAmG4A)?AJTIj^mv#0&L-bg!Tb}U zayPZ51h(m4H{@H~tP&8C8KvRFI(p3L2CxLyAwgr<54}3t*q|t~#cw<~Qx4o#I=C*4 zH`#q+X!BzN1^5zmh_OtLA+v%hKzyB&B5QzHNYgYqmPqSx8IEG`!U{zEH06BUufiKPnCNxL`BnjSnT@Hg4V*v z?SaxlHttvx8wXQ4cC6Zm;4;)crGq86dg=twjCT+bDdX=G0~YL*z-n=hKWs6SiI}cs zVW{eFY+=e7?>101O{jFV4IHtuv1$2;BZ7MS{OWBoD2IVxXWR6Cv%I^dMt1b{A zcH|BA;lYXSZi)gFmffWUOSMY|QOP%pDbXqUuMs+kcn9g6?!IRWo1S^OqX%^(-tbW8 zLkN|DST*2{IDb8;ScX9DO05ddg|au5nAQ-}S#ntnKynj7zm@L=^HS?xQx{L^^s|^_1ZCyX{)@Y_8oujy6J{HKFxgiG+4kf)2fe>(X48{# zB$97=BGe6)9J=R&*Aua!-L)B95o*-vAT4BoxBDH1xKmexlC zsLo2x5O%>KFk|{28TXZnGOU^x>6rJv0d9I=Q6U*`Ld+ZbO=Ebk4CWyTI10+WN%c8? z#s0iC?*WK_DiRA?keb@);bokv$EzvC57+|V`EPl~g6xaN#Pzp&1i5*Rd)EWt%s~l) zrI13af3paaeOGdh58W*R%otJDQ-b&dji(h7KiXY?)m_VXCt?E@?tY&pa5 zgJFPtQNLg42bLVti#lpIT>F_7eR`22+BQhR{@a{7HWz{ONQ(ROnJOfjaUFvZV9QWK zSPhb@yzM$xGMRBaOreV!PhD7^iuQMT^F^5V$lq-O0pGlXdI&onS3{Ts)3C3e!0Had zMT_jD%#KdwDIA!fk5xEnrF-mdGHs8}eqj+COPJSwv4041^99e6qG zhsAr1sr)N^1QP)i7oVFFqbxaTVYD4cdH|5Cs;8d4?7>O;K?smtXGsA4bGoiQV5i#l z2Cwj87~I#c^XVa!7GHqil7^ebn?<_Fl@FLsi`3PpMoaZhiSnx8;*)8bN(lI{qq<}>*JqGHC)zw$pt}a9os*91lx7C!S17uO5PFnnwcZgzYABKAlxfEs zXz|{+`Ahl`SP@AZ*;jyM2$us#_VaP}h^6nhLg8AgYndXfd8xbMNsdb`;_kwAw3qSd ztp?hf7Mt;BuMGh%GG=!w3=XqzN8wZ&uxf3!$b~V$q5bSB5Y4wm*t8FE&=Fu(eSU59A$~ExsDEG~7!fijwteT0O?x&_k}}f;)M^ zu(Z%yStOLv(?~@j2E*qs;KF+Lngc~&*Zogs2j!{FE}f^Rr;o=HZl3tE zqxwplIymvP6!qT{UyN8hzUHGSPcWgmg(SEHCP(;c)gmV!q=>MGO6%P!P6mMoM1mc9 z;~Aa!_mb){#6-zBa35?q80dj_C$Ik1+3CO%LfEGbo9ZigA4?LXc7g4ZXj>DMY-=PW z@{yi-SV+NHop@DltRPXP)gD};Jms}fikb^i9|BYQoo&jnW5fNY z?$aQ|cHNK*>W~4++1AiCZp>ClAvy+@;1FH`XeCU+>!O)ot7B^ia=r zd;=uYCTB1Cz?IaLuadT5xjp&{;S7Wh{I~$QW~O-7FZV?VqoBI_H_a&P6Zqr9hirbN z2upJJGM6i-F0(uJ z`TZ#JWh|T1l!NswADj%F)seLd&Sd#|Pv1_-CTcnt+HrE6mc!*Kz>zxtRr?T|DL|~Q z8{*6yJFL&*=S?bKDacPV^3XG-ss58O0;S#81=+gR6JvkkWoaL#0OS$RHJRf4$$#$o zo@T|x2fvMMxvv`JVW^aAbIG z75odMMD`lWE7|R74D%5R9fQ=u#?OEY!kUk9=T1;$O|s$iO$lRUBMusLGP&Oqm_`%# zkej$n$Wq}8dKjn;{Syqp!w5_?jqlqcn-Y=KeECC6)c~?bP=)P>f^SyYjB5pgTFe>H z+PnpHEu`WK9+9I<9I5dYX)rUjqV$STGM%Gi6Q~DiQXs12EL+1=j%Iw(K({24&VA3` zBgeH^-;XZEfRoBUr*uCmG}B7=jPMRP9$$ThQjRe#LV#R+^HPQv9t=P**8q8T_1UKe zN6d?6t^3d5Yqrsv*P`?A1*3(WrY21%6Gu}Z?3=Y<=ib9!Crpi&XP=g|#6rh*2VM1( z3)HDYE}|F_Jf)&j0HS*>8?PSAb(=G`ux$JdZO#qtG!(PZMO;3P4L=_zPNVoOQPUJS z@A1TR8W1@P7Eb)>gI<~cIzB5UTGo#PQ&bpgDkMbQArXLc;)?%lxF^k`w2Ba>|0siA z9D+0u$z{w1g?8zov$b|)LwRS2gb+_MgTJQmE$m#-e%MW=4PRpy&P!LjbMns`^s!`F z?i$$>nmMoa6v>a{kTljXTYNK^m1wY>7;EdMZ_knyk?wlo^L_WX0`rFTnIZIW=}5Rg zl6yH2BzmOeKHi-190`hK@B)@m`aZwWEkESvLNQ>>&^pg_?$J$ir2=+^0aXk5&p?Aw zx#`{g9>zvJj~FMutfW*MXH34x3i?)0K{Dyz_X7jIfvWb$@#l-*IV*(3@$%+c2IR(P zZ@u1#)=EH1qdf7Z-(poQMfIg`6F=W5e^4JpqxxvNXGoaDxo{xIsbU=ge>43I^aIv` zHv(osLm#{2JYJUn5Ig=DR;t<|JijiY`G7GiM!8iAX0r2_%bfc3g^Py8aEJ;$qo}BzSaUaRcDQ(FMR!q}& z&28)+Ibr}}UGXIl^SwY{mi&)#+^~iV>=jyap4r=or@yD4b+Bw%UYGb4>z}2Oc_-%C z!2-_y!CJ}NacYkq#*;P-O6onX70J<(4rd`np>9t$$?T^EHX<6vJ*Rhh;EzD-q##fI z{eaaQN58!N%iwY9b)UNP{0&`hhsAMNJEzwuRyWG1q5W5EPT4twwP~J;vdSRD+?4z1 zXTd1u_G8nD8Z(w7m;G1;8qXD_8;%Ayo1X^Ha-Vd-_FI82vZn=umJ zSaKsLu&Ka?%+B8y6Oo>uT{)p9*~y`Htxyy__2N9i3jmEX;6kUySbn|jG0fA8DA#63 zO!G5umj>G*eh>-I5v2Dlvfd^M4#w(37j#`mrCA&zY@@wo{|`?h)XU7 zh+N@xX&{zf)b_+|{#|-%?izwu!US(O8@VEipZJA|swZKLLCtd!3rgYM5N%M1Akepl zUm1pfNaA+?n81~%fV2LsbPvfC0hDt2?omu96*SJyGg=>=ivSLo6{6;QzEg zG@3%}5iEyhag7rnxGbO@zwfb?a(4-2C-*>*n#|Qx!iDF_t|kVP!5hNobfn!l%s=WF zFH|!rtviF>14|dQ`G{uMHyKos@?7y3z(+>C%TB0wt4UjDI*&AmLsqgSn3!#uNMgH* zFV|N_6=oio3C0ch$`MI+f=H8k5(wjJ_a&$Z#CYw}rrcfi$PI`oRzcX309Q5bdz!^J&7?7{rZPKLxO<#jn|HU zKb>gMg9qucr9pw$>jqDKUIlj+w)W;>HpkGmMW))rah?^6Oed0TuJ(C|ww+`Q)*Bro z^jJo@N#|^4#ZLr-{{&4l+XDi~BUH6;``%sUE^&chX+P5_=)SDPFw-Pl*F%!p;TckL z!IuF=VQhXWs~BV-=h%45y5Xq^8pWMd-qt3P>b&69&Y1qdHEpS&@*{2}b*!V~_(^#O z>~=%fS>8U($<)o~!Fy>45vDB5o50F=H`Bc-237drGkhe*ohADWj|F46tBSi%iK_tx zy?i0wzC-RwHF|gKvy*a16eKcn=x7k^vM8cNVt)i2}&=x<&95J6> z@36;?(Jw{X)-)4@cf%wODTN*^;sm6BP3+x^wM|c2WG;DMN7PRVr#TSWJV(@5zOcPQ!cN4mxfGLp^-}|fN?1zugz@S-pc`nrO z^3|QtDnxgDc*qKc95vQ?t9V0)*^N-dhtxHPJr#Yv&|BDpdi2%<-tvY(2>e$aJ5MVE zB))x@F9PnKb)PQ2?eVzvg1grNmGtG^%N~-kmv>E$2Q<>Fex#264l?Y6I$5fyLlI-m z69pE>c728dM7?Iy5g&+MK8Z(-CS&Y+DEVB_=Jx7el7y17$}>>GMmhl~H+o+1D!5NJ z;*$A5T~XT3vvD)L!6Y{-e&oO@ zaBxA9ENZ{)+4?r)38&-*+%1J-LD+_L=tNyu$Anw{5*RH+3DTLk5jrGhVh~*lc#mx_ zeXylU?s-$4)iPg>)0-25K#UEffEQ!2N0dpzi2E>qY}-bqq*+@O900|>h;0dVAuB=K zN7oXH=UHv?({Yfnl>bhfmMW%E$`ab+JojB9_b3)cjUL_*xoiyn)GfSp+qNtsiBi^W z#(gYnXvZaJd_6|p2fk~pv%AFd@5?|9n(7O-VFU}iA^J5hKKQ|7I1uVAw6Qx~cH&0G zDZ#pcY=lq^GMkn7@n2vrL!lLbiIc@w?Z*Xp!qtq*j>*rrY-5hdP zo3x=;@3Ezn5Jt7cnQ`rjlOH4x@Za<)JRo{@&mcwxcc-l0C%Yo|?LcCg8O>i2k7XII z+N~EU>WMqi8EH~fbm1sNF+iD}2;R{AH4kY(7RNnfE=I;Rafk+v=y|9516ag$uK{HEH=(Wv1aQE2f!Ig)kM%GE>>=Lj(n-!Y|T{m{LOHRbV+w|mr zFYTY}K|rkmSNS@UDQP+WG|{@xW{i}e{v~+I2`UWAC&-MQesj`Np=iX1lcHujtKO&B z&!?Cp#@H}A>x7kl|9jk9(Ti_#oRXb9qu@O;|F$C_muPE=8Ee(R#3Uj8=68j+BMmb& zAnKXu^FAP#H7DIsoV4wXYAVc!jjei~o&<-ue!b)=d4h& zNNzlB*@{t86?Tle!V*rhm4-~?sHUQSUk8Rw!&gApBC(&aKpx;M`8gg!y=fsiC0`>- zSLZbvg)$8IL89m8B^{&c9q-!^aOEyI{{yN2a54QRd{E^x9GnPj9ys_t?l^?EZkg2N zOIk;HAg6u%M-R;@3VaOaYuTf5uhBO@@@%$0Yc_WU-I1Q-LaRtQr9@uBxH$V>PH8XI zqq+JOJzBz#*!^6`2RKlkwv`yg%x{tIeuCpz4@HynW|adlt=>`b3iWqpIOGMBy3UNI z*>iQnhpZN^Q0+%R-5JnhYFMAT<=DbSH#N4!O7K_DbzGca0djm(=gR$Ry z8i@D7O53wq&XUO$DR_Ja4BUTb7lt zY+W|cUR$DCDcf7|*{$13N=zw}zKKF7cUB>^OC9lM(U~1tW^?*Bd{IZu2#^w&9*@>@ zxswPRWW?o$KcpvDoxdfXKR6^)%V=6o8n%1o%Ujb*`<BNM{x@E*d?;@b0Z?1-$4Dc_TVHJhU4P#zq@BP z@JW%LM*DysERl1N@mBSD1P%R$-jdXi>Q0y?M@+31l~Al+4pi2YW14>Jbm=2^rUoR` z(d1;%kVEc0!#oppCXdP_+DVGsBP)3iW_ODVwZU_~k3VTNmLs}yg=yyO~wAxA(i8?g@wNr|~n}AW}MP6_1{st>D1a4^g-sL!C5#xJ#^FwY`6{ zD`bNaJ9kXy=mbd=282W(t&;Gva2>9r#VBZUe{@%jl$Cc~ITdgy_iOQx6GWTo@$Ovv zE4}Te8iB|jyrwD`@C02APJy(ZGr`_F{J}EGvGD$+?jC>>G#E%n?xqC;+(RN6Pt5vo z*>gFwv$lF()u8|~TVqCOO0)J0!CbS1y8EbkaaqiKBh91VQ73VEV`L3;UY=FC(9ks^ z1h+_Et@DIBipjiV=lo&Mp}n(JeDaRHn5Tlp!#7Q?{;tz5)f5M8Mr=_L7Z;&+Tn}jh zatfQVqY%-fO0D5u#fKo(q zZaQ>O%sE&rh5`^HDU*JMk~&RWgGB^OHb@*VerbMRaJDVSbB3`h#j*bft6g#+J0}3E zlpEt_&XJd0|7mDh`CaYc3(e2Vlu~j^E@ZS9^5fYR54*roDR1hS~QqsQYr@ z40|hDNW=LwN7{8Eg?6^68rhy0&BBF|3cK{2te2BvQk1H5JxSZ8sqhWR1C}^Nr=21i z#)$iaL(6!f>_D3#+Gkjbri8EdAz=?ahwO?St+M6`>Cn?V_l`bGmWe-aE*(gi#DP<* zm?CO9dFlcDX^z~R27e1{1RA)Bu-a8oJTTJP`29Fkm-HJuQBIw*$+$+w8t|B>+ndkxNmeZq4a!Q0VNM7tt&ADq=TdcQWN#c|e&ShAX_ zRi;&eYXK{$1VEb`n6`RIs%HzxW6CBcL@1D{FxbWMY9KaLlEiHJH1 z2Tkwt;doBm_Z{x<^jE3iE@=RYBThGp*O~~eL_#indg;oPZcWz0diHq;NIXRV{EZD$ ziVaXt*>R;0V)_}Hlr1SR&$FT~?S<5*WSaOZMuuEbFFP^OVf&p}YPn2moH4xKzIMUL zKHh@A1b(}ZsreZ0{jpkZQry%F_tlfM^S->3kcza7la0v{*DgK56Xm$LT%X$Ma~k&f zE$$vo;2`}POisy{lQRukud+f~VCMbLLA9K`XM8ig8pV#`t{Ef6j%7RsGez9v4gS=6 z`mbHd&4tW@!33VxR%gY}=gUE`gM|<-JG%k1RCaM;&&P7`I_^3`y@(&?QLp!zMpi8D z+i{=S?||y}CbK}k%a=PNCH`LFKjp(!q-PV;^@Xl?4fE4WVprMWr(lQ)n_P5j8g{Ap z*~!mLIouz&4G)F7VjrjTw{pCBuPL&0iNH;*4GtUL<++OD1jyI$v(f{mo!`~nK9*8B z`!?!d4UM=@SS!Q2JDoqLmr_G4liplvtTi0^1i(7xnAK>GyB$}rqN#&4n z4!w%5q`CwwBwy8xf$+RoW;R?yI_pKmD4lz3zkS#b440)CwcL8jBJgN!H`~!G4<8eS z=)pasYU&}3`(uE*cgU)lsb!vkx}+KFmGxVH=x;wFez1jf%I=2OIH5yDz9$6W<-Dzb z*X7y9!hXUcj<&K86RI8pABmGZxz7Lo4yF~`@8piq9V_@$09w~eCG&SXh(1Ec^7oOs zh?eI?`-)tn)uCqG?0z{=zkv-h$ip5gmp4vgy~U9oPM(mX>tY1HAR}J{Z!Ui`li68G z>{ky-&i#9DVV{@1wT0KHyVo?9dv3Y|x1|STl^5`}VxAXI89!HM@%>QTn|VT(EA#QE z-9v#6EPi^1N1Q}D59gl(OCy3Nw`U2Uj#QB-!hSZlfjL)XF}_O(8~$tLQ)}Y=#;4Iv zk8m$(68m0UD(NKnWV=BSUrDv%(9EAzEaW)a35jO@-Ql5D+PFlO0cLVaDQ)Ciz7DgO6FC*=@ zWPKZr&ySqW&1Bq9qcgb>vY;iqYI^-11M`;n$8#{b12C;KBfA>+hy@}c( z+Lt;+*!#{Eh6+@!2E^g6T@B4)4iCClIsalN=7}3fRk`6wqhPRg%VCuzsZA>m~X|l0#-eC8D2_#@_WE<^Rr1JS&xd?D>fI-SgcQW!1Pup&N(2nr~d-Aw_;Hw;p5NYCGNKHCzF+XYn|-5+K9n7IE9g-b6(Gvmeq~CCy1UA}NtQ+y?teBrS;5&fo5%Ld^du7wW5w@mc zV2OPCym6o~t!D0f5T@nbxqq9R4q~`Hs((U62RU*NI|8vwea~KMz9h&DSQH72L9_Cq z*1EVaDiVBAL+GCoZ~$iz)aJ)7yELfNo)XB3V!py z{35s21U#}c%T;$WnvyZZK7Xcq;mH+CB?CU+802wYynQm{V6&;=x z9WEZ3Eq>XUF`tQsW1c0!s^8j>tq6{I`&=U~v1f$;&x%wwJndKUgtKj?5lIUVTe+jD z?Em@TH{S<8KgT-Xce8i;Ee^e87kb*`82r*@{0oh#y8)-80oO#YL#N|3r+>To#Gaiz)3+QG5>!Udx2#z#UWZs)( z@A(#gSMg$(3%^c5N!oOlIz58c4% zCt^zFNU%~g(*rXiHRZHE)#l7SnC#S$sfIrG)rx0M?(cIf!qa5Ggl2AxqEBX`6hfn~ zC#vzs-cQ9nB}DmJ7uUJs)QE(_H6dCDBZpB(5H z6V6)$32FlwJ~}BVfhf;WPD8f#hqQ-D|EJsnzI-#C!t)9;&oa;E9J6vDd~VM!QkIJ4 zAdfWvq?||SF5DYoHT!PEg=o*4r?JW0nto|JRH2$OrTk z&Mo_I{EWeay2&XqUKxD0|4APt3-4H>L|EVJ^Sq|BEpJ*^&dqxksSL%YPjkRBv#T`P7S#^tpy4glgr5g~rV+%Kl4YgRsOo0et!&`+*YV{?mb*Zf{`+|A{&nUT#Tfsik;a}B-jUkquo8DnO!E6ltF!Um+QSXW zhzD77j*u1==dXJzSObho@|gvI!l6yZ^BO!iM#3b!&n znM?1wwM6SA=^gNV3vDnK8uxSS>Yq$xA0-zzYJ_)fw{6)?ZP7m&fY-Egc#ZrXbFw+b@TOCvbg`zdi>@-0&(sZ%>UtJG?VCHt*|64s#h;JrFV7hkEy+08=HA@la5bvU;+pJHft&V;%9 zfzr!Kd-%&Wn`ekB(BtI=cJ7Z6W^ES?V!^Y`!@kX=6H84lJeOYnrUh=_+^hye7R?^d zFwfU#;!XXRdn9|6%~=JjYc$;s&+R)u*0V=}QaLSw*N_8SlWRt1*{IgneUtAjen3{Z z^n)&Ex_czudpE`QMJ-)C&yed?PMgIr*4}GE_#TVd3x@z#%v;RloV#J7KToH9IK-OA z?2l)X9Im6b4#u{Q`>E_9v9HfP*ML@JM~3(_=A{FV>4Vnv7aW%tVM!4JkHk6^sr`GmD*o?o9V`-1>kQoGyNu3U4C zPQ`7_z>dReW&lR!T|0SJ;vD#LUc2dyR|u=y3>+uB{zdZt+%{?bNImHUKIv``;>n zJ&thJBRvD6pkhK2oz0rvwXlV82;~OqM^bml`W;|Yx};RtWr<8r$0>Lbd$X`lhH#MY z8k&4GsotvA(gMiJ39*53>FoimYD9Rcl8{uhZItH$lBi()>6hktHL$qXf49ac^ouC; zlPdg#&I<pL73sz`;Xr+~gkEa$->4e`#Tm!}Gf21wP$oK1AlHa<7dD0$ zHtDNt1L=zc>B+=Dj!Ex}(4t=HU_MkEiqL|5{n#tFxQe#87B{(yhPW0N|Kd3=TzU!r z4yk+8#Qp0g!lh3m;)L*1EAlIOw_Av{nCi`nf)eKo4djEt`K3~Ic2}#?x_FQR6wN8_ zhfo#F$~O`mOdtfb#w_4@d)<%BNw3mQ+3oLRKxOZs4MhTDObxw%1RQ>QJH+Qu3fb6r zFVHSGa?l5$hPEWfH7du}CkLi|*7hC4*VNasv4GZ)gN`xP5P_m_s@bitF9aX3{KtR5 zIqwLOD0&LNM6Dgk`Wn<-=}i_<%?(~J=}$sOprdj^RJg8?B(8IaW92kRXvYwxF^xgPWy zKCrU*p~8egEKJ6v;=t}Wd@Oc}xiNzG8%N;C1bwHir844!kFUof7!uS(1INrLsx{t{DV2Ny630AK8rtROAwlZ|6dB9p(Ec3 zF=g~+4Gjiq{gdSXB@*PPW~xyGBV=<8GW9>8{!g#4w6!&g$vyJodZIc$3&-bkKMBF| z|2o&gJiRP0>6g1h!F&;9Oz#N~3rea7QxydN2PT+ta|6-*AT$Tq@;@Mdk-GWUtgQzb zw%i!n`Ul!FF?Ee-LJvR;mIjNiB2epJU0I*X7lec#N(@Dvst>`+--ybciUQ zWiM7C-C<;bbSSqD_0K=9L4HbM0)8Tdw_%+9vO3LHP%0#_CKOS>`jMZCrThEWo#B5{FitfXi3FJk^lQ95DQppPbNqc;KV8GkKYjGH~Tp8g++4;01d89Zbv@ zDU#YGycJ_<2>emb*k574PA98zc{tp6b3T&6=o#WmT@*1rda81bp>4Ooh~;fTEt451 zE$VMmq?l~7)|J39b8>DRb8x9EXFuW^cm>1AbOD2eybkP`7=MTLeg9Z0f$D!>chJ^p zZw6Yp(kRUkf#&J1y^;}P{^TK9jqecf8oMCE=l-J^r&A4?8VdOFJU z8vI7>Lww@5`1^Ga>tVoiDZIx>O_4HGM&(y(Wa%v^<+kDgb7oLD33rIlJ!Ahjj5in9LlcddVN!5(IAwfUzDVWpw7(8a4-+d#eBOU#V#h zQlC&&A5T_;P5lq^KQw0C^MkNb-mRU1atHqvaQd2ozJZ;(?qu}TC^0-XY!?an(l9n` zie>Xm{k7Ut)7eZ8N(zM0Fr!Gn28;%dz{ z&Ms?gRkmwGB^zvF7ftw$B>x=(X&tcTCiRW3d;VhZ;40qL{hz@PT%%Bh!bt96_X8p_o?^;WT8ID@H^`2!Cooe|xKo#Y0C63N!Larjp3^*r_ zPHcS?tYeb{_#9i6{;DDPoGkkOr%9jAyxcMP9QTY`%xF$Bvi7xVpJAd#&b|@HcfBzkv z=^XqyHQt~RPKj~nMLC8(z}AixZStiW6;e+BAPfuQA@uz_l$e8P9qRN*;!bu;M3|QT z3M2O~5;1BZ+Y3($j0^fRkDF?R5Xnk{sRPw#nGAy^q%IazV~reOq=}%&ScXIzNgHUQ z40VzYYBT{Qh894A?)$6C125kkr}+BVfEzDgJZqT?LQ!150<`xyj&zBBTC^H+ny)2O znfgRKm|Q3}SCT=M3XC#Hpr|LMj8m!kM^Q~92o|+k%*5VzY^5)o0xWn1;uSLeLTt*p z(s%!n90gcc?)W54QLA2C-l3O0O-)Za3caMx;VxX0DJg%{`!%hH#mS8g`)z_}-sUk| zd(Qn`+&A^z1K*;Y7)#ZRsOQBLB**otoGDEsM~XMNlutd4r-vaKX1Te=i0_(8e-1EL zV{;X+KoWP{%YqFS!{%4Ttu8XGE^w@pn4U&35@qj|?5r2;>?%JZg^5LRt*jPwVl&C3 z8yo*KX1g4(K`(H#VyPw?+$Z9A-;`yPma%I}OdvCsrhcR9j9MfiF4p!e*k`+1pJx#} z22MM|*)UQTLg|%k6_B2!b)!mRrN<`bO5&)%dvXO>=_p|J+lrN`GP?wXgm zBHwK)U+ja#dT$+TxZR1hLBO zxqCX*qC4S?;?S9&C8N_>oJFIfL-6bFnUzw(tI11JSDgcT;XAA@&SDQY4b|%ORT`J8 zRN9@JtJW=){d@l_Pe=qwVCtx)1;q)S8cQMou(cYKu4)XAwW=iEhl-82s!RuNyuc7q zd`EEvllVvE72hh^DqC!ZT@_{ewTNoY8O&x}vQLF=B~$F{)gG#D0h2UN=ZuPDgOm)C zSlBbJsBa1_Or{hE=7MOBGOKMpsS$P|t>qEJD7_V?|DPZ8SNA!GaLE`>8D;4NT=$Tc zR0Mlx0R>2V?5)qSy8Gs`M$69JDDVH=vP%fO2(q)fZk4I7wCcYK{++rH6Nk{E?LL*C zx@p}kT|AJ#5Lav2sP0u;eu%v%>F0vIDz7IP2zUlwhB5Y3@K^SJo72~y*GJki$^AZU zq`HYxs&yI|Q*C=&h6_ay@nE!N0Hr%PYIS*EE$g z{CyYnCpFxXN!~ln?q{+SjYRW3R%2^>2GBHEtCQh44S^ zkV--QDm%s{d7-8MFruO`E-(5+=^x_C^HOueiHrV4O_WI(O;q|{s=^I}sl!wMMH_7p zP9>4?Us|XESY?z3|KgyM$gHf;_b{K_|FF&|sOtgWKTl z9tcSY9&{kM3@(!(!5K7YaMwW+g1aZUUf%b7b?&|A*Qt8CdsXe#y?5>E>h2}|pvC7$ z0a%N90n`W_*)J*BvgI#i_Xvj1ur}XQkeee!@q#K;zG5&ckUe=kqyPj}$b!_kNP?j5 zL8!-p9`!icIRTe~k6Ls88?8grqW>OiTXf-_-$o*#eh61s*Z;= z(hfqWCz8dO`{_IueJ=k>d6ZS5P=K~OBiRcj3&r$~*Qq$;(xu55HV({Ba7tBWA&#W+ zj%=iwdj#X}(Y;%Po6Io5m;iJCt2=8WfVx+OTzlO-Yah+2WTv`T>66x)c~(WLaRf7c z5_g6Z5R@V;^rTnK!Un`I7;2H|BOBbL*xoHSxTK5+&X~q4Q5s)w2IaxaC6&j(!2>?( z^r2`;dvFOX^g*;~0~R&dQ%BArY~m4)yKjokBG~*_69mDQG{iA1R+ZagoJxeIJ>6=e zF%?|9z!AHHuBf6+x_!Z8a^O38e)!I$-gtV2A^$B^K&$!EQPO^T||z03MK>mQwV~|EbvznI(`+J`(oh{_J)L3 z2W1b~t_$Fi0eeG$>-UAicwpEk=3cb(4&pLwZ}PXhv_^lF2di|D!Y%O`VsR(#2x?wS z{51aXYHKbv21o`QFhZxj^>>Z9IRd|J5NK`-tE@@jD{Lf%4X6FM;>@~Irawag(4KqjH~6IDm9G9`X5+MU(ukMtT_uiEp>>OJ8y}q{Mfaq)i?sJERQKB9kyeXpEusHRwc{$--54KZq!?h z`erpLEBw`NM5#~=0&zrf=d(J0(d6{L6qKATcarAu#)OL*;FL-lM29TYD}l^@F6kwE z*nfqZ&yR~@{r8cqhW~JX+I^^)wMsRgRUBtp`VWqIR^R93!cvSTNI)RW|JVGA0TXX) z+8`#YujKC_`^IRQ9QT5>)M4nKP=`dD$Mqybp2TNCl{GDhqm=fvbRpdhtnZ7HB|g--l(IK37G!0KujkH88J?d=QHBBbbFnir zOfr5YG}Hx$e=^N?b$?`3>HA3s{jv0Vz{&L~$;<*FGe`HTUnWV+4^4PcSdWNS%o<%O zWuK8QPu$-~L%K?WYB7Ao2|M@e#MRnC_xnZX8RxP++Hvwr2b4biMA19qqst5ELgh4- zhWL}_)U$si7Rx^@K3a#sJViEDdLh zx2L~^9ug`p2%BC~+kIHm5#7S6efSO<_1vk{9$B2Ea&Y+2aEeK@V1bJuZ%90g2*jZZ zekGUIncDV^R7Xu!4(oB!Kjy5iVrG{IdR(Wzw*OH_cxiim2?R{_^#S@t8G?VOO@daJ zW(Gu3)VtG7bOJ%S@kznTjEV!2&2% zmCojV^2X~kM4e)Il|koRS^8WVsC=+8 z=T1eGH|~`LW!~<{2#s%mj-mj>{af9x*ZsdMCI75by{Pk6a0At05Bu#3?7+@v7L{{0 z=P>OoSVf0UOYTS1w#)*$@Hfq1nN-~CUz-xSM|s7{RB( z;rjU=5NNj^P3HZa!7VG&?TTb#Cg5_@B}%n+QRw-7|F+8CjoRn;#oH=EhmURKHf1!~ z+t#)76h#Gto4X>#NdpFo6Giz8trIRjEUD<1mk!%1c)0c&CeS4s1%EI2WbwyAa0 zA(ZF)H0KGepr+J*QnP$6FGJ+&)W{Fq-v1AS!zbJbbrNaugNp~mItMeeGBs?frk(|zojF3fX3s+{GS(CE%X-- zD4OfwhMSlKKHKr7cXqnxcXGnNK6M>-&=R&9#jIaQtVf*sw%oTVVh=DRO2;7Ngf)g3 zCMKCAf6}m?w2lQ73^UF^xNfAs(DzzXa6D^|6sDHc7kA9@$?|&6!8{Tdr+0_}E)pN9 z9?Z^*JhAK&*nl13#AyMI-w@NQ{|3mPxm2HGo6LQs$qW_ zhwBb{+)A^gk4K_7v2_GNuB6nCdk;TZ`I(0vj;oyu_o9=Nb-)fg1_2xb*U2>bsZxk@ zJ2)Lt&!A%g7cho=u)m@xK*p4JKkpO07Vuq@2EX2q1;ZcMC^6}3(VOts6-K?Hv)EtS z+Nx73l!K#7fyvY0Hb2{sKIthVVY{9vE8NJ3ita#XnFn$0qtyFitnxH@$5!J3A&Q9i zD|X_hx*=L=;8K*Yo^Cu#uu|-Z7pbF;$F(SVNojRT{c*4ULKm$u0Zu9gAV_I>(D!#* z_**iJO$HvW{hK~9f>VZ;4o#ZL56i3>Qt!6D!WmnGztl6yZR6+7`eTNp*xleGMK;Eh zE$Ad}C6rsa>V(<;f&wJ0M) z0q=&cCgXu+H_Wwv(9=!tOCw{KZ?{>|+f-)jVbIrDX8mhM{g>s}GHc3RyTjcqNzcP; zUw8{vuPORkh2?66!00uN9RqEaqNl-vlI@I|ZHkU#93tf4Ifxx%%cGE4mi}E|;GJcA z_^S=16ABa%@Tm~^)@tE)Y4?{%jN>M}N7$WI&6dYUC|z%<+q`?6|HPswo}-9EQk!=& z57f?bJ3Inw;xWB7iAz($>zQ`jC~B&vE*Ed`6m;gb%Ic$up%ZHGJa^*t`u?j|ysWAJ z#EaIxbd$MPxzvbcp@?ND2sCV%Bg`TSrgs(~+sffy>n5LYbV}t>PbbMNjzdP_cw6ht z=pN3g-mfLkbV^MSH}9l}aVbz^Bn`tv@H4UYWPKSC?{y@^dN&*BAft2g9;w6hmBdPS zzU3S_zBgqx1L!r-h+;G3qtWoMZL)i6BZjhoKK;E4^x=DXnE7(k&kFJ;@c~1}{O)|0 zU?1j+i$Ff*_>})hqs5-DK(U)QUVw|>F<$&0eCtA+hI(WqdIc2}PN4jx4L|NtzUOnq z6o#gwu{y|WhwLUMX~EZRl0o7)Y|5|0CD`kV<&R3ZB-55q;^yTQtZ7N4N2<{S>D^Ob z1RNRRI)73nurNVpntcxU*s)b_)Vzq4Ez*SmT_$3Irs;qoecPv}8xB$FLI34vpJ~a0 zO*Uu2wEc87<9_6;H+fl>(G)%zbg-}!<`;_27dB3zMrsv@%Exdfn@270Dj^ej^>$;E zg9~CwHAN(4l~kXJ=?X|uASAD*PiZ?Hx>WcRzp>_pK8e9SW>|~)Q1S5kg>n5wUS>HO zg&mgy0wC_zREWnW$2LVuSLz#V2h|k>xoHVWbN>aE6f(IdO3*}u5D~UoM(+*vHDL)h z_;(zyH+$hF3PR*;=;i|_BoYg(L6zDBx=;Ck%lZJ;2*}Y5b!a+>GdR%G<1++-?XSG9_CH+6z4bmQN;};b0S_zO%vmFO})x zJrm0CBfy3v|6h9G6@*_~GylZZTDJ61*P0bL6+I^^kE{uCvc;Uit>@@SmnSg!u?^+; ziqw{^D|ky1_WyKj)<4CB=~|-|36OH5q9af56^neXnV&dkw<&c%(-vaa)biV%Dy{2K z6xAq-1QgqkA{%ea35n__He4jfsPbe(F&G8+pW4Q>2TjT$Y2VXt{bPANUk(>(Pc{Vn zu6SDolIlPiDI8=n72mx~f2TXrnYE$04+~@Eva4Qj)Ac6naoYH$3ho*W7Ta^sN~_Lq zA59%`e-VhX=NR0ChYWnwcu?mGJL(vIYq9<~n?6>;u5JWZk7AUTxT4#h*N1DBZ9NSzs>(XB>6(zX+K?hP>+*TqTK#Z0Cz^ zW3KP!J7R&B6#j!w(RS-4$4T7lH;v(1MW%{~M`W-5>pVU^dAf%VE+>LLgCz3Yb6prF zb-RBxy|;u;QV8Rg0}IEawI(SFi&D&23C7{*-Xp=)b{K^Nbs+m@9VN=a#OX84Mi8a z5+^8AVf9sE=U;7g_x|HnPMRSFm9f3ri#t{vGP-l5KG67QSPI@keX)bYp6jH1Hitl{ z=wlCS)znxXqh4qY_w`gwB-S9u$es*PeqJGvKP*A8*J`NOkh@dKOSwF0^$e@`{iF3w z!JP_4S#cDYOLuMXbGEKWfM2R@aKuPq)&|z#87?K}!C}Gaa=n6(l2?S+me)HNLCG6K-JWjhO#-B;<|pD&}G<{oY(AejCfB_h||{_X8rsNo5Us+hvLCD zAE{Oa{hc!NATsH<#d0>0IRT0v8Ud#2q`R}%e+=yXCmiduj)qDAUmipfBn}<1m{4g| zoPphYMe0esG^SC}22Al-Ha3ZeyFelFbKrL&EOX(NtD2a1iHGbmm`QU+ILO**JN$-> z#EH?#_UwdS)}%KZ&!O7<;954_f3OWA9etb;`_*Cd*2=Vo+OY{1)%us4(;GZRJ~0k^ zloKe+_KN}|bm}qC3k%_fiNxw(#ma@$0zV-_R*(ui*al~S*&(3%oNam`P19N9jsd^n z7q}3~M^pZhq+ylqM4=|SAWai&Eu(2|f!(=X%RdaG5)t}x!beF)71o%RJP&Q1Us!q3 z)TTEDR*!eo;?i`?^E|U=Dm>umlus7G=0K8kpE+} zZj2ZbgrXr1{;4T4OP5l$qP0rcdrHZZ`MLgUE16N>`O{u`Ve4foyqNYFKj)_|J-5|f zG;PfQs_cy54ti=jkc5Iv&8=l*=ZS{*pW2-Z=&Go`)#6zMBi~TXOfDL#9`~f2{w9y~ zE5%GU_N*u}QMS)73JlO!(MBi4EX1ITw$aQZ^iOOJ!`@< zEMgzmv0vkc=aOh|lv|L$b50i~9w`|#e#}n*|Hj3_d_8pa#m=j3$Jl)Lb!AD;@6}rF zvs2Wm;XsK-_6DU-Jtg9$3V%LWJ+CMIy7D-+PzLbL`V{=a<+JL8-m>S{e)s@KjlEf- z@#_Ra$DQqi*N64y|R*#baNt{E6^-W*?v-PQ(J4#NEB<&CZ@sUf5={)MX?~6ifEL(wLNoLOvzGT<=hbIAwZ@QTT}#XH%??>rDb5Ew~L9K^zxTo_Tv)TGasr_XmM!*Lh8c!RRxveun1{rArd==bKy>eUNE zF#oLNj3q~xH0n#^cEp-cJY{Cxh+smr_JQh?;Mp7kAHBa!<(i5`-3!)P>34u7SeP;h z1=(oaCCD6j3Kiq#XEYq&OcYOmzbW!sNqbEc-~1!d5Ll7yCB(>o^B1}|e!yi$fpx#d zIDA&4_Zq)R5F_B%niXCbJ=K!B*dcPsdWEFM71{&I0Ga2R7kc{US23F7O2%xzyJWpT z$*Dc{bviSK?zQC*Hr7MykUM@{kY9z*&VjhTow84eVIe|sAyH2=|7y}HbPAj-doZZ1 zv8Vfah!JfFkVk_UqO&3f#c=;^dj!Z;KnyBb5eQFmHK}AVq9JScWOb=zYlg(Nakd!? zN1gn!iQU!qjmsnEo6O{o_hw~!i+UB8Np*#Y7-(}5VhGw?fS^L2CZ?L{Pe}yU_vV(L z*gN0O)BF#SGGVFMuHZqJePV4u{Ate}k3!L@A3BdzZvM$M^!KwLFX+iIsu zohogf6xWxvCSX=!1uuqvHa#I6ed|zj=6&f;uvr}_YZiHlcbR)RwAt{m;v`lT*=cNf zlrOpcsusluF?$uTGVp#Ig6jAHB$Pn$*Hu*bxxOWTr{Cz_)XGv8=tq9#+Ta|O8wN+B zRlZ1Oq9m3%{dIUezDv~AT0u1o%^sJ)RYc|AbQHdkxW8{(V(^JjL@DIjon9XT!U1`k zzJal-Ch{)S>IQA%hr)7K>yOeW(~ zVlR?8IkDr`es~k!1F;tj=%M_CN!={70cF&wMU*TSDRutSV4U5-%m%a2!2w*cR2`Q` zthBl2^kG{j2up!9Y|8WQFkuE$>1f&7dF&_A)2yeHr7KLw{kBr7yVOk^b1yg&d^&;<8msEV_RTyQiJTX2P7ThJhixqw-Qc|DE%X*zn)W%^M%r z>LXC-4R}0v)kq&_>obYjjs%L!?11fyaLNSvWm4tgJ|siB6Prvh#MRFqIcEOIO=ad{+Hv0W7u`guYG3sJzKWP+D1y$N6+A3G?7d%$j z);u^Y{*lF=VKtV(an4Pxye}^3or9oA3jV~(_3QNhFa7H8Rhs1?wvUrX-G^c{gb*8S zCKTqHk1$#T)w{)y%dO8Q4;N1?UVUbsR4Dh^9ks;RMYD1~u=gISd)@W6@58dskCz=6 zao_Zpp52qGp=hDwiPRt7y}P2}QTGyjfjLPF&^WNsES^C@zq$Hm2)WPd=Kck+u5{%= zzzp;uF)VJCdjk2Dvoz(6%Qr|r7p5N@Sjo&*ZUl=f?9tx0b6KIW(LQ{0xDA#TJ0D!f z1C41adV#}dg0_^9VUjlnd$axJXkTStnV94tRZh$B%_**t*ygIA#(12h1U@a9X|vA} z4mc?ErpKY@f@2@EU?`JUo$a0Bk2*Y3!_pLknWUmC#T0MBmZf zmA1j(g#4xd{QTYb7d84L9wmEQ0)Cp)&uqLwyo2F#%7nyMutF1n1A(>^^n_3Ee>-gV z*iBsIz3t7uAD0n>H8Eiw{Eq0ru%hhM!_S9}!;)zcjzZEzAa+JVuCOYs<`fDf(=otR z_642aLHwJ?>*0APgcvTvN3zetWeLdTta(e#T0CMesB>x0`GScZyLj1D=5T_IEIxeU z-!jQWo|`^v%WgtAt3loRZhEi>p+c(OvV0RbJK413RKDMyP?!DU&3`F{pVJsP`mh=J zAm6yCN_O9B>g+N?fs5Efl|B&AqdM(_%8h>%1~^PC=`N(`msU=Ul6)$Z%WQ5F`?*lg zDNZYJ(X&wQ^T(6tOPhz3>5R{L zZ?F8_xqXA~FU%G;-;YAcT&5WYoMs`6UIeRY`Fa;DW3h8{>-buifZGrUs@thoyeV zv7)I8{`|9;gQPfDG==|d);lnYb-!Np09e0JQ!@UcwbkEDQGEs|QRBf6(fa)A%GpH^ zAwnZ{9JeV`4?S#qYSASR^NK)adw4v9AIR1oXgiMb@{Gh7(PCS?q@&{w!q2nUr)A*+G+fYc^PQAvo_~(ze!lt0UA%B?al{S5_E0Ra+S?27ML#j48S_}6t)Al2|1>o zxhJx3ui3x}(3B`y*Lv7UbQ|@@KBTX2e3D~iO-3t_PXD6#iurT#2Y)DhFVQH}$KG{H zV)?IW*`iNA>SK)+2K;@O^tEe1^-nTTu^`^be7>-JgjT?bLi$`ib#9oX3C#`e3P z#>xTgBU|ymUo8I`$if?}i*il8!pGTVmLSQ%B)C?{1s4;)8v`Z1rmR6)+Vxf`$N)nA zqMXFAgT{T1SNw65ZUvD@z};W?8H*^+ob3=Ksghy2aHpL`mECLy@2SPT%+93^e^q~d zo`}N3N5Ac}JV(p+G5aZgQZX5EU}H8(vYq&vEr|4e{ZF^<>$CV|RzG&lTO1`R0By=K zv9baN{gnTz+neUq?1ylkfrRv6!un6|0-i_BLzf8;$2!-oBb(I|AkGf*%})&1r>=ww+x3QP*q0N`u>6TUGf=X|~Xa z2qurARLo8pR*F#tMhK1b$*3`F_S<)z9OIt+CmtAwbEqv!aXD-0V^eU*bIrrXc2%1Z z;x2G?6&tF~p;7i!DJ`+U_XWeQLe1&?#@Rh#O>4mrw{P@a@C(Hkgh}6OO&EQz{ucQJ z0AA1R4SO{y72Ob<1iPc72nogU0=bVMH3&Vc7*Arfz+1OjiLmWzX7ODkXCk_V4m|nE z?J~EE{14>HG%Zdeztnnd%A`X|n5t5D6J}SD&jndcKKWr6^`8p|1Gk$)pn)kW+2 z7ohHODIsGK{@T}yDK_ydzO=QY@71{4+z7mv75D&K&1@LT&&OXMKN# z?sJ!^1J1;g6+nT|XF|qX(z~e^vccQV8<7dUj=^=gw9F8nm{%Krs6oyUhTzH*1*w-t zt1`@)7>jN;2c7#VZ)C0*Q`pnzZjtYty&u!Rx^JI}Mdf4h&g137NL)#riiEU7F*WM8 z-sV?4Gfvn-Xe1tbm3^V-h<#m9@)QhQ438Ms+Um}sx6OY+{`WZWW5|Rk2})mW6w|GB zj}jklL+fx9Y3P-4L)1knZkL)k7Q(rOxlv4QzsLxxuWzp-<;z5y7xsszw{*rBWb^`7 za$a>8BC@ONs#&N}E%R}fAy@yHKelaMznH(Oi^ZoU2J`uTFP1*OahXtZ#WK~7&g={} yz}~pJds3%4bl=73FE(a;FL--Vz7!gGzsh%i+psd0oAhuW`0@zyCh03W;Qs*3EQgr@ diff --git a/inst/extdata/variable_details.csv b/inst/extdata/variable_details.csv index 89aab701..c996421b 100644 --- a/inst/extdata/variable_details.csv +++ b/inst/extdata/variable_details.csv @@ -141,18 +141,18 @@ ADLF6R,ADLF6R_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, ADLF6R,ADLF6R_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m","cchs2001_p::RACAF6, cchs2003_p::RACCF6R, cchs2005_p::RACEF6R, cchs2007_2008_p::RACF6R, cchs2001_m::RACAF6, cchs2003_m::RACCF6R, cchs2005_m::RACEF6R, cchs2007_2008_m::RACF6R, [ADLF6R]",NA,cat,NA::b,2,missing,missing,N/A,"[7,9]",don't know (7); refusal (8); not stated (9),Needs help with tasks,Needs help with at least one task - (F),NA,2.2.0,2026-03-27,active,NA,NA,NA ADLF6R,ADLF6R_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m","cchs2001_p::RACAF6, cchs2003_p::RACCF6R, cchs2005_p::RACEF6R, cchs2007_2008_p::RACF6R, cchs2001_m::RACAF6, cchs2003_m::RACCF6R, cchs2005_m::RACEF6R, cchs2007_2008_m::RACF6R, [ADLF6R]",NA,cat,NA::b,2,missing,missing,N/A,else,else,Needs help with tasks,Needs help with at least one task - (F),NA,2.2.0,2026-03-27,active,NA,NA,NA ADM_RNO,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p","cchs2001_p::ADMA_RNO, cchs2003_p::ADMC_RNO, cchs2005_p::ADME_RNO, [ADM_RNO]",NA,cont,copy,N/A,Sequential record number,Sequential record number,N/A,"[1,999998]",Sequential record number,Sequential record number,Sequential record number,NA,2.2.0,2025-06-30,active,NA,NA,NA -age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),,,,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,,,,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::b,,missing,missing,years,N/A,missing,,,,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),,,,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,,,,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::b,,missing,missing,years,N/A,missing,,,,3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),,,"PUMF: midpoint estimation from SMKG040_cont (~+/-3 yr). Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,,,"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::b,,missing,missing,years,N/A,missing,,,Missing required input,3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),,,"Master: exact continuous from SMK_040. Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,,,"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::b,,missing,missing,years,N/A,missing,,,Missing required input,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,N/A,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::b,,missing,missing,years,N/A,missing,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,N/A,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::b,,missing,missing,years,N/A,missing,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,N/A,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),Age daily (ever)*,Age started smoking cigarettes daily (unified),"PUMF: midpoint estimation from SMKG040_cont (~+/-3 yr). Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age daily (ever)*,Age started smoking cigarettes daily (unified),"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::b,,missing,missing,years,N/A,missing,Age daily (ever)*,Age started smoking cigarettes daily (unified),Missing required input,3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,N/A,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),Age daily (ever)*,Age started smoking cigarettes daily (unified),"Master: exact continuous from SMK_040. Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age daily (ever)*,Age started smoking cigarettes daily (unified),"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::b,,missing,missing,years,N/A,missing,Age daily (ever)*,Age started smoking cigarettes daily (unified),Missing required input,3.0.0-alpha,2026-02-23,active,,, ALC_005,ALC_005_cat2_1,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::ALCA_5B, cchs2003_p::ALCC_5B, cchs2005_p::ALCE_5B, cchs2007_2008_p::ALN_1, cchs2001_m::ALCA_5B, cchs2003_m::ALCC_5B, cchs2005_m::ALCE_5B, cchs2007_2008_m::ALN_1, [ALC_005]",NA,cat,1,2,yes,alcohol in the lifetime,N/A,1,Yes,Alcohol in lifetime,"In lifetime, ever drank alcohol?",NA,2.1.0,2026-03-27,active,NA,NA,NA ALC_005,ALC_005_cat2_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::ALCA_5B, cchs2003_p::ALCC_5B, cchs2005_p::ALCE_5B, cchs2007_2008_p::ALN_1, cchs2001_m::ALCA_5B, cchs2003_m::ALCC_5B, cchs2005_m::ALCE_5B, cchs2007_2008_m::ALN_1, [ALC_005]",NA,cat,2,2,no,no alcohol in lifetime,N/A,2,No,Alcohol in lifetime,"In lifetime, ever drank alcohol?",NA,2.1.0,2026-03-27,active,NA,NA,NA ALC_005,ALC_005_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::ALCA_5B, cchs2003_p::ALCC_5B, cchs2005_p::ALCE_5B, cchs2007_2008_p::ALN_1, cchs2001_m::ALCA_5B, cchs2003_m::ALCC_5B, cchs2005_m::ALCE_5B, cchs2007_2008_m::ALN_1, [ALC_005]",NA,cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Alcohol in lifetime,"In lifetime, ever drank alcohol?",NA,2.1.0,2026-03-27,active,NA,NA,NA @@ -2413,10 +2413,10 @@ pack_years_cat,pack_years_cat_cat5_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cc pack_years_cat,pack_years_cat_cat5_4,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],,N/A,4,5,Very heavy (30+),Very heavy smoker (30 or more pack-years),,"[30,165]",Very heavy,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),pack_years_der >= 30 & pack_years_der <= 165,3.0.0-alpha,2026-01-04,pending_review,"Clearer labels. 5-category. Status=pending: cut-points need epi review. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, pack_years_cat,pack_years_cat_cat5_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],,N/A,NA::a,5,not applicable,not applicable,,N/A,not applicable,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),pack_years_der is NA::a,3.0.0-alpha,2026-01-04,pending_review,"Clearer labels. 5-category. Status=pending: cut-points need epi review. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, pack_years_cat,pack_years_cat_cat5_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],,N/A,NA::b,5,missing,missing,,N/A,missing,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),pack_years_der is NA::b,3.0.0-alpha,2026-01-04,pending_review,"Clearer labels. 5-category. Status=pending: cut-points need epi review. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,"[0,165]",Pack-years (PUMF),Pack-years,Cumulative smoking exposure in pack-years (derived),PUMF wrapper using midpoint-derived age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,N/A,Pack-years (PUMF),Pack-years,Cumulative smoking exposure in pack-years (derived),PUMF wrapper using midpoint-derived age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::a,N/A,not applicable,not applicable,pack-years,N/A,not applicable,Pack-years,Cumulative smoking exposure in pack-years (derived),Valid skip - never smoker (SMKDSTY_original=6),3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, pack_years_der,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::b,N/A,missing,missing,pack-years,N/A,missing,Pack-years,Cumulative smoking exposure in pack-years (derived),"Missing required input(s): status, age, initiation, or intensity",3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165]. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,"[0,165]",Pack-years (Master),Pack-years,Cumulative smoking exposure in pack-years (derived),Master wrapper using true continuous age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, +pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,Func::calculate_pack_years,N/A,N/A,N/A,pack-years,N/A,Pack-years (Master),Pack-years,Cumulative smoking exposure in pack-years (derived),Master wrapper using true continuous age variables. Valid output range: 0-165 pack-years (evidence-based from ATBC and Pain & Health studies).,3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::a,N/A,not applicable,not applicable,pack-years,N/A,not applicable,Pack-years,Cumulative smoking exposure in pack-years (derived),Valid skip - never smoker (SMKDSTY_original=6),3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, pack_years_der,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",,N/A,NA::b,N/A,missing,missing,pack-years,N/A,missing,Pack-years,Cumulative smoking exposure in pack-years (derived),"Missing required input(s): status, age, initiation, or intensity",3.0.0-alpha,2026-01-04,active,"Clearer labels. Added Master 2001-2023, PUMF 2001-2018. Evidence-based range [0,165].",, PAYDVADL,N/A,cont,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVADL],NA,cont,copy,N/A,No. minutes of leisure activities,No. minutes of leisure activities,minutes/week,"[0,4140]",No. minutes of leisure activities,Leisure activities (12-17 years old),Time spent - leisure activity in a week (12-17 years old),NA,2.1.0,2025-06-30,active,NA,NA,NA @@ -3085,8 +3085,8 @@ SMK_09C,N/A,cont,"cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs SMK_10_gate,SMK_10_gate_cat2_1,cat,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKC_10, cchs2005_p::SMKE_10, cchs2015_2016_p::SMK_095, cchs2017_2018_p::SMK_095, cchs2019_2020_p::SMK_095, cchs2003_m::SMKC_10, cchs2005_m::SMKE_10, cchs2015_2016_m::SMK_095, cchs2017_2018_m::SMK_095, cchs2019_2020_m::SMK_095, cchs2021_m::SMK_095, cchs2022_m::SPU_30, cchs2023_m::SPU_30, [SMK_10]",,cat,1,2,Yes,Quit completely when stopped daily,,1,Yes,Quit gate,Quit completely when stopped daily (gate variable),,3.0.0-alpha,2026-01-04,active,"NEW: Quit gate (quit completely when stopped daily). Master/PUMF 2003-2023. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, SMK_10_gate,SMK_10_gate_cat2_2,cat,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKC_10, cchs2005_p::SMKE_10, cchs2015_2016_p::SMK_095, cchs2017_2018_p::SMK_095, cchs2019_2020_p::SMK_095, cchs2003_m::SMKC_10, cchs2005_m::SMKE_10, cchs2015_2016_m::SMK_095, cchs2017_2018_m::SMK_095, cchs2019_2020_m::SMK_095, cchs2021_m::SMK_095, cchs2022_m::SPU_30, cchs2023_m::SPU_30, [SMK_10]",,cat,2,2,No,Continued occasional smoking,,2,No,Quit gate,Quit completely when stopped daily (gate variable),,3.0.0-alpha,2026-01-04,active,"NEW: Quit gate (quit completely when stopped daily). Master/PUMF 2003-2023. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, SMK_10_gate,SMK_10_gate_cat2_NAa,cat,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKC_10, cchs2005_p::SMKE_10, cchs2015_2016_p::SMK_095, cchs2017_2018_p::SMK_095, cchs2019_2020_p::SMK_095, cchs2003_m::SMKC_10, cchs2005_m::SMKE_10, cchs2015_2016_m::SMK_095, cchs2017_2018_m::SMK_095, cchs2019_2020_m::SMK_095, cchs2021_m::SMK_095, cchs2022_m::SPU_30, cchs2023_m::SPU_30, [SMK_10]",,cat,NA::a,2,not applicable,not applicable,,6,not applicable,Quit gate,Quit completely when stopped daily (gate variable),,3.0.0-alpha,2026-01-04,active,"NEW: Quit gate (quit completely when stopped daily). Master/PUMF 2003-2023. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -SMK_10_gate,SMK_10_gate_cat2_NAb,cat,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKC_10, cchs2005_p::SMKE_10, cchs2015_2016_p::SMK_095, cchs2017_2018_p::SMK_095, cchs2019_2020_p::SMK_095, cchs2003_m::SMKC_10, cchs2005_m::SMKE_10, cchs2015_2016_m::SMK_095, cchs2017_2018_m::SMK_095, cchs2019_2020_m::SMK_095, cchs2021_m::SMK_095, cchs2022_m::SPU_30, cchs2023_m::SPU_30, [SMK_10]",,cat,NA::b,2,missing,missing,,else,else,Quit gate,Quit completely when stopped daily (gate variable),,3.0.0-alpha,2026-01-04,active,"NEW: Quit gate (quit completely when stopped daily). Master/PUMF 2003-2023. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, SMK_10_gate,SMK_10_gate_cat2_NAb,cat,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKC_10, cchs2005_p::SMKE_10, cchs2015_2016_p::SMK_095, cchs2017_2018_p::SMK_095, cchs2019_2020_p::SMK_095, cchs2003_m::SMKC_10, cchs2005_m::SMKE_10, cchs2015_2016_m::SMK_095, cchs2017_2018_m::SMK_095, cchs2019_2020_m::SMK_095, cchs2021_m::SMK_095, cchs2022_m::SPU_30, cchs2023_m::SPU_30, [SMK_10]",,cat,NA::b,2,missing,missing,,"[7,9]",don't know (7); refusal (8); not stated (9),Quit gate,Quit completely when stopped daily (gate variable),,3.0.0-alpha,2026-01-04,active,"NEW: Quit gate (quit completely when stopped daily). Master/PUMF 2003-2023. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +SMK_10_gate,SMK_10_gate_cat2_NAb,cat,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKC_10, cchs2005_p::SMKE_10, cchs2015_2016_p::SMK_095, cchs2017_2018_p::SMK_095, cchs2019_2020_p::SMK_095, cchs2003_m::SMKC_10, cchs2005_m::SMKE_10, cchs2015_2016_m::SMK_095, cchs2017_2018_m::SMK_095, cchs2019_2020_m::SMK_095, cchs2021_m::SMK_095, cchs2022_m::SPU_30, cchs2023_m::SPU_30, [SMK_10]",,cat,NA::b,2,missing,missing,,else,else,Quit gate,Quit completely when stopped daily (gate variable),,3.0.0-alpha,2026-01-04,active,"NEW: Quit gate (quit completely when stopped daily). Master/PUMF 2003-2023. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, SMK_10A_2015plus,SMK_10A_2015plus_cat4_1,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","cchs2023_m::SPU_35, [SMK_100]",,cat,1,4,<1 year,Less than one year ago,years,1,Less than one year,When quit completely - former daily reducers,When quit completely - former daily smokers who continued as occasional,,3.0.0-alpha,2026-01-05,active,New for v3.0.0. SMK_10A for reducers (former daily who continued occasional). 2015+ categories.,, SMK_10A_2015plus,SMK_10A_2015plus_cat4_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","cchs2023_m::SPU_35, [SMK_100]",,cat,2,4,1 to <2 years,1 year to less than 2 years ago,years,2,1 year to <2 years,When quit completely - former daily reducers,When quit completely - former daily smokers who continued as occasional,,3.0.0-alpha,2026-01-05,active,New for v3.0.0. SMK_10A for reducers (former daily who continued occasional). 2015+ categories.,, SMK_10A_2015plus,SMK_10A_2015plus_cat4_3,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","cchs2023_m::SPU_35, [SMK_100]",,cat,3,4,2 to <3 years,2 years to less than 3 years ago,years,3,2 years to <3 years,When quit completely - former daily reducers,When quit completely - former daily smokers who continued as occasional,,3.0.0-alpha,2026-01-05,active,New for v3.0.0. SMK_10A for reducers (former daily who continued occasional). 2015+ categories.,, @@ -3196,8 +3196,8 @@ SMKDSTY_cat3,SMKDSTY_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_ SMKDSTY_cat3,SMKDSTY_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",,cat,NA::b,3,missing,missing,N/A,else,else,Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_1,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",ICES confirmed,cat,1,5,Daily,Current daily smoker,N/A,1,Daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,2,5,Occasional,Current occasional smoker,N/A,2,Occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, -SMKDSTY_cat5,SMKDSTY_cat5_4,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,4,5,Former occasional,Former occasional,N/A,"[4,5]",Former occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_3,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,3,5,Former daily,Former daily smoker,N/A,3,Former daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat5,SMKDSTY_cat5_4,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,4,5,Former occasional,Former occasional,N/A,"[4,5]",Former occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_5,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],ICES confirmed,cat,5,5,Never smoked,Never smoked,N/A,6,Never smoked,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",ICES confirmed,cat,2,5,Occasional,Current occasional smoker,N/A,2,Occasional,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat5,SMKDSTY_cat5_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",ICES confirmed,cat,3,5,Former daily,Former daily smoker,N/A,3,Former daily,Smoking (5-cat),"Smoking status (5-category): daily, occasional, former daily, former occasional, never",Full coverage 2001-2023 PUMF and Master. 5-category avoiding semantic break. Merges occasional subtypes and former occasional/experimental. Use when more detail than 3-category is needed.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended when more detail than 3-category is needed. Merges pre-2015 'occasional (former daily)' + 'occasional (never daily)' into 'occasional', and post-2015 'former occasional' + 'experimental' into 'former occasional'. Extended from V2.1 with 2019-2023 coverage.",, @@ -3283,7 +3283,7 @@ SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,42,11,40-44 years,Midpoint of 40-44 years,years,9,40-44 years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,47,11,45-49 years,Midpoint of 45-49 years,years,10,45-49 years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,55,11,50+ years,Assumed midpoint for 50+,years,11,50+ years,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, -SMKG01C_cont,N/A,cont,"cchs2015_2016_p",cchs2015_2016_p::SMKG035,,cat,NA::a,11,not applicable,not applicable,years,11,50+ years,Age 1st cig,Age smoked first whole cigarette,StatCan defect in 2015-2016 PUMF: SMKG035 code 11 pools valid skip (~44k) and not stated (~1.3k) with true age 50+ (~95); official data dictionary lists 11 = 45737 with no 96/99 rows. Mapped to NA::a (dominant class). See cchsflow-data#3.,3.0.0-alpha,2026-01-04,active,Added 2015-2016 exception row for StatCan SMKG035 defect.,, +SMKG01C_cont,N/A,cont,"cchs2015_2016_p",[SMKG035],,cat,NA::a,11,not applicable,not applicable,years,11,not applicable,Age 1st cig,Age smoked first whole cigarette,StatCan defect in 2015-2016 PUMF: SMKG035 code 11 pools valid skip (~44k) and not stated (~1.3k) with true age 50+ (~95); official data dictionary lists 11 = 45737 with no 96/99 rows. Mapped to NA::a (dominant class). See cchsflow-data#3.,3.0.0-alpha,2026-01-04,active,Added 2015-2016 exception row for StatCan SMKG035 defect.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,NA::a,11,not applicable,not applicable,years,96,not applicable,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,NA::b,11,missing,missing,years,"[97,99]",don't know (97); refusal (98); not stated (99),Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, SMKG01C_cont,N/A,cont,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, [SMKG01C]",,cat,NA::b,11,missing,missing,years,else,else,Age 1st cig,Age smoked first whole cigarette,PUMF: midpoint imputation from grouped categories,3.0.0-alpha,2026-01-04,active,Removed _s/_i. Shorter labels. Added PUMF 2019-2021.,, @@ -3593,9 +3593,9 @@ smoke_simple,smoke_simple_cat4_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs20 smoke_simple,smoke_simple_cat4_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",,N/A,3,4,Former daily smoker quit >5 years,Former daily smoker quit >5 years,N/A,N/A,Former daily smoker quit >5 years,Simple smoking status,"Simplified smoking status (current, former, never)",,2.2.0,2025-11-18,active,,, smoke_simple,smoke_simple_cat4_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",,N/A,NA::a,4,not applicable,not applicable,N/A,N/A,not applicable,Simple smoking status,"Simplified smoking status (current, former, never)",,2.2.0,2025-11-18,active,,, smoke_simple,smoke_simple_cat4_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",,N/A,NA::b,4,missing,missing,N/A,N/A,missing,Simple smoking status,"Simplified smoking status (current, former, never)",,2.2.0,2025-11-18,active,,, -smoked_100_lifetime,smoked_100_lifetime_catN/A_Func::calculate_smoked_100_lifetime,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,Func::calculate_smoked_100_lifetime,2,N/A,,,N/A,Ever smoked 100+ cigarettes,,,,3.0.0-alpha,2026-02-23,active,,, -smoked_100_lifetime,smoked_100_lifetime_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::a,2,not applicable,not applicable,,N/A,not applicable,,,,3.0.0-alpha,2026-02-23,active,,, -smoked_100_lifetime,smoked_100_lifetime_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::b,2,missing,missing,,N/A,missing,,,,3.0.0-alpha,2026-02-23,active,,, +smoked_100_lifetime,smoked_100_lifetime_catN/A_Func::calculate_smoked_100_lifetime,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,N/A,Func::calculate_smoked_100_lifetime,2,N/A,,,N/A,Ever smoked 100+ cigarettes,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, +smoked_100_lifetime,smoked_100_lifetime_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::a,2,not applicable,not applicable,,N/A,not applicable,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, +smoked_100_lifetime,smoked_100_lifetime_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::b,2,missing,missing,,N/A,missing,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, SPS_01,N/A,cont,"cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2012_m","cchs2015_2016_p::SPS_005,cchs2017_2018_p::SPS_005,[SPS_01]",NA,cat,1,4,Strongly agree,Strongly agree,N/A,1,Strongly agree,SPS-5 - people to depend on for help,Five-item social provision scale -There are people I can depend on to help me if I really need it.,"For CCHS cycles 2015-2018, question was not asked in proxy interview",2.2.0,2025-06-30,active,NA,NA,NA SPS_01,N/A,cont,"cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2012_m","cchs2015_2016_p::SPS_005,cchs2017_2018_p::SPS_005,[SPS_01]",NA,cat,2,4,Agree,Agree,N/A,2,Agree,SPS-5 - people to depend on for help,Five-item social provision scale -There are people I can depend on to help me if I really need it.,NA,2.2.0,2025-06-30,active,NA,NA,NA SPS_01,N/A,cont,"cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2012_m","cchs2015_2016_p::SPS_005,cchs2017_2018_p::SPS_005,[SPS_01]",NA,cat,3,4,Disagree,Disagree,N/A,3,Disagree,SPS-5 - people to depend on for help,Five-item social provision scale -There are people I can depend on to help me if I really need it.,NA,2.2.0,2025-06-30,active,NA,NA,NA @@ -3827,11 +3827,11 @@ SSA_20,N/A,cont,"cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, time_quit_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMK_09A_cont, SMK_06A_cont]",,N/A,Func::calculate_time_quit_smoking,N/A,N/A,N/A,years,N/A,Years since quit,Yrs since quit smoking,Years since quit smoking (combined former daily and occasional),3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMK_09A_cont, SMK_06A_cont]",,N/A,NA::a,N/A,not applicable,not applicable,years,N/A,not applicable,Yrs since quit smoking,Years since quit smoking (combined former daily and occasional),Never smoker or current smoker,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMK_09A_cont, SMK_06A_cont]",,N/A,NA::b,N/A,missing,missing,years,N/A,missing,Yrs since quit smoking,Years since quit smoking (combined former daily and occasional),Missing all input sources,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,Func::calculate_time_quit_smoking_complete,2,,,years,N/A,,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,Func::calculate_time_quit_smoking_complete,2,N/A,,years,N/A,,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_complete,N/A,cont,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_10_gate, SMK_06A_cont, SMK_09A_cont, SMK_10A_cont]",,N/A,NA::b,2,missing,missing,years,N/A,missing,Yrs quit smoking completely,Years since quit smoking completely,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,Func::calculate_time_quit_smoking_daily,2,,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, -time_quit_smoking_daily,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,Func::calculate_time_quit_smoking_daily,2,,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,Func::calculate_time_quit_smoking_daily,2,N/A,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, +time_quit_smoking_daily,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,Func::calculate_time_quit_smoking_daily,2,N/A,,years,N/A,,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_daily,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont, SMK_09C]",,N/A,NA::a,2,not applicable,not applicable,years,N/A,not applicable,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, time_quit_smoking_daily,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p","DerivedVar::[SMKDSTY_cat5, SMK_09A_cont]",,N/A,NA::b,2,missing,missing,years,N/A,missing,Yrs quit smoking daily,Years since quit smoking daily - former daily smokers,3.0.0,3.0.0-alpha,2026-01-04,active,"Label clarified. Added Master 2001-2023, PUMF 2001-2018. Extended PUMF to 2019-2023 (2021_p, 2023_p need DDI confirmation).",, diff --git a/inst/extdata/variables.csv b/inst/extdata/variables.csv index 8d3784e8..0a234075 100644 --- a/inst/extdata/variables.csv +++ b/inst/extdata/variables.csv @@ -266,7 +266,7 @@ PACDEE,Physical activity,Daily energy expenditure - (D),Continuous,"cchs2001_p, PACDEE_cat3,Physical activity,Categorical daily energy expenditure,Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m","cchs2001_p::PACADEE, cchs2003_p::PACCDEE, cchs2005_p::PACEDEE, cchs2001_m::PACADEE, cchs2003_m::PACCDEE, cchs2005_m::PACEDEE, [PACDEE]",Exercise,Health behaviour,METS,NA,NA,2.2.0,2025-06-30,Variable metadata completed,NA,NA,active,NA PACFLEI,Leisure physical activity,Leisure physical activity participation flag,Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m","cchs2001_p::PACAFLEI, cchs2003_p::PACCFLEI, cchs2005_p::PACEFLEI, cchs2001_m::PACAFLEI, cchs2003_m::PACCFLEI, cchs2005_m::PACEFLEI, [PACFLEI]",Exercise,Health behaviour,N/A,"Binary flag: 1=Yes, 2=No. Fixed label typo.",NA,3.0.0,2026-01-18,Fixed label typo: 'activites' -> 'activity',Yes,NA,active,"CEP-003: PA harmonization - 2019-2020 extension, PAADVWHO, label fixes" pack_years_cat,Pack-years (5-cat),Cumulative smoking exposure in pack-years (5-category),Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m",DerivedVar::[pack_years_der],Smoking,Health behaviour,N/A,"{sub_subject:pack-years} Categories: 0=Never (0), 1=Light (<10), 2=Moderate (10-20), 3=Heavy (20-30), 4=Very heavy (30+). DEFERRED pending epidemiological review. {recommended:secondary}",Categorical grouping of pack-years for epidemiological analysis.,3.0.0-alpha,2026-04-24,Dropped cchs2022_p/cchs2022_m/cchs2023_p (cascade from pack_years_der feeder intersection).,,,pending,Cascade-narrowed: dropped cchs2023_m (pack_years_der feeder no longer covers it). -pack_years_der,Pack-years,Cumulative smoking exposure in pack-years (derived),Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_204, SMK_208, age_first_cigarette, smoked_100_lifetime]",Smoking,Health behaviour,pack-years,{recommended:primary} {sub_subject:pack-years} PUMF uses DHHGAGE_cont/SMKG*_cont (midpoint). Master uses DHH_AGE/SMK_* (true continuous). Not supported: cchs2022_p/cchs2023_p (feeders lack PUMF coverage); cchs2022_m (time_quit_smoking/SMK_09A_cont skip 2022).,"Pack-years of smoking exposure calculated from status, initiation age, intensity, and cessation timing. Formula: (cigarettes_per_day / 20) * years_smoked.",3.0.0-alpha,2026-04-24,Dropped cchs2022_p/cchs2023_p/cchs2022_m from databaseStart per feeder intersection rule.,,,active,Cascade-narrowed: dropped cchs2023_m (SMKDSTY_original feeder no longer covers it). +pack_years_der,Pack-years,Cumulative smoking exposure in pack-years (derived),Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","DerivedVar::[SMKDSTY_original, DHHGAGE_cont, DHH_AGE, age_start_smoking, cigs_per_day, time_quit_smoking, SMK_05B, SMK_05C, age_first_cigarette, smoked_100_lifetime]",Smoking,Health behaviour,pack-years,{recommended:primary} {sub_subject:pack-years} PUMF uses DHHGAGE_cont/SMKG*_cont (midpoint). Master uses DHH_AGE/SMK_* (true continuous). Not supported: cchs2022_p/cchs2023_p (feeders lack PUMF coverage); cchs2022_m (time_quit_smoking/SMK_09A_cont skip 2022).,"Pack-years of smoking exposure calculated from status, initiation age, intensity, and cessation timing. Formula: (cigarettes_per_day / 20) * years_smoked.",3.0.0-alpha,2026-04-24,Dropped cchs2022_p/cchs2023_p/cchs2022_m from databaseStart per feeder intersection rule.,,,active,Cascade-narrowed: dropped cchs2023_m (SMKDSTY_original feeder no longer covers it). PAYDVADL,Leisure activities (12-17 years old),Time spent - leisure activity in a week (12-17 years old),Continuous,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVADL],Exercise,Health behaviour,minutes/week,NA,NA,2.1.0,2025-06-30,Variable metadata completed,NA,NA,active,NA PAYDVDYS,Active days (12-17 years old),Number of active days (12-17 years old),Continuous,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVDYS],Exercise,Health behaviour,minutes/week,NA,NA,2.1.0,2025-06-30,Variable metadata completed,NA,NA,active,NA PAYDVTOA,Sweat/breathe hard activities (12-17 years old),Time spent - sweat/breathe hard activities in a week (12-17 years old),Continuous,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m",[PAYDVTOA],Exercise,Health behaviour,minutes/week,NA,NA,2.1.0,2025-06-30,Variable metadata completed,NA,NA,active,NA @@ -356,7 +356,7 @@ SMK_202,Smoking freq,"Current cigarette smoking frequency (daily, occasional, no SMK_203,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),Continuous,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, cchs2015_2016_m::[SMK_005, SMK_040], cchs2017_2018_m::[SMK_005, SMK_040], cchs2019_2020_m::[SMK_005, SMK_040], cchs2021_m::[SMK_005, SMK_040], cchs2022_m::[SMK_005, SMK_040], cchs2023_m::[SMK_005, SMK_040], [SMK_203]",Smoking,Health behaviour,years,Universe: current daily smokers. Master file only. Pre-2015: direct source. Post-2015: derived from SMK_040 filtered by status. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Universe context added.,,,active,Narrowed Master Func:: block: dropped cchs2022_m/cchs2023_m (SMK_005 cchsflow chain doesn't extend to those cycles; would require deprecating-to-extending). SMK_204,Cigs/day (current),Number of cigarettes smoked daily - daily smokers,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_204, cchs2003_p::SMKC_204, cchs2005_p::SMKE_204, cchs2015_2016_p::SMK_045, cchs2017_2018_p::SMK_045, cchs2019_2020_p::SMK_045, cchs2022_p::CSS_25, cchs2023_p::CSS_25, cchs2001_m::SMKA_204, cchs2003_m::SMKC_204, cchs2005_m::SMKE_204, cchs2015_2016_m::SMK_045, cchs2017_2018_m::SMK_045, cchs2019_2020_m::SMK_045, cchs2021_m::SMK_045, cchs2022_m::CSS_25, cchs2023_m::CSS_25, [SMK_204]",Smoking,Health behaviour,cigarettes,{recommended:secondary} {sub_subject:intensity} Universe: current daily smokers. Use cigs_per_day for unified daily intensity.,,3.0.0-alpha,2026-04-24,Created from variable_details_draft.csv,ICES confirmed,,active,Extended PUMF 2022/2023 coverage via CSS mappings. SMK_207,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),Continuous,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, cchs2015_2016_m::[SMK_005, SMK_030, SMK_040], cchs2017_2018_m::[SMK_005, SMK_030, SMK_040], cchs2019_2020_m::[SMK_005, SMK_030, SMK_040], cchs2021_m::[SMK_005, SMK_030, SMK_040], cchs2022_m::[SMK_005, SMK_030, SMK_040], cchs2023_m::[SMK_005, SMK_030, SMK_040], [SMK_207]",Smoking,Health behaviour,years,Universe: former daily smokers. Master file only. Pre-2015: direct source. Post-2015: derived from SMK_040 filtered by status. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Universe context added.,,,active,Narrowed Master Func:: block: dropped cchs2022_m/cchs2023_m (SMK_005 cchsflow chain doesn't extend to those cycles; would require deprecating-to-extending). -SMK_208,Cigs/day (former),Number of cigarettes smoked daily - former daily smokers,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_208, cchs2003_p::SMKC_208, cchs2005_p::SMKE_208, cchs2015_2016_p::SMK_075, cchs2017_2018_p::SMK_075, cchs2019_2020_p::SMK_075, cchs2001_m::SMKA_208, cchs2003_m::SMKC_208, cchs2005_m::SMKE_208, cchs2015_2016_m::SMK_075, cchs2017_2018_m::SMK_075, cchs2019_2020_m::SMK_075, cchs2021_m::SMK_075, cchs2022_m::SPU_20, cchs2023_m::SPU_20, [SMK_208]",Smoking,Health behaviour,cigarettes,{recommended:secondary} {sub_subject:intensity} Universe: former daily smokers. Use cigs_per_day for unified daily intensity.,,3.0.0-alpha,2026-01-04,Created from variable_details_draft.csv,ICES confirmed,,active, +SMK_208,Cigs/day (former),Number of cigarettes smoked daily - former daily smokers,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKA_208, cchs2003_p::SMKC_208, cchs2005_p::SMKE_208, cchs2015_2016_p::SMK_075, cchs2017_2018_p::SMK_075, cchs2019_2020_p::SMK_075, cchs2001_m::SMKA_208, cchs2003_m::SMKC_208, cchs2005_m::SMKE_208, cchs2015_2016_m::SMK_075, cchs2017_2018_m::SMK_075, cchs2019_2020_m::SMK_075, cchs2021_m::SMK_075, cchs2022_m::SPU_20, cchs2023_m::SPU_20, [SMK_208]",Smoking,Health behaviour,cigarettes,{recommended:secondary} {sub_subject:intensity} Universe: former daily smokers. Use cigs_per_day for unified daily intensity.,,3.0.0-alpha,2026-01-04,Created from variable_details_draft.csv,ICES confirmed,,active, SMKDGSTP,Yrs quit (P cat),Years since quit smoking completely (PUMF grouped categorical),Categorical,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",[SMKDGSTP],Smoking,Health behaviour,N/A,"{sub_subject:cessation} Universe: former smokers. PUMF 2015+ only. Grouped categories: 0=<1yr, 1=1-2yr, 2=3-5yr, 3=6-10yr, 4=11+yr.",StatCan derived variable grouped for disclosure control.,3.0.0-alpha,2026-01-05,Split from SMKDSTP 2026-01-05. PUMF categorical 2015+ only.,,,active, SMKDGSTP_cont,Yrs quit smoking,Years since quit smoking completely,Continuous,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2003_p::SMKCGSTP, cchs2005_p::SMKEGSTP, cchs2007_2008_p::SMKGSTP, cchs2009_2010_p::SMKGSTP, cchs2010_p::SMKGSTP, cchs2011_2012_p::SMKGSTP, cchs2012_p::SMKGSTP, cchs2013_2014_p::SMKGSTP, cchs2003_m::SMKCDSTP, cchs2005_m::SMKEDSTP, cchs2007_2008_m::SMKDSTP, cchs2009_2010_m::SMKDSTP, cchs2009_m::SMKDSTP, cchs2010_m::SMKDSTP, cchs2011_2012_m::SMKDSTP, cchs2012_m::SMKDSTP, cchs2013_2014_m::SMKDSTP, cchs2014_m::SMKDSTP, cchs2015_2016_m::SMKDVSTP, cchs2017_2018_m::SMKDVSTP, cchs2019_2020_m::SMKDVSTP, cchs2021_m::SMKDVSTP, cchs2022_m::SMKDVSTP, cchs2023_m::SMKDVSTP, [SMKDGSTP]",Smoking,Health behaviour,years,"{sub_subject:cessation} Universe: former smokers. PUMF 2007-2014: pass-through continuous; PUMF 2015+: midpoint from SMKDGSTP; Master: pass-through continuous. Not available 2001, 2003-2005 PUMF. 2019-2020 PUMF confirmed via Gemini Gem review (2026-03-28).","Unified continuous years since quit. PUMF pre-2015 continuous, PUMF 2015+ midpoint imputed, Master continuous pass-through.",3.0.0-alpha,2026-01-05,Split from SMKDSTP 2026-01-05. Follows 02-initiation _cont pattern.,,,active, SMKDSTY,Smoking type,Type of smoker derived (6-category),Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",Smoking,Health behaviour,N/A,{sub_subject:status} Raw pass-through of StatCan derived variable. Full coverage 2001-2023 PUMF and Master. CAUTION: Category 5 meaning changed in 2015. Use SMKDSTY_cat3 or SMKDSTY_cat5 for comparable cross-cycle analyses.,"2015 onwards for smoke status still has 6 categories, but removed 'always occasional' (Never daily current occasional smoker) and added 'experimental' (at least 1 cig, non-smoker now)",3.0.0-alpha,2026-01-04,"v3.0.0: NEW variable. Raw pass-through of StatCan derived smoking status. Required for pack-years calculation. CAUTION: Category 5 meaning changed in 2015 (former occasional -> experimental smoker). For comparable cross-cycle analyses, use SMKDSTY_cat3 or SMKDSTY_cat5 instead.",,,active, @@ -368,16 +368,16 @@ SMKDVSTP,Yrs quit smoking,Years since quit smoking completely (Master continuous SMKG01C_2005plus,Age 1st cig (2005+ cat),"Age smoked first cigarette (2005+, 11-category)",Categorical,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, cchs2005_m::SMKE_01C, cchs2007_2008_m::SMK_01C, cchs2009_2010_m::SMK_01C, cchs2009_m::SMK_01C, cchs2010_m::SMK_01C, cchs2011_2012_m::SMK_01C, cchs2012_m::SMK_01C, cchs2013_2014_m::SMK_01C, cchs2014_m::SMK_01C, cchs2015_2016_m::SMK_035, cchs2017_2018_m::SMK_035, cchs2019_2020_m::SMK_035, cchs2021_m::SMK_035, cchs2022_m::CSS_10, cchs2023_m::CSS_10, [SMKG01C]",Smoking,Health behaviour,years,Universe: ever smoked 100+ cigarettes. 2015+ grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Added from variable_details_draft.csv,,,active,Deduped cchs2022_p/cchs2023_p in databaseStart and added matching CSS_10 PUMF tokens. SMKG01C_cont,Age 1st cig,Age smoked first whole cigarette,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKAG01C, cchs2003_p::SMKCG01C, cchs2005_p::SMKEG01C, cchs2015_2016_p::SMKG035, cchs2017_2018_p::SMKG035, cchs2019_2020_p::SMKG035, cchs2022_p::CSS_10, cchs2023_p::CSS_10, cchs2001_m::SMKA_01C, cchs2003_m::SMKC_01C, cchs2005_m::SMKE_01C, cchs2007_2008_m::SMK_01C, cchs2009_2010_m::SMK_01C, cchs2009_m::SMK_01C, cchs2010_m::SMK_01C, cchs2011_2012_m::SMK_01C, cchs2012_m::SMK_01C, cchs2013_2014_m::SMK_01C, cchs2014_m::SMK_01C, cchs2015_2016_m::SMK_035, cchs2017_2018_m::SMK_035, cchs2019_2020_m::SMK_035, cchs2021_m::SMK_035, cchs2022_m::CSS_10, cchs2023_m::CSS_10, [SMKG01C]",Smoking,Health behaviour,years,Universe: ever smoked 100+ cigarettes. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Extended PUMF 2022/2023 coverage via CSS mappings. SMKG01C_pre2005,Age 1st cig (pre-2005 cat),"Age smoked first cigarette (pre-2005, 10-category)",Categorical,"cchs2001_p, cchs2003_p, cchs2001_m, cchs2003_m","cchs2001_p::SMKAG01C, cchs2003_p::SMKCG01C, cchs2001_m::SMKA_01C, cchs2003_m::SMKC_01C",Smoking,Health behaviour,years,Universe: ever smoked 100+ cigarettes. Pre-2015 grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, -SMKG040,Age daily smoking,Age started smoking daily - ever-daily (categorical),Categorical,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2015_2016_m::SMK_040, cchs2017_2018_m::SMK_040, cchs2019_2020_m::SMK_040, cchs2021_m::SMK_040, cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMKG040]",Smoking,Health behaviour,years,Universe: ever-daily smokers. Categorical grouping of age started daily smoking. 2015+ only. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Added from variable_details_draft.csv,,,active,Dropped cchs2022_p/cchs2023_p (raw SMKG040 not available; 2022+ uses SPU_15 which is Master-only). -SMKG040_cont,Age daily (ever),Age started smoking cigarettes daily (all ever-daily smokers),Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::[SMKG203_pre2005, SMKG207_pre2005], cchs2003_p::[SMKG203_pre2005, SMKG207_pre2005], cchs2005_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2007_2008_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2009_2010_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2010_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2011_2012_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2012_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2013_2014_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2014_p::[SMKG203_2005plus, SMKG207_2005plus], cchs2001_m::[SMK_203, SMK_207], cchs2003_m::[SMK_203, SMK_207], cchs2005_m::[SMK_203, SMK_207], cchs2007_2008_m::[SMK_203, SMK_207], cchs2009_2010_m::[SMK_203, SMK_207], cchs2009_m::[SMK_203, SMK_207], cchs2010_m::[SMK_203, SMK_207], cchs2011_2012_m::[SMK_203, SMK_207], cchs2012_m::[SMK_203, SMK_207], cchs2013_2014_m::[SMK_203, SMK_207], cchs2014_m::[SMK_203, SMK_207], cchs2015_2016_m::SMK_040, cchs2017_2018_m::SMK_040, cchs2019_2020_m::SMK_040, cchs2021_m::SMK_040, cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMKG040]",Smoking,Health behaviour,years,Universe: all ever-daily smokers. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Dropped cchs2022_p/cchs2023_p from PUMF 2015+ block (SMKG040 not available in 2022+ PUMF; 2022+ uses Master SPU_15). +SMKG040,Age daily smoking,Age started smoking daily - ever-daily (categorical),Categorical,"cchs2015_2016_p, cchs2017_2018_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2015_2016_m::SMK_040, cchs2017_2018_m::SMK_040, cchs2019_2020_m::SMK_040, cchs2021_m::SMK_040, cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMKG040]",Smoking,Health behaviour,years,Universe: ever-daily smokers. Categorical grouping of age started daily smoking. 2015+ only. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Added from variable_details_draft.csv,,,active,Dropped cchs2022_p/cchs2023_p (raw SMKG040 not available; 2022+ uses SPU_15 which is Master-only). +SMKG040_cont,Age daily (ever),Age started smoking daily - ever-daily (derived),Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::[SMKG203_cont, SMKG207_cont], cchs2003_p::[SMKG203_cont, SMKG207_cont], cchs2005_p::[SMKG203_cont, SMKG207_cont], cchs2007_2008_p::[SMKG203_cont, SMKG207_cont], cchs2009_2010_p::[SMKG203_cont, SMKG207_cont], cchs2010_p::[SMKG203_cont, SMKG207_cont], cchs2011_2012_p::[SMKG203_cont, SMKG207_cont], cchs2012_p::[SMKG203_cont, SMKG207_cont], cchs2013_2014_p::[SMKG203_cont, SMKG207_cont], cchs2014_p::[SMKG203_cont, SMKG207_cont], cchs2001_m::[SMK_203, SMK_207], cchs2003_m::[SMK_203, SMK_207], cchs2005_m::[SMK_203, SMK_207], cchs2007_2008_m::[SMK_203, SMK_207], cchs2009_2010_m::[SMK_203, SMK_207], cchs2009_m::[SMK_203, SMK_207], cchs2010_m::[SMK_203, SMK_207], cchs2011_2012_m::[SMK_203, SMK_207], cchs2012_m::[SMK_203, SMK_207], cchs2013_2014_m::[SMK_203, SMK_207], cchs2014_m::[SMK_203, SMK_207], cchs2015_2016_m::SMK_040, cchs2017_2018_m::SMK_040, cchs2019_2020_m::SMK_040, cchs2021_m::SMK_040, cchs2022_m::SPU_15, cchs2023_m::SPU_15, [SMKG040]",Smoking,Health behaviour,years,Universe: all ever-daily smokers. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Dropped cchs2022_p/cchs2023_p from PUMF 2015+ block (SMKG040 not available in 2022+ PUMF; 2022+ uses Master SPU_15). SMKG06C,Yrs quit occ,Years since stopped smoking - never daily occasional (PUMF categorical),Categorical,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2003_p::SMKCG06C, cchs2005_p::SMKEG06C, cchs2003_m::SMKC_06C, cchs2005_m::SMKE_06C, cchs2007_2008_m::SMK_06C, cchs2009_2010_m::SMK_06C, cchs2009_m::SMK_06C, cchs2010_m::SMK_06C, cchs2011_2012_m::SMK_06C, cchs2012_m::SMK_06C, cchs2013_2014_m::SMK_06C, cchs2014_m::SMK_06C, [SMKG06C]",Smoking,Health behaviour,years,{sub_subject:cessation} Universe: former occasional (never daily). PUMF categorical.,,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, SMKG09C,Yrs quit daily,Years since stopped smoking daily - former daily (PUMF categorical),Categorical,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2003_p::SMKCG09C, cchs2005_p::SMKEG09C, cchs2015_2016_p::SMKG090, cchs2017_2018_p::SMKG090, cchs2019_2020_p::SMKG090, cchs2003_m::SMKC_09C, cchs2005_m::SMKE_09C, cchs2007_2008_m::SMK_09C, cchs2009_2010_m::SMK_09C, cchs2009_m::SMK_09C, cchs2010_m::SMK_09C, cchs2011_2012_m::SMK_09C, cchs2012_m::SMK_09C, cchs2013_2014_m::SMK_09C, cchs2014_m::SMK_09C, cchs2015_2016_m::SMK_090, cchs2017_2018_m::SMK_090, cchs2019_2020_m::SMK_090, cchs2021_m::SMK_090, [SMKG09C]",Smoking,Health behaviour,years,{sub_subject:cessation} Universe: former daily smokers. PUMF categorical.,,3.0.0-alpha,2026-04-24,Added from variable_details_draft.csv,,,active,Added cchs2019_2020_p PUMF coverage (data exists in cchs2019_2020_m equivalent). -SMKG09C_cont,Yrs quit daily,Years since stopped smoking daily - former daily (PUMF continuous derived),Continuous,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2003_p::SMKCG09C, cchs2005_p::SMKEG09C, cchs2015_2016_p::SMKG090, cchs2017_2018_p::SMKG090, cchs2019_2020_p::SMKG090, cchs2003_m::SMKC_09C, cchs2005_m::SMKE_09C, cchs2007_2008_m::SMK_09C, cchs2009_2010_m::SMK_09C, cchs2009_m::SMK_09C, cchs2010_m::SMK_09C, cchs2011_2012_m::SMK_09C, cchs2012_m::SMK_09C, cchs2013_2014_m::SMK_09C, cchs2014_m::SMK_09C, cchs2015_2016_m::SMK_090, cchs2017_2018_m::SMK_090, cchs2019_2020_m::SMK_090, cchs2021_m::SMK_090, [SMKG09C]",Smoking,Health behaviour,years,{sub_subject:cessation} Universe: former daily smokers. PUMF continuous derived. {recommended:secondary},,3.0.0-alpha,2026-04-24,Added from variable_details_draft.csv,,,active,Added cchs2019_2020_p PUMF coverage (data exists in cchs2019_2020_m equivalent). -SMKG203_2005plus,Age daily curr (2005+ cat),"Age started smoking daily - current daily (2005+, 11-category)",Categorical,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2005_p::SMKEG203, cchs2005_m::SMKE_203, cchs2007_2008_m::SMK_203, cchs2009_2010_m::SMK_203, cchs2009_m::SMK_203, cchs2010_m::SMK_203, cchs2011_2012_m::SMK_203, cchs2012_m::SMK_203, cchs2013_2014_m::SMK_203, cchs2014_m::SMK_203, [SMKG203]",Smoking,Health behaviour,years,Universe: current daily smokers. 2015+ grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, -SMKG203_cont,Age daily (curr),Age started smoking cigarettes daily (current daily smokers),Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2001_p::SMKAG203, cchs2003_p::SMKCG203, cchs2005_p::SMKEG203, cchs2015_2016_p::[SMK_005, SMKG040], cchs2017_2018_p::[SMK_005, SMKG040], cchs2019_2020_p::[SMK_005, SMKG040], cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, cchs2007_2008_m::SMK_203, cchs2009_2010_m::SMK_203, cchs2011_2012_m::SMK_203, cchs2013_2014_m::SMK_203, cchs2015_2016_m::[SMK_005, SMK_040], cchs2017_2018_m::[SMK_005, SMK_040], cchs2019_2020_m::[SMK_005, SMK_040], cchs2021_m::[SMK_005, SMK_040], cchs2022_m::[SMK_005, SMK_040], cchs2023_m::[SMK_005, SMK_040], [SMKG203]",Smoking,Health behaviour,years,Universe: current daily smokers. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {recommended:secondary} {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Narrowed Master Func:: block: dropped cchs2022_m/cchs2023_m (SMK_005 cchsflow chain doesn't extend to those cycles; would require deprecating-to-extending). -SMKG203_pre2005,Age daily curr (pre-2005 cat),"Age started smoking daily - current daily (pre-2005, 10-category)",Categorical,"cchs2001_p, cchs2003_p, cchs2001_m, cchs2003_m","cchs2001_p::SMKAG203, cchs2003_p::SMKCG203, cchs2001_m::SMKA_203, cchs2003_m::SMKC_203",Smoking,Health behaviour,years,Universe: current daily smokers. Pre-2015 grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, +SMKG09C_cont,Yrs quit (fmr daily),Years since stopped smoking daily - former daily (PUMF continuous derived),Continuous,"cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2003_p::SMKCG09C, cchs2005_p::SMKEG09C, cchs2015_2016_p::SMKG090, cchs2017_2018_p::SMKG090, cchs2019_2020_p::SMKG090, cchs2003_m::SMKC_09C, cchs2005_m::SMKE_09C, cchs2007_2008_m::SMK_09C, cchs2009_2010_m::SMK_09C, cchs2009_m::SMK_09C, cchs2010_m::SMK_09C, cchs2011_2012_m::SMK_09C, cchs2012_m::SMK_09C, cchs2013_2014_m::SMK_09C, cchs2014_m::SMK_09C, cchs2015_2016_m::SMK_090, cchs2017_2018_m::SMK_090, cchs2019_2020_m::SMK_090, cchs2021_m::SMK_090, [SMKG09C]",Smoking,Health behaviour,years,{sub_subject:cessation} Universe: former daily smokers. PUMF continuous derived. {recommended:secondary},,3.0.0-alpha,2026-04-24,Added from variable_details_draft.csv,,,active,Added cchs2019_2020_p PUMF coverage (data exists in cchs2019_2020_m equivalent). +SMKG203_2005plus,Age 1st cig (daily),"Age started to smoke daily - daily smoker (G)",Categorical,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2005_p::SMKEG203, cchs2005_m::SMKE_203, cchs2007_2008_m::SMK_203, cchs2009_2010_m::SMK_203, cchs2009_m::SMK_203, cchs2010_m::SMK_203, cchs2011_2012_m::SMK_203, cchs2012_m::SMK_203, cchs2013_2014_m::SMK_203, cchs2014_m::SMK_203, [SMKG203]",Smoking,Health behaviour,years,Universe: current daily smokers. 2015+ grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, +SMKG203_cont,Age daily (ever),Age started smoking daily grouped - current daily,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2001_p::SMKAG203, cchs2003_p::SMKCG203, cchs2005_p::SMKEG203, cchs2015_2016_p::[SMK_005, SMKG040], cchs2017_2018_p::[SMK_005, SMKG040], cchs2019_2020_p::[SMK_005, SMKG040], cchs2001_m::SMKA_203, cchs2003_m::SMKC_203, cchs2005_m::SMKE_203, cchs2007_2008_m::SMK_203, cchs2009_2010_m::SMK_203, cchs2011_2012_m::SMK_203, cchs2013_2014_m::SMK_203, cchs2015_2016_m::[SMK_005, SMK_040], cchs2017_2018_m::[SMK_005, SMK_040], cchs2019_2020_m::[SMK_005, SMK_040], cchs2021_m::[SMK_005, SMK_040], cchs2022_m::[SMK_005, SMK_040], cchs2023_m::[SMK_005, SMK_040], [SMKG203]",Smoking,Health behaviour,years,Universe: current daily smokers. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {recommended:secondary} {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Narrowed Master Func:: block: dropped cchs2022_m/cchs2023_m (SMK_005 cchsflow chain doesn't extend to those cycles; would require deprecating-to-extending). +SMKG203_pre2005,Age 1st cig (daily),"Age started smoking daily - current daily (pre-2005, 10-category)",Categorical,"cchs2001_p, cchs2003_p, cchs2001_m, cchs2003_m","cchs2001_p::SMKAG203, cchs2003_p::SMKCG203, cchs2001_m::SMKA_203, cchs2003_m::SMKC_203",Smoking,Health behaviour,years,Universe: current daily smokers. Pre-2015 grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, SMKG207_2005plus,Age daily fmr (2005+ cat),"Age started smoking daily - former daily (2005+, 11-category)",Categorical,"cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2005_p::SMKEG207, cchs2005_m::SMKE_207, cchs2007_2008_m::SMK_207, cchs2009_2010_m::SMK_207, cchs2009_m::SMK_207, cchs2010_m::SMK_207, cchs2011_2012_m::SMK_207, cchs2012_m::SMK_207, cchs2013_2014_m::SMK_207, cchs2014_m::SMK_207, [SMKG207]",Smoking,Health behaviour,years,Universe: former daily smokers. 2015+ grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, -SMKG207_cont,Age daily (fmr),Age started smoking cigarettes daily (former daily smokers),Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2001_p::SMKAG207, cchs2003_p::SMKCG207, cchs2005_p::SMKEG207, cchs2015_2016_p::[SMK_005, SMK_030, SMKG040], cchs2017_2018_p::[SMK_005, SMK_030, SMKG040], cchs2019_2020_p::[SMK_005, SMK_030, SMKG040], cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, cchs2007_2008_m::SMK_207, cchs2009_2010_m::SMK_207, cchs2011_2012_m::SMK_207, cchs2013_2014_m::SMK_207, cchs2015_2016_m::[SMK_005, SMK_030, SMK_040], cchs2017_2018_m::[SMK_005, SMK_030, SMK_040], cchs2019_2020_m::[SMK_005, SMK_030, SMK_040], cchs2021_m::[SMK_005, SMK_030, SMK_040], cchs2022_m::[SMK_005, SMK_030, SMK_040], cchs2023_m::[SMK_005, SMK_030, SMK_040], [SMKG207]",Smoking,Health behaviour,years,Universe: former daily smokers. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {recommended:secondary} {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Narrowed Master Func:: block: dropped cchs2022_m/cchs2023_m (SMK_005 cchsflow chain doesn't extend to those cycles; would require deprecating-to-extending). +SMKG207_cont,Age daily (ever),Age started smoking daily grouped - former daily,Continuous,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m","cchs2001_p::SMKAG207, cchs2003_p::SMKCG207, cchs2005_p::SMKEG207, cchs2015_2016_p::[SMK_030, SMKG040_cont], cchs2017_2018_p::[SMK_030, SMKG040_cont], cchs2019_2020_p::[SMK_030, SMKG040_cont], cchs2001_m::SMKA_207, cchs2003_m::SMKC_207, cchs2005_m::SMKE_207, cchs2007_2008_m::SMK_207, cchs2009_2010_m::SMK_207, cchs2011_2012_m::SMK_207, cchs2013_2014_m::SMK_207, cchs2015_2016_m::[SMK_005, SMK_030, SMK_040], cchs2017_2018_m::[SMK_005, SMK_030, SMK_040], cchs2019_2020_m::[SMK_005, SMK_030, SMK_040], cchs2021_m::[SMK_005, SMK_030, SMK_040], cchs2022_m::[SMK_005, SMK_030, SMK_040], cchs2023_m::[SMK_005, SMK_030, SMK_040], [SMKG207]",Smoking,Health behaviour,years,Universe: former daily smokers. PUMF: midpoint imputation from grouped categories. Master: direct pass-through of continuous values. {recommended:secondary} {sub_subject:initiation},,3.0.0-alpha,2026-04-24,Labels updated 2026-01-04. Master coverage added 2026-01-05 for cross-validation and replication.,,,active,Narrowed Master Func:: block: dropped cchs2022_m/cchs2023_m (SMK_005 cchsflow chain doesn't extend to those cycles; would require deprecating-to-extending). SMKG207_pre2005,Age daily fmr (pre-2005 cat),"Age started smoking daily - former daily (pre-2005, 10-category)",Categorical,"cchs2001_p, cchs2003_p, cchs2001_m, cchs2003_m","cchs2001_p::SMKAG207, cchs2003_p::SMKCG207, cchs2001_m::SMKA_207, cchs2003_m::SMKC_207",Smoking,Health behaviour,years,Universe: former daily smokers. Pre-2015 grouped categories. {sub_subject:initiation},,3.0.0-alpha,2026-01-04,Added from variable_details_draft.csv,,,active, smoke_simple,Simple smoking status,"Simplified smoking status (current, former, never)",Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",Smoking,Health behaviour,N/A,{sub_subject:status} Not supported: cchs2022_p/cchs2022_m/cchs2023_p (cascade from time_quit_smoking feeder skip).,,2.2.0,2026-04-24,Dropped cchs2022_p/cchs2022_m/cchs2023_p (cascade from time_quit_smoking narrowing).,,,active, smoked_100_lifetime,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),Categorical,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],Smoking,Health behaviour,N/A,"{recommended:primary} {sub_subject:initiation} Universe: respondents who have smoked at least one whole cigarette. Pass-through of SMK_01A (1=Yes, 2=No) under unified variable name. PUMF: 2001-2021. Master: 2001-2023.",Unified categorical indicator of ever having smoked 100+ cigarettes. Self-documenting wrapper for SMK_01A.,3.0.0-alpha,2026-02-23,,,,active, From b7723dd59e2ce26b2a902651ebf111daefe95dbb Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Thu, 11 Jun 2026 06:01:49 -0400 Subject: [PATCH 3/5] Rewrite ADL and alcohol functions onto canonical 3-step architecture Fixes runtime failures in assess_adl, score_adl, score_adl_6, calculate_binge_drinking, calculate_drinking_risk_short and calculate_drinking_risk_long caused by the never-merged missing-data-helpers.R dependency (silent tryCatch/source masked it). Removes the abandoned splice idiom and library()/source() headers. Validation bounds now come from variable_details.csv via clean_variables(): adds categorical valid sets from typeEnd cat recEnd codes, vectorized else logic, CCHS label-string coercion to tagged NAs, scalar recycling with explicit length validation, and a once-per-session database-config warning. Tests: test-adl 98 passing, test-alcohol 51 passing (previously 24 and 12 errors). Full suite at pre-existing baseline. Fixes #132. Relates to #184, #185. --- R/adl.R | 630 ++++++++-------------- R/alcohol.R | 759 ++++++++++----------------- R/clean-variables.R | 222 ++++++-- R/missing-pattern-cache.R | 26 +- man/assess_adl.Rd | 136 ++--- man/calculate_binge_drinking.Rd | 144 +++-- man/calculate_drinking_risk_long.Rd | 129 +++-- man/calculate_drinking_risk_short.Rd | 132 +++-- man/score_adl.Rd | 120 ++--- man/score_adl_6.Rd | 117 ++--- tests/testthat/test-adl.R | 168 +++--- tests/testthat/test-alcohol.R | 93 ++-- 12 files changed, 1161 insertions(+), 1515 deletions(-) diff --git a/R/adl.R b/R/adl.R index 2f005b98..6bbd6bbd 100644 --- a/R/adl.R +++ b/R/adl.R @@ -1,460 +1,294 @@ # ============================================================================== -# ADL (Activities of Daily Living) Functions +# ADL (Activities of Daily Living) derived variables # ============================================================================== +# +# Canonical v3 3-step architecture: +# Step 1 - clean_variables() with output_format = "tagged_na" (metadata-driven +# missing-code conversion and out-of-range validation) +# Step 2 - dplyr::case_when() with any_missing() as the first arm +# Step 3 - clean_variables() on the derived variable with the user's format +# +# Worksheet derived variables: ADL_der, ADL_score_5, ADL_score_6 +# Validation bounds come from variable_details.csv via clean_variables(); +# there are no hardcoded missing codes or bounds in this file. -# REQUIRED DEPENDENCIES: -library(haven) # for haven::tagged_na() and haven::is_tagged_na() -library(dplyr) # for dplyr::case_when() and dplyr::if_else() - -# Source required helper functions (conditional loading for package context) -tryCatch( - { - source("R/missing-data-helpers.R", local = FALSE) - source("R/utility-functions.R", local = FALSE) - }, - error = function(e) { - # Functions will be loaded via package imports during package build - } -) - -# For testing, run: -# library(haven); library(dplyr); library(testthat) -# source('R/adl.R') -# test_file('tests/testthat/test-assess-adl.R') - -# ============================================================================== -# 1. CONSTANTS AND CONFIGURATION -# ============================================================================== - -# ADL validation bounds for standalone function use -# NOTE: These constants ensure ADL functions work independently ("cut and paste") -# while rec_with_table() uses variable_details.csv for CSV-driven validation. -# IMPORTANT: Keep synchronized with variable_details.csv ground truth values -ADL_VALIDATION_BOUNDS <- list( - response = list(min = 1, max = 2) # 1 = needs help, 2 = does not need help -) - -# ============================================================================== -# 2. SPECIALIZED HELPER FUNCTIONS -# ============================================================================== - -#' Core ADL binary assessment (internal helper) -#' -#' Vector-aware ADL assessment without validation - used as building block -#' @param adl_01,adl_02,adl_03,adl_04,adl_05 Cleaned ADL variables (already validated) -#' @return Binary ADL indicator with proper tagged NA handling -#' @note Internal v3.0.0, last updated: 2025-07-04, status: active - Vector aware -#' @noRd -calculate_adl_binary_core <- function(adl_01, adl_02, adl_03, adl_04, adl_05) { - # Use case_when for element-wise processing with tagged NA handling - dplyr::case_when( - # !!! (splice operator) expands generate_tagged_na_conditions() output for each variable - !!!generate_tagged_na_conditions(adl_01, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_02, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_03, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_04, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_05, categorical_labels = FALSE), - - # Any help needed (any value = 1) - (adl_01 == 1 | adl_02 == 1 | adl_03 == 1 | adl_04 == 1 | adl_05 == 1) ~ 1L, - - # No help needed (all values = 2) - .default = 2L - ) -} - -#' Core ADL score calculation (internal helper) -#' -#' Vector-aware ADL score calculation without validation - used as building block -#' @param adl_01,adl_02,adl_03,adl_04,adl_05 Cleaned ADL variables (already validated) -#' @return ADL score (0-5) with proper tagged NA handling -#' @note Internal v3.0.0, last updated: 2025-07-04, status: active - Vector aware -#' @noRd -calculate_adl_score_core <- function(adl_01, adl_02, adl_03, adl_04, adl_05) { - # Use case_when for element-wise processing with tagged NA handling - dplyr::case_when( - # !!! (splice operator) expands generate_tagged_na_conditions() output for each variable - !!!generate_tagged_na_conditions(adl_01, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_02, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_03, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_04, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_05, categorical_labels = FALSE), - - # Calculate help needed count (sum of 1s) - .default = as.numeric( - (adl_01 == 1) + (adl_02 == 1) + (adl_03 == 1) + (adl_04 == 1) + (adl_05 == 1) - ) - ) -} - -#' Core 6-item ADL score calculation (internal helper) -#' -#' Vector-aware 6-item ADL score calculation without validation - used as building block -#' @param adl_01,adl_02,adl_03,adl_04,adl_05,adl_06 Cleaned ADL variables (already validated) -#' @return ADL score (0-6) with proper tagged NA handling -#' @note Internal v3.0.0, last updated: 2025-07-04, status: active - Vector aware -#' @noRd -calculate_adl_score_6_core <- function(adl_01, adl_02, adl_03, adl_04, adl_05, adl_06) { - # Use case_when for element-wise processing with tagged NA handling - dplyr::case_when( - # !!! (splice operator) expands generate_tagged_na_conditions() output for each variable - !!!generate_tagged_na_conditions(adl_01, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_02, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_03, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_04, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_05, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(adl_06, categorical_labels = FALSE), - - # Calculate help needed count (sum of 1s) - .default = as.numeric( - (adl_01 == 1) + (adl_02 == 1) + (adl_03 == 1) + - (adl_04 == 1) + (adl_05 == 1) + (adl_06 == 1) - ) - ) -} - -# ============================================================================== -# 3. PUBLIC API FUNCTIONS -# ============================================================================== - -#' Enhanced Activities of Daily Living (ADL) help indicator +#' Activities of Daily Living (ADL) help indicator #' #' @description -#' **Purpose**: Create binary indicator for ADL help requirements using variables consistent across CCHS cycles -#' **Method**: Examines 5 core ADL tasks available in all cycles (2001-2018) -#' **Clinical Context**: Functional limitation assessment for population health research -#' -#' @param ADL_01 Help needed preparing meals (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param ADL_02 Help needed getting to appointments/errands (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param ADL_03 Help needed doing housework (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param ADL_04 Help needed doing personal care (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param ADL_05 Help needed moving inside house (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param min_ADL_01,max_ADL_01,min_ADL_02,max_ADL_02,min_ADL_03,max_ADL_03,min_ADL_04,max_ADL_04,min_ADL_05,max_ADL_05 Validation parameters (defaults from variable_details.csv) -#' @param validate_params Auto-detect validation mode (default NULL for auto-detection) -#' @param log_level Logging level: "silent" (default), "warning", "verbose" -#' -#' @return -#' **Data Type**: Numeric binary indicator -#' **Missing Data Handling**: -#' - Returns `haven::tagged_na("a")` for not applicable cases -#' - Returns `haven::tagged_na("b")` for missing/invalid responses -#' **Values**: 1 = needs help with ≥1 task, 2 = no help needed with any task +#' Creates a binary indicator for needing help with activities of daily +#' living, using the 5 ADL tasks asked consistently across CCHS cycles. #' #' @details -#' **Transformation Warnings**: -#' ⚠️ **CAUTION - Temporal Changes**: Original CCHS derived variable ADLF6R uses -#' different ADL components across cycles. This function uses consistent 5-item -#' subset for cross-cycle comparability. -#' -#' ⚠️ **CAUTION - Population Restrictions**: ADL questions typically restricted -#' to respondents with activity limitations. Not applicable responses preserved. -#' -#' **Calculation Details**: -#' - Uses ADL_01 through ADL_05 (consistent across all CCHS cycles) -#' - Any "needs help" (=1) response results in overall score of 1 -#' - All "no help needed" (=2) responses result in overall score of 2 -#' - Missing Data: Comprehensive preprocessing of CCHS codes (6,7,8,9) -#' - Priority: Not applicable > Missing > Valid responses +#' The five core tasks (meal preparation, getting to appointments/errands, +#' housework, personal care, moving inside the house) are available in all +#' CCHS cycles from 2001 onward, making this indicator suitable for +#' cross-cycle analyses. The original CCHS derived variable ADLF6R uses +#' different components across cycles; this function deliberately uses the +#' consistent 5-item subset. +#' +#' ADL questions are typically restricted to respondents with activity +#' limitations; not-applicable responses are preserved as +#' \code{haven::tagged_na("a")}. +#' +#' Missing-data handling follows the v3 3-step architecture: input codes +#' (6, 7, 8, 9) are converted using variable_details.csv metadata, with +#' priority not applicable > not stated when inputs mix missing types. +#' Out-of-range inputs receive the worksheet's else rule +#' (\code{haven::tagged_na("b")}). +#' +#' @param ADL_01 Help needed preparing meals (1 = yes, 2 = no). Accepts raw +#' CCHS codes, tagged NAs, or labelled strings. +#' @param ADL_02 Help needed getting to appointments/errands (1 = yes, 2 = no). +#' @param ADL_03 Help needed doing housework (1 = yes, 2 = no). +#' @param ADL_04 Help needed doing personal care (1 = yes, 2 = no). +#' @param ADL_05 Help needed moving inside the house (1 = yes, 2 = no). +#' @param output_format Output missing data format: "tagged_na" (default) +#' or "original". +#' +#' @return Numeric vector: 1 = needs help with at least one task, +#' 2 = no help needed with any task. Missing data: +#' \code{haven::tagged_na("a")} (not applicable), +#' \code{haven::tagged_na("b")} (not stated/invalid). #' #' @examples -#' # Standard cchsflow workflow (primary usage) -#' library(cchsflow) +#' # Scalar +#' assess_adl(1, 2, 2, 2, 2) # 1 (needs help with meals) +#' assess_adl(2, 2, 2, 2, 2) # 2 (no help needed) +#' +#' # Vector with CCHS missing codes +#' assess_adl( +#' c(1, 2, 6, 7), +#' c(2, 2, 2, 2), c(2, 2, 2, 2), c(2, 2, 2, 2), c(2, 2, 2, 2) +#' ) # 1, 2, tagged_na("a"), tagged_na("b") +#' +#' # Dataframe +#' library(dplyr) +#' data.frame( +#' ADL_01 = c(1, 2), ADL_02 = c(2, 2), ADL_03 = c(2, 2), +#' ADL_04 = c(2, 2), ADL_05 = c(2, 2) +#' ) %>% +#' mutate(adl_help = assess_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05)) +#' +#' \dontrun{ +#' # Standard cchsflow workflow #' result <- rec_with_table( #' cchs2013_2014_p, -#' c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADLF6R_der") +#' c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_der") #' ) +#' } #' -#' # Scalar usage examples -#' # assess_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) -#' # (meals, appts, house, care, move) -#' assess_adl(1, 2, 2, 2, 2) # Returns: 1 (needs help with meals only) -#' assess_adl(2, 2, 2, 2, 2) # Returns: 2 (no help needed with any task) -#' assess_adl(1, 1, 1, 1, 1) # Returns: 1 (needs help with all tasks) -#' -#' # Vector processing with missing data and edge cases -#' assess_adl( -#' c(1, 2, 6, 7, 8, 9), # Mixed valid/CCHS codes -#' c(2, 2, 2, 2, 2, 2), -#' c(2, 2, 2, 2, 2, 2), -#' c(2, 2, 2, 2, 2, 2), -#' c(2, 2, 2, 2, 2, 2) -#' ) # Returns: c(1, 2, tagged_na("a"), tagged_na("b"), tagged_na("b"), tagged_na("b")) -#' -#' # Vector with string missing values -#' assess_adl( -#' c(1, 2, "Not applicable"), -#' c(2, 2, 2), -#' c(2, 2, 2), -#' c(2, 2, 2), -#' c(2, 2, 2) -#' ) # Returns: c(1, 2, tagged_na("a")) -#' -#' @seealso -#' \code{\link{score_adl}} for count-based ADL scoring -#' \code{\link{score_adl_6}} for 6-item ADL scoring +#' @seealso \code{\link{score_adl}}, \code{\link{score_adl_6}} #' #' @references #' Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. #' JAMA, 185(12), 914-919. #' -#' @note v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced with comprehensive preprocessing and modern missing data handling +#' @note v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step +#' implementation; replaces the abandoned helper-based draft. #' @export assess_adl <- function(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, - # Validation bounds: defaults from variable_details.csv for standalone use - # Use rec_with_table() for full CSV-driven validation workflow - min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, - validate_params = NULL, - log_level = "silent") { - # Clean categorical variables (handles missing variables with tagged_na("d")) - cleaned <- clean_categorical_variables( - ADL_01 = ADL_01, - ADL_02 = ADL_02, - ADL_03 = ADL_03, - ADL_04 = ADL_04, - ADL_05 = ADL_05, - valid_values = list( - ADL_01 = min_ADL_01:max_ADL_01, - ADL_02 = min_ADL_02:max_ADL_02, - ADL_03 = min_ADL_03:max_ADL_03, - ADL_04 = min_ADL_04:max_ADL_04, - ADL_05 = min_ADL_05:max_ADL_05 - ), - pattern_type = "single_digit_missing", - log_level = log_level + output_format = "tagged_na") { + inputs <- normalize_input_lengths(list( + ADL_01 = ADL_01, ADL_02 = ADL_02, ADL_03 = ADL_03, + ADL_04 = ADL_04, ADL_05 = ADL_05 + )) + if (inputs$n == 0) { + return(numeric(0)) + } + + # Step 1: metadata-driven cleaning (always tagged_na so Step 2 detects missing) + cleaned <- clean_variables(vars = inputs$vars, output_format = "tagged_na") + + # Step 2: domain logic + result <- dplyr::case_when( + any_missing( + cleaned$ADL_01, cleaned$ADL_02, cleaned$ADL_03, + cleaned$ADL_04, cleaned$ADL_05 + ) ~ + get_priority_missing( + cleaned$ADL_01, cleaned$ADL_02, cleaned$ADL_03, + cleaned$ADL_04, cleaned$ADL_05 + ), + cleaned$ADL_01 == 1 | cleaned$ADL_02 == 1 | cleaned$ADL_03 == 1 | + cleaned$ADL_04 == 1 | cleaned$ADL_05 == 1 ~ 1, + .default = 2 ) - # Calculate binary ADL indicator from clean inputs - calculate_adl_binary_core( - cleaned$ADL_01_clean, cleaned$ADL_02_clean, cleaned$ADL_03_clean, - cleaned$ADL_04_clean, cleaned$ADL_05_clean + # Step 3: validate against ADL_der metadata and apply the requested format + out <- clean_variables( + vars = list(ADL_der = result), + output_format = output_format ) + out$ADL_der } -#' Enhanced ADL help score (count of tasks requiring help) +#' Activities of Daily Living (ADL) 5-item help score #' #' @description -#' **Purpose**: Count number of ADL tasks requiring help (0-5 scale) for granular functional assessment -#' **Method**: Sums "needs help" responses across 5 consistent ADL items -#' **Clinical Context**: Graduated disability measure for research and clinical assessment -#' -#' @param ADL_01,ADL_02,ADL_03,ADL_04,ADL_05 ADL variables as in assess_adl() -#' @param min_ADL_01,max_ADL_01,min_ADL_02,max_ADL_02,min_ADL_03,max_ADL_03,min_ADL_04,max_ADL_04,min_ADL_05,max_ADL_05 Validation parameters (defaults from variable_details.csv) -#' @param validate_params Auto-detect validation mode (default NULL for auto-detection) -#' @param log_level Logging level: "silent" (default), "warning", "verbose" -#' -#' @return -#' **Data Type**: Numeric count (0-5) -#' **Missing Data Handling**: -#' - Returns `haven::tagged_na("a")` if any input is not applicable -#' - Returns `haven::tagged_na("b")` if any input is missing/invalid -#' **Values**: 0-5 representing count of tasks requiring help +#' Counts the number of ADL tasks (0-5) for which the respondent needs help, +#' using the 5 tasks asked consistently across CCHS cycles. #' #' @details -#' **Transformation Warnings**: -#' ⚠️ **CAUTION - Methodological Changes**: Count-based scoring provides more -#' granular assessment than binary indicator but requires complete data for valid interpretation. +#' Provides a graduated disability measure: 0 (independent) to +#' 5 (needs help with all tasks). Missing data in any item invalidates the +#' score, with priority not applicable > not stated. See +#' \code{\link{assess_adl}} for the task list and cross-cycle notes. +#' +#' @inheritParams assess_adl #' -#' **Calculation Details**: -#' - Counts number of ADL tasks with "needs help" response (=1) -#' - Range: 0 (independent) to 5 (maximum dependence) -#' - Missing data in ANY item invalidates entire score -#' - Preserves not applicable semantics across all items +#' @return Numeric count 0-5. Missing data: +#' \code{haven::tagged_na("a")} (not applicable), +#' \code{haven::tagged_na("b")} (not stated/invalid). #' #' @examples -#' # Standard cchsflow workflow (primary usage) -#' library(cchsflow) +#' # Scalar +#' score_adl(2, 2, 2, 2, 2) # 0 (independent) +#' score_adl(1, 2, 1, 2, 2) # 2 (help with two tasks) +#' +#' # Vector +#' score_adl(c(1, 2), c(1, 2), c(2, 2), c(1, 2), c(2, 2)) # 3, 0 +#' +#' # Dataframe +#' library(dplyr) +#' data.frame( +#' ADL_01 = c(1, 2), ADL_02 = c(1, 2), ADL_03 = c(2, 2), +#' ADL_04 = c(1, 2), ADL_05 = c(2, 2) +#' ) %>% +#' mutate(adl_score = score_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05)) +#' +#' \dontrun{ +#' # Standard cchsflow workflow #' result <- rec_with_table( #' cchs2013_2014_p, -#' c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADLSCORE_der") +#' c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_score_5") #' ) +#' } #' -#' # Scalar usage examples -#' # score_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) -#' # (meals, appts, house, care, move) -#' score_adl(2, 2, 2, 2, 2) # Returns: 0 (no help needed) -#' score_adl(1, 2, 1, 2, 2) # Returns: 2 (help with 2 tasks: meals and housework) -#' score_adl(1, 1, 1, 1, 1) # Returns: 5 (complete dependence) -#' score_adl(1, 2, 2, 2, 2) # Returns: 1 (help with 1 task: meals only) -#' -#' # Vector processing with missing data -#' score_adl( -#' c(1, 2, 6, 7), # Mixed valid/missing codes -#' c(1, 2, 2, 2), -#' c(2, 1, 2, 2), -#' c(2, 2, 2, 2), -#' c(2, 2, 2, 2) -#' ) # Returns: c(2, 1, tagged_na("a"), tagged_na("b")) -#' -#' # Vector with mixed missing types -#' score_adl( -#' c(1, 2, "Missing", haven::tagged_na("a")), -#' c(1, 2, 2, 2), -#' c(2, 2, 2, 2), -#' c(2, 2, 2, 2), -#' c(2, 2, 2, 2) -#' ) # Returns: c(2, 1, tagged_na("b"), tagged_na("a")) -#' -#' @note v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced scoring with comprehensive missing data validation +#' @seealso \code{\link{assess_adl}}, \code{\link{score_adl_6}} +#' +#' @references +#' Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. +#' JAMA, 185(12), 914-919. +#' +#' @note v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step +#' implementation; replaces the abandoned helper-based draft. #' @export score_adl <- function(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, - # Validation bounds: defaults from variable_details.csv for standalone use - # Use rec_with_table() for full CSV-driven validation workflow - min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, - validate_params = NULL, - log_level = "silent") { - # Clean categorical variables (handles missing variables with tagged_na("d")) - cleaned <- clean_categorical_variables( - ADL_01 = ADL_01, - ADL_02 = ADL_02, - ADL_03 = ADL_03, - ADL_04 = ADL_04, - ADL_05 = ADL_05, - valid_values = list( - ADL_01 = min_ADL_01:max_ADL_01, - ADL_02 = min_ADL_02:max_ADL_02, - ADL_03 = min_ADL_03:max_ADL_03, - ADL_04 = min_ADL_04:max_ADL_04, - ADL_05 = min_ADL_05:max_ADL_05 - ), - pattern_type = "single_digit_missing", - log_level = log_level + output_format = "tagged_na") { + inputs <- normalize_input_lengths(list( + ADL_01 = ADL_01, ADL_02 = ADL_02, ADL_03 = ADL_03, + ADL_04 = ADL_04, ADL_05 = ADL_05 + )) + if (inputs$n == 0) { + return(numeric(0)) + } + + # Step 1: metadata-driven cleaning + cleaned <- clean_variables(vars = inputs$vars, output_format = "tagged_na") + + # Step 2: domain logic — count of tasks needing help + result <- dplyr::case_when( + any_missing( + cleaned$ADL_01, cleaned$ADL_02, cleaned$ADL_03, + cleaned$ADL_04, cleaned$ADL_05 + ) ~ + get_priority_missing( + cleaned$ADL_01, cleaned$ADL_02, cleaned$ADL_03, + cleaned$ADL_04, cleaned$ADL_05 + ), + .default = (cleaned$ADL_01 == 1) + (cleaned$ADL_02 == 1) + + (cleaned$ADL_03 == 1) + (cleaned$ADL_04 == 1) + (cleaned$ADL_05 == 1) ) - # Calculate ADL score from clean inputs - calculate_adl_score_core( - cleaned$ADL_01_clean, cleaned$ADL_02_clean, cleaned$ADL_03_clean, - cleaned$ADL_04_clean, cleaned$ADL_05_clean + # Step 3: validate against ADL_score_5 metadata and apply requested format + out <- clean_variables( + vars = list(ADL_score_5 = result), + output_format = output_format ) + out$ADL_score_5 } -#' Enhanced 6-item ADL help score with comprehensive validation +#' Activities of Daily Living (ADL) 6-item help score #' #' @description -#' **Purpose**: Count ADL help requirements using 6-item scale including financial management -#' **Method**: Extends 5-item ADL to include financial management (available 2003+) -#' **Clinical Context**: Comprehensive functional assessment including instrumental ADL component -#' -#' @param ADL_01,ADL_02,ADL_03,ADL_04,ADL_05 Core ADL variables as in other functions -#' @param ADL_06 Help needed doing finances (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param min_ADL_01,max_ADL_01,min_ADL_02,max_ADL_02,min_ADL_03,max_ADL_03,min_ADL_04,max_ADL_04,min_ADL_05,max_ADL_05,min_ADL_06,max_ADL_06 Validation parameters (defaults from variable_details.csv) -#' @param validate_params Auto-detect validation mode (default NULL for auto-detection) -#' @param log_level Logging level: "silent" (default), "warning", "verbose" -#' -#' @return -#' **Data Type**: Numeric count (0-6) -#' **Missing Data Handling**: Same as 5-item version -#' **Values**: 0-6 representing count of tasks requiring help +#' Counts the number of ADL tasks (0-6) for which the respondent needs help, +#' extending the 5-item score with financial management. #' #' @details -#' **Transformation Warnings**: -#' ⚠️ **CAUTION - Temporal Changes**: ADL_06 (finances) available only in CCHS -#' 2003-2014 cycles. Use 5-item version for 2001 or 2015+ analyses. +#' ADL_06 (help managing finances) is available in CCHS 2003-2014 cycles +#' only; use \code{\link{score_adl}} for 2001 or 2015+ analyses. Missing +#' data handling matches the 5-item version. #' -#' ⚠️ **CAUTION - Population Restrictions**: Financial management questions may -#' have different age restrictions or applicability rules across cycles. +#' @inheritParams assess_adl +#' @param ADL_06 Help needed managing finances (1 = yes, 2 = no). Accepts raw +#' CCHS codes, tagged NAs, or labelled strings. #' -#' **Calculation Details**: -#' - Extends 5-item ADL with financial management component -#' - Range: 0 (independent) to 6 (maximum dependence) -#' - Same missing data handling as 5-item version -#' - Recommended for 2003-2014 cycle analyses +#' @return Numeric count 0-6. Missing data: +#' \code{haven::tagged_na("a")} (not applicable), +#' \code{haven::tagged_na("b")} (not stated/invalid). #' #' @examples -#' # Standard cchsflow workflow (primary usage) -#' library(cchsflow) +#' # Scalar +#' score_adl_6(2, 2, 2, 2, 2, 2) # 0 (independent) +#' score_adl_6(1, 2, 1, 2, 2, 1) # 3 (help with three tasks) +#' +#' # Vector +#' score_adl_6( +#' c(1, 2), c(1, 2), c(2, 2), c(1, 2), c(2, 2), c(1, 2) +#' ) # 4, 0 +#' +#' \dontrun{ +#' # Standard cchsflow workflow (2003-2014 cycles) #' result <- rec_with_table( #' cchs2007_2008_p, -#' c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_06", "ADLSCORE6_der") +#' c( +#' "ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_06", +#' "ADL_score_6" +#' ) #' ) +#' } #' -#' # Scalar usage examples -#' # score_adl_6(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, ADL_06) -#' # (meals, appts, house, care, move, finances) -#' score_adl_6(2, 2, 2, 2, 2, 2) # Returns: 0 (independent with all tasks) -#' score_adl_6(1, 2, 1, 2, 2, 1) # Returns: 3 (help with 3 tasks: meals, housework, finances) -#' score_adl_6(1, 1, 1, 1, 1, 1) # Returns: 6 (complete dependence) -#' score_adl_6(2, 2, 2, 2, 2, 1) # Returns: 1 (help only with finances) +#' @seealso \code{\link{assess_adl}}, \code{\link{score_adl}} #' -#' # Vector processing with missing data and edge cases -#' score_adl_6( -#' c(1, 2, 6, 96), # Mixed valid/categorical age codes -#' c(1, 2, 2, 2), -#' c(2, 1, 2, 2), -#' c(2, 2, 2, 2), -#' c(2, 2, 2, 2), -#' c(2, 2, 2, 97) # "Don't know" for finances -#' ) # Returns: c(2, 1, tagged_na("a"), tagged_na("b")) -#' -#' # Vector demonstrating financial component (ADL_06) -#' score_adl_6( -#' c(2, 2, 2), # No help with basic ADLs -#' c(2, 2, 2), -#' c(2, 2, 2), -#' c(2, 2, 2), -#' c(2, 2, 2), -#' c(1, "Refusal", 2) # Different financial help needs -#' ) # Returns: c(1, tagged_na("b"), 0) -#' -#' @note v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced 6-item scoring for comprehensive functional assessment +#' @references +#' Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. +#' JAMA, 185(12), 914-919. +#' +#' @note v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step +#' implementation; replaces the abandoned helper-based draft. #' @export score_adl_6 <- function(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, ADL_06, - # Validation bounds: defaults from variable_details.csv for standalone use - # Use rec_with_table() for full CSV-driven validation workflow - min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_06 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_06 = ADL_VALIDATION_BOUNDS$response$max, - validate_params = NULL, - log_level = "silent") { - # Clean categorical variables (handles missing variables with tagged_na("d")) - cleaned <- clean_categorical_variables( - ADL_01 = ADL_01, - ADL_02 = ADL_02, - ADL_03 = ADL_03, - ADL_04 = ADL_04, - ADL_05 = ADL_05, - ADL_06 = ADL_06, - valid_values = list( - ADL_01 = min_ADL_01:max_ADL_01, - ADL_02 = min_ADL_02:max_ADL_02, - ADL_03 = min_ADL_03:max_ADL_03, - ADL_04 = min_ADL_04:max_ADL_04, - ADL_05 = min_ADL_05:max_ADL_05, - ADL_06 = min_ADL_06:max_ADL_06 - ), - pattern_type = "single_digit_missing", - log_level = log_level + output_format = "tagged_na") { + inputs <- normalize_input_lengths(list( + ADL_01 = ADL_01, ADL_02 = ADL_02, ADL_03 = ADL_03, + ADL_04 = ADL_04, ADL_05 = ADL_05, ADL_06 = ADL_06 + )) + if (inputs$n == 0) { + return(numeric(0)) + } + + # Step 1: metadata-driven cleaning + cleaned <- clean_variables(vars = inputs$vars, output_format = "tagged_na") + + # Step 2: domain logic — count of tasks needing help + result <- dplyr::case_when( + any_missing( + cleaned$ADL_01, cleaned$ADL_02, cleaned$ADL_03, + cleaned$ADL_04, cleaned$ADL_05, cleaned$ADL_06 + ) ~ + get_priority_missing( + cleaned$ADL_01, cleaned$ADL_02, cleaned$ADL_03, + cleaned$ADL_04, cleaned$ADL_05, cleaned$ADL_06 + ), + .default = (cleaned$ADL_01 == 1) + (cleaned$ADL_02 == 1) + + (cleaned$ADL_03 == 1) + (cleaned$ADL_04 == 1) + + (cleaned$ADL_05 == 1) + (cleaned$ADL_06 == 1) ) - # Calculate 6-item ADL score from clean inputs - calculate_adl_score_6_core( - cleaned$ADL_01_clean, cleaned$ADL_02_clean, cleaned$ADL_03_clean, - cleaned$ADL_04_clean, cleaned$ADL_05_clean, cleaned$ADL_06_clean + # Step 3: validate against ADL_score_6 metadata and apply requested format + out <- clean_variables( + vars = list(ADL_score_6 = result), + output_format = output_format ) + out$ADL_score_6 } diff --git a/R/alcohol.R b/R/alcohol.R index db15988d..3b8af636 100644 --- a/R/alcohol.R +++ b/R/alcohol.R @@ -1,38 +1,27 @@ # ============================================================================== -# Alcohol Functions +# Alcohol consumption derived variables # ============================================================================== +# +# Canonical v3 3-step architecture: +# Step 1 - clean_variables() with output_format = "tagged_na" (metadata-driven +# missing-code conversion and out-of-range validation) +# Step 2 - dplyr::case_when() with any_missing() as the first arm +# Step 3 - clean_variables() on the derived variable with the user's format +# +# Worksheet derived variables: binge_drinker, ALWDVSTR_der, ALWDVLTR_der +# Input validation bounds come from variable_details.csv via clean_variables(). +# The constants below are epidemiological thresholds (domain logic), not +# data-cleaning bounds. -# REQUIRED DEPENDENCIES: -library(haven) # for haven::tagged_na() and haven::is_tagged_na() -library(dplyr) # for dplyr::case_when() and dplyr::if_else() - -# Source required helper functions (conditional loading for package context) -tryCatch( - { - source("R/missing-data-helpers.R", local = FALSE) - source("R/utility-functions.R", local = FALSE) - }, - error = function(e) { - # Functions will be loaded via package imports during package build - } -) - -# For testing, run: -# library(haven); library(dplyr); library(testthat) -# source('R/alcohol.R') -# test_file('tests/testthat/test-alcohol.R') - -# ============================================================================== -# 1. CONSTANTS AND CONFIGURATION -# ============================================================================== - -# Binge drinking thresholds by sex +# Binge drinking thresholds by sex (drinks on a single day) BINGE_THRESHOLDS <- list( - male = 5, # 5+ drinks for males - female = 4 # 4+ drinks for females + male = 5, + female = 4 ) -# Low-risk drinking guidelines (Canada) +# Canada's Low-Risk Alcohol Drinking Guidelines thresholds. +# Short-term (acute) risk exceeds the low_risk values strictly (>); +# long-term (chronic) risk reaches the high_risk values inclusively (>=). DRINKING_LIMITS <- list( weekly = list( male = list(low_risk = 15, high_risk = 20), @@ -44,520 +33,352 @@ DRINKING_LIMITS <- list( ) ) -# Alcohol validation bounds for standalone function use -# NOTE: These constants ensure alcohol functions work independently ("cut and paste") -# while rec_with_table() uses variable_details.csv for CSV-driven validation. -# IMPORTANT: Keep synchronized with variable_details.csv ground truth values -ALCOHOL_VALIDATION_BOUNDS <- list( - sex = list(min = 1, max = 2), # 1 = male, 2 = female - binary_response = list(min = 1, max = 2), # 1 = yes, 2 = no - drinks_daily = list(min = 0, max = 995), # Daily drinks count [0,995] from variable_details.csv - drinks_weekly = list(min = 0, max = 995) # Weekly drinks count [0,995] from variable_details.csv -) - # ============================================================================== -# 2. SPECIALIZED HELPER FUNCTIONS +# Internal helpers # ============================================================================== -#' Core binge drinking assessment (internal helper) -#' -#' Vector-aware binge drinking assessment without validation - used as building block -#' @param sex_clean Cleaned sex variable (already validated) -#' @param drinks_in_week_clean Cleaned drinks in past week variable (already validated) -#' @param alw_2a1_clean,alw_2a2_clean,alw_2a3_clean,alw_2a4_clean,alw_2a5_clean,alw_2a6_clean,alw_2a7_clean Cleaned daily drinks variables (already validated) -#' @return Binge drinking indicator with proper tagged NA handling -#' @note Internal v3.0.0, last updated: 2025-07-05, status: active - Vector aware +#' Drinking risk assessment shared by short- and long-term functions +#' +#' Steps 2-3 of the 3-step pattern for the two risk functions, which differ +#' only in thresholds (low_risk vs high_risk) and comparison strictness. +#' +#' @param cleaned Named list of cleaned inputs from Step 1 +#' @param risk_type "short" (acute; strict > on low_risk thresholds) or +#' "long" (chronic; inclusive >= on high_risk thresholds) +#' @param derived_var Worksheet name of the derived variable (Step 3 target) +#' @param output_format Output missing data format +#' @return Risk indicator vector in the requested format #' @noRd -assess_binge_core <- function(sex_clean, drinks_in_week_clean, alw_2a1_clean, alw_2a2_clean, alw_2a3_clean, - alw_2a4_clean, alw_2a5_clean, alw_2a6_clean, alw_2a7_clean) { - # Use case_when for element-wise processing with tagged NA handling - dplyr::case_when( - # !!! (splice operator) expands generate_tagged_na_conditions() output for each variable - !!!generate_tagged_na_conditions(sex_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(drinks_in_week_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a1_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a2_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a3_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a4_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a5_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a6_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a7_clean, categorical_labels = FALSE), - - # Non-drinkers are not applicable - drinks_in_week_clean == 2 ~ haven::tagged_na("a"), - - # Apply sex-specific binge thresholds - sex_clean == 1 & (alw_2a1_clean >= BINGE_THRESHOLDS$male | alw_2a2_clean >= BINGE_THRESHOLDS$male | - alw_2a3_clean >= BINGE_THRESHOLDS$male | alw_2a4_clean >= BINGE_THRESHOLDS$male | - alw_2a5_clean >= BINGE_THRESHOLDS$male | alw_2a6_clean >= BINGE_THRESHOLDS$male | - alw_2a7_clean >= BINGE_THRESHOLDS$male) ~ 1L, # Male binge drinker - sex_clean == 2 & (alw_2a1_clean >= BINGE_THRESHOLDS$female | alw_2a2_clean >= BINGE_THRESHOLDS$female | - alw_2a3_clean >= BINGE_THRESHOLDS$female | alw_2a4_clean >= BINGE_THRESHOLDS$female | - alw_2a5_clean >= BINGE_THRESHOLDS$female | alw_2a6_clean >= BINGE_THRESHOLDS$female | - alw_2a7_clean >= BINGE_THRESHOLDS$female) ~ 1L, # Female binge drinker - - # No binge drinking detected - .default = 2L +assess_drinking_risk <- function(cleaned, risk_type, derived_var, + output_format) { + max_daily <- pmax( + cleaned$ALW_2A1, cleaned$ALW_2A2, cleaned$ALW_2A3, cleaned$ALW_2A4, + cleaned$ALW_2A5, cleaned$ALW_2A6, cleaned$ALW_2A7 ) -} -#' Core drinking risk assessment (internal helper) -#' -#' Vector-aware drinking risk assessment without validation - used as building block -#' @param sex_clean,weekly_drinks_clean,alc_1_clean,alw_1_clean Cleaned core variables (already validated) -#' @param alw_2a1_clean,alw_2a2_clean,alw_2a3_clean,alw_2a4_clean,alw_2a5_clean,alw_2a6_clean,alw_2a7_clean Cleaned daily drinking variables (already validated) -#' @param risk_type Type of risk assessment ("short" for acute, "long" for chronic) -#' @return Risk indicator with proper tagged NA handling -#' @note Internal v3.0.0, last updated: 2025-07-05, status: active - Vector aware -#' @noRd -assess_risk_core <- function(sex_clean, weekly_drinks_clean, alc_1_clean, alw_1_clean, - alw_2a1_clean, alw_2a2_clean, alw_2a3_clean, alw_2a4_clean, - alw_2a5_clean, alw_2a6_clean, alw_2a7_clean, risk_type = "short") { - # Use case_when for element-wise processing with tagged NA handling - dplyr::case_when( - # !!! (splice operator) expands generate_tagged_na_conditions() output for each variable - !!!generate_tagged_na_conditions(sex_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(weekly_drinks_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alc_1_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_1_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a1_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a2_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a3_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a4_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a5_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a6_clean, categorical_labels = FALSE), - !!!generate_tagged_na_conditions(alw_2a7_clean, categorical_labels = FALSE), - - # Non-drinkers are not applicable - alc_1_clean == 2 | alw_1_clean == 2 ~ haven::tagged_na("a"), - - # Short-term risk assessment for males (>3 drinks/day OR >15 drinks/week) - sex_clean == 1 & risk_type == "short" & ( - alw_2a1_clean > DRINKING_LIMITS$daily$male$low_risk | alw_2a2_clean > DRINKING_LIMITS$daily$male$low_risk | - alw_2a3_clean > DRINKING_LIMITS$daily$male$low_risk | alw_2a4_clean > DRINKING_LIMITS$daily$male$low_risk | - alw_2a5_clean > DRINKING_LIMITS$daily$male$low_risk | alw_2a6_clean > DRINKING_LIMITS$daily$male$low_risk | - alw_2a7_clean > DRINKING_LIMITS$daily$male$low_risk | weekly_drinks_clean > DRINKING_LIMITS$weekly$male$low_risk - ) ~ 1L, - - # Short-term risk assessment for females (>2 drinks/day OR >10 drinks/week) - sex_clean == 2 & risk_type == "short" & ( - alw_2a1_clean > DRINKING_LIMITS$daily$female$low_risk | alw_2a2_clean > DRINKING_LIMITS$daily$female$low_risk | - alw_2a3_clean > DRINKING_LIMITS$daily$female$low_risk | alw_2a4_clean > DRINKING_LIMITS$daily$female$low_risk | - alw_2a5_clean > DRINKING_LIMITS$daily$female$low_risk | alw_2a6_clean > DRINKING_LIMITS$daily$female$low_risk | - alw_2a7_clean > DRINKING_LIMITS$daily$female$low_risk | weekly_drinks_clean > DRINKING_LIMITS$weekly$female$low_risk - ) ~ 1L, - - # Long-term risk assessment for males (≥4 drinks/day OR ≥20 drinks/week) - sex_clean == 1 & risk_type == "long" & ( - alw_2a1_clean >= DRINKING_LIMITS$daily$male$high_risk | alw_2a2_clean >= DRINKING_LIMITS$daily$male$high_risk | - alw_2a3_clean >= DRINKING_LIMITS$daily$male$high_risk | alw_2a4_clean >= DRINKING_LIMITS$daily$male$high_risk | - alw_2a5_clean >= DRINKING_LIMITS$daily$male$high_risk | alw_2a6_clean >= DRINKING_LIMITS$daily$male$high_risk | - alw_2a7_clean >= DRINKING_LIMITS$daily$male$high_risk | weekly_drinks_clean >= DRINKING_LIMITS$weekly$male$high_risk - ) ~ 1L, + if (risk_type == "short") { + exceeds_male <- max_daily > DRINKING_LIMITS$daily$male$low_risk | + cleaned$ALWDWKY > DRINKING_LIMITS$weekly$male$low_risk + exceeds_female <- max_daily > DRINKING_LIMITS$daily$female$low_risk | + cleaned$ALWDWKY > DRINKING_LIMITS$weekly$female$low_risk + } else { + exceeds_male <- max_daily >= DRINKING_LIMITS$daily$male$high_risk | + cleaned$ALWDWKY >= DRINKING_LIMITS$weekly$male$high_risk + exceeds_female <- max_daily >= DRINKING_LIMITS$daily$female$high_risk | + cleaned$ALWDWKY >= DRINKING_LIMITS$weekly$female$high_risk + } - # Long-term risk assessment for females (≥3 drinks/day OR ≥15 drinks/week) - sex_clean == 2 & risk_type == "long" & ( - alw_2a1_clean >= DRINKING_LIMITS$daily$female$high_risk | alw_2a2_clean >= DRINKING_LIMITS$daily$female$high_risk | - alw_2a3_clean >= DRINKING_LIMITS$daily$female$high_risk | alw_2a4_clean >= DRINKING_LIMITS$daily$female$high_risk | - alw_2a5_clean >= DRINKING_LIMITS$daily$female$high_risk | alw_2a6_clean >= DRINKING_LIMITS$daily$female$high_risk | - alw_2a7_clean >= DRINKING_LIMITS$daily$female$high_risk | weekly_drinks_clean >= DRINKING_LIMITS$weekly$female$high_risk - ) ~ 1L, + # Step 2: domain logic + result <- dplyr::case_when( + any_missing( + cleaned$DHH_SEX, cleaned$ALWDWKY, cleaned$ALC_1, cleaned$ALW_1, + cleaned$ALW_2A1, cleaned$ALW_2A2, cleaned$ALW_2A3, cleaned$ALW_2A4, + cleaned$ALW_2A5, cleaned$ALW_2A6, cleaned$ALW_2A7 + ) ~ + get_priority_missing( + cleaned$DHH_SEX, cleaned$ALWDWKY, cleaned$ALC_1, cleaned$ALW_1, + cleaned$ALW_2A1, cleaned$ALW_2A2, cleaned$ALW_2A3, cleaned$ALW_2A4, + cleaned$ALW_2A5, cleaned$ALW_2A6, cleaned$ALW_2A7 + ), + # Non-drinkers (past year or past week) are not applicable + cleaned$ALC_1 == 2 | cleaned$ALW_1 == 2 ~ + assign_missing("not_applicable", derived_var), + cleaned$DHH_SEX == 1 & exceeds_male ~ 1, + cleaned$DHH_SEX == 2 & exceeds_female ~ 1, + .default = 2 + ) - # No increased risk - .default = 2L + # Step 3: validate against derived-variable metadata, apply requested format + out <- clean_variables( + vars = stats::setNames(list(result), derived_var), + output_format = output_format ) + out[[derived_var]] } # ============================================================================== -# 3. PUBLIC API FUNCTIONS +# Public API # ============================================================================== -#' Identify binge drinking patterns with sex-specific thresholds +#' Binge drinking indicator with sex-specific thresholds #' #' @description -#' Identify binge drinking patterns based on sex-specific daily consumption thresholds. Examines -#' daily alcohol consumption across the week, applying sex-specific binge criteria for acute -#' alcohol risk assessment in population health research. -#' -#' @param DHH_SEX CCHS variable for sex (1=male, 2=female). Accepts raw CCHS codes or preprocessed values. -#' @param ALW_1 Had drinks in past week (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A1 Number of drinks on Sunday. Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A2 Number of drinks on Monday. Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A3 Number of drinks on Tuesday. Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A4 Number of drinks on Wednesday. Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A5 Number of drinks on Thursday. Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A6 Number of drinks on Friday. Accepts raw CCHS codes or preprocessed values. -#' @param ALW_2A7 Number of drinks on Saturday. Accepts raw CCHS codes or preprocessed values. -#' -#' @return Integer binge drinking indicator. Missing data handled as: -#' \itemize{ -#' \item \code{haven::tagged_na("a")} for not applicable cases (no drinking in past week) -#' \item \code{haven::tagged_na("b")} for missing/invalid responses -#' } -#' Values: 1 = binge drinker, 2 = non-binge drinker. +#' Identifies binge drinking from daily consumption over the past week: +#' 5 or more drinks on any single day for males, 4 or more for females. #' #' @details -#' Only applied to respondents who had alcohol in past week. Non-drinkers receive not applicable status. -#' Enhanced preprocessing may identify different patterns compared to legacy if_else2() implementation. -#' -#' Calculation criteria: Males: Binge = ≥5 drinks on any single day; Females: Binge = ≥4 drinks on any single day. -#' Comprehensive preprocessing of CCHS codes (6,7,8,9 and 996-999) is applied. Priority: Not applicable > Missing > Valid assessment. +#' Only respondents who drank in the past week (\code{ALW_1} = 1) are +#' assessed; non-drinkers receive \code{haven::tagged_na("a")} (not +#' applicable). Missing-data handling follows the v3 3-step architecture: +#' input codes (6-9 single-digit, 996-999 triple-digit) are converted using +#' variable_details.csv metadata, with priority not applicable > not stated. +#' Out-of-range inputs receive the worksheet's else rule +#' (\code{haven::tagged_na("b")}). +#' +#' @param DHH_SEX Sex (1 = male, 2 = female). Accepts raw CCHS codes, +#' tagged NAs, or labelled strings. +#' @param ALW_1 Had drinks in the past week (1 = yes, 2 = no). +#' @param ALW_2A1 Number of drinks on Sunday. +#' @param ALW_2A2 Number of drinks on Monday. +#' @param ALW_2A3 Number of drinks on Tuesday. +#' @param ALW_2A4 Number of drinks on Wednesday. +#' @param ALW_2A5 Number of drinks on Thursday. +#' @param ALW_2A6 Number of drinks on Friday. +#' @param ALW_2A7 Number of drinks on Saturday. +#' @param output_format Output missing data format: "tagged_na" (default) +#' or "original". +#' +#' @return Numeric vector: 1 = binge drinker, 2 = non-binge drinker. +#' Missing data: \code{haven::tagged_na("a")} (not applicable), +#' \code{haven::tagged_na("b")} (not stated/invalid). #' #' @examples -#' # Standard cchsflow workflow (primary usage) -#' library(cchsflow) +#' # Scalar: male with 6 drinks on Tuesday +#' calculate_binge_drinking(1, 1, 3, 1, 6, 0, 3, 2, 2) # 1 (binge) +#' +#' # Scalar: female, at most 3 drinks on any day +#' calculate_binge_drinking(2, 1, 1, 2, 2, 3, 0, 1, 2) # 2 (non-binge) +#' +#' # Vector: drinker, non-drinker +#' calculate_binge_drinking( +#' c(1, 1), c(1, 2), c(6, 0), c(0, 0), c(0, 0), c(0, 0), +#' c(0, 0), c(0, 0), c(0, 0) +#' ) # 1, tagged_na("a") +#' +#' # Dataframe +#' library(dplyr) +#' data.frame( +#' DHH_SEX = c(1, 2), ALW_1 = c(1, 1), ALW_2A1 = c(5, 2), +#' ALW_2A2 = c(0, 2), ALW_2A3 = c(0, 2), ALW_2A4 = c(0, 2), +#' ALW_2A5 = c(0, 2), ALW_2A6 = c(0, 2), ALW_2A7 = c(0, 2) +#' ) %>% +#' mutate(binge = calculate_binge_drinking( +#' DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, +#' ALW_2A5, ALW_2A6, ALW_2A7 +#' )) +#' +#' \dontrun{ +#' # Standard cchsflow workflow #' result <- rec_with_table( #' cchs2013_2014_p, #' c( #' "DHH_SEX", "ALW_1", "ALW_2A1", "ALW_2A2", "ALW_2A3", -#' "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDBINGE_der" +#' "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "binge_drinker" #' ) #' ) +#' } #' -#' # Scalar usage examples with variable labels -#' # calculate_binge_drinking(DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) -#' # (sex, drinks, sun, mon, tue, wed, thu, fri, sat) -#' calculate_binge_drinking(1, 1, 3, 1, 6, 0, 3, 8, 2) # Returns: 1L (male binge: 6 drinks Tue, 8 drinks Fri) -#' calculate_binge_drinking(2, 1, 1, 2, 2, 3, 0, 1, 2) # Returns: 2L (female non-binge: all days ≤3 drinks) -#' calculate_binge_drinking(1, 1, 4, 4, 4, 4, 4, 4, 4) # Returns: 2L (male non-binge: all days <5 drinks) -#' calculate_binge_drinking(2, 1, 0, 0, 0, 0, 4, 0, 0) # Returns: 1L (female binge: 4 drinks Thu exactly threshold) -#' calculate_binge_drinking(1, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) -#' -#' # Vector processing with missing data and edge cases -#' calculate_binge_drinking( -#' c(1, 2, 6, 7, 8, 9), # Mixed valid/CCHS codes for sex -#' c(1, 1, 1, 2, 1, 1), # Mixed drinking statuses -#' c(5, 4, 2, 0, 7, 996), # Mixed Sunday drinks with CCHS codes -#' c(0, 0, 0, 0, 8, 997), # Mixed Monday drinks -#' c(0, 0, 0, 0, 9, 998), # Tuesday -#' c(0, 0, 0, 0, 0, 999), # Wednesday -#' c(0, 0, 0, 0, 0, 0), # Thursday -#' c(0, 0, 0, 0, 0, 0), # Friday -#' c(0, 0, 0, 0, 0, 0) # Saturday -#' ) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("a"), tagged_na("b"), tagged_na("b")) -#' -#' # Vector with string missing values -#' calculate_binge_drinking( -#' c(1, 2, "Not applicable"), # Mixed sex with string NA -#' c(1, 1, 1), -#' c(6, 3, 2), c(0, 0, 0), c(0, 0, 0), c(0, 0, 0), -#' c(0, 0, 0), c(0, 0, 0), c(0, 0, 0) -#' ) # Returns: c(1L, 2L, tagged_na("b")) -#' -#' @seealso -#' \\code{\\link{calculate_drinking_risk_short}} for short-term drinking risk assessment -#' \\code{\\link{calculate_drinking_risk_long}} for long-term drinking risk assessment +#' @seealso \code{\link{calculate_drinking_risk_short}}, +#' \code{\link{calculate_drinking_risk_long}} #' #' @references -#' Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines -#' for low-risk drinking. Canadian Centre on Substance Abuse. +#' Butt, P., et al. (2011). Alcohol and health in Canada: a summary of +#' evidence and guidelines for low-risk drinking. Canadian Centre on +#' Substance Abuse. #' -#' @note v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive preprocessing and modern missing data handling +#' @note v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step +#' implementation; replaces the abandoned helper-based draft. #' @export -calculate_binge_drinking <- function(DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, - ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7, - # Validation bounds: defaults from variable_details.csv for standalone use - # Use rec_with_table() for full CSV-driven validation workflow - min_DHH_SEX = 1, - max_DHH_SEX = 2, - min_ALW_1 = 1, - max_ALW_1 = 2, - min_ALW_2A1 = 0, - max_ALW_2A1 = 995, - min_ALW_2A2 = 0, - max_ALW_2A2 = 995, - min_ALW_2A3 = 0, - max_ALW_2A3 = 995, - min_ALW_2A4 = 0, - max_ALW_2A4 = 995, - min_ALW_2A5 = 0, - max_ALW_2A5 = 995, - min_ALW_2A6 = 0, - max_ALW_2A6 = 995, - min_ALW_2A7 = 0, - max_ALW_2A7 = 995, - validate_params = NULL, - log_level = "silent") { - # Clean variables using standardized helpers (handles missing variables with tagged_na("d")) - cleaned <- clean_variables( - categorical_vars = list(DHH_SEX = DHH_SEX, ALW_1 = ALW_1), - continuous_vars = list( - ALW_2A1 = ALW_2A1, ALW_2A2 = ALW_2A2, ALW_2A3 = ALW_2A3, - ALW_2A4 = ALW_2A4, ALW_2A5 = ALW_2A5, ALW_2A6 = ALW_2A6, ALW_2A7 = ALW_2A7 - ), - valid_values = list( - DHH_SEX = min_DHH_SEX:max_DHH_SEX, - ALW_1 = min_ALW_1:max_ALW_1 - ), - min_values = list( - ALW_2A1 = min_ALW_2A1, ALW_2A2 = min_ALW_2A2, ALW_2A3 = min_ALW_2A3, - ALW_2A4 = min_ALW_2A4, ALW_2A5 = min_ALW_2A5, ALW_2A6 = min_ALW_2A6, ALW_2A7 = min_ALW_2A7 - ), - max_values = list( - ALW_2A1 = max_ALW_2A1, ALW_2A2 = max_ALW_2A2, ALW_2A3 = max_ALW_2A3, - ALW_2A4 = max_ALW_2A4, ALW_2A5 = max_ALW_2A5, ALW_2A6 = max_ALW_2A6, ALW_2A7 = max_ALW_2A7 - ), - categorical_pattern = "single_digit_missing", - continuous_pattern = "triple_digit_missing", - log_level = log_level +calculate_binge_drinking <- function(DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, + ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, + ALW_2A7, output_format = "tagged_na") { + inputs <- normalize_input_lengths(list( + DHH_SEX = DHH_SEX, ALW_1 = ALW_1, + ALW_2A1 = ALW_2A1, ALW_2A2 = ALW_2A2, ALW_2A3 = ALW_2A3, + ALW_2A4 = ALW_2A4, ALW_2A5 = ALW_2A5, ALW_2A6 = ALW_2A6, + ALW_2A7 = ALW_2A7 + )) + if (inputs$n == 0) { + return(numeric(0)) + } + + # Step 1: metadata-driven cleaning + cleaned <- clean_variables(vars = inputs$vars, output_format = "tagged_na") + + max_daily <- pmax( + cleaned$ALW_2A1, cleaned$ALW_2A2, cleaned$ALW_2A3, cleaned$ALW_2A4, + cleaned$ALW_2A5, cleaned$ALW_2A6, cleaned$ALW_2A7 + ) + + # Step 2: domain logic + result <- dplyr::case_when( + any_missing( + cleaned$DHH_SEX, cleaned$ALW_1, + cleaned$ALW_2A1, cleaned$ALW_2A2, cleaned$ALW_2A3, cleaned$ALW_2A4, + cleaned$ALW_2A5, cleaned$ALW_2A6, cleaned$ALW_2A7 + ) ~ + get_priority_missing( + cleaned$DHH_SEX, cleaned$ALW_1, + cleaned$ALW_2A1, cleaned$ALW_2A2, cleaned$ALW_2A3, cleaned$ALW_2A4, + cleaned$ALW_2A5, cleaned$ALW_2A6, cleaned$ALW_2A7 + ), + # No drinks in the past week: not applicable + cleaned$ALW_1 == 2 ~ assign_missing("not_applicable", "binge_drinker"), + cleaned$DHH_SEX == 1 & max_daily >= BINGE_THRESHOLDS$male ~ 1, + cleaned$DHH_SEX == 2 & max_daily >= BINGE_THRESHOLDS$female ~ 1, + .default = 2 ) - # Calculate binge drinking assessment from clean inputs - assess_binge_core( - cleaned$DHH_SEX_clean, cleaned$ALW_1_clean, cleaned$ALW_2A1_clean, cleaned$ALW_2A2_clean, - cleaned$ALW_2A3_clean, cleaned$ALW_2A4_clean, cleaned$ALW_2A5_clean, cleaned$ALW_2A6_clean, cleaned$ALW_2A7_clean + # Step 3: validate against binge_drinker metadata, apply requested format + out <- clean_variables( + vars = list(binge_drinker = result), + output_format = output_format ) + out$binge_drinker } -#' Assess short-term alcohol health risks using Low-Risk Guidelines +#' Short-term (acute) drinking risk under the Low-Risk Guidelines #' #' @description -#' Assess short-term health risks from drinking patterns following Canada's Low-Risk Guidelines. -#' Evaluates daily and weekly consumption against sex-specific acute risk thresholds for -#' injury and overdose risk assessment. -#' -#' @param DHH_SEX,ALW_1,ALW_2A1,ALW_2A2,ALW_2A3,ALW_2A4,ALW_2A5,ALW_2A6,ALW_2A7 As in calculate_binge_drinking() -#' @param ALC_1 Had drinks in past year (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values. -#' @param ALWDWKY Total drinks in past week. Accepts raw CCHS codes or preprocessed values. -#' -#' @return Integer short-term risk indicator. Missing data handled as: -#' \itemize{ -#' \item \code{haven::tagged_na("a")} for not applicable cases (non-drinkers) -#' \item \code{haven::tagged_na("b")} for missing/invalid responses -#' } -#' Values: 1 = increased short-term risk, 2 = no increased short-term risk. +#' Assesses short-term health risk from drinking patterns following Canada's +#' Low-Risk Alcohol Drinking Guidelines: risk is flagged when daily +#' consumption exceeds 3 drinks (males) / 2 drinks (females) on any day, or +#' weekly consumption exceeds 15 drinks (males) / 10 drinks (females). #' #' @details -#' Based on Canada's Low-Risk Alcohol Drinking Guidelines. Thresholds may differ from other national guidelines. -#' Non-drinkers (past year or week) receive "no increased risk" classification. +#' Non-drinkers in the past year (\code{ALC_1} = 2) or past week +#' (\code{ALW_1} = 2) receive \code{haven::tagged_na("a")} (not applicable). +#' Thresholds are exceeded strictly (e.g. 4+ drinks on a day for males). +#' Missing-data handling follows the v3 3-step architecture with priority +#' not applicable > not stated; out-of-range inputs receive the worksheet's +#' else rule. +#' +#' @inheritParams calculate_binge_drinking +#' @param ALWDWKY Total drinks in the past week. +#' @param ALC_1 Had drinks in the past year (1 = yes, 2 = no). #' -#' Risk criteria: Males: >4 drinks/day OR >15 drinks/week; Females: >3 drinks/day OR >10 drinks/week. -#' Comprehensive preprocessing with priority handling is applied. Non-drinkers are automatically -#' classified as "no increased risk". +#' @return Numeric vector: 1 = increased short-term risk, 2 = no increased +#' short-term risk. Missing data: \code{haven::tagged_na("a")} (not +#' applicable), \code{haven::tagged_na("b")} (not stated/invalid). #' #' @examples -#' # Standard cchsflow workflow (primary usage) -#' library(cchsflow) +#' # Scalar: male exceeding daily and weekly thresholds +#' calculate_drinking_risk_short(1, 20, 1, 1, 0, 0, 5, 0, 0, 0, 0) # 1 +#' +#' # Scalar: female within thresholds +#' calculate_drinking_risk_short(2, 8, 1, 1, 2, 1, 2, 1, 1, 1, 0) # 2 +#' +#' # Vector: at-risk male, non-drinker +#' calculate_drinking_risk_short( +#' c(1, 1), c(25, 0), c(1, 2), c(1, 2), c(5, 0), c(5, 0), +#' c(5, 0), c(5, 0), c(5, 0), c(0, 0), c(0, 0) +#' ) # 1, tagged_na("a") +#' +#' \dontrun{ +#' # Standard cchsflow workflow #' result <- rec_with_table( #' cchs2013_2014_p, #' c( #' "DHH_SEX", "ALWDWKY", "ALC_1", "ALW_1", "ALW_2A1", "ALW_2A2", -#' "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDLOWI_der" +#' "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDVSTR_der" #' ) #' ) +#' } #' -#' # Scalar usage examples with variable labels -#' # calculate_drinking_risk_short(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) -#' # (sex, weekly, year, week, sun, mon, tue, wed, thu, fri, sat) -#' calculate_drinking_risk_short(1, 20, 1, 1, 0, 0, 5, 0, 0, 0, 0) # Returns: 1L (male short-term risk: 5 drinks/day OR 20/week) -#' calculate_drinking_risk_short(2, 8, 1, 1, 2, 1, 2, 1, 1, 1, 0) # Returns: 2L (female no risk: ≤2 drinks/day AND ≤10/week) -#' calculate_drinking_risk_short(1, 15, 1, 1, 3, 3, 3, 3, 3, 0, 0) # Returns: 2L (male no risk: ≤3 drinks/day AND ≤15/week) -#' calculate_drinking_risk_short(2, 11, 1, 1, 2, 2, 2, 2, 2, 1, 0) # Returns: 1L (female risk: 11 drinks/week exceeds 10) -#' calculate_drinking_risk_short(1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) -#' -#' # Vector processing with missing data and edge cases -#' calculate_drinking_risk_short( -#' c(1, 2, 6, 8, 9), # Mixed valid/CCHS codes for sex -#' c(16, 11, 5, 996, 997), # Mixed weekly drinks with CCHS codes -#' c(1, 1, 1, 1, 2), # Mixed alcohol use statuses -#' c(1, 1, 1, 2, 1), # Mixed weekly drinking statuses -#' c(4, 3, 1, 0, 7), # Mixed Sunday drinks -#' c(0, 0, 0, 0, 8), c(0, 0, 0, 0, 9), c(0, 0, 0, 0, 0), -#' c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0) -#' ) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("b"), tagged_na("a")) -#' -#' @seealso -#' \code{\link{calculate_binge_drinking}} for binge drinking assessment -#' \code{\link{calculate_drinking_risk_long}} for long-term drinking risk assessment +#' @seealso \code{\link{calculate_binge_drinking}}, +#' \code{\link{calculate_drinking_risk_long}} #' #' @references -#' Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines -#' for low-risk drinking. Canadian Centre on Substance Abuse. +#' Butt, P., et al. (2011). Alcohol and health in Canada: a summary of +#' evidence and guidelines for low-risk drinking. Canadian Centre on +#' Substance Abuse. #' -#' @note v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive risk assessment and missing data handling +#' @note v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step +#' implementation; replaces the abandoned helper-based draft. #' @export -calculate_drinking_risk_short <- function(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, - ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7, - # Validation bounds: defaults from variable_details.csv for standalone use - # Use rec_with_table() for full CSV-driven validation workflow - min_DHH_SEX = 1, - max_DHH_SEX = 2, - min_ALWDWKY = 0, - max_ALWDWKY = 995, - min_ALC_1 = 1, - max_ALC_1 = 2, - min_ALW_1 = 1, - max_ALW_1 = 2, - min_ALW_2A1 = 0, - max_ALW_2A1 = 995, - min_ALW_2A2 = 0, - max_ALW_2A2 = 995, - min_ALW_2A3 = 0, - max_ALW_2A3 = 995, - min_ALW_2A4 = 0, - max_ALW_2A4 = 995, - min_ALW_2A5 = 0, - max_ALW_2A5 = 995, - min_ALW_2A6 = 0, - max_ALW_2A6 = 995, - min_ALW_2A7 = 0, - max_ALW_2A7 = 995, - validate_params = NULL, - log_level = "silent") { - # Clean variables using standardized helpers (handles missing variables with tagged_na("d")) - cleaned <- clean_variables( - categorical_vars = list(DHH_SEX = DHH_SEX, ALC_1 = ALC_1, ALW_1 = ALW_1), - continuous_vars = list( - ALWDWKY = ALWDWKY, ALW_2A1 = ALW_2A1, ALW_2A2 = ALW_2A2, ALW_2A3 = ALW_2A3, - ALW_2A4 = ALW_2A4, ALW_2A5 = ALW_2A5, ALW_2A6 = ALW_2A6, ALW_2A7 = ALW_2A7 - ), - valid_values = list( - DHH_SEX = min_DHH_SEX:max_DHH_SEX, - ALC_1 = min_ALC_1:max_ALC_1, - ALW_1 = min_ALW_1:max_ALW_1 - ), - min_values = list( - ALWDWKY = min_ALWDWKY, ALW_2A1 = min_ALW_2A1, ALW_2A2 = min_ALW_2A2, ALW_2A3 = min_ALW_2A3, - ALW_2A4 = min_ALW_2A4, ALW_2A5 = min_ALW_2A5, ALW_2A6 = min_ALW_2A6, ALW_2A7 = min_ALW_2A7 - ), - max_values = list( - ALWDWKY = max_ALWDWKY, ALW_2A1 = max_ALW_2A1, ALW_2A2 = max_ALW_2A2, ALW_2A3 = max_ALW_2A3, - ALW_2A4 = max_ALW_2A4, ALW_2A5 = max_ALW_2A5, ALW_2A6 = max_ALW_2A6, ALW_2A7 = max_ALW_2A7 - ), - categorical_pattern = "single_digit_missing", - continuous_pattern = "triple_digit_missing", - log_level = log_level - ) +calculate_drinking_risk_short <- function(DHH_SEX, ALWDWKY, ALC_1, ALW_1, + ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, + ALW_2A5, ALW_2A6, ALW_2A7, + output_format = "tagged_na") { + inputs <- normalize_input_lengths(list( + DHH_SEX = DHH_SEX, ALWDWKY = ALWDWKY, ALC_1 = ALC_1, ALW_1 = ALW_1, + ALW_2A1 = ALW_2A1, ALW_2A2 = ALW_2A2, ALW_2A3 = ALW_2A3, + ALW_2A4 = ALW_2A4, ALW_2A5 = ALW_2A5, ALW_2A6 = ALW_2A6, + ALW_2A7 = ALW_2A7 + )) + if (inputs$n == 0) { + return(numeric(0)) + } - # Use core risk assessment function with "short" risk type - assess_risk_core( - cleaned$DHH_SEX_clean, cleaned$ALWDWKY_clean, cleaned$ALC_1_clean, cleaned$ALW_1_clean, - cleaned$ALW_2A1_clean, cleaned$ALW_2A2_clean, cleaned$ALW_2A3_clean, cleaned$ALW_2A4_clean, - cleaned$ALW_2A5_clean, cleaned$ALW_2A6_clean, cleaned$ALW_2A7_clean, - risk_type = "short" - ) + # Step 1: metadata-driven cleaning + cleaned <- clean_variables(vars = inputs$vars, output_format = "tagged_na") + + assess_drinking_risk(cleaned, "short", "ALWDVSTR_der", output_format) } -#' Assess long-term alcohol health risks using Low-Risk Guidelines +#' Long-term (chronic) drinking risk under the Low-Risk Guidelines #' #' @description -#' Assess long-term health risks from drinking patterns following Canada's Low-Risk Guidelines. -#' Evaluates daily and weekly consumption against sex-specific chronic risk thresholds for -#' long-term health outcomes assessment. +#' Assesses long-term health risk from drinking patterns following Canada's +#' Low-Risk Alcohol Drinking Guidelines: risk is flagged when daily +#' consumption reaches 4 drinks (males) / 3 drinks (females) on any day, or +#' weekly consumption reaches 20 drinks (males) / 15 drinks (females). #' -#' @param DHH_SEX,ALWDWKY,ALC_1,ALW_1,ALW_2A1,ALW_2A2,ALW_2A3,ALW_2A4,ALW_2A5,ALW_2A6,ALW_2A7 As in calculate_drinking_risk_short() +#' @details +#' Non-drinkers in the past year (\code{ALC_1} = 2) or past week +#' (\code{ALW_1} = 2) receive \code{haven::tagged_na("a")} (not applicable). +#' Thresholds are reached inclusively (e.g. exactly 20 drinks/week flags a +#' male respondent). Missing-data handling follows the v3 3-step +#' architecture with priority not applicable > not stated; out-of-range +#' inputs receive the worksheet's else rule. #' -#' @return Integer long-term risk indicator. Missing data handled as: -#' \itemize{ -#' \item \code{haven::tagged_na("a")} for not applicable cases (non-drinkers) -#' \item \code{haven::tagged_na("b")} for missing/invalid responses -#' } -#' Values: 1 = increased long-term risk, 2 = no increased long-term risk. +#' @inheritParams calculate_drinking_risk_short #' -#' @details -#' Risk criteria: Males: ≥4 drinks/day OR ≥20 drinks/week; Females: ≥3 drinks/day OR ≥15 drinks/week. -#' Focus on chronic health risks (liver disease, cancer, cardiovascular). Same preprocessing and -#' missing data handling as short-term version. +#' @return Numeric vector: 1 = increased long-term risk, 2 = no increased +#' long-term risk. Missing data: \code{haven::tagged_na("a")} (not +#' applicable), \code{haven::tagged_na("b")} (not stated/invalid). #' #' @examples -#' # Standard cchsflow workflow (primary usage) -#' library(cchsflow) +#' # Scalar: male reaching the weekly threshold +#' calculate_drinking_risk_long(1, 20, 1, 1, 3, 3, 3, 3, 3, 3, 2) # 1 +#' +#' # Scalar: female within thresholds +#' calculate_drinking_risk_long(2, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1) # 2 +#' +#' # Vector: at-risk male, non-drinker +#' calculate_drinking_risk_long( +#' c(1, 1), c(20, 0), c(1, 2), c(1, 2), c(3, 0), c(3, 0), +#' c(3, 0), c(3, 0), c(3, 0), c(3, 0), c(2, 0) +#' ) # 1, tagged_na("a") +#' +#' \dontrun{ +#' # Standard cchsflow workflow #' result <- rec_with_table( #' cchs2013_2014_p, #' c( #' "DHH_SEX", "ALWDWKY", "ALC_1", "ALW_1", "ALW_2A1", "ALW_2A2", -#' "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDLOWL_der" +#' "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDVLTR_der" #' ) #' ) +#' } #' -#' # Scalar usage examples with variable labels -#' # calculate_drinking_risk_long(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) -#' # (sex, weekly, year, week, sun, mon, tue, wed, thu, fri, sat) -#' calculate_drinking_risk_long(1, 20, 1, 1, 0, 0, 4, 0, 0, 0, 0) # Returns: 1L (male long-term risk: 4 drinks/day OR 20/week) -#' calculate_drinking_risk_long(2, 14, 1, 1, 2, 2, 2, 2, 2, 2, 2) # Returns: 2L (female no risk: <3 drinks/day AND <15/week) -#' calculate_drinking_risk_long(1, 19, 1, 1, 3, 3, 3, 3, 3, 3, 1) # Returns: 2L (male no risk: <4 drinks/day AND <20/week) -#' calculate_drinking_risk_long(2, 15, 1, 1, 2, 2, 2, 2, 2, 2, 3) # Returns: 1L (female risk: 15 drinks/week exactly threshold) -#' calculate_drinking_risk_long(1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) -#' -#' # Vector processing with missing data and edge cases -#' calculate_drinking_risk_long( -#' c(1, 2, 6, 8, 9), # Mixed valid/CCHS codes for sex -#' c(20, 15, 8, 996, 997), # Mixed weekly drinks with CCHS codes -#' c(1, 1, 1, 1, 2), # Mixed alcohol use statuses -#' c(1, 1, 1, 2, 1), # Mixed weekly drinking statuses -#' c(4, 3, 2, 0, 7), # Mixed Sunday drinks -#' c(0, 0, 0, 0, 8), c(0, 0, 0, 0, 9), c(0, 0, 0, 0, 0), -#' c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0) -#' ) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("b"), tagged_na("a")) -#' -#' @seealso -#' \code{\link{calculate_drinking_risk_short}} for short-term drinking risk assessment -#' \code{\link{calculate_binge_drinking}} for binge drinking assessment +#' @seealso \code{\link{calculate_binge_drinking}}, +#' \code{\link{calculate_drinking_risk_short}} #' #' @references -#' Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines -#' for low-risk drinking. Canadian Centre on Substance Abuse. +#' Butt, P., et al. (2011). Alcohol and health in Canada: a summary of +#' evidence and guidelines for low-risk drinking. Canadian Centre on +#' Substance Abuse. #' -#' @note v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive long-term risk assessment +#' @note v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step +#' implementation; replaces the abandoned helper-based draft. #' @export -calculate_drinking_risk_long <- function(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, - ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7, - # Validation bounds: defaults from variable_details.csv for standalone use - # Use rec_with_table() for full CSV-driven validation workflow - min_DHH_SEX = 1, - max_DHH_SEX = 2, - min_ALWDWKY = 0, - max_ALWDWKY = 995, - min_ALC_1 = 1, - max_ALC_1 = 2, - min_ALW_1 = 1, - max_ALW_1 = 2, - min_ALW_2A1 = 0, - max_ALW_2A1 = 995, - min_ALW_2A2 = 0, - max_ALW_2A2 = 995, - min_ALW_2A3 = 0, - max_ALW_2A3 = 995, - min_ALW_2A4 = 0, - max_ALW_2A4 = 995, - min_ALW_2A5 = 0, - max_ALW_2A5 = 995, - min_ALW_2A6 = 0, - max_ALW_2A6 = 995, - min_ALW_2A7 = 0, - max_ALW_2A7 = 995, - validate_params = NULL, - log_level = "silent") { - # Clean variables using standardized helpers (handles missing variables with tagged_na("d")) - cleaned <- clean_variables( - categorical_vars = list(DHH_SEX = DHH_SEX, ALC_1 = ALC_1, ALW_1 = ALW_1), - continuous_vars = list( - ALWDWKY = ALWDWKY, ALW_2A1 = ALW_2A1, ALW_2A2 = ALW_2A2, ALW_2A3 = ALW_2A3, - ALW_2A4 = ALW_2A4, ALW_2A5 = ALW_2A5, ALW_2A6 = ALW_2A6, ALW_2A7 = ALW_2A7 - ), - valid_values = list( - DHH_SEX = min_DHH_SEX:max_DHH_SEX, - ALC_1 = min_ALC_1:max_ALC_1, - ALW_1 = min_ALW_1:max_ALW_1 - ), - min_values = list( - ALWDWKY = min_ALWDWKY, ALW_2A1 = min_ALW_2A1, ALW_2A2 = min_ALW_2A2, ALW_2A3 = min_ALW_2A3, - ALW_2A4 = min_ALW_2A4, ALW_2A5 = min_ALW_2A5, ALW_2A6 = min_ALW_2A6, ALW_2A7 = min_ALW_2A7 - ), - max_values = list( - ALWDWKY = max_ALWDWKY, ALW_2A1 = max_ALW_2A1, ALW_2A2 = max_ALW_2A2, ALW_2A3 = max_ALW_2A3, - ALW_2A4 = max_ALW_2A4, ALW_2A5 = max_ALW_2A5, ALW_2A6 = max_ALW_2A6, ALW_2A7 = max_ALW_2A7 - ), - categorical_pattern = "single_digit_missing", - continuous_pattern = "triple_digit_missing", - log_level = log_level - ) +calculate_drinking_risk_long <- function(DHH_SEX, ALWDWKY, ALC_1, ALW_1, + ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, + ALW_2A5, ALW_2A6, ALW_2A7, + output_format = "tagged_na") { + inputs <- normalize_input_lengths(list( + DHH_SEX = DHH_SEX, ALWDWKY = ALWDWKY, ALC_1 = ALC_1, ALW_1 = ALW_1, + ALW_2A1 = ALW_2A1, ALW_2A2 = ALW_2A2, ALW_2A3 = ALW_2A3, + ALW_2A4 = ALW_2A4, ALW_2A5 = ALW_2A5, ALW_2A6 = ALW_2A6, + ALW_2A7 = ALW_2A7 + )) + if (inputs$n == 0) { + return(numeric(0)) + } - # Use core risk assessment function with "long" risk type - assess_risk_core( - cleaned$DHH_SEX_clean, cleaned$ALWDWKY_clean, cleaned$ALC_1_clean, cleaned$ALW_1_clean, - cleaned$ALW_2A1_clean, cleaned$ALW_2A2_clean, cleaned$ALW_2A3_clean, cleaned$ALW_2A4_clean, - cleaned$ALW_2A5_clean, cleaned$ALW_2A6_clean, cleaned$ALW_2A7_clean, - risk_type = "long" - ) + # Step 1: metadata-driven cleaning + cleaned <- clean_variables(vars = inputs$vars, output_format = "tagged_na") + + assess_drinking_risk(cleaned, "long", "ALWDVLTR_der", output_format) } diff --git a/R/clean-variables.R b/R/clean-variables.R index 7a92d213..456bbe80 100644 --- a/R/clean-variables.R +++ b/R/clean-variables.R @@ -188,12 +188,13 @@ process_missing_codes <- function(var_data, pattern, output_format) { } # Coerce character/factor inputs to numeric (rec_with_table passes factor - - # levels as character strings; gold-tier functions expect numeric) + # levels as character strings; gold-tier functions expect numeric). + # Recognized CCHS missing-data labels become tagged NAs so the a/b + # distinction survives factor round-trips. if (is.factor(var_data)) { - var_data <- as.numeric(levels(var_data))[var_data] + var_data <- coerce_cchs_label_strings(as.character(var_data)) } else if (is.character(var_data)) { - var_data <- suppressWarnings(as.numeric(var_data)) + var_data <- coerce_cchs_label_strings(var_data) } # Step 1: Convert input codes to tagged_na (for processing) @@ -286,61 +287,134 @@ convert_tagged_na_to_original_codes <- function(tagged_data, pattern) { #' Apply Else Logic to Out-of-Range Values #' #' Processes values that fall outside valid ranges using else mappings. -#' This function handles the core else functionality by checking values against -#' copy_mappings (valid ranges) and applying else_mappings rules. +#' The valid input set is the union of copy_mappings (pass-through ranges for +#' continuous variables) and value_mappings (categorical valid codes for +#' categorical variables); values outside it receive the worksheet's else rule. +#' Vectorized: each mapping spec is parsed once and applied to the whole vector. #' #' @param tagged_data Vector with tagged_na values from missing code conversion #' @param original_data Vector with original raw data for else logic reference -#' @param complete_pattern List with copy_mappings and else_mappings from Level 4 +#' @param complete_pattern List with copy/value/else mappings from Level 4 #' @return Vector with else logic applied to out-of-range values #' @noRd apply_else_logic <- function(tagged_data, original_data, complete_pattern) { - - # Early return if no else mappings or copy mappings available - if (is.null(complete_pattern$else_mappings) || - is.null(complete_pattern$copy_mappings) || + + # value_mappings may be absent in patterns cached before it existed + valid_specs <- c(complete_pattern$copy_mappings, complete_pattern$value_mappings) + + if (is.null(complete_pattern$else_mappings) || length(complete_pattern$else_mappings) == 0 || - length(complete_pattern$copy_mappings) == 0) { + length(valid_specs) == 0) { return(tagged_data) } - - result <- tagged_data - - # Check each value that hasn't been converted to tagged_na yet - for (i in seq_along(result)) { - - # Skip if already converted to tagged_na - if (haven::is_tagged_na(result[i])) { - next + + # Resolve the first actionable else rule once + else_value <- resolve_else_value(complete_pattern$else_mappings) + if (is.null(else_value)) { + return(tagged_data) + } + + # Candidates: not already tagged in this pass, and not NA in the raw input + candidate <- !haven::is_tagged_na(tagged_data) & !is.na(original_data) + if (!any(candidate)) { + return(tagged_data) + } + + in_valid <- rep(FALSE, length(original_data)) + for (spec in valid_specs) { + in_valid <- in_valid | values_in_range_spec(original_data, spec) + } + + out_of_range <- which(candidate & !in_valid) + if (length(out_of_range) > 0) { + tagged_data[out_of_range] <- else_value + } + + return(tagged_data) +} + +#' Resolve the First Actionable Else Rule +#' +#' @param else_mappings List of else rules from complete_pattern +#' @return Replacement value (tagged NA or numeric), or NULL if no rule applies +#' @noRd +resolve_else_value <- function(else_mappings) { + for (else_rule in else_mappings) { + action <- else_rule$action + if (is.null(action)) { + action <- else_rule$recEnd } - - current_value <- original_data[i] - - # Skip if current value is NA - if (is.na(current_value)) { - next + if (is.null(action)) next + + if (action == "NA::a") { + return(haven::tagged_na("a")) + } else if (action == "NA::b") { + return(haven::tagged_na("b")) + } else if (action %in% c("skip", "SKIP")) { + return(NULL) + } else if (grepl("^-?[0-9.]+$", action)) { + return(as.numeric(action)) } - - # Check if value falls within any valid range (copy_mappings) - in_valid_range <- FALSE - - for (copy_mapping in complete_pattern$copy_mappings) { - if (is_value_in_range(current_value, copy_mapping)) { - in_valid_range <- TRUE - break - } + } + NULL +} + +#' Vectorized Range-Spec Membership +#' +#' Vector counterpart of is_value_in_range(): parses the spec once and tests +#' the whole vector. NA elements return FALSE. +#' +#' @param values Numeric vector to test +#' @param range_spec One copy_mapping or value_mapping spec +#' @return Logical vector, NA-safe (NA values give FALSE) +#' @noRd +values_in_range_spec <- function(values, range_spec) { + no_match <- rep(FALSE, length(values)) + if (is.null(range_spec)) return(no_match) + + testable <- !is.na(values) + result <- no_match + + if (!is.null(range_spec$min) && !is.null(range_spec$max)) { + result[testable] <- values[testable] >= range_spec$min & + values[testable] <= range_spec$max + return(result) + } + + if (!is.null(range_spec$recStart) && is.character(range_spec$recStart)) { + if (range_spec$recStart == "copy") { + result[testable] <- TRUE + return(result) } - - # If not in valid range, apply else logic - if (!in_valid_range) { - else_result <- apply_else_rule(current_value, complete_pattern$else_mappings) - if (!is.null(else_result)) { - result[i] <- else_result - } + parsed <- parse_range_notation(range_spec$recStart) + if (!is.null(parsed) && parsed$type %in% c("continuous", "integer")) { + lower_ok <- if (isFALSE(parsed$min_inclusive)) values[testable] > parsed$min else values[testable] >= parsed$min + upper_ok <- if (isFALSE(parsed$max_inclusive)) values[testable] < parsed$max else values[testable] <= parsed$max + result[testable] <- lower_ok & upper_ok + return(result) + } + if (!is.null(parsed) && parsed$type == "single_value") { + result[testable] <- values[testable] == parsed$value + return(result) + } + if (!is.null(range_spec$recStart_values) && length(range_spec$recStart_values) > 0) { + result[testable] <- values[testable] %in% range_spec$recStart_values + return(result) } + return(no_match) } - - return(result) + + if (!is.null(range_spec$values)) { + result[testable] <- values[testable] %in% range_spec$values + return(result) + } + + if (!is.null(range_spec$recStart_values) && length(range_spec$recStart_values) > 0) { + result[testable] <- values[testable] %in% range_spec$recStart_values + return(result) + } + + no_match } #' Check if Value is in Valid Range @@ -460,6 +534,64 @@ apply_else_rule <- function(value, else_mappings) { # UTILITY FUNCTIONS # ============================================================================== +#' Coerce CCHS Label Strings to Numeric with Tagged NAs +#' +#' Converts character input to numeric while mapping recognized CCHS +#' missing-data labels to tagged NAs. Handles values arriving as labelled +#' strings (e.g. from sjlabelled exports) or as rec_with_table() factor +#' levels ("NA(a)", "NA(b)"), where plain as.numeric() would silently +#' collapse the not-applicable / not-stated distinction to NA. +#' +#' @param x Character vector +#' @return Numeric vector with tagged NAs for recognized labels; other +#' non-numeric strings become plain NA +#' @noRd +coerce_cchs_label_strings <- function(x) { + labels <- tolower(trimws(x)) + result <- suppressWarnings(as.numeric(x)) + + na_a_labels <- c("not applicable", "valid skip", "na(a)", "na::a") + na_b_labels <- c( + "missing", "not stated", "don't know", "dont know", "refusal", + "na(b)", "na::b" + ) + + result[labels %in% na_a_labels] <- haven::tagged_na("a") + result[labels %in% na_b_labels] <- haven::tagged_na("b") + + result +} + +#' Normalize Input Lengths for Derived Variable Functions +#' +#' Validates that all inputs share a common length, recycling length-1 +#' (scalar) inputs to the longest length. Mismatched multi-element vectors +#' raise an error rather than silently flooding the result with NAs. +#' +#' @param vars Named list of input vectors +#' @return List with `vars` (recycled inputs) and `n` (common length) +#' @noRd +normalize_input_lengths <- function(vars) { + lengths <- vapply(vars, length, integer(1)) + n <- max(lengths) + + if (n == 0) { + return(list(vars = vars, n = 0L)) + } + + if (!all(lengths %in% c(1L, n))) { + stop( + "All input vectors (", paste(names(vars), collapse = ", "), + ") must have the same length (or length 1, which is recycled)" + ) + } + + needs_recycling <- lengths == 1L & n > 1L + vars[needs_recycling] <- lapply(vars[needs_recycling], rep_len, n) + + list(vars = vars, n = n) +} + #' Pass-through for worksheet-routed derived variables #' #' Standard implementation for derived variables where the worksheet handles diff --git a/R/missing-pattern-cache.R b/R/missing-pattern-cache.R index bd7f7c69..f61807d6 100644 --- a/R/missing-pattern-cache.R +++ b/R/missing-pattern-cache.R @@ -186,16 +186,18 @@ map_recStart_to_recEnd <- function(mapping_rows) { na_a_codes = numeric(0), na_b_codes = numeric(0), copy_mappings = list(), + value_mappings = list(), else_mappings = list(), skip_entries = list() )) } - + # Initialize result structure result <- list( na_a_codes = numeric(0), # Missing codes for NA::a (backward compatibility) na_b_codes = numeric(0), # Missing codes for NA::b (backward compatibility) copy_mappings = list(), # recStart → copy directives + value_mappings = list(), # categorical recEnd codes (valid value set) else_mappings = list(), # else → recEnd mappings skip_entries = list() # Func::, DerivedVar::, etc. ) @@ -255,8 +257,20 @@ map_recStart_to_recEnd <- function(mapping_rows) { next } - # Handle standard numeric mappings (for future extension) - # These don't affect missing data detection but could be useful later + # Handle numeric recodes for CATEGORICAL targets (typeEnd == "cat"). + # The recEnd codes enumerate the variable's valid category set, which + # apply_else_logic() checks (with copy_mappings) before routing values + # to the else rule. Continuous targets are deliberately excluded: their + # recEnd values (e.g. DHHGAGE_cont's category-to-midpoint rows) do not + # enumerate the domain of the cleaned values that functions see. + if (grepl("^-?[0-9.]+$", rec_end)) { + type_end <- tolower(trimws(as.character(row$typeEnd))) + if (length(type_end) == 1 && !is.na(type_end) && type_end == "cat") { + result$value_mappings[[length(result$value_mappings) + 1]] <- list( + values = as.numeric(rec_end) + ) + } + } } # Clean up and sort codes for backward compatibility @@ -435,7 +449,11 @@ auto_detect_database <- function(variable_name, database_config = NULL, variable # Auto-detect database type if configuration not provided if (is.null(database_config)) { if (!exists("auto_detect_database_type") || !exists("load_database_config")) { - warning("Database configuration functions not available. Using default CCHS configuration.") + # Warn once per session, not once per call + if (!exists("config_fallback_warned", envir = .database_warnings_cache)) { + assign("config_fallback_warned", TRUE, envir = .database_warnings_cache) + warning("Database configuration functions not available. Using default CCHS configuration.") + } # Provide fallback configuration database_config <- list( priority_databases = c("cchs2001_p", "cchs2003_p", "cchs2005_p"), diff --git a/man/assess_adl.Rd b/man/assess_adl.Rd index bb4a9012..fb55749c 100644 --- a/man/assess_adl.Rd +++ b/man/assess_adl.Rd @@ -2,108 +2,83 @@ % Please edit documentation in R/adl.R \name{assess_adl} \alias{assess_adl} -\title{Enhanced Activities of Daily Living (ADL) help indicator} +\title{Activities of Daily Living (ADL) help indicator} \usage{ -assess_adl( - ADL_01, - ADL_02, - ADL_03, - ADL_04, - ADL_05, - min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, - validate_params = NULL, - log_level = "silent" -) +assess_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, output_format = "tagged_na") } \arguments{ -\item{ADL_01}{Help needed preparing meals (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} - -\item{ADL_02}{Help needed getting to appointments/errands (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} - -\item{ADL_03}{Help needed doing housework (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +\item{ADL_01}{Help needed preparing meals (1 = yes, 2 = no). Accepts raw +CCHS codes, tagged NAs, or labelled strings.} -\item{ADL_04}{Help needed doing personal care (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +\item{ADL_02}{Help needed getting to appointments/errands (1 = yes, 2 = no).} -\item{ADL_05}{Help needed moving inside house (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +\item{ADL_03}{Help needed doing housework (1 = yes, 2 = no).} -\item{min_ADL_01, max_ADL_01, min_ADL_02, max_ADL_02, min_ADL_03, max_ADL_03, min_ADL_04, max_ADL_04, min_ADL_05, max_ADL_05}{Validation parameters (defaults from variable_details.csv)} +\item{ADL_04}{Help needed doing personal care (1 = yes, 2 = no).} -\item{validate_params}{Auto-detect validation mode (default NULL for auto-detection)} +\item{ADL_05}{Help needed moving inside the house (1 = yes, 2 = no).} -\item{log_level}{Logging level: "silent" (default), "warning", "verbose"} +\item{output_format}{Output missing data format: "tagged_na" (default) +or "original".} } \value{ -**Data Type**: Numeric binary indicator -**Missing Data Handling**: -- Returns `haven::tagged_na("a")` for not applicable cases -- Returns `haven::tagged_na("b")` for missing/invalid responses -**Values**: 1 = needs help with ≥1 task, 2 = no help needed with any task +Numeric vector: 1 = needs help with at least one task, + 2 = no help needed with any task. Missing data: + \code{haven::tagged_na("a")} (not applicable), + \code{haven::tagged_na("b")} (not stated/invalid). } \description{ -**Purpose**: Create binary indicator for ADL help requirements using variables consistent across CCHS cycles -**Method**: Examines 5 core ADL tasks available in all cycles (2001-2018) -**Clinical Context**: Functional limitation assessment for population health research +Creates a binary indicator for needing help with activities of daily +living, using the 5 ADL tasks asked consistently across CCHS cycles. } \details{ -**Transformation Warnings**: -⚠️ **CAUTION - Temporal Changes**: Original CCHS derived variable ADLF6R uses -different ADL components across cycles. This function uses consistent 5-item -subset for cross-cycle comparability. +The five core tasks (meal preparation, getting to appointments/errands, +housework, personal care, moving inside the house) are available in all +CCHS cycles from 2001 onward, making this indicator suitable for +cross-cycle analyses. The original CCHS derived variable ADLF6R uses +different components across cycles; this function deliberately uses the +consistent 5-item subset. -⚠️ **CAUTION - Population Restrictions**: ADL questions typically restricted -to respondents with activity limitations. Not applicable responses preserved. +ADL questions are typically restricted to respondents with activity +limitations; not-applicable responses are preserved as +\code{haven::tagged_na("a")}. -**Calculation Details**: -- Uses ADL_01 through ADL_05 (consistent across all CCHS cycles) -- Any "needs help" (=1) response results in overall score of 1 -- All "no help needed" (=2) responses result in overall score of 2 -- Missing Data: Comprehensive preprocessing of CCHS codes (6,7,8,9) -- Priority: Not applicable > Missing > Valid responses +Missing-data handling follows the v3 3-step architecture: input codes +(6, 7, 8, 9) are converted using variable_details.csv metadata, with +priority not applicable > not stated when inputs mix missing types. +Out-of-range inputs receive the worksheet's else rule +(\code{haven::tagged_na("b")}). } \note{ -v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced with comprehensive preprocessing and modern missing data handling +v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step + implementation; replaces the abandoned helper-based draft. } \examples{ -# Standard cchsflow workflow (primary usage) -library(cchsflow) -result <- rec_with_table( - cchs2013_2014_p, - c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADLF6R_der") -) +# Scalar +assess_adl(1, 2, 2, 2, 2) # 1 (needs help with meals) +assess_adl(2, 2, 2, 2, 2) # 2 (no help needed) -# Scalar usage examples -# assess_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) -# (meals, appts, house, care, move) -assess_adl(1, 2, 2, 2, 2) # Returns: 1 (needs help with meals only) -assess_adl(2, 2, 2, 2, 2) # Returns: 2 (no help needed with any task) -assess_adl(1, 1, 1, 1, 1) # Returns: 1 (needs help with all tasks) - -# Vector processing with missing data and edge cases +# Vector with CCHS missing codes assess_adl( - c(1, 2, 6, 7, 8, 9), # Mixed valid/CCHS codes - c(2, 2, 2, 2, 2, 2), - c(2, 2, 2, 2, 2, 2), - c(2, 2, 2, 2, 2, 2), - c(2, 2, 2, 2, 2, 2) -) # Returns: c(1, 2, tagged_na("a"), tagged_na("b"), tagged_na("b"), tagged_na("b")) + c(1, 2, 6, 7), + c(2, 2, 2, 2), c(2, 2, 2, 2), c(2, 2, 2, 2), c(2, 2, 2, 2) +) # 1, 2, tagged_na("a"), tagged_na("b") -# Vector with string missing values -assess_adl( - c(1, 2, "Not applicable"), - c(2, 2, 2), - c(2, 2, 2), - c(2, 2, 2), - c(2, 2, 2) -) # Returns: c(1, 2, tagged_na("a")) +# Dataframe +library(dplyr) +data.frame( + ADL_01 = c(1, 2), ADL_02 = c(2, 2), ADL_03 = c(2, 2), + ADL_04 = c(2, 2), ADL_05 = c(2, 2) +) \%>\% + mutate(adl_help = assess_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05)) + +\dontrun{ +# Standard cchsflow workflow +result <- rec_with_table( + cchs2013_2014_p, + c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_der") +) +} } \references{ @@ -111,6 +86,5 @@ Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. JAMA, 185(12), 914-919. } \seealso{ -\code{\link{score_adl}} for count-based ADL scoring -\code{\link{score_adl_6}} for 6-item ADL scoring +\code{\link{score_adl}}, \code{\link{score_adl_6}} } diff --git a/man/calculate_binge_drinking.Rd b/man/calculate_binge_drinking.Rd index 5c485c8f..ccc1723e 100644 --- a/man/calculate_binge_drinking.Rd +++ b/man/calculate_binge_drinking.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alcohol.R \name{calculate_binge_drinking} \alias{calculate_binge_drinking} -\title{Identify binge drinking patterns with sex-specific thresholds} +\title{Binge drinking indicator with sex-specific thresholds} \usage{ calculate_binge_drinking( DHH_SEX, @@ -14,117 +14,97 @@ calculate_binge_drinking( ALW_2A5, ALW_2A6, ALW_2A7, - min_DHH_SEX = 1, - max_DHH_SEX = 2, - min_ALW_1 = 1, - max_ALW_1 = 2, - min_ALW_2A1 = 0, - max_ALW_2A1 = 995, - min_ALW_2A2 = 0, - max_ALW_2A2 = 995, - min_ALW_2A3 = 0, - max_ALW_2A3 = 995, - min_ALW_2A4 = 0, - max_ALW_2A4 = 995, - min_ALW_2A5 = 0, - max_ALW_2A5 = 995, - min_ALW_2A6 = 0, - max_ALW_2A6 = 995, - min_ALW_2A7 = 0, - max_ALW_2A7 = 995, - validate_params = NULL, - log_level = "silent" + output_format = "tagged_na" ) } \arguments{ -\item{DHH_SEX}{CCHS variable for sex (1=male, 2=female). Accepts raw CCHS codes or preprocessed values.} +\item{DHH_SEX}{Sex (1 = male, 2 = female). Accepts raw CCHS codes, +tagged NAs, or labelled strings.} -\item{ALW_1}{Had drinks in past week (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +\item{ALW_1}{Had drinks in the past week (1 = yes, 2 = no).} -\item{ALW_2A1}{Number of drinks on Sunday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A1}{Number of drinks on Sunday.} -\item{ALW_2A2}{Number of drinks on Monday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A2}{Number of drinks on Monday.} -\item{ALW_2A3}{Number of drinks on Tuesday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A3}{Number of drinks on Tuesday.} -\item{ALW_2A4}{Number of drinks on Wednesday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A4}{Number of drinks on Wednesday.} -\item{ALW_2A5}{Number of drinks on Thursday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A5}{Number of drinks on Thursday.} -\item{ALW_2A6}{Number of drinks on Friday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A6}{Number of drinks on Friday.} -\item{ALW_2A7}{Number of drinks on Saturday. Accepts raw CCHS codes or preprocessed values.} +\item{ALW_2A7}{Number of drinks on Saturday.} + +\item{output_format}{Output missing data format: "tagged_na" (default) +or "original".} } \value{ -Integer binge drinking indicator. Missing data handled as: - \itemize{ - \item \code{haven::tagged_na("a")} for not applicable cases (no drinking in past week) - \item \code{haven::tagged_na("b")} for missing/invalid responses - } - Values: 1 = binge drinker, 2 = non-binge drinker. +Numeric vector: 1 = binge drinker, 2 = non-binge drinker. + Missing data: \code{haven::tagged_na("a")} (not applicable), + \code{haven::tagged_na("b")} (not stated/invalid). } \description{ -Identify binge drinking patterns based on sex-specific daily consumption thresholds. Examines -daily alcohol consumption across the week, applying sex-specific binge criteria for acute -alcohol risk assessment in population health research. +Identifies binge drinking from daily consumption over the past week: +5 or more drinks on any single day for males, 4 or more for females. } \details{ -Only applied to respondents who had alcohol in past week. Non-drinkers receive not applicable status. -Enhanced preprocessing may identify different patterns compared to legacy if_else2() implementation. - -Calculation criteria: Males: Binge = ≥5 drinks on any single day; Females: Binge = ≥4 drinks on any single day. -Comprehensive preprocessing of CCHS codes (6,7,8,9 and 996-999) is applied. Priority: Not applicable > Missing > Valid assessment. +Only respondents who drank in the past week (\code{ALW_1} = 1) are +assessed; non-drinkers receive \code{haven::tagged_na("a")} (not +applicable). Missing-data handling follows the v3 3-step architecture: +input codes (6-9 single-digit, 996-999 triple-digit) are converted using +variable_details.csv metadata, with priority not applicable > not stated. +Out-of-range inputs receive the worksheet's else rule +(\code{haven::tagged_na("b")}). } \note{ -v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive preprocessing and modern missing data handling +v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step + implementation; replaces the abandoned helper-based draft. } \examples{ -# Standard cchsflow workflow (primary usage) -library(cchsflow) +# Scalar: male with 6 drinks on Tuesday +calculate_binge_drinking(1, 1, 3, 1, 6, 0, 3, 2, 2) # 1 (binge) + +# Scalar: female, at most 3 drinks on any day +calculate_binge_drinking(2, 1, 1, 2, 2, 3, 0, 1, 2) # 2 (non-binge) + +# Vector: drinker, non-drinker +calculate_binge_drinking( + c(1, 1), c(1, 2), c(6, 0), c(0, 0), c(0, 0), c(0, 0), + c(0, 0), c(0, 0), c(0, 0) +) # 1, tagged_na("a") + +# Dataframe +library(dplyr) +data.frame( + DHH_SEX = c(1, 2), ALW_1 = c(1, 1), ALW_2A1 = c(5, 2), + ALW_2A2 = c(0, 2), ALW_2A3 = c(0, 2), ALW_2A4 = c(0, 2), + ALW_2A5 = c(0, 2), ALW_2A6 = c(0, 2), ALW_2A7 = c(0, 2) +) \%>\% + mutate(binge = calculate_binge_drinking( + DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, + ALW_2A5, ALW_2A6, ALW_2A7 + )) + +\dontrun{ +# Standard cchsflow workflow result <- rec_with_table( cchs2013_2014_p, c( "DHH_SEX", "ALW_1", "ALW_2A1", "ALW_2A2", "ALW_2A3", - "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDBINGE_der" + "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "binge_drinker" ) ) - -# Scalar usage examples with variable labels -# calculate_binge_drinking(DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) -# (sex, drinks, sun, mon, tue, wed, thu, fri, sat) -calculate_binge_drinking(1, 1, 3, 1, 6, 0, 3, 8, 2) # Returns: 1L (male binge: 6 drinks Tue, 8 drinks Fri) -calculate_binge_drinking(2, 1, 1, 2, 2, 3, 0, 1, 2) # Returns: 2L (female non-binge: all days ≤3 drinks) -calculate_binge_drinking(1, 1, 4, 4, 4, 4, 4, 4, 4) # Returns: 2L (male non-binge: all days <5 drinks) -calculate_binge_drinking(2, 1, 0, 0, 0, 0, 4, 0, 0) # Returns: 1L (female binge: 4 drinks Thu exactly threshold) -calculate_binge_drinking(1, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) - -# Vector processing with missing data and edge cases -calculate_binge_drinking( - c(1, 2, 6, 7, 8, 9), # Mixed valid/CCHS codes for sex - c(1, 1, 1, 2, 1, 1), # Mixed drinking statuses - c(5, 4, 2, 0, 7, 996), # Mixed Sunday drinks with CCHS codes - c(0, 0, 0, 0, 8, 997), # Mixed Monday drinks - c(0, 0, 0, 0, 9, 998), # Tuesday - c(0, 0, 0, 0, 0, 999), # Wednesday - c(0, 0, 0, 0, 0, 0), # Thursday - c(0, 0, 0, 0, 0, 0), # Friday - c(0, 0, 0, 0, 0, 0) # Saturday -) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("a"), tagged_na("b"), tagged_na("b")) - -# Vector with string missing values -calculate_binge_drinking( - c(1, 2, "Not applicable"), # Mixed sex with string NA - c(1, 1, 1), - c(6, 3, 2), c(0, 0, 0), c(0, 0, 0), c(0, 0, 0), - c(0, 0, 0), c(0, 0, 0), c(0, 0, 0) -) # Returns: c(1L, 2L, tagged_na("b")) +} } \references{ -Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines -for low-risk drinking. Canadian Centre on Substance Abuse. +Butt, P., et al. (2011). Alcohol and health in Canada: a summary of +evidence and guidelines for low-risk drinking. Canadian Centre on +Substance Abuse. } \seealso{ -\\code{\\link{calculate_drinking_risk_short}} for short-term drinking risk assessment -\\code{\\link{calculate_drinking_risk_long}} for long-term drinking risk assessment +\code{\link{calculate_drinking_risk_short}}, + \code{\link{calculate_drinking_risk_long}} } diff --git a/man/calculate_drinking_risk_long.Rd b/man/calculate_drinking_risk_long.Rd index 35d09ebb..b922fd15 100644 --- a/man/calculate_drinking_risk_long.Rd +++ b/man/calculate_drinking_risk_long.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alcohol.R \name{calculate_drinking_risk_long} \alias{calculate_drinking_risk_long} -\title{Assess long-term alcohol health risks using Low-Risk Guidelines} +\title{Long-term (chronic) drinking risk under the Low-Risk Guidelines} \usage{ calculate_drinking_risk_long( DHH_SEX, @@ -16,93 +16,90 @@ calculate_drinking_risk_long( ALW_2A5, ALW_2A6, ALW_2A7, - min_DHH_SEX = 1, - max_DHH_SEX = 2, - min_ALWDWKY = 0, - max_ALWDWKY = 995, - min_ALC_1 = 1, - max_ALC_1 = 2, - min_ALW_1 = 1, - max_ALW_1 = 2, - min_ALW_2A1 = 0, - max_ALW_2A1 = 995, - min_ALW_2A2 = 0, - max_ALW_2A2 = 995, - min_ALW_2A3 = 0, - max_ALW_2A3 = 995, - min_ALW_2A4 = 0, - max_ALW_2A4 = 995, - min_ALW_2A5 = 0, - max_ALW_2A5 = 995, - min_ALW_2A6 = 0, - max_ALW_2A6 = 995, - min_ALW_2A7 = 0, - max_ALW_2A7 = 995, - validate_params = NULL, - log_level = "silent" + output_format = "tagged_na" ) } \arguments{ -\item{DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7}{As in calculate_drinking_risk_short()} +\item{DHH_SEX}{Sex (1 = male, 2 = female). Accepts raw CCHS codes, +tagged NAs, or labelled strings.} + +\item{ALWDWKY}{Total drinks in the past week.} + +\item{ALC_1}{Had drinks in the past year (1 = yes, 2 = no).} + +\item{ALW_1}{Had drinks in the past week (1 = yes, 2 = no).} + +\item{ALW_2A1}{Number of drinks on Sunday.} + +\item{ALW_2A2}{Number of drinks on Monday.} + +\item{ALW_2A3}{Number of drinks on Tuesday.} + +\item{ALW_2A4}{Number of drinks on Wednesday.} + +\item{ALW_2A5}{Number of drinks on Thursday.} + +\item{ALW_2A6}{Number of drinks on Friday.} + +\item{ALW_2A7}{Number of drinks on Saturday.} + +\item{output_format}{Output missing data format: "tagged_na" (default) +or "original".} } \value{ -Integer long-term risk indicator. Missing data handled as: - \itemize{ - \item \code{haven::tagged_na("a")} for not applicable cases (non-drinkers) - \item \code{haven::tagged_na("b")} for missing/invalid responses - } - Values: 1 = increased long-term risk, 2 = no increased long-term risk. +Numeric vector: 1 = increased long-term risk, 2 = no increased + long-term risk. Missing data: \code{haven::tagged_na("a")} (not + applicable), \code{haven::tagged_na("b")} (not stated/invalid). } \description{ -Assess long-term health risks from drinking patterns following Canada's Low-Risk Guidelines. -Evaluates daily and weekly consumption against sex-specific chronic risk thresholds for -long-term health outcomes assessment. +Assesses long-term health risk from drinking patterns following Canada's +Low-Risk Alcohol Drinking Guidelines: risk is flagged when daily +consumption reaches 4 drinks (males) / 3 drinks (females) on any day, or +weekly consumption reaches 20 drinks (males) / 15 drinks (females). } \details{ -Risk criteria: Males: ≥4 drinks/day OR ≥20 drinks/week; Females: ≥3 drinks/day OR ≥15 drinks/week. -Focus on chronic health risks (liver disease, cancer, cardiovascular). Same preprocessing and -missing data handling as short-term version. +Non-drinkers in the past year (\code{ALC_1} = 2) or past week +(\code{ALW_1} = 2) receive \code{haven::tagged_na("a")} (not applicable). +Thresholds are reached inclusively (e.g. exactly 20 drinks/week flags a +male respondent). Missing-data handling follows the v3 3-step +architecture with priority not applicable > not stated; out-of-range +inputs receive the worksheet's else rule. } \note{ -v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive long-term risk assessment +v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step + implementation; replaces the abandoned helper-based draft. } \examples{ -# Standard cchsflow workflow (primary usage) -library(cchsflow) +# Scalar: male reaching the weekly threshold +calculate_drinking_risk_long(1, 20, 1, 1, 3, 3, 3, 3, 3, 3, 2) # 1 + +# Scalar: female within thresholds +calculate_drinking_risk_long(2, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1) # 2 + +# Vector: at-risk male, non-drinker +calculate_drinking_risk_long( + c(1, 1), c(20, 0), c(1, 2), c(1, 2), c(3, 0), c(3, 0), + c(3, 0), c(3, 0), c(3, 0), c(3, 0), c(2, 0) +) # 1, tagged_na("a") + +\dontrun{ +# Standard cchsflow workflow result <- rec_with_table( cchs2013_2014_p, c( "DHH_SEX", "ALWDWKY", "ALC_1", "ALW_1", "ALW_2A1", "ALW_2A2", - "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDLOWL_der" + "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDVLTR_der" ) ) - -# Scalar usage examples with variable labels -# calculate_drinking_risk_long(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) -# (sex, weekly, year, week, sun, mon, tue, wed, thu, fri, sat) -calculate_drinking_risk_long(1, 20, 1, 1, 0, 0, 4, 0, 0, 0, 0) # Returns: 1L (male long-term risk: 4 drinks/day OR 20/week) -calculate_drinking_risk_long(2, 14, 1, 1, 2, 2, 2, 2, 2, 2, 2) # Returns: 2L (female no risk: <3 drinks/day AND <15/week) -calculate_drinking_risk_long(1, 19, 1, 1, 3, 3, 3, 3, 3, 3, 1) # Returns: 2L (male no risk: <4 drinks/day AND <20/week) -calculate_drinking_risk_long(2, 15, 1, 1, 2, 2, 2, 2, 2, 2, 3) # Returns: 1L (female risk: 15 drinks/week exactly threshold) -calculate_drinking_risk_long(1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) - -# Vector processing with missing data and edge cases -calculate_drinking_risk_long( - c(1, 2, 6, 8, 9), # Mixed valid/CCHS codes for sex - c(20, 15, 8, 996, 997), # Mixed weekly drinks with CCHS codes - c(1, 1, 1, 1, 2), # Mixed alcohol use statuses - c(1, 1, 1, 2, 1), # Mixed weekly drinking statuses - c(4, 3, 2, 0, 7), # Mixed Sunday drinks - c(0, 0, 0, 0, 8), c(0, 0, 0, 0, 9), c(0, 0, 0, 0, 0), - c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0) -) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("b"), tagged_na("a")) +} } \references{ -Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines -for low-risk drinking. Canadian Centre on Substance Abuse. +Butt, P., et al. (2011). Alcohol and health in Canada: a summary of +evidence and guidelines for low-risk drinking. Canadian Centre on +Substance Abuse. } \seealso{ -\code{\link{calculate_drinking_risk_short}} for short-term drinking risk assessment -\code{\link{calculate_binge_drinking}} for binge drinking assessment +\code{\link{calculate_binge_drinking}}, + \code{\link{calculate_drinking_risk_short}} } diff --git a/man/calculate_drinking_risk_short.Rd b/man/calculate_drinking_risk_short.Rd index 85444fe9..1aa3e3d6 100644 --- a/man/calculate_drinking_risk_short.Rd +++ b/man/calculate_drinking_risk_short.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alcohol.R \name{calculate_drinking_risk_short} \alias{calculate_drinking_risk_short} -\title{Assess short-term alcohol health risks using Low-Risk Guidelines} +\title{Short-term (acute) drinking risk under the Low-Risk Guidelines} \usage{ calculate_drinking_risk_short( DHH_SEX, @@ -16,100 +16,90 @@ calculate_drinking_risk_short( ALW_2A5, ALW_2A6, ALW_2A7, - min_DHH_SEX = 1, - max_DHH_SEX = 2, - min_ALWDWKY = 0, - max_ALWDWKY = 995, - min_ALC_1 = 1, - max_ALC_1 = 2, - min_ALW_1 = 1, - max_ALW_1 = 2, - min_ALW_2A1 = 0, - max_ALW_2A1 = 995, - min_ALW_2A2 = 0, - max_ALW_2A2 = 995, - min_ALW_2A3 = 0, - max_ALW_2A3 = 995, - min_ALW_2A4 = 0, - max_ALW_2A4 = 995, - min_ALW_2A5 = 0, - max_ALW_2A5 = 995, - min_ALW_2A6 = 0, - max_ALW_2A6 = 995, - min_ALW_2A7 = 0, - max_ALW_2A7 = 995, - validate_params = NULL, - log_level = "silent" + output_format = "tagged_na" ) } \arguments{ -\item{DHH_SEX, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7}{As in calculate_binge_drinking()} +\item{DHH_SEX}{Sex (1 = male, 2 = female). Accepts raw CCHS codes, +tagged NAs, or labelled strings.} -\item{ALWDWKY}{Total drinks in past week. Accepts raw CCHS codes or preprocessed values.} +\item{ALWDWKY}{Total drinks in the past week.} -\item{ALC_1}{Had drinks in past year (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +\item{ALC_1}{Had drinks in the past year (1 = yes, 2 = no).} + +\item{ALW_1}{Had drinks in the past week (1 = yes, 2 = no).} + +\item{ALW_2A1}{Number of drinks on Sunday.} + +\item{ALW_2A2}{Number of drinks on Monday.} + +\item{ALW_2A3}{Number of drinks on Tuesday.} + +\item{ALW_2A4}{Number of drinks on Wednesday.} + +\item{ALW_2A5}{Number of drinks on Thursday.} + +\item{ALW_2A6}{Number of drinks on Friday.} + +\item{ALW_2A7}{Number of drinks on Saturday.} + +\item{output_format}{Output missing data format: "tagged_na" (default) +or "original".} } \value{ -Integer short-term risk indicator. Missing data handled as: - \itemize{ - \item \code{haven::tagged_na("a")} for not applicable cases (non-drinkers) - \item \code{haven::tagged_na("b")} for missing/invalid responses - } - Values: 1 = increased short-term risk, 2 = no increased short-term risk. +Numeric vector: 1 = increased short-term risk, 2 = no increased + short-term risk. Missing data: \code{haven::tagged_na("a")} (not + applicable), \code{haven::tagged_na("b")} (not stated/invalid). } \description{ -Assess short-term health risks from drinking patterns following Canada's Low-Risk Guidelines. -Evaluates daily and weekly consumption against sex-specific acute risk thresholds for -injury and overdose risk assessment. +Assesses short-term health risk from drinking patterns following Canada's +Low-Risk Alcohol Drinking Guidelines: risk is flagged when daily +consumption exceeds 3 drinks (males) / 2 drinks (females) on any day, or +weekly consumption exceeds 15 drinks (males) / 10 drinks (females). } \details{ -Based on Canada's Low-Risk Alcohol Drinking Guidelines. Thresholds may differ from other national guidelines. -Non-drinkers (past year or week) receive "no increased risk" classification. - -Risk criteria: Males: >4 drinks/day OR >15 drinks/week; Females: >3 drinks/day OR >10 drinks/week. -Comprehensive preprocessing with priority handling is applied. Non-drinkers are automatically -classified as "no increased risk". +Non-drinkers in the past year (\code{ALC_1} = 2) or past week +(\code{ALW_1} = 2) receive \code{haven::tagged_na("a")} (not applicable). +Thresholds are exceeded strictly (e.g. 4+ drinks on a day for males). +Missing-data handling follows the v3 3-step architecture with priority +not applicable > not stated; out-of-range inputs receive the worksheet's +else rule. } \note{ -v3.0.0, last updated: 2025-07-05, status: active, Note: Enhanced with comprehensive risk assessment and missing data handling +v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step + implementation; replaces the abandoned helper-based draft. } \examples{ -# Standard cchsflow workflow (primary usage) -library(cchsflow) +# Scalar: male exceeding daily and weekly thresholds +calculate_drinking_risk_short(1, 20, 1, 1, 0, 0, 5, 0, 0, 0, 0) # 1 + +# Scalar: female within thresholds +calculate_drinking_risk_short(2, 8, 1, 1, 2, 1, 2, 1, 1, 1, 0) # 2 + +# Vector: at-risk male, non-drinker +calculate_drinking_risk_short( + c(1, 1), c(25, 0), c(1, 2), c(1, 2), c(5, 0), c(5, 0), + c(5, 0), c(5, 0), c(5, 0), c(0, 0), c(0, 0) +) # 1, tagged_na("a") + +\dontrun{ +# Standard cchsflow workflow result <- rec_with_table( cchs2013_2014_p, c( "DHH_SEX", "ALWDWKY", "ALC_1", "ALW_1", "ALW_2A1", "ALW_2A2", - "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALCDLOWI_der" + "ALW_2A3", "ALW_2A4", "ALW_2A5", "ALW_2A6", "ALW_2A7", "ALWDVSTR_der" ) ) - -# Scalar usage examples with variable labels -# calculate_drinking_risk_short(DHH_SEX, ALWDWKY, ALC_1, ALW_1, ALW_2A1, ALW_2A2, ALW_2A3, ALW_2A4, ALW_2A5, ALW_2A6, ALW_2A7) -# (sex, weekly, year, week, sun, mon, tue, wed, thu, fri, sat) -calculate_drinking_risk_short(1, 20, 1, 1, 0, 0, 5, 0, 0, 0, 0) # Returns: 1L (male short-term risk: 5 drinks/day OR 20/week) -calculate_drinking_risk_short(2, 8, 1, 1, 2, 1, 2, 1, 1, 1, 0) # Returns: 2L (female no risk: ≤2 drinks/day AND ≤10/week) -calculate_drinking_risk_short(1, 15, 1, 1, 3, 3, 3, 3, 3, 0, 0) # Returns: 2L (male no risk: ≤3 drinks/day AND ≤15/week) -calculate_drinking_risk_short(2, 11, 1, 1, 2, 2, 2, 2, 2, 1, 0) # Returns: 1L (female risk: 11 drinks/week exceeds 10) -calculate_drinking_risk_short(1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0) # Returns: tagged_na("a") (non-drinker: not applicable) - -# Vector processing with missing data and edge cases -calculate_drinking_risk_short( - c(1, 2, 6, 8, 9), # Mixed valid/CCHS codes for sex - c(16, 11, 5, 996, 997), # Mixed weekly drinks with CCHS codes - c(1, 1, 1, 1, 2), # Mixed alcohol use statuses - c(1, 1, 1, 2, 1), # Mixed weekly drinking statuses - c(4, 3, 1, 0, 7), # Mixed Sunday drinks - c(0, 0, 0, 0, 8), c(0, 0, 0, 0, 9), c(0, 0, 0, 0, 0), - c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0), c(0, 0, 0, 0, 0) -) # Returns: c(1L, 1L, tagged_na("b"), tagged_na("b"), tagged_na("a")) +} } \references{ -Butt, P., et al. (2011). Alcohol and health in Canada: a summary of evidence and guidelines -for low-risk drinking. Canadian Centre on Substance Abuse. +Butt, P., et al. (2011). Alcohol and health in Canada: a summary of +evidence and guidelines for low-risk drinking. Canadian Centre on +Substance Abuse. } \seealso{ -\code{\link{calculate_binge_drinking}} for binge drinking assessment -\code{\link{calculate_drinking_risk_long}} for long-term drinking risk assessment +\code{\link{calculate_binge_drinking}}, + \code{\link{calculate_drinking_risk_long}} } diff --git a/man/score_adl.Rd b/man/score_adl.Rd index 9646e184..8d22c873 100644 --- a/man/score_adl.Rd +++ b/man/score_adl.Rd @@ -2,95 +2,73 @@ % Please edit documentation in R/adl.R \name{score_adl} \alias{score_adl} -\title{Enhanced ADL help score (count of tasks requiring help)} +\title{Activities of Daily Living (ADL) 5-item help score} \usage{ -score_adl( - ADL_01, - ADL_02, - ADL_03, - ADL_04, - ADL_05, - min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, - validate_params = NULL, - log_level = "silent" -) +score_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, output_format = "tagged_na") } \arguments{ -\item{ADL_01, ADL_02, ADL_03, ADL_04, ADL_05}{ADL variables as in assess_adl()} +\item{ADL_01}{Help needed preparing meals (1 = yes, 2 = no). Accepts raw +CCHS codes, tagged NAs, or labelled strings.} + +\item{ADL_02}{Help needed getting to appointments/errands (1 = yes, 2 = no).} -\item{min_ADL_01, max_ADL_01, min_ADL_02, max_ADL_02, min_ADL_03, max_ADL_03, min_ADL_04, max_ADL_04, min_ADL_05, max_ADL_05}{Validation parameters (defaults from variable_details.csv)} +\item{ADL_03}{Help needed doing housework (1 = yes, 2 = no).} -\item{validate_params}{Auto-detect validation mode (default NULL for auto-detection)} +\item{ADL_04}{Help needed doing personal care (1 = yes, 2 = no).} -\item{log_level}{Logging level: "silent" (default), "warning", "verbose"} +\item{ADL_05}{Help needed moving inside the house (1 = yes, 2 = no).} + +\item{output_format}{Output missing data format: "tagged_na" (default) +or "original".} } \value{ -**Data Type**: Numeric count (0-5) -**Missing Data Handling**: -- Returns `haven::tagged_na("a")` if any input is not applicable -- Returns `haven::tagged_na("b")` if any input is missing/invalid -**Values**: 0-5 representing count of tasks requiring help +Numeric count 0-5. Missing data: + \code{haven::tagged_na("a")} (not applicable), + \code{haven::tagged_na("b")} (not stated/invalid). } \description{ -**Purpose**: Count number of ADL tasks requiring help (0-5 scale) for granular functional assessment -**Method**: Sums "needs help" responses across 5 consistent ADL items -**Clinical Context**: Graduated disability measure for research and clinical assessment +Counts the number of ADL tasks (0-5) for which the respondent needs help, +using the 5 tasks asked consistently across CCHS cycles. } \details{ -**Transformation Warnings**: -⚠️ **CAUTION - Methodological Changes**: Count-based scoring provides more -granular assessment than binary indicator but requires complete data for valid interpretation. - -**Calculation Details**: -- Counts number of ADL tasks with "needs help" response (=1) -- Range: 0 (independent) to 5 (maximum dependence) -- Missing data in ANY item invalidates entire score -- Preserves not applicable semantics across all items +Provides a graduated disability measure: 0 (independent) to +5 (needs help with all tasks). Missing data in any item invalidates the +score, with priority not applicable > not stated. See +\code{\link{assess_adl}} for the task list and cross-cycle notes. } \note{ -v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced scoring with comprehensive missing data validation +v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step + implementation; replaces the abandoned helper-based draft. } \examples{ -# Standard cchsflow workflow (primary usage) -library(cchsflow) -result <- rec_with_table( - cchs2013_2014_p, - c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADLSCORE_der") -) +# Scalar +score_adl(2, 2, 2, 2, 2) # 0 (independent) +score_adl(1, 2, 1, 2, 2) # 2 (help with two tasks) -# Scalar usage examples -# score_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05) -# (meals, appts, house, care, move) -score_adl(2, 2, 2, 2, 2) # Returns: 0 (no help needed) -score_adl(1, 2, 1, 2, 2) # Returns: 2 (help with 2 tasks: meals and housework) -score_adl(1, 1, 1, 1, 1) # Returns: 5 (complete dependence) -score_adl(1, 2, 2, 2, 2) # Returns: 1 (help with 1 task: meals only) +# Vector +score_adl(c(1, 2), c(1, 2), c(2, 2), c(1, 2), c(2, 2)) # 3, 0 -# Vector processing with missing data -score_adl( - c(1, 2, 6, 7), # Mixed valid/missing codes - c(1, 2, 2, 2), - c(2, 1, 2, 2), - c(2, 2, 2, 2), - c(2, 2, 2, 2) -) # Returns: c(2, 1, tagged_na("a"), tagged_na("b")) +# Dataframe +library(dplyr) +data.frame( + ADL_01 = c(1, 2), ADL_02 = c(1, 2), ADL_03 = c(2, 2), + ADL_04 = c(1, 2), ADL_05 = c(2, 2) +) \%>\% + mutate(adl_score = score_adl(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05)) -# Vector with mixed missing types -score_adl( - c(1, 2, "Missing", haven::tagged_na("a")), - c(1, 2, 2, 2), - c(2, 2, 2, 2), - c(2, 2, 2, 2), - c(2, 2, 2, 2) -) # Returns: c(2, 1, tagged_na("b"), tagged_na("a")) +\dontrun{ +# Standard cchsflow workflow +result <- rec_with_table( + cchs2013_2014_p, + c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_score_5") +) +} } +\references{ +Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. +JAMA, 185(12), 914-919. +} +\seealso{ +\code{\link{assess_adl}}, \code{\link{score_adl_6}} +} diff --git a/man/score_adl_6.Rd b/man/score_adl_6.Rd index eab1e1ec..708cfd33 100644 --- a/man/score_adl_6.Rd +++ b/man/score_adl_6.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/adl.R \name{score_adl_6} \alias{score_adl_6} -\title{Enhanced 6-item ADL help score with comprehensive validation} +\title{Activities of Daily Living (ADL) 6-item help score} \usage{ score_adl_6( ADL_01, @@ -11,94 +11,71 @@ score_adl_6( ADL_04, ADL_05, ADL_06, - min_ADL_01 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_01 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_02 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_02 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_03 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_03 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_04 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_04 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_05 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_05 = ADL_VALIDATION_BOUNDS$response$max, - min_ADL_06 = ADL_VALIDATION_BOUNDS$response$min, - max_ADL_06 = ADL_VALIDATION_BOUNDS$response$max, - validate_params = NULL, - log_level = "silent" + output_format = "tagged_na" ) } \arguments{ -\item{ADL_01, ADL_02, ADL_03, ADL_04, ADL_05}{Core ADL variables as in other functions} +\item{ADL_01}{Help needed preparing meals (1 = yes, 2 = no). Accepts raw +CCHS codes, tagged NAs, or labelled strings.} -\item{ADL_06}{Help needed doing finances (1=yes, 2=no). Accepts raw CCHS codes or preprocessed values.} +\item{ADL_02}{Help needed getting to appointments/errands (1 = yes, 2 = no).} -\item{min_ADL_01, max_ADL_01, min_ADL_02, max_ADL_02, min_ADL_03, max_ADL_03, min_ADL_04, max_ADL_04, min_ADL_05, max_ADL_05, min_ADL_06, max_ADL_06}{Validation parameters (defaults from variable_details.csv)} +\item{ADL_03}{Help needed doing housework (1 = yes, 2 = no).} -\item{validate_params}{Auto-detect validation mode (default NULL for auto-detection)} +\item{ADL_04}{Help needed doing personal care (1 = yes, 2 = no).} -\item{log_level}{Logging level: "silent" (default), "warning", "verbose"} +\item{ADL_05}{Help needed moving inside the house (1 = yes, 2 = no).} + +\item{ADL_06}{Help needed managing finances (1 = yes, 2 = no). Accepts raw +CCHS codes, tagged NAs, or labelled strings.} + +\item{output_format}{Output missing data format: "tagged_na" (default) +or "original".} } \value{ -**Data Type**: Numeric count (0-6) -**Missing Data Handling**: Same as 5-item version -**Values**: 0-6 representing count of tasks requiring help +Numeric count 0-6. Missing data: + \code{haven::tagged_na("a")} (not applicable), + \code{haven::tagged_na("b")} (not stated/invalid). } \description{ -**Purpose**: Count ADL help requirements using 6-item scale including financial management -**Method**: Extends 5-item ADL to include financial management (available 2003+) -**Clinical Context**: Comprehensive functional assessment including instrumental ADL component +Counts the number of ADL tasks (0-6) for which the respondent needs help, +extending the 5-item score with financial management. } \details{ -**Transformation Warnings**: -⚠️ **CAUTION - Temporal Changes**: ADL_06 (finances) available only in CCHS -2003-2014 cycles. Use 5-item version for 2001 or 2015+ analyses. - -⚠️ **CAUTION - Population Restrictions**: Financial management questions may -have different age restrictions or applicability rules across cycles. - -**Calculation Details**: -- Extends 5-item ADL with financial management component -- Range: 0 (independent) to 6 (maximum dependence) -- Same missing data handling as 5-item version -- Recommended for 2003-2014 cycle analyses +ADL_06 (help managing finances) is available in CCHS 2003-2014 cycles +only; use \code{\link{score_adl}} for 2001 or 2015+ analyses. Missing +data handling matches the 5-item version. } \note{ -v3.0.0, last updated: 2025-06-30, status: active, Note: Enhanced 6-item scoring for comprehensive functional assessment +v3.0.0, last updated: 2026-06-10, status: active. Canonical 3-step + implementation; replaces the abandoned helper-based draft. } \examples{ -# Standard cchsflow workflow (primary usage) -library(cchsflow) -result <- rec_with_table( - cchs2007_2008_p, - c("ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_06", "ADLSCORE6_der") -) - -# Scalar usage examples -# score_adl_6(ADL_01, ADL_02, ADL_03, ADL_04, ADL_05, ADL_06) -# (meals, appts, house, care, move, finances) -score_adl_6(2, 2, 2, 2, 2, 2) # Returns: 0 (independent with all tasks) -score_adl_6(1, 2, 1, 2, 2, 1) # Returns: 3 (help with 3 tasks: meals, housework, finances) -score_adl_6(1, 1, 1, 1, 1, 1) # Returns: 6 (complete dependence) -score_adl_6(2, 2, 2, 2, 2, 1) # Returns: 1 (help only with finances) +# Scalar +score_adl_6(2, 2, 2, 2, 2, 2) # 0 (independent) +score_adl_6(1, 2, 1, 2, 2, 1) # 3 (help with three tasks) -# Vector processing with missing data and edge cases +# Vector score_adl_6( - c(1, 2, 6, 96), # Mixed valid/categorical age codes - c(1, 2, 2, 2), - c(2, 1, 2, 2), - c(2, 2, 2, 2), - c(2, 2, 2, 2), - c(2, 2, 2, 97) # "Don't know" for finances -) # Returns: c(2, 1, tagged_na("a"), tagged_na("b")) + c(1, 2), c(1, 2), c(2, 2), c(1, 2), c(2, 2), c(1, 2) +) # 4, 0 -# Vector demonstrating financial component (ADL_06) -score_adl_6( - c(2, 2, 2), # No help with basic ADLs - c(2, 2, 2), - c(2, 2, 2), - c(2, 2, 2), - c(2, 2, 2), - c(1, "Refusal", 2) # Different financial help needs -) # Returns: c(1, tagged_na("b"), 0) +\dontrun{ +# Standard cchsflow workflow (2003-2014 cycles) +result <- rec_with_table( + cchs2007_2008_p, + c( + "ADL_01", "ADL_02", "ADL_03", "ADL_04", "ADL_05", "ADL_06", + "ADL_score_6" + ) +) +} } +\references{ +Katz, S., et al. (1963). Studies of illness in the aged: The index of ADL. +JAMA, 185(12), 914-919. +} +\seealso{ +\code{\link{assess_adl}}, \code{\link{score_adl}} +} diff --git a/tests/testthat/test-adl.R b/tests/testthat/test-adl.R index 4e72625e..7a4131e7 100644 --- a/tests/testthat/test-adl.R +++ b/tests/testthat/test-adl.R @@ -23,24 +23,22 @@ library(dplyr) test_that("assess_adl() handles basic valid inputs correctly", { # Needs help with all activities result_needs_help <- assess_adl( - ADL_01 = 1, ADL_02 = 1, ADL_03 = 1, ADL_04 = 1, ADL_05 = 1, - log_level = "silent" + ADL_01 = 1, ADL_02 = 1, ADL_03 = 1, ADL_04 = 1, ADL_05 = 1 ) expect_equal(result_needs_help, 1L) # No help needed result_no_help <- assess_adl( - ADL_01 = 2, ADL_02 = 2, ADL_03 = 2, ADL_04 = 2, ADL_05 = 2, - log_level = "silent" + ADL_01 = 2, ADL_02 = 2, ADL_03 = 2, ADL_04 = 2, ADL_05 = 2 ) expect_equal(result_no_help, 2L) # Needs help with one task - result_one <- assess_adl(1, 2, 2, 2, 2, log_level = "silent") + result_one <- assess_adl(1, 2, 2, 2, 2) expect_equal(result_one, 1L) # Needs help with multiple tasks - result_multiple <- assess_adl(1, 1, 2, 2, 2, log_level = "silent") + result_multiple <- assess_adl(1, 1, 2, 2, 2) expect_equal(result_multiple, 1L) }) @@ -51,20 +49,18 @@ test_that("assess_adl() handles vector inputs correctly", { ADL_02 = c(2, 2, 1), ADL_03 = c(1, 2, 1), ADL_04 = c(2, 2, 1), - ADL_05 = c(2, 2, 1), - log_level = "silent" + ADL_05 = c(2, 2, 1) ) expect_equal(result_vector, c(1L, 2L, 1L)) }) test_that("assess_adl() handles scalar/vector combinations", { # Scalar ADL_01, vector others - result1 <- assess_adl(1, c(2, 2, 2), c(2, 2, 2), c(2, 2, 2), c(2, 2, 2), - log_level = "silent") + result1 <- assess_adl(1, c(2, 2, 2), c(2, 2, 2), c(2, 2, 2), c(2, 2, 2)) expect_equal(result1, c(1L, 1L, 1L)) # Vector ADL_01, scalar others - result2 <- assess_adl(c(1, 2, 2), 2, 2, 2, 2, log_level = "silent") + result2 <- assess_adl(c(1, 2, 2), 2, 2, 2, 2) expect_equal(result2, c(1L, 2L, 2L)) }) @@ -74,63 +70,63 @@ test_that("assess_adl() handles scalar/vector combinations", { test_that("assess_adl() handles raw CCHS missing codes correctly", { # Not applicable (6) -> tagged_na("a") - result_6 <- assess_adl(6, 2, 2, 2, 2, log_level = "silent") + result_6 <- assess_adl(6, 2, 2, 2, 2) expect_true(haven::is_tagged_na(result_6, "a")) # Don't know (7) -> tagged_na("b") - result_7 <- assess_adl(2, 7, 2, 2, 2, log_level = "silent") + result_7 <- assess_adl(2, 7, 2, 2, 2) expect_true(haven::is_tagged_na(result_7, "b")) # Refusal (8) -> tagged_na("b") - result_8 <- assess_adl(2, 2, 8, 2, 2, log_level = "silent") + result_8 <- assess_adl(2, 2, 8, 2, 2) expect_true(haven::is_tagged_na(result_8, "b")) # Not stated (9) -> tagged_na("b") - result_9 <- assess_adl(2, 2, 2, 9, 2, log_level = "silent") + result_9 <- assess_adl(2, 2, 2, 9, 2) expect_true(haven::is_tagged_na(result_9, "b")) }) test_that("assess_adl() handles string NA inputs", { - result_na_string <- assess_adl("Not applicable", 2, 2, 2, 2, log_level = "silent") + result_na_string <- assess_adl("Not applicable", 2, 2, 2, 2) expect_true(haven::is_tagged_na(result_na_string, "a")) - result_missing_string <- assess_adl(2, "Missing", 2, 2, 2, log_level = "silent") + result_missing_string <- assess_adl(2, "Missing", 2, 2, 2) expect_true(haven::is_tagged_na(result_missing_string, "b")) - result_dk_string <- assess_adl(2, 2, "Don't know", 2, 2, log_level = "silent") + result_dk_string <- assess_adl(2, 2, "Don't know", 2, 2) expect_true(haven::is_tagged_na(result_dk_string, "b")) - result_refusal_string <- assess_adl(2, 2, 2, "Refusal", 2, log_level = "silent") + result_refusal_string <- assess_adl(2, 2, 2, "Refusal", 2) expect_true(haven::is_tagged_na(result_refusal_string, "b")) }) test_that("assess_adl() preserves haven::tagged_na inputs", { - result_na_a <- assess_adl(haven::tagged_na("a"), 2, 2, 2, 2, log_level = "silent") + result_na_a <- assess_adl(haven::tagged_na("a"), 2, 2, 2, 2) expect_true(haven::is_tagged_na(result_na_a, "a")) - result_na_b <- assess_adl(2, haven::tagged_na("b"), 2, 2, 2, log_level = "silent") + result_na_b <- assess_adl(2, haven::tagged_na("b"), 2, 2, 2) expect_true(haven::is_tagged_na(result_na_b, "b")) # Class should be preserved input_tagged <- haven::tagged_na("a") - result_tagged <- assess_adl(input_tagged, 2, 2, 2, 2, log_level = "silent") + result_tagged <- assess_adl(input_tagged, 2, 2, 2, 2) expect_identical(class(result_tagged), class(input_tagged)) }) test_that("assess_adl() handles out of range inputs correctly", { - result_invalid_adl01 <- assess_adl(-1, 1, 1, 1, 1, log_level = "silent") + result_invalid_adl01 <- assess_adl(-1, 1, 1, 1, 1) expect_true(is_tagged_na(result_invalid_adl01, "b")) - result_invalid_adl02 <- assess_adl(1, -1, 1, 1, 1, log_level = "silent") + result_invalid_adl02 <- assess_adl(1, -1, 1, 1, 1) expect_true(is_tagged_na(result_invalid_adl02, "b")) - result_invalid_adl03 <- assess_adl(1, 1, -1, 1, 1, log_level = "silent") + result_invalid_adl03 <- assess_adl(1, 1, -1, 1, 1) expect_true(is_tagged_na(result_invalid_adl03, "b")) - result_invalid_adl04 <- assess_adl(1, 1, 1, -1, 1, log_level = "silent") + result_invalid_adl04 <- assess_adl(1, 1, 1, -1, 1) expect_true(is_tagged_na(result_invalid_adl04, "b")) - result_invalid_adl05 <- assess_adl(1, 1, 1, 1, -1, log_level = "silent") + result_invalid_adl05 <- assess_adl(1, 1, 1, 1, -1) expect_true(is_tagged_na(result_invalid_adl05, "b")) }) @@ -141,7 +137,7 @@ test_that("assess_adl() handles mixed missing data scenarios", { adl_04 <- c(2, 2, 2, 2, 2) adl_05 <- c(2, 2, 2, 2, 2) - results <- assess_adl(adl_01, adl_02, adl_03, adl_04, adl_05, log_level = "silent") + results <- assess_adl(adl_01, adl_02, adl_03, adl_04, adl_05) expect_equal(length(results), 5) expect_equal(results[1], 1L) # valid - needs help @@ -157,77 +153,73 @@ test_that("assess_adl() handles mixed missing data scenarios", { test_that("score_adl() handles basic valid inputs correctly", { result_max_score <- score_adl( - ADL_01 = 1, ADL_02 = 1, ADL_03 = 1, ADL_04 = 1, ADL_05 = 1, - log_level = "silent" + ADL_01 = 1, ADL_02 = 1, ADL_03 = 1, ADL_04 = 1, ADL_05 = 1 ) expect_equal(result_max_score, 5L) result_min_score <- score_adl( - ADL_01 = 2, ADL_02 = 2, ADL_03 = 2, ADL_04 = 2, ADL_05 = 2, - log_level = "silent" + ADL_01 = 2, ADL_02 = 2, ADL_03 = 2, ADL_04 = 2, ADL_05 = 2 ) expect_equal(result_min_score, 0L) result_partial_score <- score_adl( - ADL_01 = 1, ADL_02 = 2, ADL_03 = 1, ADL_04 = 2, ADL_05 = 2, - log_level = "silent" + ADL_01 = 1, ADL_02 = 2, ADL_03 = 1, ADL_04 = 2, ADL_05 = 2 ) expect_equal(result_partial_score, 2L) }) test_that("score_adl() handles raw CCHS missing codes correctly", { - result_6 <- score_adl(6, 1, 1, 1, 1, log_level = "silent") + result_6 <- score_adl(6, 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_6, "a")) - result_7 <- score_adl(1, 7, 1, 1, 1, log_level = "silent") + result_7 <- score_adl(1, 7, 1, 1, 1) expect_true(haven::is_tagged_na(result_7, "b")) - result_8 <- score_adl(1, 1, 8, 1, 1, log_level = "silent") + result_8 <- score_adl(1, 1, 8, 1, 1) expect_true(haven::is_tagged_na(result_8, "b")) - result_9 <- score_adl(1, 1, 1, 9, 1, log_level = "silent") + result_9 <- score_adl(1, 1, 1, 9, 1) expect_true(haven::is_tagged_na(result_9, "b")) }) test_that("score_adl() handles string NA inputs", { - result_na_string <- score_adl("Not applicable", 1, 1, 1, 1, log_level = "silent") + result_na_string <- score_adl("Not applicable", 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_na_string, "a")) - result_missing_string <- score_adl(1, "Missing", 1, 1, 1, log_level = "silent") + result_missing_string <- score_adl(1, "Missing", 1, 1, 1) expect_true(haven::is_tagged_na(result_missing_string, "b")) - result_dk_string <- score_adl(1, 1, "Don't know", 1, 1, log_level = "silent") + result_dk_string <- score_adl(1, 1, "Don't know", 1, 1) expect_true(haven::is_tagged_na(result_dk_string, "b")) }) test_that("score_adl() handles tagged_na inputs correctly", { # Not applicable should take priority - result_na_a <- score_adl(haven::tagged_na("a"), 1, 1, 1, 1, log_level = "silent") + result_na_a <- score_adl(haven::tagged_na("a"), 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_na_a, "a")) - result_na_b <- score_adl(1, haven::tagged_na("b"), 1, 1, 1, log_level = "silent") + result_na_b <- score_adl(1, haven::tagged_na("b"), 1, 1, 1) expect_true(haven::is_tagged_na(result_na_b, "b")) # Not applicable takes priority over missing - result_mixed <- score_adl(haven::tagged_na("a"), haven::tagged_na("b"), 1, 1, 1, - log_level = "silent") + result_mixed <- score_adl(haven::tagged_na("a"), haven::tagged_na("b"), 1, 1, 1) expect_true(haven::is_tagged_na(result_mixed, "a")) }) test_that("score_adl() handles out of range inputs correctly", { - result_invalid <- score_adl(-1, 1, 1, 1, 1, log_level = "silent") + result_invalid <- score_adl(-1, 1, 1, 1, 1) expect_true(is_tagged_na(result_invalid, "b")) - result_invalid2 <- score_adl(1, -1, 1, 1, 1, log_level = "silent") + result_invalid2 <- score_adl(1, -1, 1, 1, 1) expect_true(is_tagged_na(result_invalid2, "b")) - result_invalid3 <- score_adl(1, 1, -1, 1, 1, log_level = "silent") + result_invalid3 <- score_adl(1, 1, -1, 1, 1) expect_true(is_tagged_na(result_invalid3, "b")) - result_invalid4 <- score_adl(1, 1, 1, -1, 1, log_level = "silent") + result_invalid4 <- score_adl(1, 1, 1, -1, 1) expect_true(is_tagged_na(result_invalid4, "b")) - result_invalid5 <- score_adl(1, 1, 1, 1, -1, log_level = "silent") + result_invalid5 <- score_adl(1, 1, 1, 1, -1) expect_true(is_tagged_na(result_invalid5, "b")) }) @@ -237,8 +229,7 @@ test_that("score_adl() handles vector inputs correctly", { ADL_02 = c(1, 2, 2, 2), ADL_03 = c(2, 2, 1, 2), ADL_04 = c(1, 2, 1, 2), - ADL_05 = c(2, 2, 2, 2), - log_level = "silent" + ADL_05 = c(2, 2, 2, 2) ) expect_equal(result_vector, c(3L, 0L, 3L, 0L)) }) @@ -249,55 +240,50 @@ test_that("score_adl() handles vector inputs correctly", { test_that("score_adl_6() handles basic valid inputs correctly", { result_max_score <- score_adl_6( - ADL_01 = 1, ADL_02 = 1, ADL_03 = 1, ADL_04 = 1, ADL_05 = 1, ADL_06 = 1, - log_level = "silent" + ADL_01 = 1, ADL_02 = 1, ADL_03 = 1, ADL_04 = 1, ADL_05 = 1, ADL_06 = 1 ) expect_equal(result_max_score, 6L) result_min_score <- score_adl_6( - ADL_01 = 2, ADL_02 = 2, ADL_03 = 2, ADL_04 = 2, ADL_05 = 2, ADL_06 = 2, - log_level = "silent" + ADL_01 = 2, ADL_02 = 2, ADL_03 = 2, ADL_04 = 2, ADL_05 = 2, ADL_06 = 2 ) expect_equal(result_min_score, 0L) result_partial_score <- score_adl_6( - ADL_01 = 1, ADL_02 = 2, ADL_03 = 1, ADL_04 = 2, ADL_05 = 1, ADL_06 = 2, - log_level = "silent" + ADL_01 = 1, ADL_02 = 2, ADL_03 = 1, ADL_04 = 2, ADL_05 = 1, ADL_06 = 2 ) expect_equal(result_partial_score, 3L) }) test_that("score_adl_6() handles raw CCHS missing codes correctly", { - result_6 <- score_adl_6(6, 1, 1, 1, 1, 1, log_level = "silent") + result_6 <- score_adl_6(6, 1, 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_6, "a")) - result_7 <- score_adl_6(1, 7, 1, 1, 1, 1, log_level = "silent") + result_7 <- score_adl_6(1, 7, 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_7, "b")) - result_9 <- score_adl_6(1, 1, 1, 1, 9, 1, log_level = "silent") + result_9 <- score_adl_6(1, 1, 1, 1, 9, 1) expect_true(haven::is_tagged_na(result_9, "b")) }) test_that("score_adl_6() handles string NA inputs", { - result_na_string <- score_adl_6("Not applicable", 1, 1, 1, 1, 1, log_level = "silent") + result_na_string <- score_adl_6("Not applicable", 1, 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_na_string, "a")) - result_missing_string <- score_adl_6(1, "Missing", 1, 1, 1, 1, log_level = "silent") + result_missing_string <- score_adl_6(1, "Missing", 1, 1, 1, 1) expect_true(haven::is_tagged_na(result_missing_string, "b")) }) test_that("score_adl_6() handles tagged_na inputs correctly", { - result_na_a <- score_adl_6(2, 2, 2, 2, 2, haven::tagged_na("a"), - log_level = "silent") + result_na_a <- score_adl_6(2, 2, 2, 2, 2, haven::tagged_na("a")) expect_true(haven::is_tagged_na(result_na_a, "a")) - result_na_b <- score_adl_6(1, 1, 1, haven::tagged_na("b"), 1, 1, - log_level = "silent") + result_na_b <- score_adl_6(1, 1, 1, haven::tagged_na("b"), 1, 1) expect_true(haven::is_tagged_na(result_na_b, "b")) }) test_that("score_adl_6() handles out of range inputs correctly", { - result_invalid <- score_adl_6(1, 1, 1, 1, 1, -1, log_level = "silent") + result_invalid <- score_adl_6(1, 1, 1, 1, 1, -1) expect_true(is_tagged_na(result_invalid, "b")) }) @@ -314,16 +300,15 @@ test_that("assess_adl() validates required parameters", { }) test_that("assess_adl() validates vector length compatibility", { - # Incompatible lengths -> NAs - result <- assess_adl(c(1, 2), c(2, 2, 2), c(2, 2), c(2, 2), c(2, 2), - log_level = "silent") - expect_true(all(is.na(result))) - - # Compatible lengths should work silently - expect_silent(assess_adl(c(1, 2), c(2, 2), c(2, 2), c(2, 2), c(2, 2), - log_level = "silent")) - expect_silent(assess_adl(1, c(2, 2), c(2, 2), c(2, 2), c(2, 2), - log_level = "silent")) + # Incompatible multi-element lengths error rather than silently returning NAs + expect_error( + assess_adl(c(1, 2), c(2, 2, 2), c(2, 2), c(2, 2), c(2, 2)), + "same length" + ) + + # Compatible lengths (including recycled scalars) work silently + expect_silent(assess_adl(c(1, 2), c(2, 2), c(2, 2), c(2, 2), c(2, 2))) + expect_silent(assess_adl(1, c(2, 2), c(2, 2), c(2, 2), c(2, 2))) }) # ============================================================================= @@ -345,8 +330,7 @@ test_that("ADL functions handle large datasets efficiently", { start_time <- Sys.time() result_assess <- assess_adl( large_data$ADL_01, large_data$ADL_02, large_data$ADL_03, - large_data$ADL_04, large_data$ADL_05, - log_level = "silent" + large_data$ADL_04, large_data$ADL_05 ) end_time <- Sys.time() }) @@ -354,16 +338,14 @@ test_that("ADL functions handle large datasets efficiently", { expect_silent({ result_score <- score_adl( large_data$ADL_01, large_data$ADL_02, large_data$ADL_03, - large_data$ADL_04, large_data$ADL_05, - log_level = "silent" + large_data$ADL_04, large_data$ADL_05 ) }) expect_silent({ result_score_6 <- score_adl_6( large_data$ADL_01, large_data$ADL_02, large_data$ADL_03, - large_data$ADL_04, large_data$ADL_05, large_data$ADL_06, - log_level = "silent" + large_data$ADL_04, large_data$ADL_05, large_data$ADL_06 ) }) @@ -383,22 +365,19 @@ test_that("ADL functions handle large datasets efficiently", { test_that("ADL functions handle extreme edge cases gracefully", { # All NA input result_all_na <- assess_adl( - rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5), - log_level = "silent" + rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5) ) expect_length(result_all_na, 5) # Empty vectors result_empty <- assess_adl( - numeric(0), numeric(0), numeric(0), numeric(0), numeric(0), - log_level = "silent" + numeric(0), numeric(0), numeric(0), numeric(0), numeric(0) ) expect_length(result_empty, 0) # All-missing behavior should return tagged_na or NA result_missing <- assess_adl( - rep(NA, 3), rep(NA, 3), rep(NA, 3), rep(NA, 3), rep(NA, 3), - log_level = "silent" + rep(NA, 3), rep(NA, 3), rep(NA, 3), rep(NA, 3), rep(NA, 3) ) expect_true(all(haven::is_tagged_na(result_missing) | is.na(result_missing))) }) @@ -420,20 +399,17 @@ test_that("ADL functions work correctly in cchsflow workflows", { test_data$adl_help <- assess_adl( test_data$ADL_01, test_data$ADL_02, test_data$ADL_03, - test_data$ADL_04, test_data$ADL_05, - log_level = "silent" + test_data$ADL_04, test_data$ADL_05 ) test_data$adl_score_5 <- score_adl( test_data$ADL_01, test_data$ADL_02, test_data$ADL_03, - test_data$ADL_04, test_data$ADL_05, - log_level = "silent" + test_data$ADL_04, test_data$ADL_05 ) test_data$adl_score_6 <- score_adl_6( test_data$ADL_01, test_data$ADL_02, test_data$ADL_03, - test_data$ADL_04, test_data$ADL_05, test_data$ADL_06, - log_level = "silent" + test_data$ADL_04, test_data$ADL_05, test_data$ADL_06 ) expect_equal(nrow(test_data), 5) diff --git a/tests/testthat/test-alcohol.R b/tests/testthat/test-alcohol.R index a1cd388c..5bbb7f4a 100644 --- a/tests/testthat/test-alcohol.R +++ b/tests/testthat/test-alcohol.R @@ -31,8 +31,7 @@ test_that("calculate_binge_drinking() handles basic valid inputs correctly", { DHH_SEX = 1, # male ALW_1 = 1, # had drinks in past week ALW_2A1 = 5, ALW_2A2 = 0, ALW_2A3 = 0, ALW_2A4 = 0, - ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0, # 5 drinks on Sunday only - log_level = "silent" + ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0 # 5 drinks on Sunday only ) expect_equal(result_male_binge, 1L) # binge drinker @@ -41,8 +40,7 @@ test_that("calculate_binge_drinking() handles basic valid inputs correctly", { DHH_SEX = 2, # female ALW_1 = 1, # had drinks in past week ALW_2A1 = 0, ALW_2A2 = 4, ALW_2A3 = 0, ALW_2A4 = 0, - ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0, # 4 drinks on Monday only - log_level = "silent" + ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0 # 4 drinks on Monday only ) expect_equal(result_female_binge, 1L) # binge drinker @@ -51,8 +49,7 @@ test_that("calculate_binge_drinking() handles basic valid inputs correctly", { DHH_SEX = 1, # male ALW_1 = 1, # had drinks in past week ALW_2A1 = 2, ALW_2A2 = 2, ALW_2A3 = 0, ALW_2A4 = 0, - ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0, # max 2 drinks per day - log_level = "silent" + ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0 # max 2 drinks per day ) expect_equal(result_male_no_binge, 2L) # not a binge drinker @@ -61,8 +58,7 @@ test_that("calculate_binge_drinking() handles basic valid inputs correctly", { DHH_SEX = 1, # male ALW_1 = 2, # no drinks in past week ALW_2A1 = 0, ALW_2A2 = 0, ALW_2A3 = 0, ALW_2A4 = 0, - ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0, - log_level = "silent" + ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0 ) expect_true(is_tagged_na(result_no_drinks, "a")) # not applicable }) @@ -72,32 +68,28 @@ test_that("calculate_binge_drinking() handles out of range inputs correctly", { result_invalid_sex <- calculate_binge_drinking( DHH_SEX = -1, # invalid sex ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_sex, "b")) # Test case: ALW_1 out of range result_invalid_alw1 <- calculate_binge_drinking( DHH_SEX = 1, ALW_1 = -1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alw1, "b")) # invalid/missing for invalid ALW_1 # Test case: ALW_2A1 out of range result_invalid_alw2a1 <- calculate_binge_drinking( DHH_SEX = 1, ALW_1 = 1, ALW_2A1 = -1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alw2a1, "b")) # Test case: ALW_2A2 out of range result_invalid_alw2a2 <- calculate_binge_drinking( DHH_SEX = 1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = -1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alw2a2, "b")) }) @@ -114,8 +106,7 @@ test_that("calculate_binge_drinking() handles vector inputs correctly", { ALW_2A4 = c(0, 1, 0), # Person 1: 0, Person 2: 1 drink, Person 3: 0 ALW_2A5 = c(0, 0, 0), # All: 0 drinks ALW_2A6 = c(0, 0, 0), # All: 0 drinks - ALW_2A7 = c(0, 0, 0), # All: 0 drinks - log_level = "silent" + ALW_2A7 = c(0, 0, 0) # All: 0 drinks ) expect_equal(result_vector[1], 1L) # Person 1: binge drinker @@ -135,8 +126,7 @@ test_that("calculate_drinking_risk_short() handles basic valid inputs correctly" ALC_1 = 1, # drinks in past year ALW_1 = 1, # had drinks in past week ALW_2A1 = 4, ALW_2A2 = 4, ALW_2A3 = 4, ALW_2A4 = 4, - ALW_2A5 = 4, ALW_2A6 = 0, ALW_2A7 = 0, # 4 drinks/day x 5 days - log_level = "silent" + ALW_2A5 = 4, ALW_2A6 = 0, ALW_2A7 = 0 # 4 drinks/day x 5 days ) expect_equal(result_male_high_risk, 1L) # high risk @@ -147,8 +137,7 @@ test_that("calculate_drinking_risk_short() handles basic valid inputs correctly" ALC_1 = 1, # drinks in past year ALW_1 = 1, # had drinks in past week ALW_2A1 = 2, ALW_2A2 = 2, ALW_2A3 = 2, ALW_2A4 = 2, - ALW_2A5 = 2, ALW_2A6 = 0, ALW_2A7 = 0, # 2 drinks/day x 5 days - log_level = "silent" + ALW_2A5 = 2, ALW_2A6 = 0, ALW_2A7 = 0 # 2 drinks/day x 5 days ) expect_equal(result_female_low_risk, 2L) # low risk @@ -159,8 +148,7 @@ test_that("calculate_drinking_risk_short() handles basic valid inputs correctly" ALC_1 = 2, # no drinks in past year ALW_1 = 2, # no drinks in past week ALW_2A1 = 0, ALW_2A2 = 0, ALW_2A3 = 0, ALW_2A4 = 0, - ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0, - log_level = "silent" + ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0 ) expect_true(is_tagged_na(result_no_drinks, "a")) # not applicable }) @@ -170,24 +158,21 @@ test_that("calculate_drinking_risk_short() handles out of range inputs correctly result_invalid_sex <- calculate_drinking_risk_short( DHH_SEX = -1, # invalid sex ALWDWKY = 10, ALC_1 = 1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_sex, "b")) # Test case: ALWDWKY out of range result_invalid_alwdwky <- calculate_drinking_risk_short( DHH_SEX = 1, ALWDWKY = -1, ALC_1 = 1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alwdwky, "b")) # Test case: ALC_1 out of range result_invalid_alc1 <- calculate_drinking_risk_short( DHH_SEX = 1, ALWDWKY = 10, ALC_1 = -1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alc1, "b")) }) @@ -205,8 +190,7 @@ test_that("calculate_drinking_risk_short() handles vector inputs correctly", { ALW_2A4 = c(5, 1, 0, 3), ALW_2A5 = c(5, 1, 0, 3), ALW_2A6 = c(0, 1, 0, 0), - ALW_2A7 = c(0, 1, 0, 0), - log_level = "silent" + ALW_2A7 = c(0, 1, 0, 0) ) expect_equal(result_vector[1], 1L) # Person 1: high risk (male, >3 drinks/day) @@ -227,8 +211,7 @@ test_that("calculate_drinking_risk_long() handles basic valid inputs correctly", ALC_1 = 1, # drinks in past year ALW_1 = 1, # had drinks in past week ALW_2A1 = 3, ALW_2A2 = 3, ALW_2A3 = 3, ALW_2A4 = 3, - ALW_2A5 = 3, ALW_2A6 = 3, ALW_2A7 = 2, # ~20 drinks/week - log_level = "silent" + ALW_2A5 = 3, ALW_2A6 = 3, ALW_2A7 = 2 # ~20 drinks/week ) expect_equal(result_male_high_risk, 1L) # high risk @@ -239,8 +222,7 @@ test_that("calculate_drinking_risk_long() handles basic valid inputs correctly", ALC_1 = 1, # drinks in past year ALW_1 = 1, # had drinks in past week ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, ALW_2A4 = 1, - ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, # 7 drinks/week - log_level = "silent" + ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 # 7 drinks/week ) expect_equal(result_female_low_risk, 2L) # low risk @@ -251,8 +233,7 @@ test_that("calculate_drinking_risk_long() handles basic valid inputs correctly", ALC_1 = 2, # no drinks in past year ALW_1 = 2, # no drinks in past week ALW_2A1 = 0, ALW_2A2 = 0, ALW_2A3 = 0, ALW_2A4 = 0, - ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0, - log_level = "silent" + ALW_2A5 = 0, ALW_2A6 = 0, ALW_2A7 = 0 ) expect_true(is_tagged_na(result_no_drinks, "a")) # not applicable }) @@ -262,24 +243,21 @@ test_that("calculate_drinking_risk_long() handles out of range inputs correctly" result_invalid_sex <- calculate_drinking_risk_long( DHH_SEX = -1, # invalid sex ALWDWKY = 10, ALC_1 = 1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_sex, "b")) # Test case: ALWDWKY out of range result_invalid_alwdwky <- calculate_drinking_risk_long( DHH_SEX = 1, ALWDWKY = -1, ALC_1 = 1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alwdwky, "b")) # Test case: ALC_1 out of range result_invalid_alc1 <- calculate_drinking_risk_long( DHH_SEX = 1, ALWDWKY = 10, ALC_1 = -1, ALW_1 = 1, ALW_2A1 = 1, ALW_2A2 = 1, ALW_2A3 = 1, - ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1, - log_level = "silent" + ALW_2A4 = 1, ALW_2A5 = 1, ALW_2A6 = 1, ALW_2A7 = 1 ) expect_true(is_tagged_na(result_invalid_alc1, "b")) }) @@ -297,8 +275,7 @@ test_that("calculate_drinking_risk_long() handles vector inputs correctly", { ALW_2A4 = c(3, 1, 0, 2), ALW_2A5 = c(3, 1, 0, 2), ALW_2A6 = c(3, 0, 0, 2), - ALW_2A7 = c(2, 0, 0, 0), - log_level = "silent" + ALW_2A7 = c(2, 0, 0, 0) ) expect_equal(result_vector[1], 1L) # Person 1: high risk (male, >14 drinks/week) @@ -333,8 +310,7 @@ test_that("alcohol functions handle large datasets efficiently", { result_binge <- calculate_binge_drinking( large_data$DHH_SEX, large_data$ALW_1, large_data$ALW_2A1, large_data$ALW_2A2, large_data$ALW_2A3, large_data$ALW_2A4, - large_data$ALW_2A5, large_data$ALW_2A6, large_data$ALW_2A7, - log_level = "silent" + large_data$ALW_2A5, large_data$ALW_2A6, large_data$ALW_2A7 ) }) @@ -343,8 +319,7 @@ test_that("alcohol functions handle large datasets efficiently", { large_data$DHH_SEX, large_data$ALWDWKY, large_data$ALC_1, large_data$ALW_1, large_data$ALW_2A1, large_data$ALW_2A2, large_data$ALW_2A3, large_data$ALW_2A4, large_data$ALW_2A5, large_data$ALW_2A6, - large_data$ALW_2A7, - log_level = "silent" + large_data$ALW_2A7 ) }) @@ -353,8 +328,7 @@ test_that("alcohol functions handle large datasets efficiently", { large_data$DHH_SEX, large_data$ALWDWKY, large_data$ALC_1, large_data$ALW_1, large_data$ALW_2A1, large_data$ALW_2A2, large_data$ALW_2A3, large_data$ALW_2A4, large_data$ALW_2A5, large_data$ALW_2A6, - large_data$ALW_2A7, - log_level = "silent" + large_data$ALW_2A7 ) }) @@ -367,16 +341,14 @@ test_that("alcohol functions handle extreme edge cases gracefully", { # Test with all NA input result_all_na <- calculate_binge_drinking( rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5), - rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5), - log_level = "silent" + rep(NA, 5), rep(NA, 5), rep(NA, 5), rep(NA, 5) ) expect_length(result_all_na, 5) # Test with empty vectors result_empty <- calculate_binge_drinking( numeric(0), numeric(0), numeric(0), numeric(0), numeric(0), - numeric(0), numeric(0), numeric(0), numeric(0), - log_level = "silent" + numeric(0), numeric(0), numeric(0), numeric(0) ) expect_length(result_empty, 0) }) @@ -406,24 +378,21 @@ test_that("alcohol functions work correctly in cchsflow workflows", { test_data$binge_drinker <- calculate_binge_drinking( test_data$DHH_SEX, test_data$ALW_1, test_data$ALW_2A1, test_data$ALW_2A2, test_data$ALW_2A3, test_data$ALW_2A4, - test_data$ALW_2A5, test_data$ALW_2A6, test_data$ALW_2A7, - log_level = "silent" + test_data$ALW_2A5, test_data$ALW_2A6, test_data$ALW_2A7 ) test_data$short_term_risk <- calculate_drinking_risk_short( test_data$DHH_SEX, test_data$ALWDWKY, test_data$ALC_1, test_data$ALW_1, test_data$ALW_2A1, test_data$ALW_2A2, test_data$ALW_2A3, test_data$ALW_2A4, test_data$ALW_2A5, test_data$ALW_2A6, - test_data$ALW_2A7, - log_level = "silent" + test_data$ALW_2A7 ) test_data$long_term_risk <- calculate_drinking_risk_long( test_data$DHH_SEX, test_data$ALWDWKY, test_data$ALC_1, test_data$ALW_1, test_data$ALW_2A1, test_data$ALW_2A2, test_data$ALW_2A3, test_data$ALW_2A4, test_data$ALW_2A5, test_data$ALW_2A6, - test_data$ALW_2A7, - log_level = "silent" + test_data$ALW_2A7 ) # Verify results are reasonable From 63450ba395309417604f624d808aa813a6ce1bcc Mon Sep 17 00:00:00 2001 From: Doug Manuel Date: Thu, 11 Jun 2026 06:01:49 -0400 Subject: [PATCH 4/5] Fix list-mode rec_with_table applying first database's rules to all databases recode_call() received the full database_name vector instead of the loop variable, so grepl() matched only the first database's worksheet rows and every dataframe in the list was silently recoded with the first database's rules. Passes the loop variable and adds a per-database regression test. --- R/recode-with-table.R | 2 +- tests/testthat/test-recode-list-mode.R | 53 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/testthat/test-recode-list-mode.R diff --git a/R/recode-with-table.R b/R/recode-with-table.R index 61ba270e..b585d53f 100644 --- a/R/recode-with-table.R +++ b/R/recode-with-table.R @@ -192,7 +192,7 @@ rec_with_table <- data[[data_name]] <- recode_call( variables = variables, data = data[[data_name]], - database_name = database_name, + database_name = data_name, print_note = notes, else_value = else_value, variable_details = variable_details, diff --git a/tests/testthat/test-recode-list-mode.R b/tests/testthat/test-recode-list-mode.R new file mode 100644 index 00000000..b751d218 --- /dev/null +++ b/tests/testthat/test-recode-list-mode.R @@ -0,0 +1,53 @@ +# Regression test: list-mode rec_with_table() must apply each database's own +# recode rules. Before the fix, recode_call() received the full database_name +# vector, so grepl() matched only the first database's rows and every +# database in the list was recoded with the first database's rules. + +library(testthat) + +test_that("list-mode rec_with_table applies per-database rules", { + variables <- data.frame( + variable = "TEST_VAR", + label = "Test variable", + labelLong = "Test variable (long)", + section = "test", + subject = "test", + variableType = "Categorical", + databaseStart = "db_one, db_two", + units = "N/A", + variableStart = "db_one::SRC, db_two::SRC", + stringsAsFactors = FALSE + ) + + variable_details <- data.frame( + variable = rep("TEST_VAR", 4), + typeEnd = rep("cat", 4), + typeStart = rep("cat", 4), + databaseStart = c("db_one", "db_one", "db_two", "db_two"), + variableStart = c("db_one::SRC", "db_one::SRC", "db_two::SRC", "db_two::SRC"), + dummyVariable = rep("N/A", 4), + recStart = c("1", "2", "1", "2"), + recEnd = c("11", "12", "21", "22"), + catLabel = c("one-1", "one-2", "two-1", "two-2"), + catLabelLong = c("one-1", "one-2", "two-1", "two-2"), + numValidCat = rep("2", 4), + units = rep("N/A", 4), + stringsAsFactors = FALSE + ) + + db_one <- data.frame(SRC = c(1, 2)) + db_two <- data.frame(SRC = c(1, 2)) + + out <- suppressWarnings(suppressMessages(rec_with_table( + data = list(db_one = db_one, db_two = db_two), + variables = "TEST_VAR", + database_name = c("db_one", "db_two"), + variable_details = variable_details, + log = FALSE, + notes = FALSE + ))) + + # Each database must be recoded with its own rules + expect_equal(as.character(out$db_one$TEST_VAR), c("11", "12")) + expect_equal(as.character(out$db_two$TEST_VAR), c("21", "22")) +}) From 05a0f3ce323548bebc0a33cb805a9a51e7317268 Mon Sep 17 00:00:00 2001 From: Rafidul Islam Date: Fri, 19 Jun 2026 12:12:47 -0400 Subject: [PATCH 5/5] Added missing PUMF data to SMKDSTY_cat3 rows in variable_details.csv --- data/variable_details.RData | Bin 90815 -> 90825 bytes inst/extdata/variable_details.csv | 38 +++++++++++++++--------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/data/variable_details.RData b/data/variable_details.RData index ac679ec9889d9ae8ea2020e4d044bdb42fbf3908..03ae32c3b8ac1d908b827f9348aa32bc23cf900e 100644 GIT binary patch literal 90825 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¸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%0AWm_r^RP?#izdwoHor7bnOaun1SDG6c!bt~+o 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 HOPK)xWbWOr diff --git a/inst/extdata/variable_details.csv b/inst/extdata/variable_details.csv index c996421b..137680e6 100644 --- a/inst/extdata/variable_details.csv +++ b/inst/extdata/variable_details.csv @@ -141,18 +141,18 @@ ADLF6R,ADLF6R_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, ADLF6R,ADLF6R_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m","cchs2001_p::RACAF6, cchs2003_p::RACCF6R, cchs2005_p::RACEF6R, cchs2007_2008_p::RACF6R, cchs2001_m::RACAF6, cchs2003_m::RACCF6R, cchs2005_m::RACEF6R, cchs2007_2008_m::RACF6R, [ADLF6R]",NA,cat,NA::b,2,missing,missing,N/A,"[7,9]",don't know (7); refusal (8); not stated (9),Needs help with tasks,Needs help with at least one task - (F),NA,2.2.0,2026-03-27,active,NA,NA,NA ADLF6R,ADLF6R_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m","cchs2001_p::RACAF6, cchs2003_p::RACCF6R, cchs2005_p::RACEF6R, cchs2007_2008_p::RACF6R, cchs2001_m::RACAF6, cchs2003_m::RACCF6R, cchs2005_m::RACEF6R, cchs2007_2008_m::RACF6R, [ADLF6R]",NA,cat,NA::b,2,missing,missing,N/A,else,else,Needs help with tasks,Needs help with at least one task - (F),NA,2.2.0,2026-03-27,active,NA,NA,NA ADM_RNO,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p","cchs2001_p::ADMA_RNO, cchs2003_p::ADMC_RNO, cchs2005_p::ADME_RNO, [ADM_RNO]",NA,cont,copy,N/A,Sequential record number,Sequential record number,N/A,"[1,999998]",Sequential record number,Sequential record number,Sequential record number,NA,2.2.0,2025-06-30,active,NA,NA,NA -age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,N/A,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::b,,missing,missing,years,N/A,missing,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,N/A,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, -age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::b,,missing,missing,years,N/A,missing,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,N/A,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),Age daily (ever)*,Age started smoking cigarettes daily (unified),"PUMF: midpoint estimation from SMKG040_cont (~+/-3 yr). Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age daily (ever)*,Age started smoking cigarettes daily (unified),"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::b,,missing,missing,years,N/A,missing,Age daily (ever)*,Age started smoking cigarettes daily (unified),Missing required input,3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,N/A,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),Age daily (ever)*,Age started smoking cigarettes daily (unified),"Master: exact continuous from SMK_040. Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age daily (ever)*,Age started smoking cigarettes daily (unified),"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, -age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::b,,missing,missing,years,N/A,missing,Age daily (ever)*,Age started smoking cigarettes daily (unified),Missing required input,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,N/A,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG01C_cont],,cont,NA::b,,missing,missing,years,N/A,missing,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,N/A,Func::calculate_age_first_cigarette,,N/A,,years,N/A,Age smoked first whole cigarette (years),Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_first_cigarette,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01C],,cont,NA::b,,missing,missing,years,N/A,missing,Age 1st cig (ever)*,Age smoked first whole cigarette (unified),,3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,N/A,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),Age daily (ever)*,Age started smoking cigarettes daily (unified),"PUMF: midpoint estimation from SMKG040_cont (~+/-3 yr). Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age daily (ever)*,Age started smoking cigarettes daily (unified),"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p",DerivedVar::[SMKG040_cont],,cont,NA::b,,missing,missing,years,N/A,missing,Age daily (ever)*,Age started smoking cigarettes daily (unified),Missing required input,3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,N/A,Func::calculate_age_start_smoking,,N/A,,years,N/A,Age started smoking daily (years),Age daily (ever)*,Age started smoking cigarettes daily (unified),"Master: exact continuous from SMK_040. Universe: ever-daily smokers (SMKDSTY 1, 2, 4).",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::a,,not applicable,not applicable,years,N/A,not applicable,Age daily (ever)*,Age started smoking cigarettes daily (unified),"Valid skip - never smoked daily (SMKDSTY 3, 5, 6)",3.0.0-alpha,2026-02-23,active,,, +age_start_smoking,N/A,cont,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_040],,cont,NA::b,,missing,missing,years,N/A,missing,Age daily (ever)*,Age started smoking cigarettes daily (unified),Missing required input,3.0.0-alpha,2026-02-23,active,,, ALC_005,ALC_005_cat2_1,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::ALCA_5B, cchs2003_p::ALCC_5B, cchs2005_p::ALCE_5B, cchs2007_2008_p::ALN_1, cchs2001_m::ALCA_5B, cchs2003_m::ALCC_5B, cchs2005_m::ALCE_5B, cchs2007_2008_m::ALN_1, [ALC_005]",NA,cat,1,2,yes,alcohol in the lifetime,N/A,1,Yes,Alcohol in lifetime,"In lifetime, ever drank alcohol?",NA,2.1.0,2026-03-27,active,NA,NA,NA ALC_005,ALC_005_cat2_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::ALCA_5B, cchs2003_p::ALCC_5B, cchs2005_p::ALCE_5B, cchs2007_2008_p::ALN_1, cchs2001_m::ALCA_5B, cchs2003_m::ALCC_5B, cchs2005_m::ALCE_5B, cchs2007_2008_m::ALN_1, [ALC_005]",NA,cat,2,2,no,no alcohol in lifetime,N/A,2,No,Alcohol in lifetime,"In lifetime, ever drank alcohol?",NA,2.1.0,2026-03-27,active,NA,NA,NA ALC_005,ALC_005_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m","cchs2001_p::ALCA_5B, cchs2003_p::ALCC_5B, cchs2005_p::ALCE_5B, cchs2007_2008_p::ALN_1, cchs2001_m::ALCA_5B, cchs2003_m::ALCC_5B, cchs2005_m::ALCE_5B, cchs2007_2008_m::ALN_1, [ALC_005]",NA,cat,NA::a,2,not applicable,not applicable,N/A,6,not applicable,Alcohol in lifetime,"In lifetime, ever drank alcohol?",NA,2.1.0,2026-03-27,active,NA,NA,NA @@ -3186,10 +3186,10 @@ SMKDSTY_2009plus,SMKDSTY_2009plus_cat6_6,cat,"cchs2009_2010_p, cchs2010_p, cchs2 SMKDSTY_2009plus,SMKDSTY_2009plus_cat6_NAa,cat,"cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",yes,cat,NA::a,6,not applicable,not applicable,N/A,96,not applicable,Type of smoker (6-cat 2009+),"Type of smoker (6-category, 2009+ categories per SMKDVSTY scheme)",2015+ only. Direct SMKDVSTY pass-through. Not available pre-2015; use SMKDSTY_original for earlier cycles or SMKDSTY_cat3/cat5 for full cross-cycle coverage.,3.0.0-alpha,2026-01-04,active,"v3.0.0: 2015+ category structure including 'experimental smoker' (category 5). Extended from V2.1 with 2019-2023 coverage. For analyses spanning pre-2015 and post-2015, use SMKDSTY_cat3 or SMKDSTY_cat5.",, SMKDSTY_2009plus,SMKDSTY_2009plus_cat6_NAb,cat,"cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",yes,cat,NA::b,6,missing,missing,N/A,"[97,99]",don't know (97); refusal (98); not stated (99),Type of smoker (6-cat 2009+),"Type of smoker (6-category, 2009+ categories per SMKDVSTY scheme)",2015+ only. Direct SMKDVSTY pass-through. Not available pre-2015; use SMKDSTY_original for earlier cycles or SMKDSTY_cat3/cat5 for full cross-cycle coverage.,3.0.0-alpha,2026-01-04,active,"v3.0.0: 2015+ category structure including 'experimental smoker' (category 5). Extended from V2.1 with 2019-2023 coverage. For analyses spanning pre-2015 and post-2015, use SMKDSTY_cat3 or SMKDSTY_cat5.",, SMKDSTY_2009plus,SMKDSTY_2009plus_cat6_NAb,cat,"cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",yes,cat,NA::b,6,missing,missing,N/A,else,else,Type of smoker (6-cat 2009+),"Type of smoker (6-category, 2009+ categories per SMKDVSTY scheme)",2015+ only. Direct SMKDVSTY pass-through. Not available pre-2015; use SMKDSTY_original for earlier cycles or SMKDSTY_cat3/cat5 for full cross-cycle coverage.,3.0.0-alpha,2026-01-04,active,"v3.0.0: 2015+ category structure including 'experimental smoker' (category 5). Extended from V2.1 with 2019-2023 coverage. For analyses spanning pre-2015 and post-2015, use SMKDSTY_cat3 or SMKDSTY_cat5.",, -SMKDSTY_cat3,SMKDSTY_cat3_1,cat,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",,cat,1,3,Current,Current smoker,N/A,"[1,3]",Daily (1); Occasional (2); Always occasional (3),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, -SMKDSTY_cat3,SMKDSTY_cat3_2,cat,"cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",,cat,2,3,Former,Former smoker,N/A,"[4,5]",Former daily(4); Former occasional (5),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, -SMKDSTY_cat3,SMKDSTY_cat3_1,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],,cat,1,3,Current,Current smoker,N/A,"[1,2]",Daily (1); Occasional (2),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, -SMKDSTY_cat3,SMKDSTY_cat3_2,cat,"cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],,cat,2,3,Former,Former smoker,N/A,"[3,5]",Former daily (3); Former occasional (4); Experimental (5),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat3,SMKDSTY_cat3_1,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",,cat,1,3,Current,Current smoker,N/A,"[1,3]",Daily (1); Occasional (2); Always occasional (3),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat3,SMKDSTY_cat3_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, [SMKDSTY]",,cat,2,3,Former,Former smoker,N/A,"[4,5]",Former daily(4); Former occasional (5),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat3,SMKDSTY_cat3_1,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],,cat,1,3,Current,Current smoker,N/A,"[1,2]",Daily (1); Occasional (2),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, +SMKDSTY_cat3,SMKDSTY_cat3_2,cat,"cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",[SMKDVSTY],,cat,2,3,Former,Former smoker,N/A,"[3,5]",Former daily (3); Former occasional (4); Experimental (5),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat3,SMKDSTY_cat3_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",,cat,3,3,Never smoked,Never smoked,N/A,6,Never smoked,Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat3,SMKDSTY_cat3_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",,cat,NA::a,3,not applicable,not applicable,N/A,96,not applicable,Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, SMKDSTY_cat3,SMKDSTY_cat3_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2022_p, cchs2023_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m","cchs2001_p::SMKADSTY, cchs2003_p::SMKCDSTY, cchs2005_p::SMKEDSTY, cchs2015_2016_p::SMKDVSTY, cchs2017_2018_p::SMKDVSTY, cchs2019_2020_p::SMKDVSTY, cchs2022_p::SMKDVSTY, cchs2023_p::SMKDVSTY, cchs2001_m::SMKADSTY, cchs2003_m::SMKCDSTY, cchs2005_m::SMKEDSTY, cchs2015_2016_m::SMKDVSTY, cchs2017_2018_m::SMKDVSTY, cchs2019_2020_m::SMKDVSTY, cchs2021_m::SMKDVSTY, cchs2022_m::SMKDVSTY, cchs2023_m::SMKDVSTY, [SMKDSTY]",,cat,NA::b,3,missing,missing,N/A,"[97,99]",don't know (97); refusal (98); not stated (99),Smoking (3-cat),"Smoking status (3-category): current, former, never",Full coverage 2001-2023 PUMF and Master. Collapsed to current/former/never. Recommended for cross-cycle comparisons requiring full comparability.,3.0.0-alpha,2026-01-04,active,"v3.0.0: Recommended for cross-cycle analyses. Collapses 6-category SMKDSTY to 3 categories, avoiding all semantic breaks between pre-2015 and post-2015. Extended from V2.1 with 2019-2023 coverage.",, @@ -3593,9 +3593,9 @@ smoke_simple,smoke_simple_cat4_2,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs20 smoke_simple,smoke_simple_cat4_3,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",,N/A,3,4,Former daily smoker quit >5 years,Former daily smoker quit >5 years,N/A,N/A,Former daily smoker quit >5 years,Simple smoking status,"Simplified smoking status (current, former, never)",,2.2.0,2025-11-18,active,,, smoke_simple,smoke_simple_cat4_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",,N/A,NA::a,4,not applicable,not applicable,N/A,N/A,not applicable,Simple smoking status,"Simplified smoking status (current, former, never)",,2.2.0,2025-11-18,active,,, smoke_simple,smoke_simple_cat4_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2023_m","DerivedVar::[SMKDSTY_cat5, time_quit_smoking]",,N/A,NA::b,4,missing,missing,N/A,N/A,missing,Simple smoking status,"Simplified smoking status (current, former, never)",,2.2.0,2025-11-18,active,,, -smoked_100_lifetime,smoked_100_lifetime_catN/A_Func::calculate_smoked_100_lifetime,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,N/A,Func::calculate_smoked_100_lifetime,2,N/A,,,N/A,Ever smoked 100+ cigarettes,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, -smoked_100_lifetime,smoked_100_lifetime_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::a,2,not applicable,not applicable,,N/A,not applicable,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, -smoked_100_lifetime,smoked_100_lifetime_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::b,2,missing,missing,,N/A,missing,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, +smoked_100_lifetime,smoked_100_lifetime_catN/A_Func::calculate_smoked_100_lifetime,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,N/A,Func::calculate_smoked_100_lifetime,2,N/A,,,N/A,Ever smoked 100+ cigarettes,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, +smoked_100_lifetime,smoked_100_lifetime_cat2_NAa,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::a,2,not applicable,not applicable,,N/A,not applicable,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, +smoked_100_lifetime,smoked_100_lifetime_cat2_NAb,cat,"cchs2001_p, cchs2003_p, cchs2005_p, cchs2007_2008_p, cchs2009_2010_p, cchs2010_p, cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2019_2020_p, cchs2001_m, cchs2003_m, cchs2005_m, cchs2007_2008_m, cchs2009_2010_m, cchs2009_m, cchs2010_m, cchs2011_2012_m, cchs2012_m, cchs2013_2014_m, cchs2014_m, cchs2015_2016_m, cchs2017_2018_m, cchs2019_2020_m, cchs2021_m, cchs2022_m, cchs2023_m",DerivedVar::[SMK_01A],,cat,NA::b,2,missing,missing,,N/A,missing,Smoked 100+ (ever)*,Ever smoked 100 or more cigarettes in lifetime (unified),,3.0.0-alpha,2026-02-23,active,,, SPS_01,N/A,cont,"cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2012_m","cchs2015_2016_p::SPS_005,cchs2017_2018_p::SPS_005,[SPS_01]",NA,cat,1,4,Strongly agree,Strongly agree,N/A,1,Strongly agree,SPS-5 - people to depend on for help,Five-item social provision scale -There are people I can depend on to help me if I really need it.,"For CCHS cycles 2015-2018, question was not asked in proxy interview",2.2.0,2025-06-30,active,NA,NA,NA SPS_01,N/A,cont,"cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2012_m","cchs2015_2016_p::SPS_005,cchs2017_2018_p::SPS_005,[SPS_01]",NA,cat,2,4,Agree,Agree,N/A,2,Agree,SPS-5 - people to depend on for help,Five-item social provision scale -There are people I can depend on to help me if I really need it.,NA,2.2.0,2025-06-30,active,NA,NA,NA SPS_01,N/A,cont,"cchs2011_2012_p, cchs2012_p, cchs2013_2014_p, cchs2014_p, cchs2015_2016_p, cchs2017_2018_p, cchs2012_m","cchs2015_2016_p::SPS_005,cchs2017_2018_p::SPS_005,[SPS_01]",NA,cat,3,4,Disagree,Disagree,N/A,3,Disagree,SPS-5 - people to depend on for help,Five-item social provision scale -There are people I can depend on to help me if I really need it.,NA,2.2.0,2025-06-30,active,NA,NA,NA