Statistics software · Compare tools

SPSS alternatives: what opens your .sav files, and what to check when you switch

JASP, jamovi and PSPP are free and can open SPSS files; R and Python read them too. Keep SPSS where your lab depends on it, and check which t-test row you report. Each option's strengths, from its own pages.

By Licklider · Published · Last reviewed · How this page was made · Markdown

On this page
  1. The options, grouped by job
  2. Worked check: which t-test row do you report?
  3. Which tool for which job
  4. Before you switch: what to check
  5. How we compared
  6. Questions
  7. References
  8. Changes

Disclosure. Licklider makes SciGround, one of the options on this page. Options are grouped by the job they do rather than ranked, and each statement about another product names its source and the date we checked it. Statements about each application come from its own pages; before you choose, try the applications yourself to see their screens and confirm what they offer.

Quick answer. If you need SPSS-style menus without a licence, JASP and jamovi are free, open source and open SPSS .sav files; PSPP is a free program built to resemble SPSS itself. If you write code, R (haven::read_sav) and Python (pyreadstat) read the same files and give you a script you can rerun. Keep SPSS when your lab’s procedures, syntax files or collaborators depend on it. Whichever you use, one check matters: SPSS (and, per the GNU PSPP manual, PSPP) print two rows for an independent-samples t-test; on the constructed data below, computed in Python and R, the “equal variances assumed” row gives p = 0.024 and the “not assumed” (Welch) row p = 0.137. For a continuous, roughly symmetric outcome, decide in advance to report the row that does not assume equal variances (Welch’s t-test); JASP and jamovi run Student’s t-test unless you tick Welch. When you switch, check that missing-value codes and labels came through, and export SPSS output files before a licence ends. The product descriptions on this page come from each product’s own pages, not from our own testing.

Terms used below. .sav: the SPSS data file format. Syntax: SPSS’s command language, the code behind the menus. Open source: the program’s code is public and free to use. Levene’s test: a test of whether two groups have equal spread. Student’s t-test: assumes equal spread (“equal variances assumed” in SPSS). Welch’s t-test: does not (“equal variances not assumed”). df (degrees of freedom): a number printed with the test that reflects the amount of independent data. Independent-samples t-test: compares two separate groups (of animals or samples). False positive: a “significant” result when there is no real difference. ANOVA: compares three or more groups; Type III is one way of splitting variation when group sizes are unequal. Mixed model: an analysis for repeated or nested measurements. Bayesian: an approach that reports how strongly the data support one hypothesis over another. Data frame: a table of data in R or Python. Confidence interval: the range of effects compatible with the data. Significance level: the false-positive threshold, usually 0.05. Paired t-test: compares two measurements on the same animals.

The options, grouped by job

Each row states its source and the date we checked it.

Option Best for Less suited for Basis (checked 11 November 2026)
IBM SPSS Statistics Labs and courses built around SPSS menus, syntax and output; the Advanced Statistics module adds mixed models, Kaplan–Meier and Cox regression No-budget settings; licensed per authorised user IBM pricing page: pricing “Per Authorized User”; Advanced Statistics
JASP Point-and-click analysis, free, in classical and Bayesian form; its menus include repeated-measures ANOVA, ANCOVA, linear and generalised linear mixed models, survival, meta-analysis, reliability with Bland–Altman plots, equivalence tests and power; opens SPSS files Analyses outside its menus jasp-stats.org: “an open-source project supported by the University of Amsterdam”; FAQ lists “.sav, .zsav and .por (SPSS files)” among supported formats; features
jamovi Point-and-click analysis in a spreadsheet layout, free; shows the R code behind each analysis; t-tests, ANOVA and regression built in, with library modules for mixed models (“from t-tests to mixed models”), survival and more; R code can also be run inside it Analyses with no built-in menu or module, unless you write R jamovi.org: “a free and open statistical spreadsheet”; its FAQ: “jamovi reads SPSS (.sav), SAS, Stata, and CSV files directly”; features
GNU PSPP An SPSS look-alike with no licence, no case or variable limits and no paid add-ons; covers core procedures such as t-tests, ANOVA, regression and non-parametric tests Procedures that PSPP has not implemented gnu.org/software/pspp: “a free as in freedom replacement for the proprietary program SPSS”, with “no additional packages to purchase”
R Any analysis you want to rerun and cite; reads .sav with haven::read_sav() Readers who will not write code haven: “read_sav() reads .sav files”
Python Analyses inside a wider data pipeline; reads .sav with pyreadstat Readers who will not write code pyreadstat on PyPI: reads and writes SPSS files into pandas data frames
SciGround (our product) Checking analyses and claims inside ChatGPT or Claude, with a shareable record Analyses outside its supported workflows; not a replacement for a full statistics package Our capability pages: supported analyses and their limits

Read each product’s own page before you decide; every row links to a source for it.

Worked check: which t-test row do you report?

SPSS’s independent-samples t-test prints Levene’s test and two rows of results, one with “equal variances assumed” (Student’s t-test) and one with “equal variances not assumed” (Welch’s t-test). A common habit is to choose the row on the basis of Levene’s p-value. The constructed data below have 5 treated and 12 control animals, with the small group more variable; this dataset was chosen from simulated datasets to show the problem clearly. Stored files: two_groups.csv, check.py, check.R and their output.

Output row (constructed data) Statistic p
Levene’s test for equality of variances (mean-centred, as SPSS computes it) F = 4.49 0.051
Equal variances assumed (Student) t = −2.51, df = 15 0.024
Equal variances not assumed (Welch) t = −1.80, df = 4.56 0.137

Under that habit, Levene’s p of 0.051 leads to the first row and a “significant” result. The Welch row, which does not depend on the spreads being equal, is not significant. With 5 animals in the smaller group, “not significant” does not mean no effect; report the difference with its confidence interval. Note that SPSS’s version of Levene’s test centres on the mean, while SciPy’s levene and R’s car::leveneTest centre on the median by default, so their p-values can differ. Choosing the row by a preliminary test “fails to protect the significance level and usually makes the situation worse”; the remedy is to use the separate-variances test “unconditionally whenever sample sizes are unequal” (Zimmerman 2004). Decide on the Welch row before you look at the output, in SPSS or in any alternative. JASP and jamovi run Student’s t-test by default and offer Welch’s as a tick box (jamovi’s documentation lists welchs as “FALSE (default)”); R’s t.test() uses Welch by default; in Python, pass equal_var=False. For sparse counts with very unequal groups, model the counts instead of using a t-test (count data). To see which test an existing result used: Student’s df is always n₁ + n₂ − 2 (15 here), while Welch’s df is usually a non-whole number, so a fractional df points to Welch. The Welch vs Student guide explains why with more examples.

import pandas as pd
from scipy import stats

d = pd.read_csv("two_groups.csv")             # for SPSS files: import pyreadstat; d, meta = pyreadstat.read_sav("data.sav")
t, c = d.value[d.group == "treated"], d.value[d.group == "control"]   # use your column names
r = stats.ttest_ind(t, c, equal_var=False)       # Welch's t-test, the "equal variances not assumed" row
print(r, r.confidence_interval())                # treated - control
d <- read.csv("two_groups.csv")               # or: d <- haven::read_sav("data.sav")
t.test(d$value[d$group == "treated"], d$value[d$group == "control"])   # Welch by default; treated - control

Which tool for which job

You need to… A good fit Why
Keep using menus after an SPSS licence ends JASP or jamovi Free and open source; open .sav files
Keep an SPSS-like interface without a licence PSPP Built to resemble SPSS; free, with no paid modules
Produce a result for a paper with code you can rerun R or Python Free, scriptable and citable by version; read .sav directly
Stay compatible with a lab, course or collaborator on SPSS SPSS Same files, syntax and output everyone else uses
Check that an AI-produced analysis supports the claim you want to make SciGround (our product), used inside ChatGPT or Claude Verified results for its supported analyses only (limits)

Before you switch: what to check

  1. Value labels and missing-value codes. SPSS stores labels (“1 = male”) and user-defined missing codes (such as 99) in the .sav file. After opening it elsewhere, check that labels came through and that codes like 99 are treated as missing, not as data: in R, haven::read_sav("data.sav", user_na = TRUE) keeps the missing codes visible and haven::zap_missing() turns them into NA; in Python, pyreadstat.read_sav("data.sav", user_missing=True) keeps them and the returned metadata lists them; in JASP or jamovi, open the file and look at each variable’s values and labels before analysing.
  2. Defaults that differ between programs. The t-test row is one; others include whether an ANOVA assumes equal variances and which sums of squares a two-factor ANOVA uses (SPSS defaults to Type III; see unequal group sizes). Rerun one analysis you already reported and compare every number.
  3. Procedures you rely on. List the analyses your lab uses (for example curve fitting, or a specific mixed-model option) and confirm each is in the new tool’s menus or packages before you migrate; the JASP and jamovi feature pages list what is built in.
  4. Output for records. SPSS output files (.spv) are SPSS-specific; export the tables you need to keep before the licence ends.

How we compared

  • Sources: each product’s own public pages, checked on 11 November 2026 (IBM SPSS pricing; jasp-stats.org and its FAQ; jamovi.org and its FAQ; gnu.org PSPP page; haven and pyreadstat documentation). IBM’s documentation describes the independent-samples t-test output as “Levene’s test for equality of variances and both pooled-variances and separate-variances t tests for equality of means” (IBM documentation); IBM’s server blocked some of our direct automated requests; the quotation was confirmed through our research tooling.
  • Our reproducible check: the two t-test rows and Levene’s test on constructed data, run in SciPy 1.18.1 and R 4.3.3 with stored code. It tests the methods, not any product.
  • No hands-on testing of SPSS, JASP, jamovi, PSPP or any other product was done.
  • Conflict of interest: Licklider makes SciGround.

Check any statement against its linked source and date.

Questions

What is the best free alternative to SPSS? For menus, JASP and jamovi are the closest free options and both open .sav files; PSPP looks most like SPSS. For reproducible analyses, R or Python. Try the one that fits how you work on a dataset you have already analysed, and compare the numbers.

Can I open an SPSS file without SPSS? Yes. JASP, jamovi and PSPP open .sav files, and R (haven::read_sav) and Python (pyreadstat) read them into data frames. Check value labels and missing-value codes afterwards.

Which row of SPSS’s independent-samples t-test table should I report? The “equal variances not assumed” row (Welch’s t-test), chosen in advance, for two separate groups and a continuous outcome. In the worked check, choosing by Levene’s test leads to the “significant” Student row while the Welch row is not significant; with 5 animals in the smaller group, that does not mean there is no effect, so report the difference with its confidence interval. Paired data use the paired t-test, which has a single row.

Can ChatGPT or Claude replace SPSS? They can run analyses on uploaded data, but check the design and rerun the code (AI assistants for statistics). SciGround checks its supported analyses inside ChatGPT or Claude; it is not a full statistics package.

References

Changes

  • 11 November 2026: first published.

IBM SPSS Statistics, JASP, jamovi, GNU PSPP, R, Python, ChatGPT and Claude are names of their owners’ products. Licklider is not affiliated with IBM, the JASP team, the jamovi project, the GNU Project, the R Foundation, the Python Software Foundation, OpenAI or Anthropic.

How this page was made

  • Written and published by Licklider, which makes SciGround, one of the options compared here.
  • Statements about other products come from their own public pages, checked on 11 November 2026; each is linked. No hands-on testing of any product was done.
  • The worked check uses constructed data and stored code (Python 3.13 with SciPy 1.18.1; R 4.3.3); both languages print the same numbers.
  • Separate review passes checked the statistics, the citations, the product and comparative statements, and readability before publication.