{
 "study": "metro-pay-spread",
 "csv": "metro-pay-spread.csv",
 "csv_sha256": "00040f1bc26add560270d2bc75940879cfceb075a2c8f5bd16f809a6ed7ac3bb",
 "how_to_reproduce": "Load the CSV with the column types in package.json (blank = not computed). 'where' filters rows (all conditions, blank cells never match). Ops: count; q = type-7 linear-interpolation percentile of col at p (Excel PERCENTILE.INC); q_pct_above = round(100 x (q - 1)); nth = sort by col (desc if set; ties by soc) and take row n (0-based); count_gt_cols = rows where a > b; count_nonnull; top_k_all = the first k rows by col all have flag = yes; group_pick = per group of >= min_n rows the type-7 median of col, then the max or min group (ties by name). No randomness. Every value must equal the published one.",
 "findings": [
  {
   "id": "M-F1",
   "text": "Across 318 occupations with reliable estimates in at least 20 metro areas, the typical occupation's median wage in a high-paying metro (90th percentile of metros) is 36% above its median in a low-paying metro (10th percentile): a metro pay spread of 1.36. For the middle half of occupations the spread runs from 1.29 to 1.50 (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [],
   "reproduce": {
    "n": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 318
    },
    "pct": {
     "spec": {
      "op": "q_pct_above",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "int",
     "value": 36
    },
    "med": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.357079398054895
    },
    "q1": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.25
     },
     "format": "x2",
     "value": 1.2918393457935884
    },
    "q3": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.75
     },
     "format": "x2",
     "value": 1.4961975039094395
    }
   }
  },
  {
   "id": "M-F2",
   "text": "In dollars, the typical gap between the 90th- and 10th-percentile metro median annual wages of the same occupation is $20,023, across the same 318 occupations. It is a gap between metro medians, not any worker's earnings (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [],
   "reproduce": {
    "gap": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "gap_p90_p10_usd",
      "p": 0.5
     },
     "format": "money",
     "value": 20023.0
    },
    "n": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 318
    }
   }
  },
  {
   "id": "M-F3",
   "text": "78 of the 318 occupations have a metro pay spread of 1.5 or more, meaning the high-paying-metro median is at least 50% above the low-paying-metro median; 10 have a spread below 1.2 (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [],
   "reproduce": {
    "k": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "spread_p90_p10",
        ">=",
        1.5
       ]
      ]
     },
     "format": "int",
     "value": 78
    },
    "n": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 318
    },
    "j": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "spread_p90_p10",
        "<",
        1.2
       ]
      ]
     },
     "format": "int",
     "value": 10
    }
   }
  },
  {
   "id": "M-F4",
   "text": "Firefighters show the widest metro pay spread of the 318 occupations: the 90th-percentile metro median annual wage ($81,488) is 2.17 times the 10th-percentile metro median ($37,552), across 117 metro areas (BLS OEWS May 2025; nominal wages, not adjusted for cost of living). Caveat: OEWS turns firefighters' hourly rates into annual pay at 2,080 hours, while firefighter shift schedules and the way departments set hourly rates differ, so part of this spread may reflect how pay is recorded rather than pay levels.",
   "checks": [
    [
     "name",
     "==",
     "Firefighters"
    ],
    [
     "t",
     "==",
     "no"
    ]
   ],
   "reproduce": {
    "name": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 0,
      "field": "occupation"
     },
     "format": "str",
     "value": "Firefighters"
    },
    "n": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 318
    },
    "p90": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 0,
      "field": "p90_metro_median_usd"
     },
     "format": "money",
     "value": 81488.0
    },
    "sp": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 0,
      "field": "spread_p90_p10"
     },
     "format": "x2",
     "value": 2.170004260758415
    },
    "p10": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 0,
      "field": "p10_metro_median_usd"
     },
     "format": "money",
     "value": 37552.0
    },
    "m": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 0,
      "field": "reliable_metros"
     },
     "format": "int",
     "value": 117
    },
    "t": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 0,
      "field": "flag_tipped"
     },
     "format": "flag",
     "value": "no"
    }
   }
  },
  {
   "id": "M-F5",
   "text": "The next two widest spreads belong to tipped occupations, bartenders (2.13) and waiters and waitresses (2.08). OEWS wages include tips, so for these jobs the spread covers reported tip income as well as base pay (BLS OEWS May 2025).",
   "checks": [
    [
     "bn",
     "==",
     "Bartenders"
    ],
    [
     "wn",
     "==",
     "Waiters and Waitresses"
    ],
    [
     "bt",
     "==",
     "yes"
    ],
    [
     "wt",
     "==",
     "yes"
    ]
   ],
   "reproduce": {
    "b": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 1,
      "field": "spread_p90_p10"
     },
     "format": "x2",
     "value": 2.1271639042357275
    },
    "w": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 2,
      "field": "spread_p90_p10"
     },
     "format": "x2",
     "value": 2.0830356324997714
    },
    "bn": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 1,
      "field": "occupation"
     },
     "format": "str",
     "value": "Bartenders"
    },
    "wn": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 2,
      "field": "occupation"
     },
     "format": "str",
     "value": "Waiters and Waitresses"
    },
    "bt": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 1,
      "field": "flag_tipped"
     },
     "format": "flag",
     "value": "yes"
    },
    "wt": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": true,
      "n": 2,
      "field": "flag_tipped"
     },
     "format": "flag",
     "value": "yes"
    }
   }
  },
  {
   "id": "M-F6",
   "text": "The three narrowest spreads belong to the three U.S. Postal Service occupations in the data: postal service clerks at 1.06, mail sorters and processors at 1.09 and mail carriers at 1.09 (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [
    [
     "all3",
     "==",
     true
    ],
    [
     "an",
     "==",
     "43-5051"
    ],
    [
     "bn",
     "==",
     "43-5053"
    ],
    [
     "cn",
     "==",
     "43-5052"
    ]
   ],
   "reproduce": {
    "a": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": false,
      "n": 0,
      "field": "spread_p90_p10"
     },
     "format": "x2",
     "value": 1.0608190008190008
    },
    "b": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": false,
      "n": 1,
      "field": "spread_p90_p10"
     },
     "format": "x2",
     "value": 1.0891415389685286
    },
    "c": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": false,
      "n": 2,
      "field": "spread_p90_p10"
     },
     "format": "x2",
     "value": 1.0891676555348364
    },
    "an": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": false,
      "n": 0,
      "field": "soc"
     },
     "format": "str",
     "value": "43-5051"
    },
    "bn": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": false,
      "n": 1,
      "field": "soc"
     },
     "format": "str",
     "value": "43-5053"
    },
    "cn": {
     "spec": {
      "op": "nth",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "desc": false,
      "n": 2,
      "field": "soc"
     },
     "format": "str",
     "value": "43-5052"
    },
    "all3": {
     "spec": {
      "op": "top_k_all",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "k": 3,
      "flag": "flag_postal_service"
     },
     "format": "flag",
     "value": true
    }
   }
  },
  {
   "id": "M-F7",
   "text": "For scale, not as a separate result: across the same 318 occupations, the national 90th-to-10th-percentile wage ratio among individual workers has a median of 2.19, against a median metro pay spread of 1.36. The two ratios measure different things (workers versus metro medians), so a wider within-occupation ratio is expected (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [
    [
     "n",
     "==",
     "nall"
    ],
    [
     "k",
     "==",
     "nall"
    ],
    [
     "w",
     ">",
     "m"
    ]
   ],
   "reproduce": {
    "k": {
     "spec": {
      "op": "count_gt_cols",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "a": "national_within_p90_p10",
      "b": "spread_p90_p10"
     },
     "format": "int",
     "value": 318
    },
    "n": {
     "spec": {
      "op": "count_nonnull",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "national_within_p90_p10"
     },
     "format": "int",
     "value": 318
    },
    "w": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "national_within_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 2.1934337021585346
    },
    "m": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.357079398054895
    },
    "nall": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 318
    }
   }
  },
  {
   "id": "M-F8",
   "text": "Among occupational groups with at least 10 occupations in the study, protective service occupations have the widest typical spread, a median of 1.60 across 12 occupations, and production occupations the narrowest, a median of 1.28 across 27 (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [],
   "reproduce": {
    "gmax": {
     "spec": {
      "op": "group_pick",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "by": "soc_major_title",
      "col": "spread_p90_p10",
      "min_n": 10,
      "pick": "max",
      "field": "name"
     },
     "format": "groupname",
     "value": "Protective Service Occupations"
    },
    "vmax": {
     "spec": {
      "op": "group_pick",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "by": "soc_major_title",
      "col": "spread_p90_p10",
      "min_n": 10,
      "pick": "max",
      "field": "median"
     },
     "format": "x2",
     "value": 1.6033644637473872
    },
    "nmax": {
     "spec": {
      "op": "group_pick",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "by": "soc_major_title",
      "col": "spread_p90_p10",
      "min_n": 10,
      "pick": "max",
      "field": "size"
     },
     "format": "int",
     "value": 12
    },
    "gmin": {
     "spec": {
      "op": "group_pick",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "by": "soc_major_title",
      "col": "spread_p90_p10",
      "min_n": 10,
      "pick": "min",
      "field": "name"
     },
     "format": "groupname",
     "value": "Production Occupations"
    },
    "vmin": {
     "spec": {
      "op": "group_pick",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "by": "soc_major_title",
      "col": "spread_p90_p10",
      "min_n": 10,
      "pick": "min",
      "field": "median"
     },
     "format": "x2",
     "value": 1.277008439408775
    },
    "nmin": {
     "spec": {
      "op": "group_pick",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "by": "soc_major_title",
      "col": "spread_p90_p10",
      "min_n": 10,
      "pick": "min",
      "field": "size"
     },
     "format": "int",
     "value": 27
    }
   }
  },
  {
   "id": "M-F9",
   "text": "The typical spread holds when the minimum number of metros changes: requiring at least 10 reliable metros (389 occupations) gives a median spread of 1.36, and at least 30 (268 occupations) gives 1.35, against 1.36 at the headline minimum of 20 (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [
    [
     "m10",
     "approx",
     "m20"
    ],
    [
     "m30",
     "approx",
     "m20"
    ]
   ],
   "reproduce": {
    "n10": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        10
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 389
    },
    "m10": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        10
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.3591313041546322
    },
    "n30": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        30
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ]
     },
     "format": "int",
     "value": 268
    },
    "m30": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        30
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.353389554887424
    },
    "m20": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.357079398054895
    }
   }
  },
  {
   "id": "M-F10",
   "text": "Other method choices barely move it either: leaving out Puerto Rico's metro areas gives a median spread of 1.35, leaving out the 9 tipped occupations gives 1.35, and a stricter reliability gate (mean-wage PRSE of 5% or less and employment PRSE of 10% or less, 251 occupations) gives 1.34, against 1.36 (BLS OEWS May 2025; nominal wages, not adjusted for cost of living).",
   "checks": [
    [
     "pr",
     "approx",
     "m20"
    ],
    [
     "tp",
     "approx",
     "m20"
    ],
    [
     "st",
     "approx",
     "m20"
    ]
   ],
   "reproduce": {
    "pr": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "reliable_metros_ex_pr",
        ">=",
        20
       ]
      ],
      "col": "spread_p90_p10_ex_pr",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.353055638006662
    },
    "t": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "flag_tipped",
        "==",
        "yes"
       ]
      ]
     },
     "format": "int",
     "value": 9
    },
    "tp": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "flag_tipped",
        "==",
        "no"
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.3538183461364663
    },
    "ns": {
     "spec": {
      "op": "count",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "reliable_metros_strict",
        ">=",
        20
       ]
      ]
     },
     "format": "int",
     "value": 251
    },
    "st": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ],
       [
        "reliable_metros_strict",
        ">=",
        20
       ]
      ],
      "col": "spread_p90_p10_strict",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.3432410962531445
    },
    "m20": {
     "spec": {
      "op": "q",
      "where": [
       [
        "reliable_metros",
        ">=",
        20
       ],
       [
        "flag_all_other",
        "==",
        "no"
       ],
       [
        "top_coded_metros_otherwise_reliable",
        "==",
        0
       ]
      ],
      "col": "spread_p90_p10",
      "p": 0.5
     },
     "format": "x2",
     "value": 1.357079398054895
    }
   }
  }
 ]
}