# /******************************************************************
# Scale ID:           PIL
# Scale Name:         Purpose in Life
# TILDA Variables:    MHpurpose
# Dataset:            TILDA Waves 4
# Institution:        The Irish Longitudinal Study on Ageing (TILDA)
#
# Description:
# Generates total scoring for the Purpose in Life Scale.
#
# Version:            1.0
# Original date:      2026-09-01
# Language:           R
# ******************************************************************/
#
# Assumption: the working data frame is called `data`.

# Recode special missing values
purpose_items <- paste0("SCQPurpose", 1:7)
special_missing <- c(-99, -812, -823, -834, -845, -856)

for (var in purpose_items) {
  data[[var]][data[[var]] %in% special_missing] <- NA_real_
}


# Reverse-score negatively worded items
data$SCQPurpose2_r <- 7 - data$SCQPurpose2
data$SCQPurpose4_r <- 7 - data$SCQPurpose4
data$SCQPurpose5_r <- 7 - data$SCQPurpose5
data$SCQPurpose6_r <- 7 - data$SCQPurpose6


# Calculate total score
score_items <- c(
  "SCQPurpose1",
  "SCQPurpose2_r",
  "SCQPurpose3",
  "SCQPurpose4_r",
  "SCQPurpose5_r",
  "SCQPurpose6_r",
  "SCQPurpose7"
)

# Mirrors Stata egen rowtotal(): sum available items first
data$MHpurpose <- rowSums(data[score_items], na.rm = TRUE)


# Require all 7 original items to be answered
data$Purpose_missing <- rowSums(is.na(data[purpose_items]))
data$MHpurpose[data$Purpose_missing > 0] <- NA_real_


# Label / notes
attr(data$MHpurpose, "label") <- "Purpose in Life Scale total score (7-42)"
attr(data$MHpurpose, "note") <- paste(
  "Higher scores represent a stronger sense of purpose and meaning in life.",
  "Items 2, 4, 5 and 6 are reverse scored."
)


# Checks
summary(data$MHpurpose)
table(data$MHpurpose, useNA = "ifany")


# Drop temporary variables
data[c(
  "SCQPurpose2_r",
  "SCQPurpose4_r",
  "SCQPurpose5_r",
  "SCQPurpose6_r",
  "Purpose_missing"
)] <- NULL
