CAGE
CAGE
Measuring: Screening tool for alcoholism.
Number of Items: 4
| Item | Question Wording | TILDA Variable |
|---|---|---|
| 1 | Have you ever felt you should cut down on your drinking? | SCQCAGE1 |
| 2 | Have people annoyed you by criticizing your drinking? | SCQCAGE2 |
| 3 | Have you ever felt bad or guilty about your drinking? | SCQCAGE3 |
| 4 | Have you ever had a drink first thing in the morning to steady your nerves or get rid of a hangover (eye-opener)? | SCQCAGE4 |
Scoring Method:
Yes.
No.
Items can be assessed individually.
A cumulative score is generated with higher scores representing greater likelihood of alcohol dependence (0–4).
A CAGE score of >2 indicates problem alcohol use.
Citation: Ewing J. A. (1984). Detecting alcoholism. The CAGE questionnaire. JAMA, 252(14), 1905–1907. https://doi.org/10.1001/jama.252.14.1905
Example TILDA Papers:
- Laird, E., O’halloran, A. M., Fedorowski, A., Melander, O., Hever, A., Sagren, M., Carey, D., and Kenny, R. A. (2020). Orthostatic hypotension and novel blood pressure associated gene variants in older adults: data from the TILDA Study. The Journals of Gerontology: Series A, 75(11), 2074-2080.
Code
*recodes No from 2 to 0 & not answered from -99 to . for CAGE variables for them to be added up
lab define cage 0 "No" 1 "Yes"
foreach var of varlist SCQCAGE1 SCQCAGE2 SCQCAGE3 SCQCAGE4 {
gen `var'_r = `var'
recode `var'_r (-99 = .)(4 = .)(2 = 0)
lab values `var'_r cage
}
egen miss_cage = rowmiss(SCQCAGE1_r - SCQCAGE4_r)
tab miss_cage, mis
egen na_cage = anycount(SCQCAGE1_r - SCQCAGE4_r), v(-1) // no of values versus number of missing values
tab na_cage
tab SCQCAGE1_r, mis
tab SCQCAGE2_r, mis
tab SCQCAGE3_r, mis
tab SCQCAGE4_r, mis
gen BEHcage = SCQCAGE1_r + SCQCAGE2_r + SCQCAGE3_r + SCQCAGE4_r //adds everything except -1 values
label variable BEHcage "CAGE alcohol scale"
tab BEHcage, mis
drop SCQCAGE1_r SCQCAGE2_r SCQCAGE3_r SCQCAGE4_r
*Always have -1 for all 4 items - coded to -1 for the scale // missing by design
recode BEHcage -4 = -1
recode BEHcage -3 = -1
tab BEHcage, mis
*Set -1 to 0 if they say no to ever drinking or no to drinking in last 6 months
*This is everyone routed around, so no -1s left in the variable
recode BEHcage (-1=0) if SCQAlcoHis1==2 | SCQAlcoHis2==2
tab BEHcage, mis
notes BEHcage : CAGE total - excludes those with any missing on the CAGE
*********************************************************************************
*Alcohol problem
gen BEHcage2 = 0 if BEHcage !=.
replace BEHcage2 = 1 if BEHcage==2 | BEHcage==3 | BEHcage==4
label variable BEHcage2 "Alcohol problem"
lab define alcohol 0 "No" 1 "Yes"
lab values BEHcage2 alcohol
tab BEHcage2, m
notes BEHcage2: Score of 2 or more on the CAGE questionnaire
replace BEHcage = . if in_scq == 0 // Did not do SCQ
replace BEHcage2 = . if in_scq == 0 // Did not do SCQcage_vars <- c("SCQCAGE1", "SCQCAGE2", "SCQCAGE3", "SCQCAGE4")
# Recode No from 2 to 0 and not answered (-99 or 4) to missing
# for CAGE variables so they can be added up.
for (var in cage_vars) {
rvar <- paste0(var, "_r")
data[[rvar]] <- data[[var]]
data[[rvar]][data[[rvar]] %in% c(-99, 4)] <- NA
data[[rvar]][data[[rvar]] == 2] <- 0
attr(data[[rvar]], "labels") <- c("No" = 0, "Yes" = 1)
}
cage_r_vars <- paste0(cage_vars, "_r")
# Number of missing CAGE items
data$miss_cage <- rowSums(is.na(data[cage_r_vars]))
print(table(data$miss_cage, useNA = "ifany"))
# Number of -1 values across the CAGE items
data$na_cage <- rowSums(data[cage_r_vars] == -1, na.rm = TRUE)
print(table(data$na_cage, useNA = "ifany"))
# Item distributions
for (var in cage_r_vars) {
print(table(data[[var]], useNA = "ifany"))
}
# CAGE total.
# This mirrors Stata arithmetic addition, so any true missing value
# in one of the four recoded items makes BEHcage missing.
data$BEHcage <- data$SCQCAGE1_r +
data$SCQCAGE2_r +
data$SCQCAGE3_r +
data$SCQCAGE4_r
attr(data$BEHcage, "label") <- "CAGE alcohol scale"
print(table(data$BEHcage, useNA = "ifany"))
# Drop temporary recoded item variables
data[cage_r_vars] <- NULL
# Always have -1 for all 4 items - coded to -1 for the scale
# (missing by design)
data$BEHcage[data$BEHcage %in% c(-4, -3)] <- -1
print(table(data$BEHcage, useNA = "ifany"))
# Set -1 to 0 if no to ever drinking or no to drinking in last 6 months
idx_route <- !is.na(data$BEHcage) &
data$BEHcage == -1 &
(
(!is.na(data$SCQAlcoHis1) & data$SCQAlcoHis1 == 2) |
(!is.na(data$SCQAlcoHis2) & data$SCQAlcoHis2 == 2)
)
data$BEHcage[idx_route] <- 0
print(table(data$BEHcage, useNA = "ifany"))
attr(data$BEHcage, "note") <- "CAGE total - excludes those with any missing on the CAGE"
# ******************************************************************
# Alcohol problem
# ******************************************************************
data$BEHcage2 <- NA_real_
data$BEHcage2[!is.na(data$BEHcage)] <- 0
data$BEHcage2[data$BEHcage %in% c(2, 3, 4)] <- 1
attr(data$BEHcage2, "label") <- "Alcohol problem"
attr(data$BEHcage2, "labels") <- c("No" = 0, "Yes" = 1)
print(table(data$BEHcage2, useNA = "ifany"))
attr(data$BEHcage2, "note") <- "Score of 2 or more on the CAGE questionnaire"
# Did not do SCQ
data$BEHcage[!is.na(data$in_scq) & data$in_scq == 0] <- NA
data$BEHcage2[!is.na(data$in_scq) & data$in_scq == 0] <- NA* Recode No from 2 to 0 and not answered (-99 or 4) to missing
* for CAGE variables so they can be added up.
COMPUTE SCQCAGE1_r = SCQCAGE1.
COMPUTE SCQCAGE2_r = SCQCAGE2.
COMPUTE SCQCAGE3_r = SCQCAGE3.
COMPUTE SCQCAGE4_r = SCQCAGE4.
RECODE SCQCAGE1_r SCQCAGE2_r SCQCAGE3_r SCQCAGE4_r
(-99 = SYSMIS)
(4 = SYSMIS)
(2 = 0).
VALUE LABELS SCQCAGE1_r SCQCAGE2_r SCQCAGE3_r SCQCAGE4_r
0 "No"
1 "Yes".
* Number of missing CAGE items.
COMPUTE miss_cage = NMISS(SCQCAGE1_r, SCQCAGE2_r, SCQCAGE3_r, SCQCAGE4_r).
FREQUENCIES VARIABLES=miss_cage /MISSING=INCLUDE.
* Number of -1 values across the CAGE items.
COUNT na_cage = SCQCAGE1_r SCQCAGE2_r SCQCAGE3_r SCQCAGE4_r (-1).
FREQUENCIES VARIABLES=na_cage.
* Item distributions.
FREQUENCIES VARIABLES=
SCQCAGE1_r
SCQCAGE2_r
SCQCAGE3_r
SCQCAGE4_r
/MISSING=INCLUDE.
* CAGE total.
* Ordinary addition mirrors the Stata code: if any item is system-missing,
* BEHcage is system-missing.
COMPUTE BEHcage = SCQCAGE1_r + SCQCAGE2_r + SCQCAGE3_r + SCQCAGE4_r.
VARIABLE LABELS BEHcage "CAGE alcohol scale".
FREQUENCIES VARIABLES=BEHcage /MISSING=INCLUDE.
* Drop temporary recoded item variables.
DELETE VARIABLES SCQCAGE1_r SCQCAGE2_r SCQCAGE3_r SCQCAGE4_r.
* Always have -1 for all 4 items - coded to -1 for the scale
* (missing by design).
RECODE BEHcage (-4 = -1) (-3 = -1).
FREQUENCIES VARIABLES=BEHcage /MISSING=INCLUDE.
* Set -1 to 0 if no to ever drinking or no to drinking in last 6 months.
IF (BEHcage = -1 AND (SCQAlcoHis1 = 2 OR SCQAlcoHis2 = 2)) BEHcage = 0.
FREQUENCIES VARIABLES=BEHcage /MISSING=INCLUDE.
* Note from Stata:
* BEHcage: CAGE total - excludes those with any missing on the CAGE.
* ******************************************************************.
* Alcohol problem.
* ******************************************************************.
COMPUTE BEHcage2 = $SYSMIS.
IF (NOT MISSING(BEHcage)) BEHcage2 = 0.
IF (BEHcage = 2 OR BEHcage = 3 OR BEHcage = 4) BEHcage2 = 1.
VARIABLE LABELS BEHcage2 "Alcohol problem".
VALUE LABELS BEHcage2
0 "No"
1 "Yes".
FREQUENCIES VARIABLES=BEHcage2 /MISSING=INCLUDE.
* Note from Stata:
* BEHcage2: Score of 2 or more on the CAGE questionnaire.
* Did not do SCQ.
IF (in_scq = 0) BEHcage = $SYSMIS.
IF (in_scq = 0) BEHcage2 = $SYSMIS.
EXECUTE.