# 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.

Canonical: https://www.licklider.ai/alternatives/spss-alternatives/
Section: Alternatives › Statistics software
Author: Licklider · Published 2026-11-11 · Last reviewed 2026-11-11 (UTC)

> **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](https://www.ibm.com/products/spss-statistics/pricing): pricing "Per Authorized User"; [Advanced Statistics](https://www.ibm.com/products/spss-statistics/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](https://jasp-stats.org/): "an open-source project supported by the University of Amsterdam"; [FAQ](https://jasp-stats.org/faq/) lists ".sav, .zsav and .por (SPSS files)" among supported formats; [features](https://jasp-stats.org/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](https://www.jamovi.org/): "a free and open statistical spreadsheet"; its [FAQ](https://www.jamovi.org/faq.html): "jamovi reads SPSS (.sav), SAS, Stata, and CSV files directly"; [features](https://www.jamovi.org/features.html) |
| **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](https://www.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](https://haven.tidyverse.org/): "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](https://pypi.org/project/pyreadstat/): 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](/sciground/analyses/) and [their limits](/sciground/analyses/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](/alternatives/spss-alternatives/two_groups.csv), [check.py](/alternatives/spss-alternatives/check.py), [check.R](/alternatives/spss-alternatives/check.R) and [their output](/alternatives/spss-alternatives/check_output.txt).

| 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](https://doi.org/10.1348/000711004849222)). 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](/guides/statistical-tests-for-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](/guides/welch-vs-student-t-test/) explains why with more examples.

```python
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
```

```r
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](/sciground/analyses/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](/guides/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](https://www.ibm.com/docs/en/spss-statistics/32.0.0?topic=tests-independent-samples-t-test)); 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](/alternatives/ai-assistants-for-statistical-analysis/)). SciGround checks its supported analyses inside ChatGPT or Claude; it is not a full statistics package.

## References

- Zimmerman DW (2004). A note on preliminary tests of equality of variances. *British Journal of Mathematical and Statistical Psychology* 57(1):173–181. [doi:10.1348/000711004849222](https://doi.org/10.1348/000711004849222)
- IBM SPSS Statistics pricing. [ibm.com](https://www.ibm.com/products/spss-statistics/pricing) (checked 11 November 2026)
- JASP Team. JASP and JASP FAQ. [jasp-stats.org](https://jasp-stats.org/) (checked 11 November 2026)
- The jamovi project. jamovi and jamovi FAQ. [jamovi.org](https://www.jamovi.org/) (checked 11 November 2026)
- GNU PSPP. [gnu.org/software/pspp](https://www.gnu.org/software/pspp/) (checked 11 November 2026)
- haven: import and export SPSS, Stata and SAS files. [haven.tidyverse.org](https://haven.tidyverse.org/) (checked 11 November 2026)
- pyreadstat. [pypi.org/project/pyreadstat](https://pypi.org/project/pyreadstat/) (checked 11 November 2026)

## 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.*

## Related

- [GraphPad Prism alternatives](https://www.licklider.ai/alternatives/graphpad-prism-alternatives/)
- [Welch's t-test vs Student's t-test](https://www.licklider.ai/guides/welch-vs-student-t-test/)
- [Claude, Gemini or Copilot for statistics](https://www.licklider.ai/alternatives/ai-assistants-for-statistical-analysis/)
- [Statistical test chooser](https://www.licklider.ai/tools/statistical-test-chooser/)

## 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.
