Navigating a 1,000-Column Survey

The 2018 General Social Survey has 1,146 variables. Here's how to find any of them, read what each one is, and declare a whole battery in one pass.

Follow along: GSS2018.sav — the 2018 General Social Survey, 2,348 respondents × 1,146 variables, every one labelled. Free from NORC at the University of Chicago (SPSS single-year file).
Requires Stratum 1.5 for the column rail, measurement levels and the Column Definition sheet.

Opening a big .sav is the easy part — Stratum reads the labels, value labels and missing codes directly. The hard part comes next. At default width a laptop-sized window shows about nine of the GSS's 1,146 columns, which leaves more than a hundred screens of sideways scrolling between you and the variable you want. A wide dataset needs an index, not a scroll bar.

An index down the side of the data

In 1.5 the data view opens with a column rail: every variable, one row each, listed by its label. Type in Filter columns… and it matches any part of a name or a label, so happ finds General happiness without you remembering it's called happy. Where two variables share a label — and 122 of the GSS's do — the name is appended so you can tell them apart.

The italic letter beside each row is its storage type, and it is also the filter letter: /f keeps the floats, /i the integers, /t text, /d dates, /b Booleans, and ~ inverts. On the GSS, 1,109 variables are coded whole numbers and 37 are floats, so /f puts the real measurements — incomes in constant dollars, socioeconomic indexes, the survey weights — on one screen. A calculated column carries an f() in a gutter of its own.

Stratum's column rail on the 2018 GSS filtered with /f, showing 37 of 1,146 columns, each marked with an italic f
/f turns 1,146 columns into the 37 measurements. The italic letter is the type and the filter.

Click a row and the grid's cursor jumps to that column on the row you were already on; the active column is shown in bold, so moving sideways in the grid moves you in the rail too. Below the list, a detail pane reads out that one variable: Type, Level, Order, Values, Missing and its Count, with Min, Max, Mean and Std. Dev. where they mean something. When the label differs from the name you see both — the label is what you recognize, the name is what a formula uses.

The column rail's detail pane for the GSS variable natfare, Welfare, showing type, level, order, value labels and missing rule
One variable, everything Stratum knows about it, beside the grid.

Variable View, but it reads the data

If you're coming from SPSS, the Navigator (the Data / Navigator switch above the grid) is the familiar half: one row per variable with Type, Values, Order and Missing beside live summary statistics. The Missing column says where each rule came from — From dataset when the variable takes the file-wide declaration, From column when it states its own, All counted when it sets nothing aside. Order reads Ordered once a level order is set and None until then, the one thing separating Male / Female from too little … too much.

The difference is the measurement level. SPSS's Measure column is whatever someone typed into Variable View, and in practice nobody does: the GSS 2018 file marks 1,144 of its 1,146 variables Scale, sex and race included. Stratum ignores that field and reads the values. A numeric column whose every code carries a value label is a group code, so it resolves Nominal; a column with a level order is Ordinal; a real measurement is Continuous. The level decides what each analysis picker offers first, so a 1/2/3 code is offered as something to split by rather than averaged.

Stratum Navigator listing the GSS national-spending variables with Values, Order and Missing columns
The Navigator: one row per variable, with where each missing rule came from.

Declare a battery in one pass

The GSS's national-spending battery is 29 items — Welfare, Foreign aid, Space exploration program and the rest — each coded 1 too little, 2 about right, 3 too much. Fully labelled, so each resolves Nominal. They're ordinal, and you should only have to say so once.

  1. Filter the rail with nat. Click Foreign aid, Shift-click Space exploration:Version Y, and ⌘-click (Ctrl-click on Windows) the five natural environments items in between to drop them. The rail reads 29 columns selected.
  2. Right-click a selected row and choose Column Definition…. Apply to: already reads 29 columns.
  3. On Level, choose Ordinal. On Order, put the levels in order — too little, about right, too much — dragging if needed.
  4. Apply.
Column Definition sheet with Apply to set to 29 columns and the Level section set to Ordinal
One sheet holds type, level, order, value labels, missing codes and colors; Apply to reaches every column you selected.

Apply writes only what you changed, section by section, so declaring the level and order across 29 columns can't stamp one column's value labels or missing rule over the other 28. The rail's Level now reads Ordinal with a From column badge, the Navigator's Order reads Ordered, and charts, ANOVA groups, regression and legends follow that order instead of sorting alphabetically.

Select once, act many times

The selection stays useful. Right-click it again and you get the data sheet's own column menu — and every command opens with those columns already ticked. Stack Columns… arrives ready to turn the 29 items into one long column for a single chart or model, and because Stratum keeps each column's header identifiers when it stacks, the rows stay tagged with the item they came from.

Stack Columns sheet opening with the 29 selected GSS spending items already ticked
Picked once in the rail; Stack Columns opens with all 29 ticked.
Where this leads. The same file — in its 2024 edition — is the subject of an upcoming case study: weights, cross-tabs and a regression on a fully labelled survey, straight from the .sav. Everything in it starts with finding the variables.

Download Stratum

Frequently asked questions

How do I find a variable in a dataset with a thousand columns?

Type any part of its name or its label in the column rail's Filter columns… box. Clicking the result moves the grid's cursor to that column, keeping the row you were on.

Is there an equivalent of SPSS Variable View in Stratum?

Yes, in two forms: the Navigator, a table with one row per variable showing its type, value labels, level order, missing rule and summary statistics; and the column rail's detail pane, which shows the same facts for one variable at a time.

Does Stratum use the Measure field from an SPSS .sav file?

No. In real files that field is almost always left at its default (the 2018 GSS marks 1,144 of 1,146 variables Scale), so Stratum reads each column's measurement level from the data instead, and you can override it per column or for many at once.

How do I mark many Likert items as ordinal at once?

Select them in the column rail or the Navigator, right-click and choose Column Definition…. Apply to is already set to your selection; set Level to Ordinal and the level order once, then Apply. Only what you changed is written to each column.

Does this work on Windows?

Yes. The column rail, the Navigator and the Column Definition sheet are in both the Mac and Windows apps; use Ctrl-click where the Mac uses ⌘-click.

Related: Open an SPSS .sav File → · Stratum vs SPSS → · Which Statistical Test Should I Use? →

workflows spss survey-data