gemmcp.gms : GEMTAP: A general equilibrium model for tax policy

Description

set definitions and input data for 1983 version of gemtap.

Reference

  • Rutherford, T F, GEMTAP: A General Equilibrium Model for Tax Policy.

Large Model of Type : MCP


Category : GAMS Model library


Main file : gemmcp.gms

$title The 1983 GEMTAB Model as MCP (GEMMCP,SEQ=137)
$Ontext

       set definitions and input data for 1983 version of gemtap.


Rutherford, T F, GEMTAP: A General Equilibrium Model for Tax Policy.

$Offtext

sets
        s   sectors (producer goods)

        /   agri,   mines,  crude,  const,  food,   textl,  paper,
            refin,  chem,   lumbr,  metls,  equip,  vehcl,  trnsp,
            trade,  fnanc,  realt,  srvcs,  govt/

        g   consumer goods

        /   food,   alchl,  tobac,  util,   housg,  frnsh,  appl,
            clth,   trnsp,  vehcl,  servc,  bnkng,  readg,  n_dur,
            petrl,  hlth,   educ,   savng /;

alias (s,ss);

sets

       hh   all households /h1*h14, hh2*hh14/,
      h(hh) aggregated households /hh2*hh14/,
     dh(hh) disaggregated households /h1*h14/;

*       the following assignment omits h1 which appears to be
*       a residual account in this data set:

set hmap(dh,h) mapping from disaggregated households
    /   h2.hh2, h3.hh3, h4.hh4, h5.hh5, h6.hh6, h7.hh7, h8.hh8,
        h9.hh9, h10.hh10, h11.hh11, h12.hh12, h13.hh13, h14.hh14 /;

scalar gdk  government capital purchases.  (p. 118)    /  1.65084e+05/;

scalar gsk  government capital ownership.  (table 6.3) /  1.13409e+05/;

scalar gdl  government labor demand.  (p. 107)         /  2.72392e+05/;

scalar gtl  labor tax payments by government.(p. 107)  /  4.41080e+04/;

parameter count(hh)  population count /

        h1       0.347
        h2       1.183
        h3       3.753
        h4       8.457
        h5      13.328
        h6      13.988
        h7      12.876
        h8      11.523
        h9      18.538
        h10     13.362
        h11     16.565
        h12      4.501
        h13      2.725
        h14      0.573 /;

parameter dk(s)   capital payments by sector.  (table 4.7)

/agri  1.50670e+04, mines 9.14909e+02, crude 2.99886e+03, const 4.99169e+03,
 food  6.71724e+03, textl 2.97874e+03, paper 4.31363e+03, refin 1.39132e+04,
 chem  4.78283e+03, lumbr 2.57358e+03, metls 2.78550e+03, equip 1.43345e+03,
 vehcl 2.49335e+02, trnsp 3.31062e+04, trade 2.77352e+04, fnanc 2.91767e+03,
 realt 1.57818e+05, srvcs 2.90328e+04, govt  1.23209e+04/

parameter sk(hh) capital ownership by household.  (table 6.2)

/h1   -1.15989e+04, h2    1.32289e+02, h3    1.40763e+03, h4    5.82356e+03,
 h5    1.51394e+04, h6    2.17343e+04, h7    2.44363e+04, h8    2.57096e+04,
 h9    4.68859e+04, h10   4.02364e+04, h11   6.74481e+04, h12   3.33326e+04,
 h13   4.47871e+04, h14   6.28510e+04/

parameter dl(s)  labor demand by sector.  (table 4.1)

/agri  1.92060e+04, mines 1.18360e+04, crude 1.92690e+04, const 1.12095e+05,
 food  3.57680e+04, textl 2.79840e+04, paper 4.39730e+04, refin 6.36500e+03,
 chem  4.58740e+04, lumbr 2.59050e+04, metls 1.82051e+05, equip 3.12680e+04,
 vehcl 2.51430e+04, trnsp 1.46020e+05, trade 3.13381e+05, fnanc 1.02262e+05,
 realt 1.68840e+04, srvcs 3.73269e+05, govt  3.07730e+04/

parameter sl(hh)  labor supply by household.  (table 6.1)

/h1   -4.07035e+02, h2    9.72331e+02, h3    4.94308e+03, h4    2.55985e+04,
 h5    8.32951e+04, h6    1.27887e+05, h7    1.53337e+05, h8    1.72699e+05,
 h9    3.26104e+05, h10   2.86196e+05, h11   3.83643e+05, h12   1.19378e+05,
 h13   1.02400e+05, h14   5.56721e+04/

parameter zta(hh)  labor endowment : supply ratios by household.
/h1    1.26791e+00, h2    1.27168e+00, h3    1.33304e+00, h4    1.40639e+00,
 h5    1.48221e+00, h6    1.53994e+00, h7    1.58088e+00, h8    1.61328e+00,
 h9    1.64773e+00, h10   1.68873e+00, h11   1.71083e+00, h12   1.69191e+00,
 h13   1.63084e+00, h14   1.34709e+00 /;

*       for increased comparability with 1973 dataset, we use a value
*       of 1.75 for all households:

        zta(hh) = 1.75;

scalar els  elasticity of labor supply /0.15/;

parameter pit(hh) income tax payments by household.  (table 6.5)

/h1    4.70693e+03, h2   -4.78527e+01, h3   -4.83605e+02, h4   -1.38173e+03,
 h5   -8.30128e+02, h6    2.07466e+03, h7    5.51451e+03, h8    9.36992e+03,
 h9    2.08846e+04, h10   2.25915e+04, h11   3.28106e+04, h12   1.08714e+04,
 h13   1.28299e+04, h14   1.30979e+04/

parameter tau(hh) marginal tax rates by household.  (table 5.8)

/h1    7.30000e-02, h2    1.00000e-03, h3    2.00000e-02, h4    6.10000e-02,
 h5    1.11000e-01, h6    1.39000e-01, h7    1.65000e-01, h8    1.95000e-01,
 h9    2.19000e-01, h10   2.56000e-01, h11   2.93000e-01, h12   3.43000e-01,
 h13   3.96000e-01, h14   4.01000e-01/

parameter trn(hh) transfer levels by household (from government).  (table 6.5)

/h1    4.62898e+02, h2    7.16898e+02, h3    9.99424e+03, h4    2.82718e+04,
 h5    4.06371e+04, h6    4.04673e+04, h7    3.55249e+04, h8    2.80239e+04,
 h9    4.10061e+04, h10   2.63098e+04, h11   3.01152e+04, h12   7.94427e+03,
 h13   4.27825e+03, h14   8.37153e+02/

parameter tc(g) consumption tax payments by good.  (table 5.4)

/food  1.02623e+02, alchl 3.43401e+01, tobac 4.92577e+01, util  5.27143e+01,
 frnsh 6.82659e+01, appl  5.61957e+01, clth  7.82538e+02, trnsp 1.29003e+00,
 vehcl 1.30150e+02, servc 8.53633e+00, readg 1.38249e+02, n_dur 9.66488e+01,
 petrl 7.99788e+01, hlth  4.19992e+01 /;

*-----------------------------------------------------------------------------
$ontext

the following three vectors which appear in the 83 dataset are converted
to percentage rate form in table taxrate:

parameter txo(s)
/
 agri  5.42000e+02, mines 2.00500e+03, crude 1.61310e+04, const 2.34900e+03,
 food  1.12890e+04, textl 1.69000e+02, paper 7.52000e+02, refin 9.20100e+03,
 chem  1.45500e+03, lumbr 4.76000e+02, metls 2.48100e+03, equip 5.41000e+02,
 vehcl 7.61000e+02, trnsp 2.03530e+04, trade 8.50440e+04, fnanc 8.57600e+03,
 realt 1.76200e+04, srvcs 8.45000e+03 /

parameter tk(s)
/
 agri  1.01810e+04, mines 1.34009e+03, crude 5.18414e+03, const 4.60731e+03,
 food  7.47776e+03, textl 3.00226e+03, paper 5.31437e+03, refin 9.16883e+03,
 chem  7.16117e+03, lumbr 3.09542e+03, metls 1.15835e+04, equip 1.10355e+03,
 vehcl 1.35867e+03, trnsp 3.50988e+04, trade 2.69098e+04, fnanc 2.22403e+04,
 realt 1.09969e+05, srvcs 1.90732e+04, govt  3.35605e+03 /

parameter tl(s)
/
 agri  2.67400e+03, mines 1.26600e+03, crude 2.18700e+03, const 1.45680e+04,
 food  5.23400e+03, textl 4.68000e+03, paper 5.97300e+03, refin 7.68000e+02,
 chem  6.86600e+03, lumbr 1.18640e+04, metls 2.51540e+04, equip 3.27600e+03,
 vehcl 3.93400e+03, trnsp 1.86950e+04, trade 4.33670e+04, fnanc 1.29190e+04,
 realt 2.52100e+03, srvcs 4.43190e+04, govt  1.34930e+04/;

parameter taxrate(s,*)  taxes (%) (tables 4.13 4.7 and 4.1 respectively);

code:

taxrate(s,"txo") = 100 * txo(s) / y(s);
taxrate(s,"tl") =  100 * tl(s) / dl(s);
taxrate(s,"tk") =  100 * tk(s) / dk(s);

display taxrate;

table tkval(s,*)  sectoral capital tax rates in 73 and 83

             tk73       tk83
agri      54.0162      67.572
mines     95.0472     146.472
crude    101.5675     172.870
const    210.4031      92.300
food     346.9550     111.322
textl    253.4060     100.790
paper    162.5490     123.199
refin     46.3458      65.900
chem     186.6596     149.727
lumbr     91.2334     120.277
metls    171.6036     415.850
equip   2356.8627      76.986
vehcl    128.7486     544.917
trnsp    170.1676     106.019
trade    185.0761      97.024
fnanc    199.2051     762.262
realt     62.9748      69.681
srvcs     86.0299      65.695
govt      26.3711      27.239;

$offtext
*-----------------------------------------------------------------------------

table taxrate(s,*)  taxes (%) (tables 4.13 4.7 and 4.1 respectively)

              txo          tl          tk

agri        0.311      13.923      67.572
mines       4.529      10.696     146.472
crude      19.296      11.350     172.870
const       0.775      12.996      92.300
food        4.016      14.633     111.322
textl       0.133      16.724     100.790
paper       0.454      13.583     123.199
refin       4.698      12.066      65.900
chem        0.618      14.967     149.727
lumbr       0.427      45.798     120.277
metls       0.337      13.817     415.850
equip       0.700      10.477      76.986
vehcl       0.682      15.647     544.917
trnsp       3.760      12.803     106.019
trade      12.991      13.838      97.024
fnanc       3.585      12.633     762.262
realt       3.650      14.931      69.681
srvcs       1.080      11.873      65.695
govt                   43.847      27.239


parameter gse(s) government commodity endowments. (table 6.3);

        gse(s) = 0;

parameter gd(s) government commodity demands.  (table 6.4)

/agri  5.74182e+02, mines 1.55043e+02, crude 3.63664e+02, const 4.50692e+04,
 food  2.67746e+03, textl 8.95648e+02, paper 4.45026e+03, refin 5.48673e+03,
 chem  4.57070e+03, lumbr 1.12229e+03, metls 1.78503e+05, equip 1.93211e+04,
 vehcl 2.35552e+03, trnsp 1.46367e+04, trade 4.89975e+03, fnanc 3.05061e+03,
 realt 3.17531e+03, srvcs 3.04402e+04, govt  6.39613e+02/


parameter vm(s)  import levels by sectoral commodity.  (table 5.1)

/agri  3.84500e+03, mines 3.49000e+03, crude 6.61250e+04, food  1.39690e+04,
 textl 1.60500e+04, paper 6.58100e+03, refin 2.23780e+04, chem  1.53900e+04,
 lumbr 8.32600e+03, metls 1.01264e+05, equip 5.50100e+03, vehcl 2.90780e+04,
 trnsp 5.29900e+03, trade 7.80800e+03, fnanc 7.43000e+02, srvcs 1.74900e+03/

parameter vx(s) export levels by sectoral commodity.  (table 5.1)

/agri  2.14831e+04, mines 5.09111e+03, crude 1.45680e+03, const 3.71680e+01,
 food  1.27640e+04, textl 4.89076e+03, paper 4.99139e+03, refin 5.75651e+03,
 chem  2.02557e+04, lumbr 5.10924e+03, metls 1.46532e+05, equip 1.51174e+04,
 vehcl 1.07298e+04, trnsp 1.52072e+04, trade 2.29182e+04, fnanc 8.49425e+02,
 realt 5.32137e+03, srvcs 9.01913e+03, govt  6.61772e+01/

parameter el(hh) elasticity between leisure and consumption. (table 6.8)

/h1    5.69000e-01, h2    6.74000e-01, h3    7.77000e-01, h4    8.38000e-01,
 h5    8.86000e-01, h6    9.48000e-01, h7    9.83000e-01, h8    9.90000e-01,
 h9    1.02700e+00, h10   1.00500e+00, h11   9.69000e-01, h12   7.38000e-01,
 h13   7.38000e-01, h14   7.38000e-01/

parameter ec(hh) elasticity in current consumption.  (table 6.9)

/h1    1.26791e+00, h2    1.27168e+00, h3    1.33304e+00, h4    1.40639e+00,
 h5    1.48221e+00, h6    1.53994e+00, h7    1.58088e+00, h8    1.61328e+00,
 h9    1.64773e+00, h10   1.68873e+00, h11   1.71083e+00, h12   1.69191e+00,
 h13   1.63084e+00, h14   1.34709e+00/

parameter ekl(s) labor-capital elasticity. (table 6.11)

/agri  1.92123e+00, mines 1.00000e+00, crude 1.00000e+00, const 1.00000e+00,
 food  1.68095e+00, textl 1.12108e+00, paper 1.11995e+00, refin 1.38332e+00,
 chem  1.04308e+00, lumbr 1.10632e+00, metls 1.55352e+00, equip 1.29132e+00,
 vehcl 1.09135e+00, trnsp 1.00000e+00, trade 1.00000e+00, fnanc 1.00000e+00,
 realt 1.00000e+00, srvcs 1.00000e+00, govt  1.00000e+00/

parameter ekl73(s) labor-capital elasticity. table 6.11

/agri  6.75900e-01, mines 1.00000e+00, crude 1.00000e+00, const 1.00000e+00,
 food  7.11700e-01, textl 9.02500e-01, paper 9.03300e-01, refin 7.83000e-01,
 chem  9.60300e-01, lumbr 9.12300e-01, metls 7.37300e-01, equip 8.15900e-01,
 vehcl 9.22800e-01, trnsp 1.00000e+00, trade 1.00000e+00, fnanc 1.00000e+00,
 realt 1.00000e+00, srvcs 1.00000e+00, govt  1.00000e+00/;

parameter ekl83(s) labor-capital elasticity. (table 6.11)

/agri  1.92123e+00, mines 1.00000e+00, crude 1.00000e+00, const 1.00000e+00,
 food  1.68095e+00, textl 1.12108e+00, paper 1.11995e+00, refin 1.38332e+00,
 chem  1.04308e+00, lumbr 1.10632e+00, metls 1.55352e+00, equip 1.29132e+00,
 vehcl 1.09135e+00, trnsp 1.00000e+00, trade 1.00000e+00, fnanc 1.00000e+00,
 realt 1.00000e+00, srvcs 1.00000e+00, govt  1.00000e+00/

parameter       em(s)   elasticity of import supply
                ex(s)   elasticity of export demand;

em(s) = 0.465;
ex(s) = 10;

parameter y(s) gross output level by sector. (table 4.13)

/agri  1.74055e+05, mines 4.42744e+04, crude 8.35975e+04, const 3.03029e+05,
 food  2.81073e+05, textl 1.26674e+05, paper 1.65760e+05, refin 1.95844e+05,
 chem  2.35265e+05, lumbr 1.11494e+05, metls 7.35374e+05, equip 7.72401e+04,
 vehcl 1.11519e+05, trnsp 5.41315e+05, trade 6.54613e+05, fnanc 2.39210e+05,
 realt 4.82737e+05, srvcs 7.82546e+05, govt  9.61957e+04 /;


table z(s,g) consumption composition matrix. (table 4.10)

            food        alchl       tobac       util        housg       frnsh
agri   3.49303e-02 3.49250e-02
mines  8.89490e-06
food   4.44127e-01 4.44162e-01 4.96879e-01
textl                                                              1.51941e-01
paper                                                              1.13370e-03
refin                                                              2.57659e-05
chem   2.13478e-04 1.95293e-04
lumbr                                                              2.60854e-01
metls                                                              9.58233e-02
equip                                                              7.98743e-04
trnsp  1.80389e-02 1.80321e-02 4.29918e-03 9.67120e-01             1.03579e-02
trade  2.34928e-01 2.34938e-01 4.98822e-01                         4.79065e-01
fnanc  8.89490e-06
realt                                                  9.63414e-01
srvcs  2.67745e-01 2.67747e-01             4.22719e-03 3.65864e-02
govt                                       2.86527e-02

+           appl        clth        trnsp       vehcl       servc       bnkng
textl  1.96668e-04 4.22525e-01             2.43355e-04
paper              9.72015e-03
chem   2.17739e-02 9.63838e-03             4.00725e-02
lumbr  3.21973e-02                         4.23618e-04 2.15520e-03
metls  5.17911e-01 5.98949e-02             1.54125e-02 2.28764e-04
equip                                      2.40200e-02
vehcl                                      4.15732e-01
trnsp  8.28815e-03 3.03563e-03 9.43310e-01 1.55927e-02 4.17193e-02
trade  4.18734e-01 4.71361e-01             2.05121e-01 1.32442e-03
fnanc                                                  1.65312e-02 1.00000e+00
realt                                                  6.51376e-03
srvcs  8.99053e-04 2.38251e-02             2.83382e-01 8.99115e-01
govt                           5.66898e-02             3.24123e-02

+           readg       n_dur       petrl       hlth        educ        savng
agri   4.41326e-02 6.14907e-04                                    -3.63988e-02
mines              6.47270e-04 3.66763e-03                         2.50821e-03
crude                                                              9.10418e-04
const                                                              4.91561e-01
food                                                              -7.32829e-04
textl  8.28619e-03 2.39490e-03                                     2.14316e-03
paper  1.66921e-01 1.60038e-01             5.69271e-03            -4.07667e-04
refin                          6.58331e-01 1.93630e-05            -1.18903e-03
chem   4.02524e-03 3.92213e-01 1.70587e-03 5.59009e-02             1.37297e-03
lumbr              3.46290e-03 1.80823e-03                         1.71430e-02
metls  1.33159e-01 7.86757e-02 8.52937e-05 1.55000e-02             2.84313e-01
equip  9.83283e-02                                                 3.99168e-02
vehcl                                                              7.10858e-02
trnsp  1.06977e-01 2.17483e-02 2.67993e-02 1.04560e-03             1.71905e-02
trade  2.68150e-01 3.40205e-01 3.07603e-01 7.96495e-02             1.19901e-01
fnanc  5.43951e-05
realt                                                              2.95876e-02
srvcs  1.55407e-01                         8.42192e-01 1.00000e+00 -3.8905e-02
govt   1.45598e-02


table ras(s,s)  adjusted input-output table.  (tables 4.8 and 4.9)

            agri        mines       crude       const       food        textl
agri   4.77039e+04 1.29167e+01 4.94328e+00 4.14308e+02 8.07202e+04 2.16489e+03
mines  3.19103e+02 6.05761e+03 1.28523e+01 1.74414e+03 1.58516e+02 6.93484e+01
crude  2.75040e+02 1.05530e+02 5.46406e+03 1.82005e+02 1.00093e+02 5.49454e+01
const  2.68590e+03 4.87043e+02 1.08872e+04 2.86600e+02 1.46124e+03 5.88429e+02
food   1.70603e+04 1.21148e+01 1.67424e+01 3.48826e+01 5.83569e+04 6.66520e+02
textl  3.42696e+02 1.02025e+02 2.83085e+01 1.67936e+03 1.22183e+02 4.95362e+04
paper  7.80488e+02 3.25057e+02 2.55315e+02 3.81202e+03 1.11966e+04 1.81391e+03
refin  9.88521e+03 2.35625e+03 1.24116e+03 6.24300e+03 1.93248e+03 1.25882e+03
chem   9.77087e+03 1.45763e+03 9.50792e+02 6.56288e+03 5.42140e+03 1.26869e+04
lumbr  4.56307e+02 4.98159e+02 5.60705e+01 3.76413e+04 4.69320e+03 3.62200e+02
metls  2.03185e+03 4.63286e+03 3.27433e+03 3.80960e+04 7.48649e+03 1.61303e+03
equip  5.35927e+02 1.06592e+02 5.83976e+01 5.32920e+02 2.83783e+01 4.00452e+01
vehcl  1.70121e+02 2.10930e+02 3.52576e+01 3.80755e+02 3.22277e+01 1.79056e+01
trnsp  6.02777e+03 3.34213e+03 2.53607e+03 9.87724e+03 1.02177e+04 3.74510e+03
trade  1.34513e+04 3.00750e+03 1.51076e+03 3.21204e+04 2.11882e+04 7.67672e+03
fnanc  2.55270e+03 6.17634e+02 7.68909e+02 2.51563e+03 1.28108e+03 6.32573e+02
realt  7.40672e+03 8.34401e+02 7.56553e+03 4.67231e+02 5.58298e+02 4.84227e+02
srvcs  3.93065e+03 2.15643e+03 2.06860e+03 2.08522e+04 7.80496e+03 3.21905e+03
govt   7.84913e+02 5.72576e+02 1.07121e+03 8.76811e+02 1.79685e+03 1.22383e+03

+           paper       refin       chem        lumbr       metls       equip
agri   4.95558e+01 2.57982e+00 6.13878e+02 4.10659e+03 6.67960e+01 3.48058e+00
mines  4.80497e+02 2.99266e+02 3.97423e+03 2.06994e+03 1.49215e+04 1.39879e+01
crude  1.58425e+02 1.05766e+05 3.90772e+03 1.16685e+02 6.21400e+02 2.88911e+01
const  1.26204e+03 1.38001e+03 2.06264e+03 1.15375e+03 8.36066e+03 3.29064e+02
food   5.14232e+02 8.75865e+01 2.47313e+03 9.32015e+01 3.70207e+02 1.01664e+01
textl  1.63620e+03 3.74388e+01 3.27421e+03 1.87451e+03 2.84958e+03 4.06322e+02
paper  4.63469e+04 1.05641e+03 7.79450e+03 2.06093e+03 1.33010e+04 4.51683e+02
refin  4.06976e+03 2.00380e+04 1.46170e+04 2.50776e+03 1.02380e+04 5.87484e+02
chem   7.17832e+03 4.89943e+03 6.65589e+04 3.88466e+03 3.24850e+04 8.95859e+02
lumbr  4.95827e+03 3.82156e+02 2.35622e+03 2.37056e+04 1.14772e+04 1.31904e+03
metls  3.45937e+03 9.70241e+02 8.31886e+03 4.95921e+03 2.42505e+05 1.21644e+04
equip  1.68734e+02 9.82306e+00 7.99628e+01 9.83550e+01 3.14783e+03 1.27697e+04
vehcl  6.40378e+01 1.51190e+02 8.71123e+01 1.75502e+02 2.81914e+03 4.12245e+02
trnsp  1.03269e+04 1.16825e+04 1.82501e+04 8.00805e+03 4.25135e+04 2.19451e+03
trade  1.16057e+04 5.01511e+03 1.57178e+04 7.18179e+03 7.46440e+04 3.26569e+03
fnanc  1.02228e+03 8.44861e+02 1.48315e+03 8.28850e+02 6.18708e+03 6.20171e+02
realt  1.11894e+03 2.62709e+02 1.58982e+03 4.76650e+02 5.53245e+03 3.65087e+02
srvcs  6.83419e+03 2.35907e+03 1.23156e+04 3.00436e+03 2.84889e+04 2.54310e+03
govt   4.15367e+03 1.17168e+03 3.63197e+03 1.21178e+03 1.07284e+04 1.23522e+03

+           vehcl       trnsp       trade       fnanc       realt       srvcs
agri   1.52082e+00 4.91644e+01 8.73337e+02 4.84854e+00 4.31162e+03 2.60626e+03
mines  4.38196e+01 9.75567e+03 4.67007e+00 5.24419e-01 2.40127e+01 1.13320e+02
crude  2.61194e+01 2.93924e+04 4.70898e+02 7.15163e+01 1.70123e+02 6.09765e+02
const  3.25754e+02 2.40091e+04 3.86461e+03 7.62033e+02 7.12670e+04 1.33394e+04
food   2.69740e+01 1.64303e+02 4.83188e+02 1.47578e+01 9.62752e+00 6.62090e+03
textl  2.61111e+03 4.85133e+02 3.71442e+02 1.64973e+02 2.33814e+01 4.00854e+03
paper  6.22244e+02 3.04369e+03 1.11278e+04 6.03662e+03 3.09007e+03 2.12056e+04
refin  4.10666e+02 4.84692e+04 1.10733e+04 1.18735e+03 1.89838e+03 1.40215e+04
chem   5.36451e+03 3.25176e+03 1.62399e+03 1.35312e+02 1.27542e+03 1.83553e+04
lumbr  2.10358e+03 4.08367e+02 9.40659e+02 2.70518e+01 7.10703e+01 2.67436e+03
metls  2.38947e+04 8.37612e+03 2.37642e+03 7.60264e+02 8.25374e+02 2.00537e+04
equip  4.30563e+02 6.16430e+03 3.06914e+01 6.41174e+01 1.09553e+01 1.25107e+03
vehcl  3.01012e+04 9.05646e+02 4.43927e+02 3.53968e+01 4.16257e+01 8.12870e+03
trnsp  2.25330e+03 9.36376e+04 2.96017e+04 9.49454e+03 9.99490e+03 4.07070e+04
trade  8.26929e+03 1.55832e+04 1.22973e+04 1.42583e+03 3.51304e+03 2.94769e+04
fnanc  3.80231e+02 5.55400e+03 7.08814e+03 4.20652e+04 2.05804e+04 8.10357e+03
realt  1.13128e+02 4.24392e+03 1.37242e+04 3.72805e+03 3.96620e+04 2.46183e+04
srvcs  2.60763e+03 2.19662e+04 4.69394e+04 1.75710e+04 1.53004e+04 7.48002e+04
govt   4.79289e+02 1.17297e+04 1.42000e+04 6.69891e+03 5.80996e+03 1.74284e+04



table rcs(g,hh)  adjusted consumption matrix.  tables 5.2 and 5.3

            h1          h2          h3          h4          h5          h6
food   2.43154e+03 8.31012e+02 5.20838e+03 1.59696e+04 3.11945e+04 3.68235e+04
alchl  5.99531e+02 7.09930e+01 4.47408e+02 1.47625e+03 3.10355e+03 3.85386e+03
tobac  3.00241e+02 3.55527e+01 2.24052e+02 7.39320e+02 1.55420e+03 1.92995e+03
util   8.09773e+02 2.90719e+02 1.91339e+03 6.31809e+03 1.27338e+04 1.49690e+04
housg  6.12199e+03 1.58282e+03 9.48922e+03 2.39017e+04 4.04763e+04 4.36047e+04
frnsh  6.29848e+02 7.45854e+01 4.70031e+02 1.55093e+03 3.26043e+03 4.04867e+03
appl   5.18472e+02 1.02586e+02 5.15702e+02 1.73699e+03 3.94353e+03 4.88070e+03
clth   7.22029e+03 1.94843e+02 1.20325e+03 3.92543e+03 8.34312e+03 1.02651e+04
trnsp  1.10486e+02 4.72766e+01 3.05804e+02 9.45871e+02 1.87616e+03 2.21232e+03
vehcl  1.20089e+03 2.59688e+02 1.40132e+03 5.15694e+03 1.18923e+04 1.47618e+04
servc  7.30451e+02 8.64961e+01 5.45119e+02 1.79866e+03 3.78124e+03 4.69536e+03
bnkng  1.60339e+03 1.89865e+02 1.19656e+03 3.94812e+03 8.30000e+03 1.03067e+04
readg  1.27226e+03 1.50655e+02 9.49461e+02 3.13278e+03 6.58597e+03 8.17810e+03
n_dur  8.91740e+02 6.01011e+01 3.35115e+02 1.09765e+03 2.25039e+03 2.69641e+03
petrl  5.46878e+02 1.12026e+02 7.24765e+02 2.64345e+03 5.97935e+03 7.57259e+03
hlth   3.59269e+03 3.64276e+02 2.89157e+03 9.48352e+03 1.84661e+04 2.22962e+04
educ   4.10709e+02 4.86350e+01 3.06502e+02 1.01128e+03 2.12606e+03 2.64005e+03
savng -4.6884e+04  -2.8102e+03 -1.2384e+04 -2.7382e+04 -3.3634e+04 -1.7098e+04

+           h7          h8          h9          h10         h11         h12
food   3.72263e+04 3.64173e+04 6.22303e+04 4.77327e+04 5.55705e+04 1.43476e+04
alchl  4.09038e+03 4.27672e+03 7.88731e+03 6.63555e+03 8.87697e+03 3.07807e+03
tobac  2.04850e+03 2.14176e+03 3.94985e+03 3.32301e+03 4.44547e+03 1.54143e+03
util   1.49085e+04 1.44047e+04 2.47844e+04 1.92801e+04 2.31262e+04 6.46643e+03
housg  4.07999e+04 3.67105e+04 5.06882e+04 3.22039e+04 3.40273e+04 9.89624e+03
frnsh  4.29734e+03 4.49303e+03 8.28624e+03 6.97116e+03 9.32584e+03 3.23370e+03
appl   5.31140e+03 5.50475e+03 9.62492e+03 7.56886e+03 9.51822e+03 2.77065e+03
clth   1.07248e+04 1.10415e+04 1.98779e+04 1.64221e+04 2.13323e+04 7.18989e+03
trnsp  2.24502e+03 2.23530e+03 3.80079e+03 2.91343e+03 3.50719e+03 9.92770e+02
vehcl  1.65255e+04 1.69002e+04 2.91693e+04 2.27302e+04 2.85742e+04 8.05782e+03
servc  4.98369e+03 5.21064e+03 9.60965e+03 8.08456e+03 1.08154e+04 3.75019e+03
bnkng  1.09396e+04 1.14377e+04 2.10939e+04 1.77463e+04 2.37406e+04 8.23194e+03
readg  8.68036e+03 9.07556e+03 1.67376e+04 1.40813e+04 1.88378e+04 6.53186e+03
n_dur  2.77299e+03 2.88574e+03 5.33512e+03 4.58741e+03 6.38517e+03 2.59914e+03
petrl  8.00777e+03 8.11209e+03 1.44354e+04 1.14639e+04 1.36132e+04 3.64777e+03
hlth   2.30433e+04 2.30927e+04 4.00924e+04 3.17075e+04 3.96004e+04 1.21082e+04
educ   2.80215e+03 2.92981e+03 5.40313e+03 4.54572e+03 6.08121e+03 2.10860e+03
savng -1.49995e+03 1.01676e+04 4.23748e+04 5.79356e+04 1.13118e+05 4.77507e+04

+           h13         h14
food   8.11929e+03 5.24818e+02
alchl  3.30288e+03 1.53387e+03
tobac  1.65404e+03 7.68143e+02
util   4.23549e+03 3.88370e+02
housg  1.15294e+04 2.68036e+04
frnsh  3.46990e+03 1.61143e+03
appl   2.03276e+03 2.66599e+02
clth   7.94568e+03 1.13218e+04
trnsp  6.56467e+02 7.65529e+01
vehcl  6.14244e+03 1.59609e+03
servc  4.02413e+03 1.86881e+03
bnkng  8.83324e+03 4.10219e+03
readg  7.00898e+03 3.25500e+03
n_dur  3.92681e+03 1.30495e+04
petrl  2.33556e+03 3.01442e+02
hlth   9.46404e+03 1.86004e+03
educ   2.26261e+03 1.05077e+03
savng  4.67953e+04 3.21618e+04;


*       convert into units consistent with the 1973 data:

gdk = 1.e-5 * gdk;
gsk = 1.e-5 * gsk;
gdl = 1.e-5 * gdl;
gtl = 1.e-5 * gtl;

dk(s) = 1.e-5 * dk(s);
sk(hh) = 1.e-5 * sk(hh);
dl(s) = 1.e-5 * dl(s);
sl(hh) = 1.e-5 * sl(hh);
pit(hh) = 1.e-5 * pit(hh);
trn(hh) = 1.e-5 * trn(hh);
tc(g) = 1.e-5 * tc(g);
gd(s) = 1.e-5 * gd(s);
vm(s) = 1.e-5 * vm(s);
vx(s) = 1.e-5 * vx(s);
y(s) = 1.e-5 * y(s);

rcs(g,hh) = 1.e-5 * rcs(g,hh);
ras(s,ss) = 1.e-5 * ras(s,ss);

parameter

        taubmk(*)       benchmark marginal tax,
        tauave(*)       average tax,
        cc(h)           current consumption value (market + leisure),
        leisure(h)      leisure demand in benchmark,
        gc              government consumption,
        cp(h)           value of private consumption,
        eg(h)           elasticity of substitution - private vs public
        govsav          exogenous (government) savings
        cg(h)           consumption plus public goods valuation
        vpg(h)          benchmark valuation of public goods;

set             hfix(dh)        households omitted from the aggregation;
alias (hp,h);

*       identify households from the disaggregated data set
*       which are not assigned:

hfix(dh) = yes$(sum(h$hmap(dh,h), 1) eq 0);

parameter       txo(s)          production output taxes (total value),
                tk(s)           capital taxes (total value),
                tl(s)           labor taxes (total value),
                plref(s)        labor reference price,
                pkref(s)        capital reference price
                incadj(hh)      income adjustment transfer;
*
        incadj(hh) = 0;

        txo(s) = 0.01 * taxrate(s,"txo") * y(s);
        tk(s) =  0.01 * taxrate(s,"tk") * dk(s);
        tl(s) =  0.01 * taxrate(s,"tl") * dl(s);
        plref(s) = 1 + 0.01 * taxrate(s,"tl");
        pkref(s) = 1 + 0.01 * taxrate(s,"tk");

parameter  gce(g)       gross consumption expenditure by good. (table 6.6);

set excs / y, inter, netexp, findem, check/;
set hcol /expend, inc_tax, labor, capital, transf, check/;
set prft /y, va, tax, inter, check/;
set gcol /endowment, l_tax, k_tax, prod_tax, con_tax, inc_tax, revenue,
          transf, expend, outlay, deficit/;
set vcol /labor, capital, inter, total/;
set tcol / output, labor, capital, total/;
set govt(s)  government sectors  /govt/;
set ccg(g)  current consumption goods;

ccg(g) = yes;
ccg("savng") = no;


*       check consistency of the disaggregated data.

parameter
        cd(s)           consumer demand,
        fd(s)           final demand,
        va(s)           value-added,
        labmkt          labor market clearance,
        capmkt          capital market clearance,
        pmchk(s,*)      profit and market clearance check,
        budget(hh,*)    budget balance,
        gbdgt(*)        government budget balance,
        zchk            check of consumer goods transformation matrix,
        zsum(g)         transformation check sum;

parameter

        expend(hh)      benchmark consumption expenditure,
        saving(hh)      benchmark savings,
        profit(s,*)     benchmark profit check,
        excess(*,*)     excess demand check,
        bdgtbal(hh,*)   budget balance calculation,

        pctprofit(s,*)          benchmark profit check (percent),
        pctva(*,*)              value-added allocation
        pctexcess(s,*)          excess demand check (percent),
        pctbudget(hh,*)         budget balance calculation (percent),

        pctrcs(g,hh)    consumption as percentage of expenditure,
        pctras(ss,s)    intermediate input as percentage of output value,

        government(*,*)         government budget summary (percent),
        valueadded(s,*)         value-added summary,
        taxpayment(s,*)         tax payment summary;

*       perform some quick data checks:

        zsum(g) = sum(s, z(s,g));
        zchk = sum(g, abs(zsum(g)) - 1);
        abort$(abs(zchk) gt 1.e-5) " z matrix error: ", zsum;

        gce(g) = sum(dh, rcs(g,dh));

        cd(s) = sum(g, z(s,g) * (gce(g) - tc(g)));

        fd(s) = gd(s) + cd(s) + vx(s) - gse(s) - vm(s);

        va(s) = dl(s) + dk(s) + tl(s) + tk(s);

        labmkt = sum(s, dl(s)) + gdl - sum(dh, sl(dh));
        capmkt = sum(s, dk(s)) + gdk - sum(dh, sk(dh)) - gsk;

        pmchk(s,"profit") = y(s) - sum(ss,ras(ss,s)) -
                (dl(s) + dk(s) + tl(s) + tk(s) + txo(s));

        pmchk(s,"profit%") = 100 * pmchk(s,"profit") / y(s);

        pmchk(s,"excess") = fd(s) + sum(ss,ras(s,ss)) - y(s);
        pmchk(s,"excess%") = 100 * (fd(s) + sum(ss,ras(s,ss)) - y(s))/y(s);

*       include some other statistics for a complete report:

set     gexpend / trnsfr, adj, gc, sav/
        grevenu / gse, gsk, pit, tl, tk, txo, tc, hfix/;

        gbdgt("trnsfr") = sum(dh, trn(dh));
        gbdgt("adj") = sum(dh, incadj(dh));
        gbdgt("gc")  = sum(s, gd(s)) + gdk + gdl + gtl;

        gbdgt("gse") = sum(s,gse(s));
        gbdgt("gsk") = gsk;
        gbdgt("pit") = sum(dh, pit(dh));
        gbdgt("tl")  = sum(s, tl(s)) + gtl;
        gbdgt("tk")  = sum(s, tk(s));
        gbdgt("txo") = sum(s, txo(s));
        gbdgt("tc")  = sum(g, tc(g));

        gbdgt("revenue")  = sum(grevenu, gbdgt(grevenu));
        gbdgt("outlay")   = sum(gexpend, gbdgt(gexpend));
        gbdgt("deficit") = gbdgt("outlay") - gbdgt("revenue");


        expend(dh) = sum(ccg, rcs(ccg,dh));
        saving(dh) = rcs("savng",dh);

        bdgtbal(dh,"expend")  = expend(dh);
        bdgtbal(dh,"saving")  = saving(dh);
        bdgtbal(dh,"inc_tax") = pit(dh);
        bdgtbal(dh,"labor")   = sl(dh);
        bdgtbal(dh,"capital") = sk(dh);
        bdgtbal(dh,"transf")  = trn(dh);
        bdgtbal(dh,"check") =
          expend(dh)+saving(dh)-(sl(dh)+sk(dh)+trn(dh)-pit(dh));

        pctbudget(dh,"expend")  = 100;
        pctbudget(dh,"saving") = 100*
                        bdgtbal(dh,"saving") / expend(dh);
        pctbudget(dh,"inc_tax") = 100*
                        bdgtbal(dh,"inc_tax") / expend(dh);
        pctbudget(dh,"labor")   = 100*
                        bdgtbal(dh,"labor")  / expend(dh);
        pctbudget(dh,"capital") = 100*
                        bdgtbal(dh,"capital") / expend(dh);
        pctbudget(dh,"transf")  = 100*
                        bdgtbal(dh,"transf") / expend(dh);
        pctbudget(dh,"check") = 100*
                        bdgtbal(dh,"check") / expend(dh);

        display zchk, labmkt, capmkt, pmchk, gbdgt;
        display pctbudget, bdgtbal;


*       =================================================================
*       make adjustments to balance budgets:

*       first, remove any negative income taxes:

        pit(dh) = max(0, pit(dh));

        incadj(dh) = sum(g, rcs(g,dh)) - (sl(dh)+sk(dh)+trn(dh)-pit(dh));

*       make adjustments to balance profits:

        y(s) = y(s) - pmchk(s,"profit");

*       adjustments to balance sectoral markets:

        gse(s) = gse(s) + fd(s) + sum(ss,ras(s,ss)) - y(s);
*       =================================================================
*       recheck the central variables:

        fd(s) = gd(s) + cd(s) + vx(s) - gse(s) - vm(s);

        pmchk(s,"profit") = y(s) - sum(ss,ras(ss,s)) -
                (dl(s) + dk(s) + tl(s) + tk(s) + txo(s));
        pmchk(s,"profit%") = 100 * pmchk(s,"profit") / y(s);

        budget(dh,"value") =
                sum(g, rcs(g,dh)) - (sl(dh)+sk(dh)+trn(dh)-pit(dh));
        budget(dh,"percent") = 100 * budget(dh,"value")/sum(g, rcs(g,dh));

        pmchk(s,"excess") = fd(s) + sum(ss,ras(s,ss)) - y(s);
        pmchk(s,"excess%") = 100 * (fd(s) + sum(ss,ras(s,ss)) - y(s))/y(s);

*       recalculate the government budget statistics:

        gbdgt("trnsfr") = sum(dh, trn(dh));
        gbdgt("adj") = sum(dh, incadj(dh));
        gbdgt("gc")  = sum(s, gd(s)) + gdk + gdl + gtl;

        gbdgt("gse") = sum(s,gse(s));
        gbdgt("gsk") = gsk;
        gbdgt("pit") = sum(dh, pit(dh));
        gbdgt("tl")  = sum(s, tl(s)) + gtl;
        gbdgt("tk")  = sum(s, tk(s));
        gbdgt("txo") = sum(s, txo(s));
        gbdgt("tc")  = sum(g, tc(g));

        gbdgt("revenue")  = sum(grevenu, gbdgt(grevenu));
        gbdgt("outlay")   = sum(gexpend, gbdgt(gexpend));
        gbdgt("deficit") = gbdgt("outlay") - gbdgt("revenue");

        display pmchk, gbdgt;

        expend(dh) = sum(ccg, rcs(ccg,dh));
        saving(dh) = rcs("savng",dh);

        profit(s,"y") = y(s);
        profit(s,"va") = dl(s) + dk(s);
        profit(s,"tax")  = tl(s) + tk(s) + txo(s);
        profit(s,"inter") = sum(ss,ras(ss,s));
        profit(s,"check") = y(s) - sum(ss,ras(ss,s)) -
                (dl(s) + dk(s) + tl(s) + tk(s) + txo(s));

        pctprofit(s,"y")     = 100;
        pctprofit(s,"va")    = 100*profit(s,"va") / profit(s,"y");
        pctprofit(s,"tax")   = 100*profit(s,"tax")  / profit(s,"y");
        pctprofit(s,"inter") = 100*profit(s,"inter") / profit(s,"y");
        pctprofit(s,"check") = 100*profit(s,"check") / profit(s,"y");

        pctva(s,"k")   = 100 * dk(s) / va(s);
        pctva(s,"l")   = 100 * dl(s) / va(s);
        pctva(s,"tl")  = 100 * tl(s) / va(s);
        pctva(s,"tk")  = 100 * tk(s) / va(s);

        pctva("total","k")   = 100 * sum(s, dk(s)) / sum(s, va(s));
        pctva("total","l")   = 100 * sum(s, dl(s)) / sum(s,va(s));
        pctva("total","tl")  = 100 * sum(s, tl(s)) / sum(s,va(s));
        pctva("total","tk")  = 100 * sum(s, tk(s)) / sum(s,va(s));

        excess(s,"y")     = y(s);
        excess(s,"inter") = sum(ss,ras(s,ss));
        excess(s,"netexp") = vx(s) - vm(s);
        excess("total","netexp") = sum(s, vx(s) - vm(s));
        excess(s,"findem") = gd(s) + cd(s) - gse(s);
        excess(s,"check") = fd(s) + sum(ss,ras(s,ss)) - y(s);

        pctexcess(s,"y")     = 100;
        pctexcess(s,"inter") = 100*excess(s,"inter") /excess(s,"y");
        pctexcess(s,"netexp") = 100*excess(s,"netexp") /excess(s,"y");
        pctexcess(s,"findem") = 100*excess(s,"findem") /excess(s,"y");
        pctexcess(s,"check") = 100*excess(s,"check") /excess(s,"y");

        bdgtbal(dh,"expend")  = expend(dh);
        bdgtbal(dh,"saving")  = saving(dh);
        bdgtbal(dh,"inc_tax") = pit(dh);
        bdgtbal(dh,"labor")   = sl(dh);
        bdgtbal(dh,"capital") = sk(dh);
        bdgtbal(dh,"transf")  = trn(dh);
        bdgtbal(dh,"check") =
          expend(dh)+saving(dh)-(sl(dh)+sk(dh)+trn(dh)-pit(dh));

        pctbudget(dh,"expend")  = 100;
        pctbudget(dh,"saving") = 100*
                        bdgtbal(dh,"saving")/bdgtbal(dh,"expend");
        pctbudget(dh,"inc_tax") = 100*
                        bdgtbal(dh,"inc_tax")/bdgtbal(dh,"expend");
        pctbudget(dh,"labor")   = 100*
                        bdgtbal(dh,"labor")  /bdgtbal(dh,"expend");
        pctbudget(dh,"capital") = 100*
                        bdgtbal(dh,"capital")/bdgtbal(dh,"expend");
        pctbudget(dh,"transf")  = 100*
                        bdgtbal(dh,"transf") /bdgtbal(dh,"expend");
        pctbudget(dh,"check") = 100*
                        bdgtbal(dh,"check") /bdgtbal(dh,"expend");

        government("endowment","level") = gsk + sum(s, gse(s));
        government("l_tax","level") = sum(s, tl(s));
        government("k_tax","level") = sum(s, tk(s));
        government("prod_tax","level") = sum(s, txo(s));
        government("con_tax","level")  = sum(g, tc(g));
        government("inc_tax","level") = sum(dh, pit(dh));
        government("revenue","level")  = gsk + sum(s, gse(s)) +
                                 sum(s, tl(s) + tk(s) + txo(s)) +
                                 sum(g, tc(g)) + sum(dh, pit(dh));
        government("transf","level")  =  sum(dh, trn(dh));
        government("incadj","level")  =  sum(dh, incadj(dh));
        government("expend","level") = sum(s, gd(s)) + gdl + gdk + gtl;
        government("outlay","level") =  sum(dh, trn(dh)) +
                                sum(s, gd(s)) + gdl + gdk + gtl;

        government("deficit","level") = government("outlay","level")-
                                government("revenue","level");

        government("endowment","percent") =
          100 * government("endowment","level") /
                government("revenue","level");

        government("l_tax","percent") =
          100 * government("l_tax","level") /
                government("revenue","level");

        government("k_tax","percent") =
          100 * government("k_tax","level") /
                government("revenue","level");

        government("prod_tax","percent") =
          100 * government("prod_tax","level") /
                government("revenue","level");

        government("con_tax","percent")  =
          100 * government("con_tax","level") /
                government("revenue","level");
        government("inc_tax","percent") =
          100 * government("inc_tax","level") /
                government("revenue","level");
        government("revenue","percent")  =  100;
        government("transf","percent")  =
          100 * government("transf","level") /
                government("revenue","level");
        government("incadj","percent")  =
          100 * government("incadj","level") /
                government("revenue","level");
        government("expend","percent") =
          100 * government("expend","level") /
                government("revenue","level");
        government("outlay","percent") =
          100 * government("outlay","level") /
                government("revenue","level");
        government("deficit","percent") =
          100 * government("deficit","level") /
                government("revenue","level");

        pctrcs(g,dh) = 100 * rcs(g,dh) / expend(dh);
        pctras(ss,s) = 100 * ras(ss,s) / y(s);

        valueadded(s,"labor")   = dl(s);
        valueadded(s,"capital") = dk(s);
        valueadded(s,"inter")  = sum(ss, ras(ss,s));
        valueadded(s,"total")  = dl(s) + dk(s) + sum(ss, ras(ss,s));

        taxpayment(s,"output")  = txo(s);
        taxpayment(s,"labor")   = tl(s);
        taxpayment(s,"capital") = tk(s);
        taxpayment(s,"total") = txo(s) + tl(s) + tk(s);

display profit, excess, bdgtbal;
display pctprofit, pctva, pctexcess, pctbudget;
display government, taxpayment;
option pctrcs:1;
option pctras:1;
*.display valueadded, pctrcs, pctras;

*== display tax rates before aggregation:

tauave(dh) = pit(dh) / (sl(dh) + sk(dh));
display tau, tauave;
tauave(dh) = 0;

*======= check the aggregation.

abort$(smax(dh, sum(h$hmap(dh,h), 1)-1) gt 0) "invalid mapping.";

*======= perform the aggregation ===========

parameter popshr(h)  share of population;

        count(h) = sum(dh$hmap(dh,h), count(dh));
        popshr(h) = count(h) / sum(hp, count(hp));
        sk(h) = sum(dh$hmap(dh,h), sk(dh));
        sl(h) = sum(dh$hmap(dh,h), sl(dh));
        pit(h) = sum(dh$hmap(dh,h), pit(dh));
        incadj(h) = sum(dh$hmap(dh,h), incadj(dh));
        trn(h) = sum(dh$hmap(dh,h), trn(dh));
        tau(h)$pit(h) = sum(dh$hmap(dh,h), pit(dh) * tau(dh)) / pit(h);
        rcs(g,h) = sum(dh$hmap(dh,h), rcs(g,dh));

        zta(h) = sum(dh$hmap(dh,h), sl(dh) * zta(dh)) /
                 sum(dh$hmap(dh,h), sl(dh));

*       fix elasticities:

        el(h)  = sum(dh$hmap(dh,h), el(dh)*sl(dh))/
                 sum(dh$hmap(dh,h), sl(dh));
        ec(h)  = 1.5;

        taubmk(h) = tau(h);
        tauave(h) = pit(h) / (sl(h) + sk(h));
        leisure(h) = sl(h)*(zta(h)-1);
        cc(h) = sum(g$ccg(g), rcs(g,h)) + leisure(h);
        gc = sum(s, gd(s)) + gdk + gdl + gtl;

*       set savings levels to zero for households with negative savings
*       and make according income adjustment:

        saving(h) = sum(g$(not ccg(g)), rcs(g,h));
        expend(h) = sum(ccg, rcs(ccg,h));

        govsav = sum(h$(saving(h) lt 0), saving(h));
        incadj(h)$(saving(h) lt 0) = incadj(h) - saving(h);
        loop(g$(not ccg(g)), rcs(g,h)$(saving(h) lt 0) = 0;);

        saving(h) = sum(g$(not ccg(g)), rcs(g,h));
        display govsav, saving;

     bdgtbal(dh,"expend")  = 0;
     bdgtbal(dh,"saving")  = 0;
     bdgtbal(dh,"inc_tax") = 0;
     bdgtbal(dh,"labor")   = 0;
     bdgtbal(dh,"capital") = 0;
     bdgtbal(dh,"transf")  = 0;
     bdgtbal(dh,"check") = 0;
     pctbudget(dh,"expend")  = 0;
     pctbudget(dh,"saving")  = 0;
     pctbudget(dh,"inc_tax") = 0;
     pctbudget(dh,"labor")   = 0;
     pctbudget(dh,"capital") = 0;
     pctbudget(dh,"transf")  = 0;
     pctbudget(dh,"check") = 0;

bdgtbal(h,"expend")  = expend(h);
bdgtbal(h,"saving")  = saving(h);
bdgtbal(h,"inc_tax") = pit(h);
bdgtbal(h,"labor")   = sl(h);
bdgtbal(h,"capital") = sk(h);
bdgtbal(h,"incadj")  = incadj(h);
bdgtbal(h,"transf")  = trn(h);
bdgtbal(h,"check")   = expend(h)+saving(h) -
                        (sl(h)+sk(h)+trn(h)+incadj(h)-pit(h));

pctbudget(h,"expend")  = 100;
pctbudget(h,"saving") =  100* bdgtbal(h,"saving")/bdgtbal(h,"expend");
pctbudget(h,"inc_tax") = 100* bdgtbal(h,"inc_tax")/bdgtbal(h,"expend");
pctbudget(h,"labor")   = 100* bdgtbal(h,"labor")  /bdgtbal(h,"expend");
pctbudget(h,"capital") = 100* bdgtbal(h,"capital")/bdgtbal(h,"expend");
pctbudget(h,"transf")  = 100* bdgtbal(h,"transf") /bdgtbal(h,"expend");
pctbudget(h,"incadj")  = 100* bdgtbal(h,"incadj") /bdgtbal(h,"expend");
pctbudget(h,"check")   = 100 * bdgtbal(h,"check") /bdgtbal(h,"expend");

display popshr, bdgtbal, pctbudget;

parameter share(h,*);

     share(h,"l/k") = sl(h) / sk(h);
     share(h,"saving") = 100 * saving(h) / sum(hp, saving(hp));
     share(h,"sl") = 100 * sl(h) / sum(hp, sl(hp));
     share(h,"sk") = 100 * sk(h) / sum(hp, sk(hp));
     share(h,"tr") = 100 * trn(h) / sum(hp, trn(hp));
     share(h,"pit") = 100 * pit(h) / sum(hp, pit(hp));
     share(h,"expend") = 100 * expend(h) / sum(hp, expend(hp));
display share;

        government("endowment","level") = gsk + sum(s, gse(s));
        government("l_tax","level") = sum(s, tl(s)) + gtl;
        government("k_tax","level") = sum(s, tk(s));
        government("prod_tax","level") = sum(s, txo(s));
        government("con_tax","level")  = sum(g, tc(g));
        government("inc_tax","level") = sum(h, pit(h));
        government("trd_bal","level")  = sum(s, vm(s) - vx(s));
        government("revenue","level")  = gsk + sum(s, gse(s)) +
                                 sum(s, tl(s) + tk(s) + txo(s)) + gtl +
                                 sum(s, vm(s) - vx(s)) +
                                 sum(g, tc(g)) + sum(h, pit(h));

        government("transf","level")  =  sum(h, trn(h));
        government("incadj","level")  =  sum(h, incadj(h));
        government("hfix","level")  =  sum(hfix, sum(g, rcs(g,hfix))
                                                  - sl(hfix) - sk(hfix));
        government("expend","level") = sum(s, gd(s)) + gdl + gdk + gtl;
        government("outlay","level") =  sum(h, trn(h) + incadj(h)) +
                                government("hfix","level") +
                                sum(s, gd(s)) + gdl + gdk + gtl;

        government("deficit","level") = government("outlay", "level")-
                                        government("revenue","level");

        government("endowment","percent") =
          100 * government("endowment","level") /
                government("revenue","level");

        government("l_tax","percent") =
          100 * government("l_tax","level") /
                government("revenue","level");

        government("k_tax","percent") =
          100 * government("k_tax","level") /
                government("revenue","level");

        government("prod_tax","percent") =
          100 * government("prod_tax","level") /
                government("revenue","level");

        government("con_tax","percent")  =
          100 * government("con_tax","level") /
                government("revenue","level");
        government("inc_tax","percent") =
          100 * government("inc_tax","level") /
                government("revenue","level");
        government("revenue","percent")  =  100;
        government("transf","percent")  =
          100 * government("transf","level") /
                government("revenue","level");
        government("incadj","percent")  =
          100 * government("incadj","level") /
                government("revenue","level");
        government("hfix","percent")  =
          100 * government("hfix","level") /
                government("revenue","level");
        government("expend","percent") =
          100 * government("expend","level") /
                government("revenue","level");
        government("outlay","percent") =
          100 * government("outlay","level") /
                government("revenue","level");
        government("deficit","percent") =
          100 * government("deficit","level") /
                government("revenue","level");

display government;

*       recalculate the government budget statistics:

        gbdgt("trnsfr") = sum(h, trn(h));
        gbdgt("adj") = sum(h, incadj(h));
        gbdgt("gc")  = sum(s, gd(s)) + gdk + gdl + gtl;
        gbdgt("sav") = govsav;

        gbdgt("hfix") = sum(hfix, sl(hfix)+sk(hfix) - sum(g, rcs(g,hfix)));
        gbdgt("gse") = sum(s,gse(s));
        gbdgt("gsk") = gsk;
        gbdgt("pit") = sum(h, pit(h));
        gbdgt("tl")  = sum(s, tl(s)) + gtl;
        gbdgt("tk")  = sum(s, tk(s));
        gbdgt("txo") = sum(s, txo(s));
        gbdgt("tc")  = sum(g, tc(g));

        gbdgt("revenue")  = sum(grevenu, gbdgt(grevenu));
        gbdgt("outlay")   = sum(gexpend, gbdgt(gexpend));
        gbdgt("deficit") = gbdgt("outlay") - gbdgt("revenue");

        display gbdgt;

parameter       tikave  average capital-income tax rate,
                tiave   average income tax rate,
                tlave   average labor tax rate,
                tkave   average capital tax rate,
                gbench  benchmark provision;

        tlave = sum(s, tl(s)) / sum(s, dl(s) + tl(s));

        tiave = sum(h, pit(h)) / sum(h, sl(h) + sk(h));

        tkave = sum(s, tk(s)) / sum(s, dk(s)+tk(s));

        tikave = (sum(h, pit(h))        + sum(s, tk(s))) /
                (sum(h, pit(h) + sl(h) + sk(h)) + sum(s, dk(s)+tk(s)));

        gbench = (gdl + gtl + gdk + sum(s, gd(s))) /

                sum((g,h), rcs(g,h));

display tiave, tlave, tikave, tkave, gbench, tauave, taubmk;


scalar  static  switch for fixed capital stock /1/
        redist  switch for endogenous income redistribution /1/;

scalar  efks    elasticity of foreign capital supply /0.25/,
        vscale  scale factor on valuation of public good /1/;

alias (hp,h);

option limrow=0;
option limcol=0;
$offsymlist offsymxref offuellist offuelxref


parameter
        qref_ls(h)      reference level of labor supply - net of tax
        qref_z(s,g)     reference level of consumer goods formation net tax
        qref_va(s)      refreence level of value-added
        qref_i(h)       reference level of household income-expenditure
        qref_gc         reference level of government consumption
        qref_trn        reference level of transfers
        qref_adj        reference level of income adjustments
        qref_ginc       reference level of government income

        pref_ls(h)      reference price of leisure
        pref_l(s)       reference price of labor
        pref_k(s)       reference price of capital services

        t_l(s)          labor tax
        t_k(s)          capital tax
        t_y(s)          output tax
        t_i(h)          income tax (marginal rate)
        t_iave(h)       income tax (average rate)
        t_c(g)          tax rates on consumption
        t_gdl           tax rate on government labor demand
        theta(h)        weights applied in synthetic objective ;

        qref_ls(h) = sl(h)*(1-taubmk(h));

        pref_ls(h) = 1 + taubmk(h)/(1-taubmk(h));

        t_i(h) = taubmk(h)/(1-taubmk(h));

        t_iave(h) = pit(h) / (sl(h) + sk(h));

        qref_z(s,g) = z(s,g)*(gce(g)-tc(g));

        t_c(g) = tc(g) / gce(g);

        qref_va(s) = dl(s) + tl(s) + dk(s) + tk(s);

        pref_l(s) = 1 + tl(s)/dl(s);
        t_l(s) = tl(s) / dl(s);

        pref_k(s) = 1 + tk(s)/dk(s);
        t_k(s) = tk(s)/dk(s);

        t_y(s) = txo(s) / y(s);

        qref_gc = gdl + gtl + gdk + sum(s, gd(s));

        vpg(h) = vscale *
                 qref_gc * sum(ccg, rcs(ccg,h)) / sum((ccg,hp), rcs(ccg,hp));

        cp(h) = sum(g$ccg(g), rcs(g,h));

        cg(h) = cp(h) + vpg(h);

        qref_i(h) = cg(h) + leisure(h);

        t_gdl = gtl/gdl;

        qref_trn = sum(h, trn(h));

        qref_adj = sum(h, incadj(h));

        qref_ginc = qref_trn + qref_adj + qref_gc;

*       calibrate the top level elasticity of leisure vs. consumption:

        el(h) = (leisure(h)/(qref_i(h)-leisure(h)) + 0.15 /(zta(h)-1)) /
                (1 - qref_ls(h)/(qref_i(h)-leisure(h)));
        el(dh) = 0;

        eg(h) = 0.5;
        vpg(h) = qref_gc * popshr(h);
        cg(h) = sum(ccg, rcs(ccg,h)) + vpg(h);
        qref_i(h) = cg(h) + leisure(h);
        el(h) =  ( els/(zta(h)-1) + qref_ls(h) / qref_i(h) ) /
                (1 - leisure(h) / qref_i(h));
        display el;

alias (hp,h);

option solprint=off;
option limrow=0;
option limcol=0;
$offsymlist offsymxref offuellist offuelxref

*       gemtap model in mcp format.


variables
        p_l             wage index
        p_k             capital return index
        p_ls(h)         leisure price
        p_c(g)          consumption goods price
        p_cc(h)         current consumption price
        p_w(h)          welfare price index
        p_gc            government consumption price
        p_cp(h)         private consumption price
        p_g(h)          household valuation of public good
        p_y(s)          sectoral goods price
        p_va(s)         value-added price index
        p_trn           transfer price index
        p_fx            the real exchange rate

        a_gc            government consumption
        a_invest        investment-capital stock
        a_y(s)          production index
        a_va(s)         value added index
        a_w(h)          welfare index
        a_cc(h)         current consumption
        a_cp(h)         private consumption aggregate
        a_c(g)          aggregate consumption index
        a_ls(h)         labor supply

        i_gov           governemtn income
        i_h(h)          household income (total)
        i_e(h)          endowment income

        tau_l           labor tax instrument
        tau_k           capital and income tax instrument

        tau_pl          instrument for compute labour supply elasticity;

variable
        a_km            net capital inflow;


equations

        mkt_l           labor market - endogenous taxes
        mkt_k           capital market - endogenous taxes
        mkt_ls(h)       leisure - labor market
        mkt_c(g)        consumption good market
        mkt_cc(h)       current consumption market
        mkt_w(h)        supply-demand for welfare
        mkt_gc          government consumption
        mkt_cp(h)       private consumption aggregate
        mkt_g(h)        household valuation of public good
        mkt_va(s)       value-added supply-demand
        mkt_y(s)        sectoral output markets
        mkt_trn         transfer balance
        mkt_fx          foreign exchange market

        prf_gc          government consumption (leontief)
        prf_invest      zero profit for investment
        prf_y(s)        sectoral cost function (leontief)
        prf_va(s)       value-added cost function (ces) - endogenous taxes
        prf_w(h)        welfare index (ces)
        prf_cc(h)       current consumption (ces)
        prf_cp(h)       zero profit condition for private consumption
        prf_c(g)        consumption good formation (leontief)
        prf_ls(h)       labor supply (leontief)

        kmdef           capital import definition

        totinc(h)       household income definition - total
        income(h)       household endowment income
        govinc          government income;


*       labor supply condition:

prf_ls(h)..     p_ls(h) * (1 + t_i(h)) / pref_ls(h)

                        =e= p_l + tau_pl * p_trn;


prf_c(g)..      sum(s$z(s,g), p_y(s) * qref_z(s,g)) =e=

                p_c(g) * gce(g) * (1 - t_c(g));


prf_cp(h)..
                ( sum(g$ccg(g),

                    rcs(g,h) * p_c(g)**(1-ec(h)) ) -

                    cp(h) * p_cp(h)**(1-ec(h)) )$(ec(h) ne 1) +

                ( sum(g$ccg(g), rcs(g,h) * log(p_c(g))) -

                    cp(h) * log(p_cp(h)) )$(ec(h) eq 1) =e= 0;


prf_cc(h)..   ( (vpg(h) * p_g(h)**(1-eg(h)))$vpg(h) +

                 cp(h) *  p_cp(h)**(1-eg(h)) -

                 cg(h) * p_cc(h)**(1-eg(h)) )$(eg(h) ne 1) +

              ( (vpg(h) * log(p_g(h)))$vpg(h) +

                cp(h) * log(p_cp(h)) -

                cg(h) * log(p_cc(h)) )$(eg(h) eq 1) =e= 0;


prf_w(h)..    ( cg(h) * p_cc(h)**(1-el(h))  +

                leisure(h) * p_ls(h)**(1-el(h))  -

                qref_i(h) * p_w(h)**(1-el(h)) )$(el(h) ne 1) +


              ( cg(h) * log(p_cc(h)) +

                leisure(h) * log(p_ls(h)) -

                qref_i(h) * log(p_w(h)) )$(el(h) eq 1) =e= 0;


prf_gc..        p_l * (1 + t_gdl) * gdl + p_k * gdk

                + sum(s$gd(s), p_y(s) * gd(s)) =e= p_gc * qref_gc;


prf_va(s)..

        ((p_l * (1+tau_l*t_l(s))/pref_l(s))**(1-ekl(s))
                * dl(s) * pref_l(s) +

         (p_k * (1+ tau_k * t_k(s))/pref_k(s))**(1-ekl(s))
                * dk(s) * pref_k(s)

                - p_va(s)**(1-ekl(s)) * qref_va(s) )$(ekl(s) ne 1) +

(dl(s) * pref_l(s) * log(p_l * (1+tau_l*t_l(s))/ pref_l(s)) +

 dk(s) * pref_k(s) * log(p_k * (1+ tau_k *t_k(s))/pref_k(s)) -

        qref_va(s) * log(p_va(s)) )$(ekl(s) eq 1) =e=  0;


prf_y(s)..      p_va(s) * qref_va(s) +

                sum(ss$ras(ss,s), ras(ss,s) * p_y(ss)) =e=

                p_y(s) * y(s) * (1-t_y(s));


prf_invest..

                sum(g$(not ccg(g)), p_c(g)) =e= p_k;


kmdef.. a_km =e= 1 - (p_fx/p_k)**efks;

mkt_k..         a_invest * (sum(h, sk(h)) + gsk) + sum(hfix, sk(hfix))

*       foreign capital flows:

                + (sum(h, sk(h)) * a_km)$efks =e=

                sum(s, a_va(s) * dk(s)*

                ( pref_k(s)/(1+tau_k *t_k(s)) )**ekl(s) *

                ( p_va(s)/p_k )**ekl(s) )

                + a_gc * gdk;


mkt_l..         sum(h, a_ls(h)*sl(h)) + sum(hfix, sl(hfix)) =e=

                sum(s, a_va(s) * dl(s) *

                  ( pref_l(s) / (1+tau_l*t_l(s)) )**ekl(s) *

                  ( p_va(s)/p_l)**ekl(s) )

                + a_gc * gdl;


mkt_ls(h)..     leisure(h) + qref_ls(h) =e=

                leisure(h) * a_w(h) * (p_w(h)/p_ls(h))**el(h) +

                qref_ls(h) * a_ls(h);


mkt_c(g)..      gce(g) * a_c(g) =e=

*       exogenous household demand and saving:

                sum(hfix, rcs(g,hfix))  +  govsav$(not ccg(g))

*       current consumption goods:

                + sum(h, (a_cp(h) * rcs(g,h) *

                        (p_cp(h)/p_c(g))**eg(h))$ccg(g)

*       investment demand:

                + (a_invest * rcs(g,h))$(not ccg(g)) );


mkt_cc(h)..     a_cc(h) =e= a_w(h) * (p_w(h)/p_cc(h))**el(h);


mkt_cp(h)..     a_cp(h) =e= a_cc(h) * (p_cc(h)/p_cp(h))**eg(h);


mkt_g(h)..

                a_gc =e= a_cc(h) * (p_cc(h) / p_g(h))**eg(h);


mkt_w(h)..      a_w(h) =e= i_h(h) / p_w(h);


mkt_gc..        p_trn * (qref_trn + qref_adj) +

                p_gc * a_gc * qref_gc =e= i_gov * qref_ginc;


mkt_va(s)..     a_va(s) =e= a_y(s);


*       trade elasticity parameters (0.465 and 10) taken from p139 of bfsw:

mkt_y(s)..      a_y(s) * y(s) + vm(s)*(p_y(s)/p_fx)**0.465 + gse(s)  =e=

                sum(ss, a_y(ss) * ras(s,ss))

                + sum(g, a_c(g) * qref_z(s,g)) + gd(s) * a_gc

                + vx(s)*(p_fx/p_y(s))**10;

mkt_fx..        sum(s,  vm(s)*(p_y(s)/p_fx)**0.465 -

                        vx(s)*(p_fx/p_y(s))**10 )

*       capital flows:

                + (sum(h, sk(h)) * a_km)$efks =e= 0;


*       hold real value of transfers constant:

mkt_trn..       p_trn =e= sum((h,ccg), rcs(ccg,h) * p_c(ccg)) /
                          sum((h,ccg), rcs(ccg,h));


*       total income includes private valuation of public good:

totinc(h)..     i_h(h) * qref_i(h) =e= i_e(h) * (qref_i(h)-vpg(h))

                + (p_g(h) * vpg(h) * a_gc)$vpg(h);


income(h)..     i_e(h) * (qref_i(h)-vpg(h)) =e=

*       capital income:

                a_invest * (  p_k * sk(h)
                              - sum(g$(not ccg(g)), p_c(g) * saving(h)) )

*       labor income:

                + p_ls(h) * (qref_ls(h) + leisure(h))

*       income taxes (average with marginal adjustment):

                - t_iave(h) * (sl(h) + sk(h)) * p_trn * tau_k
                - t_i(h) * sk(h) * (p_k - p_trn)
                + t_i(h) * qref_ls(h) * p_trn

*       transfers:

                + p_trn * (trn(h) + incadj(h));


govinc..

        i_gov * qref_ginc =e=

*       income of exogenous households:

                sum(hfix, sl(hfix) * p_l + sk(hfix) * p_k

                        - sum(g, rcs(g,hfix) * p_c(g)) )

*       savings (exogenous)

                - sum(g$(not ccg(g)), p_c(g) * govsav)

*       capital revenue:

                + a_invest * p_k * gsk

*       government expenditures:

                + sum(s, p_y(s) * gse(s))

*       tax receipts:

                + sum(h,
                        t_iave(h) * (sl(h) + sk(h))  * p_trn * tau_k
                        + t_i(h) *
                        ( qref_ls(h) * (a_ls(h) * p_ls(h) - p_trn)  +
                          sk(h) * (p_k-p_trn) )
                  )

                + sum(s, a_va(s) * p_l * dl(s) * tau_l * t_l(s)
                        * (pref_l(s)/(1+tau_l*t_l(s)))**ekl(s)
                        * (p_va(s)/p_l)**ekl(s) )

                + sum(s, a_va(s) * p_k * dk(s) * tau_k * t_k(s)
                        * (pref_k(s)/(1+tau_k *t_k(s)))**ekl(s)
                        * (p_va(s)/p_k)**ekl(s))

                + sum(s, a_y(s) * p_y(s) * y(s) * t_y(s))

                + a_gc * p_l * gdl * t_gdl

        + sum(g, a_c(g) * p_c(g) * gce(g) * t_c(g));

model  gemtap /
        mkt_l.p_l,
        mkt_k.p_k,
        mkt_ls.p_ls,
        mkt_c.p_c,
        mkt_cc.p_cc,
        mkt_w.p_w,
        mkt_gc.p_gc,
        mkt_cp.p_cp,
        mkt_g.p_g,
        mkt_va.p_va,
        mkt_y.p_y,
        mkt_trn.p_trn,
        mkt_fx.p_fx,
        prf_gc.a_gc,
        prf_invest.a_invest,
        prf_y.a_y,
        prf_va.a_va,
        prf_w.a_w,
        prf_cc.a_cc
        prf_cp.a_cp,
        prf_c.a_c,
        prf_ls.a_ls,
        kmdef.a_km,
        totinc.i_h,
        income.i_e,
        govinc.i_gov /;

*       default calibration: uniform attribubtion with -0.5 elasticity:

eg(h) = 0.5;
vpg(h) = qref_gc * popshr(h);
cg(h) = sum(ccg, rcs(ccg,h)) + vpg(h);
qref_i(h) = cg(h) + leisure(h);

$ontext
scalar peps / 1.e-5 / ;
p_k.lo     = peps;
p_l.lo     = peps;
p_va.lo(s) = peps;
p_ls.lo(h) = peps;
p_c.lo(g)  = peps;
p_cc.lo(h) = peps;
p_cp.lo(h) = peps;
p_g.lo(h)  = peps;
p_w.lo(h)  = peps;
p_fx.lo    = peps;
p_y.lo(s)  = peps;
$offtext

*       install benchmark:

        a_cp.l(h) = 1;
        p_cp.l(h) = 1;
        a_gc.l = 1;
        a_invest.l = 1;
        a_y.l(s) = 1;
        a_va.l(s) = 1;
        a_w.l(h) = 1;
        a_cc.l(h) = 1;
        a_c.l(g) = 1;
        a_ls.l(h) = 1;
        p_l.l = 1;
        p_k.l = 1;
        p_gc.l = 1;
        p_g.l(h) = 1;
        p_trn.l = 1;
        p_fx.l = 1;
        p_ls.l(h) = 1;
        p_w.l(h) = 1;
        p_y.l(s) = 1;
        p_va.l(s) = 1;
        p_c.l(g) = 1;
        p_cc.l(h) = 1;
        i_gov.l = 1;
        i_e.l(h) = 1;
        i_h.l(h) = 1;

        a_km.l = 0;
        tau_l.l = 1;
        tau_k.l = 1;

*       fix indicator variables:

        tau_pl.fx = 0;
        tau_l.fx  = 1;
        tau_k.fx  = 1;

*       fix variables according to switches and benchmark values.
*       n.b. this causes associated equations to drop.

        a_invest.fx$static = 1;
        a_km.fx$(efks eq 0)   = 1;
        p_g.fx(h)$(vpg(h) eq 0) = 0;
        i_e.fx(h)$(not redist)  = 1;
        i_gov.fx$redist = 1;


        solve gemtap using mcp;


set     sc  scenarios  /bench   benchmark replication,
                        itcut   uniform (flat rate) income tax,
                        ktcut   uniform capital tax,
                        ltcut   uniform labor tax/;

parameter       summary(*,*,sc)         solution summary;

table  uniftax(sc,*)    indicators for uniform
                 k       l        i
bench            0       0        0
itcut            0       0        1
ktcut            1       0        0
ltcut            0       1        0;

loop(sc,

*       flat rate capital tax:

        if (uniftax(sc,"k"),
                t_k(s) = sum(ss, tk(ss)) / sum(ss, dk(ss));
        else
                t_k(s) = tk(s)/dk(s);
        );

*       flat rate labor tax:

        if (uniftax(sc,"l"),
                t_l(s) = sum(ss, tl(ss)) / sum(ss, dl(ss));
        else
                t_l(s) = tl(s) / dl(s);
        );

*       move to a flat rate income tax:

        if (uniftax(sc,"i"),
                t_i(h) = tiave;
                t_iave(h) = tiave;
        else
                t_i(h) = taubmk(h)/(1-taubmk(h));
                t_iave(h) = pit(h) / (sl(h) + sk(h));
        );


        solve gemtap using mcp;

*       report solution statistics:

        summary("status","_", sc) = gemtap.modelstat;
        summary("iters", "_", sc) = gemtap.iterusd;
        summary("cpu",   "_", sc) = gemtap.resusd;

*       public goods provision:

        summary("g","_",sc) = 100 * (a_gc.l - 1);

        summary("pk","_",sc) = 100 * (p_k.l/p_trn.l - 1);

        summary("pl","_",sc) = 100 * (p_l.l/p_trn.l - 1);

        summary("kmx","_",sc) = 100 * a_km.l;

*       report welare changes indices:

        summary("ev",h,sc) = 100 * (a_w.l(h) - 1);

*       report current consumption:

        summary("cc",h,sc) = 100 * (a_cc.l(h) - 1);

*       report private consumption:

        summary("cp",h,sc) = 100 * (a_cp.l(h) - 1);

);

display summary;