Hello - I am running the following code for propensity score matching and then running a model on the propensity score matched sample. Could you please help me figure out why the resulting propensity score matching samples that I get have an odd-numbered N such as 357 instead of an even number as I would expect for a matched sample? Is there something wrong with my PSM code? Thank you so much.

Code:
* PSM for non-second tier small audit firms only caliper 0.03 */
drop pscoresmallgender
/*1.    Estimate probabilities (no need to cluster given that you only want probabilities):*/
logit big4exp lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy shorttenure cityexp clientimp soxaudit weakness if smallfirm==1
predict pscoresmallgender, p
/*2.    Match on probabilities:*/
psmatch2 big4exp, pscore(pscoresmallgender) caliper(0.03) noreplace
/*3.    Check the covariate balance:*/
pstest smallfirm lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy shorttenure cityexp clientimp soxaudit weakness if smallfirm==1,  t(big4exp) mw(_weight)
/*4.    Obtain the treatment effect:*/
eststo clear
reg lnauditfees big4exp gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==1 [pw=_weight]
eststo m1
reg lnauditfees atleastman gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==1 [pw=_weight]
eststo m2
reg lnauditfees atleastsenman gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==1 [pw=_weight]
eststo m3
reg lnauditfees big4part gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==1 [pw=_weight]
eststo m4
esttab using afeespcaobpsmsmallgender.csv, t star(* 0.10 ** 0.05 *** 0.01) replace  b(3) r2 ar2 pr2

/* PSM for non-second tier midtier audit firms only */
drop pscoremidtiergender
/*1.    Estimate probabilities (no need to cluster given that you only want probabilities):*/
logit big4exp lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy shorttenure cityexp clientimp soxaudit weakness if smallfirm==0
predict pscoremidtiergender, p
/*2.    Match on probabilities:*/
psmatch2 big4exp, pscore(pscoremidtiergender) caliper(0.03) noreplace
/*3.    Check the covariate balance:*/
pstest lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy shorttenure cityexp clientimp soxaudit weakness if smallfirm==0,  t(big4exp) mw(_weight)
/*4.    Obtain the treatment effect:*/
eststo clear
reg lnauditfees big4exp gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==0 [pw=_weight]
eststo m1
reg lnauditfees atleastman gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==0 [pw=_weight]
eststo m2
reg lnauditfees atleastsenman gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==0 [pw=_weight]
eststo m3
reg lnauditfees big4part gender lnassets lnbusseg lngeoseg cata quick leverage roa loss goingconcern foreign busy ///
shorttenure cityexp clientimp soxaudit weakness i.ffi12 i.fyear if smallfirm==0 [pw=_weight]
eststo m4
esttab using afeespcaobpsmmidtiergender.csv, t star(* 0.10 ** 0.05 *** 0.01) replace  b(3) r2 ar2 pr2