To subscribe to the monthly C&E email newsletter and event announcements click here.

The nation was on edge watching Democrat Connor Lamb edging out Republican Rick Saccone by less than 1,000 votes in the recent House special in Pennsylvania’s 18th district.

Unlike Georgia’s 6th district special last year, there wasn’t as much public polling available leading up to the election. Of the polls conducted within the month before the election, two showed Lamb winning and two showed Saccone with the advantage.

When we see divergent results like this, it typically points to a toss-up race, which is what we ended up with. Why the Democrat won in a district President Trump carried by nearly 20 points in 2016, the same year former Rep. Tim Murphy (R) ran unopposed, is instructive in what’s shaping up to be a wave cycle.

Examining the results from the polls in the lead up to the March 13 election, in comparison to the election outcome, the polling was reasonably close to actual results.

Interestingly, across all public polls, Saccone’s numbers didn’t move much. In the last month, all three surveys had Saccone at 45 percent (some solid consistency) with Lamb ranging from 42-51 percent.

If we look at the spread between the two candidates, the last public poll conducted by Monmouth showed a six-point gap, while two conducted earlier in the month by Gravis and Emerson College each showed a three-point gap (although each showing a different leader).

Just one company, Gravis Marketing, conducted multiple polls leading up to the election, and shared some internal demographic breakouts of the data. With this in mind, we thought it would be interesting to take a look at who, according to the poll, shifted over the past couple months and which cohorts tended to remain consistent in their support. After looking at the data, there were three big takeaways for us.

First, when looking at party identification, the vast majority of Democrats said they would vote for Lamb and most Republicans said they were supporting Saccone, neither of which is shocking. But the relative steady level of support was a bit surprising.

Growth for the home-party candidate was in low-to-mid single digits. While the race was more steady among the more partisan voters, Independent or other party voters increasingly shifted to the Lamb camp, while also moving away from Saccone (as opposed to being undecided and moving to one candidate).

From the January to the March poll, Independents or other party voters who said they would vote for Lamb shifted from 24-to-46 percent -- a 22-point increase. Independents or other party voters who said they would vote for Saccone decreased from 38-to-26 percent, a 12-point decline.

In addition to party ID, the 2016 presidential vote was also a telling indicator. Although Trump decisively won the district, he’s not a “typical” Republican. Saccone, a more mainstream Republican, was unable to hold a big enough portion of this voting bloc.

By March, just 76 percent of Trump supporters were behind Saccone while 86 percent of Hillary Clinton voters supported Lamb. Interestingly, Lamb earned the support of Trump voters over time.

Indeed, in the March poll, 13 percent of those who voted for Trump said they would vote for Lamb, compared to just 5 percent of this cohort in January.

Third, age is another noteworthy breakdown to examine. Over the three months prior to the special election, the Gravis poll showed an increased level of support for Lamb from 27-to-53 percent among 18-to-29-year olds. Meanwhile, Saccone’s support decreased from 30-to-18 percent among this age group.

In addition, in the March poll, 50-64-year-olds strongly supported Saccone with 55 percent of this group saying they would vote for him in the election. Conversely, in the same poll, only 35 percent of 50-64-year-olds said they would vote for Lamb.

The support for each of the candidates in this age group remained relatively steady through the three polls. While it will take some time for the voter files to be updated to determine actual voter turnout by demographics, it stands to reason that if these patterns held, younger voters turned out in much higher numbers than would be expected, given this cohort’s historically low turnout rate.

Overall, the polling wasn’t off the mark. The average of the three polls conducted in March was only 1.8-points away from the actual results. Democrats increasingly said they would be voting for Lamb, while Republicans decreasingly said they would vote for Saccone.

Trump voters were not quite as enthusiastic about voting for the Republican as Clinton voters were about voting for the Democrat in this race. And finally, young voters’ support for Lamb was a close match to the older voters’ support for Saccone.

In a race this close, every group is important and every group either helped Lamb win or led to Saccone losing. This wasn’t a steady state race according to the available polling data, and it does appear that candidates and campaigns can actually make a difference. Who knew?

Stefan Hankin is founder and president of Lincoln Park Strategies, a Washington D.C.-based public opinion firm. Follow him on Twitter at @LPStrategies.