TILDA Resources
  • Questionnaire Harmonisation
  • Questionnaire Scales
  • Scale Harmonisation
  • Health Assessment
  • Biomarkers
  • Back to TILDA Homepage
  1. CAGE
  • Questionnaire Scales
  • ADL
  • AMT
  • APQ-17
  • APQ-32
  • CAGE
  • CASP-12
  • CASP-19
  • CESD-20
  • CESD-8
  • CIDI-SF-Anxiety
  • CIDI-SF-Depression
  • CISS-21
  • Creative Lives
  • Everyday Ageism
  • EQ-5D-5L
  • FES-I
  • Flourishing
  • GAD-7
  • Gratitude
  • HADS-A
  • Housing Conditions
  • IADL
  • IPAQ
  • IPAQ-E
  • IQCODE
  • MHC-SF
  • MESA
  • MMSE
  • MCSI
  • MCTQ
  • Neighbourhood Cohesion
  • NEO-PI
  • PSS
  • PWSQ
  • PCL-6
  • PIL
  • Relationship Quality
  • SWLS
  • Social Activities
  • STAI
  • UCLA

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

  • Stata
  • R
  • SPSS
*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 SCQ

Download Stata .do file

cage_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

Download R file

* 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.

Download SPSS .sps file

APQ-32
CASP-12

Copyright 2026, The Irish Longitudinal Study on Ageing (TILDA)

 

TILDA, Department of Health and Health Research Board