empirio.ai

Contingency Table: How to Read and Analyze Survey Data

Compare groups in your survey: set up a contingency table in four steps, read the right percentages and back up differences with a chi-square test.

Author at empirio.ai - Marco Warzecha, Co-Founderby Marco WarzechaUpdated October 22, 2026Reading time 14 min

Your neighborhood swim and tennis club just polled 100 members about raising the annual dues, and the vote is a dead heat: 50 in favor, 50 against. Looks like a stalemate. Then you split the answers by age and the picture changes completely. Among members under 30, seven in ten want the increase. Among those 60 and older, only three in ten do.

To make a contingency table, you pick two questions from your survey, list the answer options of one question as rows and those of the other as columns, and then count how many respondents gave each combination of answers, so every cell shows one pairing and its frequency. At empirio.ai, an online survey tool from Germany, cross tabulation and filters are included starting with the Plus plan. By the end of this guide, you'll know which percentage belongs in your report and how to tell a real difference from random noise.


📌 The key points at a glance

  • With empirio.ai you create contingency tables for surveys in a few clicks.
  • Each cell of a contingency table counts one answer combination.
  • Row percentages, not grand-total shares, are what you compare across groups.
  • The chi-square test tells you if a difference is just luck.
  • empirio.ai filters by date range and exports to Excel or CSV.

Create a survey for free

With empirio.ai you can create a modern online survey in minutes — free to start.

  • AI-built survey
  • Adjust by drag & drop
  • Real-time analysis
Start for free

What is a contingency table?

A contingency table (also known as a cross tabulation, crosstab or two-way table) puts two survey questions side by side and counts, cell by cell, how many respondents picked each combination of answers.

The answers to one question run down the rows, the answers to the other run across the columns. Each cell is where a row meets a column, for example every member under 30 who voted for higher dues. The row and column totals sit in the margins, which is why they're called marginal totals. On their own, they give you the marginal distribution of each question.

Here is the swim club's contingency table with its 100 responses. The numbers are invented. In parentheses you see row percentages, so each row adds up to 100%, while the results view in empirio.ai shows the share of all responses instead.

Age groupFor higher duesAgainst higher dues
Under 3021 (70%)9 (30%)
30 to 5920 (50%)20 (50%)
60 and older9 (30%)21 (70%)
Total50 (50%)50 (50%)

The bottom row is the 50/50 split your regular results page already showed. The row totals are simply the group sizes: 30 members under 30, 40 between 30 and 59 and 30 aged 60 or older. Only the rows themselves reveal how differently each age group voted. With three rows and two columns, the swim club data forms a 3×2 contingency table. Two questions with two answers each give you a 2×2 table, the most common case, such as yes or no split by two groups.

Cross tabulation is the natural next move after tallying each question by itself, and our guide on how to analyze questionnaire results covers the full path from raw data to conclusions.

When should you use a contingency table?

A contingency table pays off whenever you want to know whether groups answer differently: departments, age brackets, customer segments, grade levels or majors. Your overall results show how all answers are spread out. The crosstab shows which groups are hiding behind that overall number.

Four situations come up again and again:

  • Employee survey: Engagement scores by department or office location show where the real friction is, often the whole point of an employee survey.
  • Customer survey: First-time buyers and longtime regulars often rate the same support very differently, and a customer survey only reveals that once you cross the rating with customer tenure.
  • Thesis or capstone: A hypothesis such as “graduate students use AI tools more often than undergraduates” calls for exactly one contingency table, a typical step in any survey for a bachelor's or master's thesis.
  • Clubs, PTAs and schools: Which Saturday works best for the block party, split by age group, or how parents rate the booster club fundraiser, split by their kids' grade level.

You need two questions with fixed answer categories: single choice, multiple choice, rating or scale. Open-ended text won't work because every answer is worded differently. With multiple choice, one person can land in several cells, so row percentages add up to more than 100% and the chi-square test isn't designed for that kind of table. Group numbers such as age in years into brackets first, or every single age gets its own row. Which calculations make sense for which type of answer depends on the levels of measurement.

Crosstabs struggle when responses are scarce. Spread 20 answers across 15 cells and most cells hold one or two people, so a single respondent can move a percentage by double digits.

How to read a contingency table: row, column and total percentages

You read a contingency table correctly when you calculate percentages within the groups you want to compare. If the question is whether younger members are more likely to back higher dues, you divide each cell by the number of people in that age group.

How to read a contingency table: three age groups in the rows, support and opposition in the columns, the count and share of all responses in each cell and the totals along the margins

Every cell can be turned into three different percentages, and each one answers its own question. The 21 members under 30 who voted yes come out to 70, 42 or 21 percent, depending on what you divide by:

Percentage typeMath in the swim club exampleQuestion it answers
Row percentage21 ÷ 30 under-30 members = 70%How does this age group vote?
Column percentage21 ÷ 50 yes votes = 42%Where do the yes votes come from?
Total percentage21 ÷ 100 responses = 21%What share of everyone lands in this cell?

Statistics textbooks call the row percentages the conditional distribution of the vote, given the age group. A simple rule from research methods tells you which percentages to use: calculate them within the categories of the variable you're grouping by. The cleanest layout puts that variable in the rows and uses row percentages. Each row then totals 100%, and you compare the rows with one another: 70% support among younger members, 50% in the middle group, 30% among older members.

Compute percentages inside the groups you're comparing, every single time.

Reports often compare percentages that rest on different bases. “42% of yes votes came from members under 30” does not mean that 42% of members under 30 voted yes. The first sentence describes the yes camp, the second describes the age group. Write down what each percentage refers to, and report the number of responses behind it.

How to make a contingency table in empirio.ai, step by step

In empirio.ai, the path is Results > Analysis > Cross tabulation. There you assign one question to the rows and another to the columns, optionally filter by date range or incomplete responses, and download the finished table as an Excel or CSV file. Cross tabulation and filters come with the Plus plan at €39 per month (pricing as of October 2026).

You'll need at least two suitable questions with fixed answers, such as single choice, rating or scale. If they're missing, empirio.ai shows the message “Cross-tabulation requires at least two suitable questions (e.g., Multiple Choice, Rating, Scale).” instead of a table. You add questions in the editor as usual, and if you haven't collected any responses yet, you can create a free survey with empirio.ai first.

Step 1: Find the Cross tabulation tile

Open your survey and switch to the Results section at the top. In the left sidebar, choose Analysis. The analysis features appear as tiles, and one of them is Cross tabulation, described as “Analyze dependencies between two questions.” Click that tile to open the view. The screenshots below show the English interface.

empirio.ai: analysis features in the results area, including the Cross tabulation tile for creating a contingency table from two questions

Step 2: Pick a row question and a column question

Two dropdowns sit at the top: Question 1 (rows) and Question 2 (columns), both showing “Select a question...” until you choose. Your grouping variable, say age group, goes in the rows. The question whose answers you want to compare goes in the columns. Every suitable question pairs with every other one, and you're free to swap them whenever you like.

Step 3: Narrow down the responses with filters

Filters decide which responses go into the table. With From and To you narrow the time window, for example to responses that came in after a reminder email. The Include incomplete responses option also counts people who quit partway through. Leave it off and only finished surveys count, which is the cleaner basis for most analyses because everyone in the table answered all the way to the end.

Step 4: Read the table and export it to Excel or CSV

Every cell lists a count of responses plus, in parentheses, the percentage of the total it represents. Cells with bigger shares are shaded more strongly, which makes clusters easy to spot. Column totals appear in the Total row along the bottom. The Export button gives you two downloads: an XLSX file with counts and shares, or a CSV file with counts only. If a filter was on, the Excel file says so, which keeps filtered numbers from being mistaken for the complete data later.

empirio.ai: finished cross tabulation with Question 1 in the rows and Question 2 in the columns, count and share in each cell and the Export button

Row percentages don't appear in the cells, since empirio.ai displays each count's share of the grand total. Divide any cell by its row total and you have them.

Row percentages in Excel

Export the contingency table as an XLSX file, then divide each count in Excel by its row total. Format the results as percentages and every row adds up to exactly 100%, so you can read the groups side by side.

Create a survey for free

With empirio.ai you can create a modern online survey in minutes — free to start.

  • AI-built survey
  • Adjust by drag & drop
  • Real-time analysis
Start for free

Chi-square test: is the difference in your contingency table real?

The chi-square test of independence checks whether a difference in a contingency table is real or just chance. It compares the observed frequencies with the ones you would expect if the two questions had nothing to do with each other. If the gap is large enough, you have a statistically significant association.

The question behind it sounds simple: Could all age groups in the whole club actually feel the same way, with the pattern showing up by chance in the members who happened to answer? With 100 responses, that's a fair question. The larger your sample size, the less likely such a fluke becomes, and at 1,000 responses it would be a real surprise.

Expected frequencies: how the chi-square test works

To get the expected frequency of a cell, multiply its row total by its column total and divide by the grand total. For the swim club, complete independence would mean exactly half of every age group in favor: 15 of the 30 younger members, 20 of the 40 in the middle and 15 of the 30 older ones. The observed counts are 21, 20 and 9. Those gaps add up to a chi-square value of 9.6 with two degrees of freedom, since (3 rows minus 1) times (2 columns minus 1) equals 2, and a p-value of about 0.008. If all age groups across the entire club truly felt the same, a difference this large would show up in fewer than one in 100 samples. The association is therefore statistically significant.

A result that isn't significant doesn't prove the absence of an association. It just means your data didn't pick one up. The test begins by assuming independence, and a significant result is what lets you reject that assumption.

When the chi-square test doesn't fit

The chi-square test needs enough responses in the cells. Penn State's introductory statistics course (STAT 200) lists as an assumption that all expected values are at least 5. Its applied statistics course (STAT 500) words it a little more loosely: some statisticians hesitate to use the test if more than 20% of the cells have expected counts below five. If your table falls short, the usual fallback is Fisher's exact test, which the UCLA statistical consulting pages point to for exactly this case. Combining rare answers into larger groups beforehand usually solves the problem.

Cramér's V: how strong the association is

A significant result says nothing yet about how strong the association is. With very large samples, even tiny differences turn significant. Cramér's V measures strength on a scale from 0 for no association to 1 for a perfect one. In the swim club example, Cramér's V comes out at about 0.31, which common rules of thumb classify as a moderate association. For a 2×2 table, meaning two groups and a yes or no answer, you can test for statistical significance for free and without signing up, and the calculator reports Cramér's V as well.

Common contingency table mistakes

Most crosstab mistakes don't happen in the table. They happen in the sentence that ends up in the report. The software gets the math right, but making sense of it is still your job.

Four errors show up most often in reports and student papers. Three concern reading a single table, one concerns comparing several tables.

Percentages calculated in the wrong direction

The classic slip is comparing column percentages when row percentages are what you need. “Most complaints come from the night shift” and “most of the night shift complains” are two different claims, and one can be true while the other is false. Put your grouping variable in the rows, calculate row percentages and label every number with its base.

Cells with too few responses

Small cells produce big swings. If a group has only four people, each person counts for 25%, and one unusual answer looks like a trend. Merge small groups or report only raw counts for them. The same goes for the test: if cells are too thin, combine categories or switch to Fisher's exact test.

Watch out with anonymous surveys

A contingency table of department by satisfaction turns into individual answers when a team has only three people. In an anonymous survey, report only groups with roughly five or more responses, and merge smaller departments ahead of time. Small cells can make individuals identifiable, and depending on your organization and where your respondents live, those answers may count as personal information under state privacy laws such as California's CCPA. If you're unsure, check with whoever handles privacy in your organization.

Mixing different filters

Two crosstabs from the same survey only line up if they contain the same responses. Put a table with all responses next to one that leaves out incomplete answers or covers a different date range, and you end up measuring the filter instead of the groups. Keep the filters identical across every table in a report and write them down.

Confusing association with causation

A contingency table shows that two answers go together, not why. Maybe older members don't oppose higher dues because of their age at all, but because many of them are retired, live on Social Security and feel every extra dollar more. Test a hunch like that by creating the same table separately for each group of a third variable, for example with a PivotTable from the exported raw data. If the age gap holds among retirees and working members alike, age is the more likely driver, not income.

Checklist: Is your contingency table ready for the report?

Run through these points before a contingency table goes into a report or a slide deck. If you can check off every item, your analysis will hold up when a board member, a colleague or your thesis advisor starts asking questions.

  • The grouping variable is in the rows.
  • Row percentages are calculated and their base is stated.
  • Every table shows the number of responses.
  • Tiny groups are combined or shown as raw counts only.
  • All compared tables use the same filters.
  • A difference is called significant only after testing.
  • An association is not described as a cause.

The bottom line

A contingency table shows you which groups sit behind an overall result. Two questions and a clear head about percentages are all it takes. Our advice: put the grouping variable in the rows, calculate row percentages and run a chi-square test on striking differences before you report them. When groups are small, merging them beats reading too much into them.

Where to go next


Ready to see which groups drive your results?

Cross tabulation in empirio.ai happens right where your results live: pick two questions, filter by dates and download Excel or CSV files, on the Plus plan.

Create a free survey

Frequently asked questions

A contingency table, which you'll also see called a cross tabulation, crosstab or two-way table, lines up the answers to two survey questions so that each cell counts how many respondents chose that particular pair of answers. One question supplies the rows, the other the columns, and two answer options per question give you a 2×2 table.

To make a contingency table, you start with two questions that have fixed answer options, put one question's answers in the rows and the other's in the columns, and tally the respondents in each combination. empirio.ai handles this under Results, Analysis and Cross tabulation on the Plus plan. In Excel, a PivotTable built from exported raw data works too.

Reading a contingency table correctly means calculating percentages within the groups you want to compare. With the grouping variable in the rows, you use row percentages, so each row totals 100%. Then you compare the rows with each other and state, for every percentage, what it refers to and how many responses stand behind it.

The marginal distribution of a contingency table comes from its marginal totals, the sums along the edges for each row and each column. It shows how the answers to one question are spread out on their own, ignoring the other question. Marginal totals are also the basis for row and column percentages and for expected frequencies in a chi-square test.

You need a chi-square test whenever you want to conclude that a difference in your contingency table didn't just happen by chance in your sample. The test compares observed with expected frequencies. It requires well-filled cells: every expected frequency should be at least 5, although some statisticians accept up to 20% of cells below that.

A contingency table is a statistical display, while a PivotTable is a feature in spreadsheet programs like Excel that can create one, among other things. Any contingency table can be set up as a PivotTable. A PivotTable can also show sums or averages, whereas a contingency table always counts how often combinations of answers occur.

Anyone with raw data can make a contingency table for free, by hand or with a PivotTable. At empirio.ai, an online survey tool from Germany, cross tabulation and filters are part of the Plus plan at €39 per month, and CSV or Excel raw data downloads come with Lite (as of October 2026). Creating surveys is free.

Related articles