*********** simulation des taux d'imposition marginaux et participatifs *********** choix de l'année de simulation dans do_appel_parametres *********** Choix du répertoire racine dans do_appel_parametres (à exécuter en premier) clear set mem 500m set more off /******** choix du mode de calage*/ global calagecn=1 /******** mise à jour des fichiers sources, indispensable pour repartir des fichier initiaux*/ do Programmes/do_mise_a_jour /**************** PHASE 1: CREATION DES FICHIERS INCREMENTS (MTR ET PTR SALAIRES) ********/ /*** phase 1.1: increment taux marginaux ***/ use Fichiers/indiv_rev_$annee, clear gen increment=100+0.1*sal_irpp keep id_indiv increment sort id_indiv save Fichiers/temp/increment_mtr, replace /*** phase 1.2: increment taux participatifs ***/ use Fichiers/indiv_rev_$annee, clear gen increment=-sal_irpp keep id_indiv increment sort id_indiv save Fichiers/temp/increment_ptr, replace /**************** PHASE 2: CALCUL DES IMPOTS INITIAUX ********/ do Programmes/do_irpp do Programmes/do_cotsoc do Programmes/do_transferts do Programmes/do_nouvel_ir use Fichiers/indiv_demo_$annee, clear keep id_indiv pondv age tempspartiel sort id_indiv merge id_indiv using Fichiers/indiv_irpp_$annee keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sort id_indiv merge id_indiv using Fichiers/indiv_cotsoc_$annee keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon sort id_indiv merge id_indiv using Fichiers/indiv_transferts_$annee gen yt_foy=mv_foy+rsa_foy+al_foy+pf_foy keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ppe sort id_indiv merge id_indiv using Fichiers/indiv_nouvel_ir_$annee keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ppe ir1 ir2 ir3 sort id_indiv merge id_indiv using Fichiers/indiv_aut_impots_$annee gen iif=tvaf+tpf+thf keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ppe ir1 ir2 ir3 y_prima ya_prima iif sort id_indiv save Fichiers/temp/aux0, replace /**************** PHASE 3: CALCUL DES TAUX D'IMPOSITION **************/ foreach increment in increment_ptr increment_mtr { /******** mise à jour des fichiers sources, indispensable pour repartir des fichier initiaux*/ do Programmes/do_mise_a_jour /**** phase 3.1: rajouter increment aux fichiers sources initiaux */ use Fichiers/indiv_demo_$annee, clear merge id_indiv using Fichiers/temp/`increment' replace nbh_sal=min(increment/$smic_h_brut,$nbh_pt) if sal_irpp==0 replace nbh_sal=0 if sal_irpp+increment<1 & sal_irpp>0 replace nbh=nbh_nonsal+nbh_sal replace public=0 if sal_irpp==0 replace sal_irpp=sal_irpp+increment replace ya_irpp=ya_irpp+increment drop increment _merge sort id_indiv save Fichiers/indiv_demo_$annee, replace use Fichiers/indiv_rev_$annee, clear merge id_indiv using Fichiers/temp/`increment' replace sal_irpp=sal_irpp+increment replace ya_irpp=ya_irpp+increment replace y_irpp=y_irpp+increment drop increment _merge sort id_indiv save Fichiers/indiv_rev_$annee, replace use Fichiers/indiv_conj_$annee, clear merge id_indiv using Fichiers/temp/`increment' replace sal_irpp_foy=sal_irpp_foy+increment replace ya_irpp_foy=ya_irpp_foy+increment replace y_irpp_foy=y_irpp_foy+increment drop increment _merge sort id_indiv save Fichiers/indiv_conj_$annee, replace /******** phase 3.2: recalculer les impots avec increment */ do Programmes/do_irpp do Programmes/do_cotsoc do Programmes/do_transferts do Programmes/do_nouvel_ir use Fichiers/indiv_demo_$annee, clear keep id_indiv pondv age tempspartiel sort id_indiv merge id_indiv using Fichiers/indiv_irpp_$annee keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sort id_indiv merge id_indiv using Fichiers/indiv_cotsoc_$annee keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon sort id_indiv merge id_indiv using Fichiers/indiv_transferts_$annee gen yt_foy=mv_foy+rsa_foy+al_foy+pf_foy keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ppe sort id_indiv merge id_indiv using Fichiers/indiv_nouvel_ir_$annee keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ppe ir1 ir2 ir3 sort id_indiv merge id_indiv using Fichiers/indiv_aut_impots_$annee gen iif=tvaf+tpf+thf keep id_indiv pondv age tempspartiel ppe_brut_rest ppe_brut irpp_tot reduc_qf sal_brut_cn sal_superbrut_cn csg_ya cs css csp cs_contr cs_noncontr csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ppe ir1 ir2 ir3 y_prima ya_prima iif sort id_indiv foreach var of varlist reduc_qf-ir3 { rename `var' `var'_inc } sort id_indiv save Fichiers/temp/aux1, replace /******** phase 3.3: merger les fichiers impots initiaux et avec increment */ use Fichiers/temp/aux0, clear merge id_indiv using Fichiers/temp/aux1 drop _merge sort id_indiv merge id_indiv using Fichiers/temp/`increment' drop _merge foreach var of varlist sal_superbrut_cn sal_brut_cn irpp_tot ppe_brut ppe reduc_qf csg_ya cs css csp csp_exo_fillon pf_foy mv_foy rsa_foy al_foy yt_foy ir1 ir2 ir3 { gen mtr_`var'=(`var'_inc-`var')/increment } foreach var of varlist ppe_brut ppe reduc_qf pf_foy mv_foy rsa_foy al_foy yt_foy { replace mtr_`var'=-mtr_`var' } order mtr* /******** phase 3.4: calcul des taux d'impositions: IR+COTSOC+TRANSFERTS */ gen d_inc=sal_superbrut_cn_inc-sal_superbrut_cn * pour memoire: gen sal_superbrut_cn=sal_brut_cn+csp+csp_fac+ts * ts and csp_fac are eliminated in MTR comps (also csp_contr for public) (bc impossible to keep rate constant) * pf ont des effets de seuils donc MTR=0 ou MTR giga donc on les exclus du calcul MTR gen mtr_cotsoc=(css_inc+csp_inc-(css+csp))/d_inc gen mtr_irold=(irpp_tot_inc + csg_ya_inc - ppe_inc -(irpp_tot + csg_ya - ppe))/d_inc gen mtr_irnew=(ir1_inc - ir1)/d_inc gen mtr_trans=- (reduc_qf_inc + mv_foy_inc + rsa_foy_inc + al_foy_inc -(reduc_qf + mv_foy + rsa_foy + al_foy ))/d_inc gen mtr_old=mtr_cotsoc+mtr_trans+mtr_irold gen mtr_new=mtr_cotsoc+mtr_trans+mtr_irnew keep id_indiv pondv tempspartiel age sal_superbrut_cn y_prima ya_prima iif mtr_cotsoc mtr_trans mtr_irold mtr_irnew mtr_old mtr_new sort id_indiv save Fichiers/indiv_`increment'_$annee, replace } /***************** PHASE 4: creation du Tableau PTR *************/ use Fichiers/indiv_demo_$annee, clear keep id_indiv sexe nenf mat sort id_indiv merge id_indiv using Fichiers/indiv_increment_ptr_$annee keep if ya_prima>0 & sal_superbrut_cn>0 cap drop group gen group=0 replace group=0 if sexe==1 replace group=1 if sexe==2 replace group=2 if sexe==1 & nenf>0 replace group=3 if sexe==2 & nenf>0 replace group=4 if sexe==1 & nenf>0 & mat=="M" replace group=5 if sexe==2 & nenf>0 & mat=="M" replace group=6 if sexe==1 & nenf<=0 & mat=="M" replace group=7 if sexe==2 & nenf<=0 & mat=="M" xtile quartiles=ya_prima [w=pondv], nq(4) gen elast=$elast_extensive_low replace elast=0 if quartiles==4 replace elast=0 if sexe==1 & mat=="M" replace elast=$elast_extensive_high if quartiles<=3 & nenf>0 & mat!="M" replace elast=$elast_extensive_high if quartiles<=3 & nenf>0 & mat=="M" & sexe==2 replace mtr_new=min(mtr_new,.99) replace mtr_old=min(mtr_old,.99) gen d_workers=((1-mtr_new)/(1-mtr_old))^elast-1 gen d_ya_prima=ya_prima*(((1-mtr_new)/(1-mtr_old))^elast-1) gen d_impots=d_ya_prima*(mtr_new+(1-mtr_new)*iif/max(1,y_prima)) save Fichiers/temp/aux2, replace collapse (rawsum) pondv (min) seuil=ya_prima (mean) y_prima ya_prima mtr_new mtr_old mtr_irnew mtr_irold iif elast d_workers d_ya_prima d_impots [w=pondv], by(quartiles group) save Resultats/MTR_PTR/TablePTR_$annee, replace use Fichiers/temp/aux2, clear collapse (rawsum) pondv (min) seuil=ya_prima (mean) y_prima ya_prima mtr_new mtr_old mtr_irnew mtr_irold iif elast d_workers d_ya_prima d_impots [w=pondv], by(sexe) append using Resultats/MTR_PTR/TablePTR_$annee save Resultats/MTR_PTR/TablePTR_$annee, replace use Fichiers/temp/aux2, clear collapse (rawsum) pondv (min) seuil=ya_prima (mean) y_prima ya_prima mtr_new mtr_old mtr_irnew mtr_irold iif elast d_workers d_ya_prima d_impots [w=pondv] append using Resultats/MTR_PTR/TablePTR_$annee replace pondv=pondv/1000 replace iif=iif/y_prima replace d_workers=d_workers*pondv*1000 gen d_perc_workers=d_workers/(1000*pondv) replace d_ya_prima=d_ya_prima*pondv/1000 replace d_impots=d_impots*pondv/1000 rename sexe sex gen sexe="" replace sexe="hommes" if group==2 | group==4 | group==6 | group==0 | sex==1 replace sexe="femmes" if group==1 | group==3 | group==5 | group==7 | sex==2 drop sex gen enfants="" replace enfants="0 enfants" if group==1 | group==6 | group==7 | group==0 replace enfants="1+ enfants" if group==2 | group==3 | group==4 | group==5 gen status="" replace status="non marries" if group==1 | group==2 | group==3 | group==0 replace status="marries" if group==4 | group==5 | group==6 | group==7 drop group order quartiles sexe enfants status pondv seuil y_prima ya_prima mtr_new mtr_old mtr_irnew mtr_irold iif elast d_perc_workers d_workers d_ya_prima d_impots save Resultats/MTR_PTR/TablePTR_$annee, replace /***************** PHASE 5: creation du Tableau MTR *************/ use Fichiers/indiv_increment_mtr_$annee, clear cap gen pondvr=round(pondv) cumul y_prima [w=pondvr], gen(pycont) gen elast=$elast_intensive_bottom replace elast=$elast_intensive_top if pycont>=0.99 replace mtr_new=min(mtr_new,.99) replace mtr_old=min(mtr_old,.99) gen d_ya_prima=ya_prima*(((1-mtr_new)/(1-mtr_old))^elast-1) gen d_impots=d_ya_prima*(mtr_new+(1-mtr_new)*iif/max(1,y_prima)) * keep if age>=18 & age<=65 & tempspartiel==0 gen mtr_old_w=mtr_old*ya_prima gen mtr_new_w=mtr_new*ya_prima save Fichiers/temp/aux2, replace /*****fractiles riches*/ use Fichiers/temp/aux2, clear gen py=0 keep if pycont>=.95 replace py=95 if pycont>=.95 replace py=96 if pycont>=.96 replace py=97 if pycont>=.97 replace py=98 if pycont>=.98 replace py=99 if pycont>=.99 replace py=999 if pycont>=.999 replace py=9999 if pycont>=.9999 replace py=99999 if pycont>=.99999 collapse (rawsum) pondv (min) seuil=y_prima (mean) y_prima mtr_new_w mtr_old_w iif ya_prima elast d_ya_prima d_impots [w=pondv], by(py) save Resultats/MTR_PTR/TableMTR_$annee, replace /*****fractiles déciles*/ use Fichiers/temp/aux2, clear gen py=10*int(100*pycont/10) replace py=95 if pycont>=.95 replace py=99 if pycont>=.99 collapse (rawsum) pondv (min) seuil=y_prima (mean) y_prima mtr_new_w mtr_old_w iif ya_prima elast d_ya_prima d_impots [w=pondv], by(py) append using Resultats/MTR_PTR/TableMTR_$annee save Resultats/MTR_PTR/TableMTR_$annee, replace /*****fractiles pauvres-moyens-riches*/ use Fichiers/temp/aux2, clear gen py=0 replace py=0 if pycont<.50 replace py=50 if pycont>=.50 & pycont<.90 replace py=90 if pycont>=.90 collapse (rawsum) pondv (min) seuil=y_prima (mean) y_prima mtr_new_w mtr_old_w iif ya_prima elast d_ya_prima d_impots [w=pondv], by(py) append using Resultats/MTR_PTR/TableMTR_$annee save Resultats/MTR_PTR/TableMTR_$annee, replace /*****moyennes*/ use Fichiers/temp/aux2, clear gen py=0 collapse (rawsum) pondv (min) seuil=y_prima (mean) y_prima mtr_new_w mtr_old_w iif ya_prima elast d_ya_prima d_impots [w=pondv] append using Resultats/MTR_PTR/TableMTR_$annee replace pondv=pondv/1000 replace iif=iif/y_prima replace mtr_new_w=mtr_new_w/ya_prima replace mtr_old_w=mtr_old_w/ya_prima replace ya_prima=ya_prima/y_prima gen d_impots_agg=d_impots*pondv/1000 order py pondv seuil y_prima mtr_new_w mtr_old_w iif ya_prima elast d_ya_prima d_impots d_impots_agg save Resultats/MTR_PTR/TableMTR_$annee, replace /******** mise à jour des fichiers sources, pour reconstruire des fichier initiaux*/ do Programmes/do_mise_a_jour