Medicare Advantage, Part D, Medicaid
MA ma state county penetration
medicare_silver.ma_state_county_penetration·live·silver·monthly·Medicare Advantage & Part D EnrollmentRows
N/A
Columns
24
History
2008-06-01 to 2026-04-01
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1CMS Medicare Advantage (and Part C/cost-plan) market penetration by county and month: for each U.S. county and monthly snapshot it gives the number of Medicare beneficiaries eligible, the number enrolled in a private MA/Part-C plan, and the resulting penetration rate.
- 2It is the demand-side / market-share denominator for MA cost analysis — the share of each local Medicare market that has moved from fee-for-service into managed care.
Grain
| Key | Grain |
|---|---|
fipsreport_month |
|
How to read it
- 1Trend MA penetration for a county over time: SELECT report_month, eligibles, enrolled, penetration FROM medicare_silver.ma_state_county_penetration WHERE fips='04021' AND suppression_reason_code='none' ORDER BY report_month.
- 2Answers 'how has Medicare Advantage market share in Pinal County, AZ evolved month over month?' For a clean national county cross-section, add WHERE fips NOT IN ('00000','0') AND suppression_reason_code='none' to drop the Pending rollup bucket and small-cell-suppressed cells.
Traps
- 1The grain is (fips, report_month) — NOT any of the period columns the profiler latched onto. report_month, observed_period, and effective_period_start are three identical copies of the same month (0 mismatches), and effective_period_end is just that month's last day; don't mistake them for separate dimensions.
- 2ssa / (ssa, report_month) looks like an alternate key but is NOT unique: Rota, Saipan and Tinian (N. Mariana Islands) all collapse to ssa '63050', giving ~471 duplicate (ssa, month) pairs. Join and dedup on fips, never on ssa. Likewise fipsst is inconsistently zero-padded ('01' vs '1', '00' vs '0'), so aggregate by substring(fips,1,2) or state_name, not raw fipsst.
- 3Suppression is real and asymmetric: 13,675 rows are 'small_cell_suppressed' → enrolled is NULL but enrolled_lower_bound=0 / enrolled_upper_bound=10 (CMS masks counts of 1-10). penetration is also NULL for these. Treating NULL enrolled as 0 will understate enrollment; use the [0,10] band. A further 270 unsuppressed ('none') rows also have NULL enrolled (early territory months + the Pending bucket where eligibles are known but enrollment wasn't reported).
- 4penetration is mostly 0-1 but 68 rows exceed 1.0 (max 2.136, e.g. Pinal County AZ in 2010 where reported enrolled ~18k > eligibles ~8.5k). This is an upstream CMS data quirk, not a computed error — clamp or flag if you need a guaranteed 0-1 share. Also 300 rows have enrolled > eligibles overall.
- 5There is no vintage/revision/is_current dedup to do: cms_vintage_sequence=1, parse_revision=1, and asserted_at is a single date (2026-05-15) for every row. It is one immutable backfilled snapshot of 215 monthly CMS files (one source_url + sha256 per month). A 'Pending State/County Designation' rollup row (fips '00000', sometimes unpadded '0', ssacnty '999') exists in many months as a not-yet-geocoded bucket — exclude it (and the territory rows) for clean county-level CONUS analysis.
Columns (24)
| Column | Type | Meaning |
|---|---|---|
fipsst | string | State portion of FIPS (first 2 chars). 64 distinct values — note it is NOT consistently zero-padded across the history (you see both '01'/'1', '04'/'4', '00'/'0'), so do not GROUP BY fipsst expecting 50-ish clean states; derive from substring(fips,1,2) or use state_name. Includes territories 60/66/69/72/78. |
fipscnty | string | County portion of FIPS (last 3 chars). '000' for the Pending/rollup bucket. |
report_month | date | First day of the report month (date). Half the grain key. 215 distinct months, monthly cadence 2008-06-01 .. 2026-04-01. Identical in value to observed_period and effective_period_start (0 mismatches) — those are redundant copies. |
state_name | string | Human-readable state/territory name. Has casing/spelling drift over time ('Pending State Designation' vs 'PENDING STATE DESIGNATION', 'Pending County Design' truncation) — treat as descriptive, not a key. |
county_name | string | Human-readable county name (e.g., Autauga, Baldwin). Descriptive only; same casing/truncation drift caveat. |
fips | string | 5-char county FIPS code = fipsst||fipscnty. THE county identifier and half the grain key. 3,533 distinct. Caveat: not always zero-padded — a special rollup bucket appears as both '00000' and '0' in different months (see gotchas). |
ssast | string | SSA state code (CMS's legacy Social Security Administration geography numbering, distinct from FIPS). |
ssacnty | string | SSA county code. '999' marks the Pending/unknown-county rollup bucket; '000' = the state's primary county slot in SSA numbering. |
ssa | string | 5-char SSA code = ssast||ssacnty. An alternate geography key but NOT unique per month: the three Northern Mariana Islands counties (Rota/Saipan/Tinian) all map to ssa '63050', so (ssa, report_month) has ~471 collisions and is finer than the true grain. Use fips, not ssa, as the join key. |
eligibles | int | Count of Medicare beneficiaries eligible for MA in that county-month (the denominator). Never null, never zero in this data. This is total Medicare eligibility (FFS + MA), so penetration = enrolled/eligibles. |
enrolled | int | Count enrolled in an MA/Part-C/cost plan (the numerator). NULL when small_cell_suppressed (13,675 rows) OR when the territory/Pending bucket did not report enrollment (270 'none' rows). When present and unsuppressed it equals both bound columns. |
enrolled_lower_bound | int | Lower bound of enrolled. Equals enrolled exactly for unsuppressed rows. For small_cell_suppressed rows it is 0 (the CMS small-cell band is [0,10]). |
enrolled_upper_bound | int | Upper bound of enrolled. Equals enrolled for unsuppressed rows; 10 for every suppressed row (CMS masks counts 1-10 as the range 0-10). Use the [lower,upper] band to reason about suppressed cells instead of treating enrolled NULL as zero. |
penetration | double | MA penetration rate = enrolled/eligibles, as a fraction (0-1 typically; double). Range observed 0.0016 .. 2.136, avg ~0.284. NULL whenever enrolled is NULL (13,946 rows). 68 rows exceed 1.0 (a known CMS source quirk where reported enrolled > eligibles, e.g. Pinal County AZ 2010 ≈ 2.1×) — clamp/flag if you need a clean 0-1 rate. |
suppression_reason_code | string | Why a cell is masked. Two values: 'none' (677,885 rows, normal) and 'small_cell_suppressed' (13,675 rows, count was 1-10 so enrolled is hidden and bounds are [0,10]). This is the column to filter on to drop suppressed cells. |
observed_period | date | Redundant copy of report_month (0 mismatches). Part of Vlada's temporal-provenance envelope; carries no extra info here. |
asserted_at | date | When Vlada asserted/loaded this snapshot. Single constant value 2026-05-15 for the entire table — confirms this is one backfilled load, not an incrementally appended feed. |
effective_period_start | date | Start of the month the data is effective for — identical to report_month (0 mismatches). Vlada bitemporal-envelope field. |
effective_period_end | date | Last day of the report month (e.g., 2021-05-31 for May-2021). Just the month-end of report_month. |
cms_vintage_sequence | int | Intended to order CMS re-releases of the same month. Constant = 1 everywhere — there are no superseding vintages, so no 'latest vintage' filter is needed. |
parse_revision | int | Parser re-run revision counter. Constant = 1 everywhere; no reprocessed rows exist. |
parser_artifact_hash | string | Hash of the parser artifact used. 215 distinct values — effectively one per monthly file, not a row-level discriminator. |
source_url | string | CMS download URL for that month's ZIP (e.g., https://www.cms.gov/files/zip/ma-statecounty-penetration-may-2021.zip). Exactly 215 distinct = one file per month (1:1 with report_month), confirming the monthly-snapshot lineage. |
sha256_content_hash | string | SHA-256 of the source file contents. 215 distinct = one per monthly file; provenance/integrity, not a grain column. |
Query it
describe_data_source(source_fqn="medicare_silver.ma_state_county_penetration") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.ma_state_county_penetration WHERE fips = '<value>' AND report_month = '<value>' LIMIT 100")
| Item | Value |
|---|---|
| Typed tools that read it | get_market_share |
| Identity key | fipsst |
| Join | how_to_join(source_fqn="medicare_silver.ma_state_county_penetration") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.ma_state_county_penetration |
| Note | Grain-governed; live in Glue / query_substrate. Source family ma_state_county_penetration. get_market_share reads medicare_semantic.vw_ma_state_county_penetration_v2 since 2026-09-30 (MASCP-1); this table is unchanged. Invariant KeySetStable (fipsst) fails any month a state leaves the file unless the exit is known (CT 2024-08, AK 2025-07). |
This page as markdown: /docs-md/data/medicare_silver_ma_state_county_penetration.md · every page in one file: /llms-full.txt