Sometimes you want a nationally representative study and enough of one subgroup to say something about it on its own. A typical brief: 2,500 US general population, plus enough 18-24s to report on young people properly.
Nat rep alone will not get you there. 18-24 is about 12 percent of the US adult population, so a 2,500 nat rep sample delivers roughly 300 of them. That supports a cut in a crosstab and little else. The answer is to field an augment alongside the main sample, then report the nat rep read and the subgroup read from the same survey.
This guide covers the setup and both reporting paths.
1. Nest the quotas on the dimension you are augmenting
Interlock age with gender in a single quota group, rather than running them as two separate marginal groups:
age = s.numeric_question(
"How old are you?",
min_max=(18, 99),
recodes={
"18-24": "18-24", "25-34": "25-34", "35-44": "35-44",
"45-54": "45-54", "55-64": "55-64", "65+": "65+",
},
)
gender = s.select_question("What is your gender?", ["Male", "Female"])
s.set_quota(
name="Age x Gender",
quotas=[
s.quota("18-24 Male", criteria=(18 <= age <= 24) & (gender == "Male"), quota=0.060),
s.quota("18-24 Female", criteria=(18 <= age <= 24) & (gender == "Female"), quota=0.060),
s.quota("25-34 Male", criteria=(25 <= age <= 34) & (gender == "Male"), quota=0.090),
s.quota("25-34 Female", criteria=(25 <= age <= 34) & (gender == "Female"), quota=0.090),
s.quota("35-44 Male", criteria=(35 <= age <= 44) & (gender == "Male"), quota=0.085),
s.quota("35-44 Female", criteria=(35 <= age <= 44) & (gender == "Female"), quota=0.085),
s.quota("45-54 Male", criteria=(45 <= age <= 54) & (gender == "Male"), quota=0.080),
s.quota("45-54 Female", criteria=(45 <= age <= 54) & (gender == "Female"), quota=0.080),
s.quota("55-64 Male", criteria=(55 <= age <= 64) & (gender == "Male"), quota=0.085),
s.quota("55-64 Female", criteria=(55 <= age <= 64) & (gender == "Female"), quota=0.085),
s.quota("65+ Male", criteria=(65 <= age <= 99) & (gender == "Male"), quota=0.090),
s.quota("65+ Female", criteria=(65 <= age <= 99) & (gender == "Female"), quota=0.110),
],
)
These are US general population targets and they sum to 1.0, with the male lines totalling 0.49 and the female lines 0.51. Use your own wherever the study calibrates to a different universe, such as a category buyer group or a market with no reliable public benchmark, and document them alongside the results. See Weighting methodology on where targets come from.
Nest only the dimension you are augmenting. Leave ethnicity, region and income as ordinary marginal groups. Interlocking age by gender already produces twelve lines, and adding a third dimension produces cells that no realistic sample will fill. See Combining multiple quota groups.
Why nest. Separate marginal quota groups control each dimension's margin but leave the combinations uncontrolled. A respondent counts toward one line in the age group and one in the gender group, independently. For an ordinary study that is enough, because the whole sample is what gets reported.
An augment changes that. Every augment respondent lands in the same age band, so they have little effect on the gender, ethnicity or region margins, and the study overall stays balanced. The young cell itself can still arrive badly skewed, because nothing was controlling its interior. Reporting that cell on its own then means reporting a group nobody balanced.
Nested quotas balance within the band, so the subgroup is representative of itself.
The same applies to weighting if you are using it: build a nested table with age at the outer level, so the 18-24 by gender cells calibrate to the young population's own targets instead of inheriting the study's overall gender split. See structuring weighting schemes.
2. Field the augment as its own respondent source
Use two respondent sources:
- Primary — 2,500, nat rep, using the quotas above. Leave it as a straight nat rep source. Do not put
min_respondentson the young quota lines; let it deliver its natural ~300 young respondents. - Augment — a second respondent source with its definition restricted to 18-24, sized to make up the difference (700, for 1,000 young in total). Set its weighting respondent source to the primary. See How to set up respondent sources.
Keeping the augment on its own source lets you soft launch it, price it and watch it fill separately. It also lets you filter it out at reporting time, which is what makes the nat rep read recoverable.
You can instead force the young respondents into the primary source with min_respondents. It works, but it pushes the other quota lines below their national shares, leaving you to correct a distortion you introduced.
3. Add a variable for the subgroup
Store a flag you can filter on. In the survey:
s.store_value("young", 18 <= age <= 24)
Or build one after fielding from the Questions tab with + DERIVED QUESTION — see Derived questions.
Either way you get a two-value variable to use as a report filter. Selecting age bands by hand out of the raw age question on each report is the main source of inconsistency between tabs.
Reporting when you are not weighting
If the quotas filled, both reads are correct unweighted and you can report them straight off the filters:
- Nat rep — filter out the augment respondent source. Base 2,500.
- Subgroup — filter to your subgroup flag. Base 1,000, drawn from both sources.
Each frame is a sample that was quota'd to the targets it is being reported against, so no correction is needed.
Check that the quotas actually filled first. Run the survey weighted once and read the weighting efficiency on the weighting diagnostic report. Efficiency around 0.98 or above means the weighted and unweighted numbers agree to well inside the margin of error, and the unweighted read is safe to hand over. Below that, fielding did not go to plan and you need to weight — see the next section. Record the figure in your methodology statement, for example "unweighted, weighting efficiency 0.99".
Reporting when you are weighting
Weight the whole thing to nat rep and report however you like. It will just work.
- Total — all respondents, weighted. No filter needed; the augment respondents are down-weighted to the young cohort's population share, so they do not distort the topline.
- Subgroup — filter to your subgroup flag. With age nested at the outer level of the weighting scheme, this calibrates to the young population.
- Everyone else — filter the other way, if you want the non-subgroup as a comparison.
Two things to know:
Report the total on everything. With a 2,500 primary and a 700 augment, the weighted total has an effective base of 2,729, against 2,404 for a standalone weighted 2,500. The augment respondents carry low weights, and low weights still carry information.
Do not filter by respondent source on a weighted dataset. Weights are calibrated across all respondents including the augment, so filtering to the primary source leaves you with a base the calibration was never computed for. 18-24 comes out around 6 percent against a 12 percent target, and nothing in the report flags this. Filtering by source belongs to the unweighted route only.
Related
- Boosting sample size for specific audiences — the quota arithmetic behind minimums and percentages.
- Setting up quotas — building and editing quota groups.
- Combining multiple quota groups — interlocked versus marginal quota design.
- Weighted results FAQ — flat, joint and hierarchical weighting schemes, and weighting diagnostics.
- Reaching low-incidence audiences — for subgroups that are hard to reach as well as small.
- Reporting with MX8 Labs — report scope, layout and filters.

