Loading research piece
Fetching primary parquet sources and computing exhibits.
Fetching primary parquet sources and computing exhibits.
Amiti, Redding & Weinstein (2019, Journal of Economic Perspectives 33(4), 187-210) reported that the 2018 Section 301 tariffs on Chinese imports were passed through essentially one-for-one into US import prices at the border, with no evidence of foreign-exporter absorption. We re-run an annual event-study on CEPII BACI 202601 (retrieved 2026-06-01) data from 2015 to 2024, treating 16 HS6 lines from USTR List 3 (83 FR 47974, 9/2018; 25% final rate from May 2019) as the treatment group, and 11 food and pharmaceutical HS6 lines (excluded from Section 301 Lists 1-4) as the control. Our replication does not recover the ARW headline at BACI's annual-and-pooled resolution: β̂2019 on log unit value is small and, from 2020, negative, because the food and pharma control absorbed the 2020-2022 global commodity pulse faster than the List-3 basket did. The takeaway is not that ARW is wrong (their bilateral monthly CBP/BLS data are the right instrument); it is that BACI annual unit values are a blunt tool for border-price pass-through, and this page documents exactly how blunt.
Unit value per HS6 line i and year t is defined as UVit = import_valueit / import_qtyit, with BACI values in thousands of US dollars (multiplied by 1,000 before the division) and import quantities in metric tons. The event-study equation is
ln UV_{i,t} = α_i + γ_t + Σ_{t ≠ 2017} β_t · Treated_i · 1{year=t} + ε_{i,t}HS6 fixed effects absorb product-level time-invariant differences in value-per-ton (a specialty filter part has a higher baseline than a commodity rubber gasket); year fixed effects absorb dollar-global input-cost shocks. The βtcoefficient is identified off the differential between List-3 HS6 price growth and the food-plus-pharma control after 2017. Because there is one observation per HS6×year and the treatment is binary at the HS6 level, βt is numerically equivalent to the mean of Δln UVi,t = ln UVi,t− ln UVi,2017across treated HS6, minus the same average across control HS6. Standard errors cluster at the HS6 level (Abadie, Athey, Imbens & Wooldridge 2023, QJE); the two-sample-mean SE formula used here (√(s²T/nT + s²C/nC)) is the collapsed-panel analogue, following Roth, Sant'Anna, Bilinski & Poe (2023, JoE).
Two caveats matter for interpretation. First, BACI at HS6 is at the reporter-world level, not bilateral. We measure the price of US imports from all originson List-3 HS6, not just from China. Because China was the dominant pre-war supplier on these lines, the US-from-world UV movement tracks the US-from-China UV movement closely, but the two are not identical: as other origins (Vietnam, Mexico) entered List-3 HS6 post-2018, the pooled US unit value includes their supply curves too. ARW (2019) and Fajgelbaum, Goldberg, Kennedy & Khandelwal (2020, QJE135(1), 1-55) used bilateral US CBP micro-data that resolves this cleanly; we do not. Second, BACI is annual; ARW and Cavallo, Gopinath, Neiman & Tang (2021, Journal of Monetary Economics 119, 1-18) used monthly data, which matters for the exact timing of the tariff step.
First we plot the mean log-unit-value change relative to 2017 for the two groups from 2015 to 2024. If parallel-trends held, the two lines would track each other through 2015-2017 and diverge only after 2017. In BACI annual data they do not: the treated and control groups differ by double digits in log unit value even in 2015 and 2016. That is a pre-trend problem, and it defines what BACI annual HS6-world unit values can and cannot identify.
The year-by-year treatment effect β̂t, normalised to zero in 2017 (the omitted pre-period reference). Values above zero mean treated HS6 unit values rose faster than control; values near zero mean no differential.
Treatment intensity should differ by chapter: HS94 furniture faced the 10%-then-25% List-3 rate with limited substitutability (bulky, shipping-cost-sensitive), whereas HS39 plastics and HS84 machinery parts had deeper third-country supply options. Chapter-level β̂2019 anchors each chapter's treated mean against the same (pooled) food-plus-pharma control mean for 2019.
Amiti-Redding-Weinstein (2019, JEP33(4), Table 2 and Figure 4) report roughly 100% pass-through of Section 301 tariff changes to US border prices, using monthly BLS import-price-index micro-data paired to the USTR tariff-code list. Their sample ends in October 2018 for the first paper and extends to early 2019 in their NBER WP revision (Amiti, Redding & Weinstein 2020, NBER WP 26610). Our BACI-annual replication cannot match their bilateral monthly resolution, but the sign and cumulative magnitude should be comparable by 2019.
Fajgelbaum, Goldberg, Kennedy & Khandelwal (2020, QJE 135(1), 1-55) document a large extensive-margin response: US import volumes on List-3 HS codes fell sharply, with China-origin volumes absorbing the bulk of the drop. At BACI annual HS6, we can see the aggregate (pooled-origin) volume response; the partner split is not resolvable here. Figure 5 plots log-volume change vs 2017 for treated and control groups.
Section 301 tariffs on Chinese-origin List 1-4 goods were not the only border-tax shock of 2018. Three narrower actions had sharper product-level bite and more tractable pre/post comparisons at the HS6 level: the Section 201 safeguard on washing machines (Presidential Proclamation 9694, 23 Jan 2018; rates 20-50% ad valorem; Flaaen, Hortacsu & Tintelnot 2020, American Economic Review110(7): 2103-2127); the Section 232 national-security tariff on steel (Presidential Proclamation 9705, 8 March 2018; 25% MFN with country exclusions); and the Section 201 safeguard on solar cells and modules (Presidential Proclamation 9693, 23 Jan 2018; 30% declining to 15%; Wang & Houde 2026,Journal of the Association of Environmental and Resource Economists 13(1)). Figure 6 decomposes each basket into border-price change (ln UV2019 - ln UV2017) and volume change (ln qty2019 - ln qty2017), both averaged across the qualifying HS6 lines in the basket.
Figure 6 reports the three baskets as a table. Figure 7 plots the same ΔlnUV alongside Δln(quantity) for each basket as paired bars, so that the price-response and volume-response heterogeneity is directly visible. Under one-for-one border-price passthrough (Amiti, Redding & Weinstein 2019) ΔlnUV on the treated line should approach ln(1 + tariff_rate): ln(1.25) ≈ +22% for steel at 25%, ln(1.3) ≈ +26% for solar at 30%, and ln(1.2)-ln(1.5) for washers at 20-50%. Flaaen, Hortacsu & Tintelnot (2020, AER 110(7)) find ~110% passthrough for washers using BLS micro. The bar chart below is the BACI-annual, HS6-world analogue.
BACI in this workbench is country-by-product-by-year (no bilateral × HS6 cell), so the canonical China-to-USA HS6 share that Bown (2023, PIIE WP 23-9) and Freund, Mattoo, Mulabdic & Ruta (2024, World Bank PRWP 10593) report directly is not resolvable here. The closest supply-side complement available is China's share of world exports on the same two baskets. If China's share on the tariff-targeted basket bends down relative to the food-and-pharma control after 2018, that is the global trace of the partner-substitution channel Fajgelbaum et al. (2020, QJE 135(1): 1-55) document on US CBP microdata.
Across 2015-2017 the treated-minus-control log-unit-value gap is already positive and noisy: β̂2015 ≈ +10.8% and β̂2016 ≈ +13.7%. Parallel trends therefore do not hold in this panel. From 2018 through 2024 the point estimate is either close to zero or negative, driven mostly by the food and pharma control group's own 2020-2022 commodity-and-supply-chain repricing, not by List-3. BACI annual unit values at HS6-world cannot separate the tariff signal from these confounders at the resolution ARW worked in.
The Cavallo, Gopinath, Neiman & Tang (2021, JME 119, 1-18) retail-versus-border decomposition is the natural next step: if the tariff passed to the US border price but not to US retail prices, importers absorbed the wedge in trade margins; if it passed to retail, US households bore it. Neither test is runnable on BACI alone; both are the justification for continuing the microdata work in ARW's tradition. A BACI-based page like this is useful for bounding, not for identifying, border-price pass-through.
SELECT year, product_code,
import_value * 1000.0 / NULLIF(import_qty, 0) AS uv
FROM country_year_product
WHERE country_code = 842 AND year BETWEEN 2015 AND 2024
AND product_code IN (...16 List-3 HS6..., ...12 control HS6...)
AND import_qty > 0 AND import_value > 0;
-- per-HS6: d_{i,t} = ln uv_{i,t} - ln uv_{i,2017}
-- plot: mean_T(d_{i,t}) and mean_C(d_{i,t}) against year-- β̂_t and 95% CI per year
WITH d AS (
SELECT product_code,
year,
ln(import_value*1000.0/import_qty) - ln_uv_2017 AS dlog
FROM country_year_product
-- joined to each HS6's 2017 baseline
WHERE country_code = 842 AND import_qty > 0 AND import_value > 0
AND year BETWEEN 2015 AND 2024
)
SELECT year,
avg(dlog) FILTER (WHERE group = 'T') - avg(dlog) FILTER (WHERE group = 'C') AS beta,
sqrt( var_samp(dlog) FILTER (WHERE group='T') / count(*) FILTER (WHERE group='T')
+ var_samp(dlog) FILTER (WHERE group='C') / count(*) FILTER (WHERE group='C') ) AS se
FROM d GROUP BY year ORDER BY year;| This page, bounds-on-attenuation via treated/control control |
SELECT product_code,
ln(sum(CASE WHEN year=2019 THEN import_value*1000 END)/sum(CASE WHEN year=2019 THEN import_qty END))
- ln(sum(CASE WHEN year=2017 THEN import_value*1000 END)/sum(CASE WHEN year=2017 THEN import_qty END)) AS dlnUV,
ln(sum(CASE WHEN year=2019 THEN import_qty END))
- ln(sum(CASE WHEN year=2017 THEN import_qty END)) AS dlnQty
FROM country_year_product
WHERE country_code=842 AND year IN (2017, 2019)
AND product_code IN ('845011','845019','720839','720836','720838','721420','721590','854140')
GROUP BY product_code;WITH world AS (
SELECT year, product_code, SUM(export_value)*1000 AS world_v
FROM 'country_year_product/**/*.parquet'
WHERE year BETWEEN 2015 AND 2024
AND product_code IN (16 List-3 HS6, 12 food/pharma HS6)
GROUP BY year, product_code
),
chn AS (
SELECT year, product_code, SUM(export_value)*1000 AS chn_v
FROM 'country_year_product/**/*.parquet'
WHERE country_code = 156 AND year BETWEEN 2015 AND 2024
AND product_code IN (16 List-3 HS6, 12 food/pharma HS6)
GROUP BY year, product_code
)
SELECT year,
CASE WHEN product_code IN (List-3) THEN 'T' ELSE 'C' END AS grp,
SUM(COALESCE(chn.chn_v, 0)) / NULLIF(SUM(world.world_v), 0) * 100 AS chn_share_pct
FROM world LEFT JOIN chn USING (year, product_code)
GROUP BY year, grp ORDER BY year, grp;