Introduction to sss

The sss package makes it easy to read and parse survey data in the sss (triple-s) file format.

Example

library(sss)
library(dplyr, quietly = TRUE, warn.conflicts = FALSE)

Read a survey file

dat <- read.sss("sample.sss", "sample.asc")

Display the results.

dat %>% 
  as_tibble()
#> # A tibble: 3 × 17
#>   Q1      Q2_1  Q2_2  Q2_3  Q2_4  Q2_5  Q2_6  Q2_7  Q2_8  Q2_9 Q3    Q4_1  Q4_2 
#>   <chr>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
#> 1 Visit…     1     0     1     0     0     0     0     0     1 "Amu… Sher… "Oth…
#> 2 Visit…     0     1     0     0     0     0     0     0     0 "   … Nott…  <NA>
#> 3 Visit…     1     0     0     1     0     0     0     0     1 "\"M… Other "\"M…
#> # … with 4 more variables: Q5 <dbl>, Q6 <lgl>, Q7 <chr>, Q99 <dbl>
#> # ℹ Use `colnames()` to see all variable names

And view the structure of the file. Note that some columns have additional attributes with variable.labels and lable.table, e.g. Q99:

str(dat)
#> 'data.frame':    3 obs. of  17 variables:
#>  $ Q1  : chr  "Visited before within the year" "Visited before that" "Visited before within the year"
#>  $ Q2_1: num  1 0 1
#>  $ Q2_2: num  0 1 0
#>  $ Q2_3: num  1 0 0
#>  $ Q2_4: num  0 0 1
#>  $ Q2_5: num  0 0 0
#>  $ Q2_6: num  0 0 0
#>  $ Q2_7: num  0 0 0
#>  $ Q2_8: num  0 0 0
#>  $ Q2_9: num  1 0 1
#>  $ Q3  : chr  "Amusement Park                " "                              " "\"Marco's\" Restaurant          "
#>  $ Q4_1: chr  "Sherwood Forest" "Nottingham Castle" "Other"
#>  $ Q4_2: chr  "Other" NA "\"Maid Marion\" Cafe"
#>  $ Q5  : num  12 999 58
#>  $ Q6  : logi  TRUE TRUE FALSE
#>  $ Q7  : chr  "Within 3 months" "More than 1 years time" NA
#>  $ Q99 : num  1.4 0.9 0.7
#>  - attr(*, "variable.labels")= chr [1:17] "Number of visits" "Attractions visited" "Attractions visited" "Attractions visited" ...
#>  - attr(*, "label.table")=List of 8
#>   ..$ 1 : Named chr [1:3] "1" "2" "3"
#>   .. ..- attr(*, "names")= chr [1:3] "First visit" "Visited before within the year" "Visited before that"
#>   ..$ 2 : Named chr [1:6] "1" "2" "3" "4" ...
#>   .. ..- attr(*, "names")= chr [1:6] "Sherwood Forest" "Nottingham Castle" "\"Friar Tuck\" Restaurant" "\"Maid Marion\" Cafe" ...
#>   ..$ 3 : Named chr NA
#>   .. ..- attr(*, "names")= chr NA
#>   ..$ 4 : Named chr [1:6] "1" "2" "3" "4" ...
#>   .. ..- attr(*, "names")= chr [1:6] "Sherwood Forest" "Nottingham Castle" "\"Friar Tuck\" Restaurant" "\"Maid Marion\" Cafe" ...
#>   ..$ 5 : Named chr [1:2] "500" "999"
#>   .. ..- attr(*, "names")= chr [1:2] "500 or more" "Not stated"
#>   ..$ 6 : Named chr NA
#>   .. ..- attr(*, "names")= chr NA
#>   ..$ 7 : Named chr [1:3] "1" "2" "3"
#>   .. ..- attr(*, "names")= chr [1:3] "Within 3 months" "Between 3 months and 1 year" "More than 1 years time"
#>   ..$ 99: Named chr NA
#>   .. ..- attr(*, "names")= chr NA

Extract the variable labels:

attr(dat, "variable.labels")
#>  [1] "Number of visits"                  "Attractions visited"              
#>  [3] "Attractions visited"               "Attractions visited"              
#>  [5] "Attractions visited"               "Attractions visited"              
#>  [7] "Attractions visited"               "Attractions visited"              
#>  [9] "Attractions visited"               "Attractions visited"              
#> [11] "Other attractions visited"         "Two favourite attractions visited"
#> [13] "Two favourite attractions visited" "Miles travelled"                  
#> [15] "Would come again"                  "When is that most likely to be"   
#> [17] "Case weight"

And the label table for question 2:

attr(dat, "label.table")$`2`
#>         Sherwood Forest       Nottingham Castle "Friar Tuck" Restaurant 
#>                     "1"                     "2"                     "3" 
#>      "Maid Marion" Cafe           Mining museum                   Other 
#>                     "4"                     "5"                     "9"