\begin{table}[htbp]\centering \begin{threeparttable} \caption{Listing-level sample attrition}\label{tab:attrition} \small \begin{tabular}{p{9cm}rr} \toprule Step & Listings & Share of initial \\ \midrule All listings in snapshot (products table) & 124\,579 & 1.000 \\ excl. SAQ (alcohol monopoly) & 117\,102 & 0.940 \\ excl. pharmacy feeds & 115\,352 & 0.926 \\ excl. non-food categories (health \& beauty, household, pets, baby, alcohol) & 112\,233 & 0.901 \\ with at least one observed price & 111\,924 & 0.898 \\ excl. unrealistic prices & 111\,575 & 0.896 \\ … with parsable package size (unit-price / matching universe) & 66\,340 & 0.533 \\ … in a cross-banner match group (tiers A–C) & 13\,273 & 0.107 \\ \bottomrule \end{tabular} \begin{tablenotes}[flushleft]\footnotesize \item Each row applies the stated filter to the previous row. Matching tiers A--C shown; the primary analysis uses A+B. \end{tablenotes} \end{threeparttable} \end{table}