Announcement Icon Online training class for Clinical R programming batch starts on Monday, 02Feb2026. Click here for details.

Apply attributes to variables


Lesson Description
-
  •  

 


data adsl01;
    length usubjid $10 sex $1 age 8 trt01pn 8;
    input usubjid $ sex $ age trt01pn;
    datalines;
101 M 25 1
102 F 30 2
103 M 27 1
;
run;

data adsl02;
    set adsl01;
     label 
     usubjid = 
"Unique Subject Identifier"
     sex     = 
"Sex"
     age     = 
"Age"
      trt01pn = 
"Planned Treatment for Period 01 (N)"
;
run;

proc contents data=adsl02 out=cont01(keep=name label length);
run;
  • We create a dataset adsl01 with proper lengths using the LENGTH statement.
  • Then in a new step, we assign variable labels using the LABEL statement.
  • These labels help provide human-readable names for variables (visible in procedures like PROC PRINT, PROC REPORT, etc.).
#==============================================================================
# Create the dataset
#==============================================================================

library(tidyverse)

adsl01 <- tribble(
  ~usubjid, ~sex, ~age, ~trt01pn,
  "101",    "M",   25,    1,
  "102",    "F",   30,    2,
  "103",    "M",   27,    1
)

 

#==============================================================================
# Assign labels and lengths using attr()
#==============================================================================

attr(adsl01$usubjid, "label") <- "Unique Subject Identifier"
attr(adsl01$usubjid, "length") <- 10

attr(adsl01$sex, "label") <- "Sex"
attr(adsl01$sex, "length") <- 1

attr(adsl01$age, "label") <- "Age"
attr(adsl01$age, "length") <- 8

attr(adsl01$trt01pn, "label") <- "Planned Treatment for Period 01 (N)"
attr(adsl01$trt01pn, "length") <- 8

 

#==============================================================================
# View all labels and lengths
#==============================================================================

# Create a tibble with variable names and their labels
label_table <- tibble(
  variable = names(adsl01),
  label = map_chr(adsl01, ~ attr(.x, "label")),
  length = map_int(adsl01, ~ attr(.x, "length"))
)
  • We use tribble() to define the dataset adsl01 with four variables.
  • Using attr(..., "label") , we assign descriptive labels to each variable.
  • Using attr(..., "length") , we assign length attribute to each variable.
  • R doesn't enforce character length truncation — the "length" attribute is just metadata.
  • Length attribute is just to show for documentation, or SAS-like simulation.
adsl01 <- data.frame(
  usubjid = c(101, 102, 103),
  sex = c("M", "F", "M"),
  age = c(25, 30, 27),
  trt01pn = c(1, 2, 1)
  , stringsAsFactors = FALSE
)

attr(adsl01$usubjid, "label") <- "Unique Subject Identifier"
attr(adsl01$usubjid, "length") <- 10

attr(adsl01$sex, "label") <- "Sex"
attr(adsl01$sex, "length") <- 1

attr(adsl01$age, "label") <- "Age"
attr(adsl01$age, "length") <- 8

attr(adsl01$trt01pn, "label") <- "Planned Treatment for Period 01 (N)"
attr(adsl01$trt01pn, "length") <- 8

label_table <- data.frame(
  variable = names(adsl01),
  label = sapply(adsl01, function(x) attr(x, "label")),
  length = sapply(adsl01, function(x) attr(x, "length")),
  stringsAsFactors = FALSE
)
  • attr(x, "label"/"length") stores metadata on variables.
  • sapply() collects labels and lengths into a summary table.