A Translog Cost Function and Derived Demands

/*--------------------------------------------------------------

                    SAS Sample Library

        Name: modex21.sas
 Description: Example program from SAS/ETS User's Guide,
              The MODEL Procedure
       Title: A Translog Cost Function and Derived Demands
     Product: SAS/ETS Software
        Keys: derived demand, systems of equations
        PROC: MODEL
       Notes:

--------------------------------------------------------------*/

data klems;
   input year y k l e m s py pk pl pe pm ps vy vk vl ve vm vs;
datalines;
1949    26.5    67.1   179.3    50.1    39.2    26.4    43.8    23.7     9.4    17.1    21.8    13.6   6.978   1.047   3.271   0.198   2.279   0.183
1950    29.6      70   198.6    53.5    45.8    34.9      47    21.7      10    17.6    24.8    13.9   8.336   0.996   3.847   0.217    3.03   0.247
1951      30      72     192    54.5    48.7    36.5    52.9    30.3    10.1    16.6    29.6    14.7   9.506   1.432   3.743   0.208    3.85   0.272
1952    30.7    71.6   181.7    56.8    49.3    34.1    46.5    21.3    10.6    16.9    25.3    15.7   8.552   1.004   3.729   0.221   3.326   0.272
1953    31.5    69.3   180.4      56    52.7    35.2      45    18.1    11.1    18.1    23.3    16.6   8.495   0.824   3.853   0.234   3.287   0.297
1954      29    68.5   159.7    50.8    45.3      32      43     5.9    12.3    17.1    24.2      17    7.48   0.264   3.808     0.2    2.93   0.278
1955    32.7    68.1   167.9    56.4    52.7      37    43.2    19.9    11.3    16.7    23.8    17.5   8.461   0.889    3.67   0.217   3.355   0.329
1956    32.6    68.3   163.4    56.6    51.9    36.9      43    20.2    11.8    17.2    23.3    18.2   8.421   0.908   3.716   0.224   3.232   0.342
1957    31.8    67.1   152.5    53.2    49.1      37    42.8    18.6    12.3    17.8      24    18.7   8.165    0.82   3.633   0.218   3.142   0.353
1958    31.3    64.6   141.8      53    47.2    35.8    41.5    19.7    12.7    17.1      23    19.7    7.79   0.837    3.49   0.208   2.898   0.358
1959    34.6    63.4   152.1    55.8    53.4    34.7    42.4    25.1    13.2    16.8    23.2    20.1   8.794   1.047   3.875   0.216   3.301   0.355
1960    33.6    62.7   145.6    55.4    51.7    33.6      43    26.5    13.8      17    22.6    20.9   8.675   1.093   3.894   0.216   3.113   0.358
1961      35    62.1   141.9    55.5    54.2    32.5    41.8    26.2    13.9    16.9    22.9    21.5   8.774    1.07   3.823   0.216    3.31   0.355
1962    37.6    62.1   145.6    57.7    59.2    33.6    42.4    29.1    14.5    16.9    23.4    22.2   9.566   1.189   4.075   0.224     3.7   0.379
1963      39    62.5   143.4    60.1    62.8    34.1    42.3    30.6    14.9    16.4    23.2    22.8    9.89   1.256   4.115   0.228   3.896   0.395
1964    42.1    62.7   145.6    66.3    66.6    37.3    42.6    37.9    15.5    15.8    23.4    23.4   10.76   1.561   4.359   0.242   4.154   0.443
1965    45.4    64.5     154    69.2    67.9    38.1    42.8    43.8    16.1    15.6    23.7    24.1  11.656   1.858    4.78   0.248   4.302   0.467
1966      49    68.7   160.8      74    68.2    41.4    42.8    43.3    16.9    15.4    25.2    24.9  12.572   1.953   5.241   0.263    4.59   0.525
1967      50    72.3   156.5    81.4    67.9    47.1    42.3    37.7    17.9    15.5    25.3    25.6   12.68    1.79   5.405   0.292   4.581   0.613
1968      54    74.8   162.8    86.1    76.9      51    43.8    40.3    19.2    15.4    25.2    26.5  14.189   1.982   6.042   0.305   5.172   0.688
1969    56.2    77.3   161.9    87.8    77.9    54.4    44.1    40.8    20.5    15.8    25.4    27.5  14.867   2.071   6.421    0.32   5.293   0.762
1970      57    79.2   153.8    89.9    74.9    51.8    43.3    41.2    21.5    16.6    25.8      29    14.8   2.146   6.384   0.343   5.164   0.764
1971    60.2    81.5   153.1    94.6    81.3    57.2    43.2    37.6    22.8    18.4    25.7    30.4  15.591   2.011   6.728   0.401   5.566   0.885
1972    66.5    84.1   160.9   100.9    94.6    66.7    45.6    39.6    24.6      20    26.9    32.1  18.185    2.19   7.645   0.465   6.794   1.091
1973    65.7    87.4     162   102.1    90.5      65    50.5    36.2    27.4    22.8    31.3    33.7  19.896   2.081   8.588   0.537   7.574   1.115
1974    61.9    89.5   148.9    93.3    92.2      64    58.3    39.9    30.2    32.4    35.6    36.2  21.661   2.344   8.676   0.697   8.763    1.18
1975    60.6    89.7   133.4    93.2      84    65.8    56.3      36    31.5    40.2      36    39.1  20.468   2.124   8.109   0.863   8.062    1.31
1976    67.2    89.6   144.1    99.6    95.8    68.2    60.2    40.6    34.5    44.1    38.1    42.6  24.242   2.391    9.61   1.011   9.751   1.478
1977    73.8    90.3   143.8    98.7   100.6    73.4    61.6    51.4    37.4    50.2    40.8      46  27.261   3.052  10.382   1.143  10.968   1.716
1978      75    90.7   142.6    96.7    96.8    67.9    63.8    53.9    40.6    54.9    43.9    49.5  28.682   3.212   11.18   1.224  11.356    1.71
1979    76.4      90   139.6    93.4    94.1    67.4    67.3    53.6    44.1    62.8    50.1    53.1  30.828   3.169  11.894   1.352  12.591   1.821
1980    74.2    89.5   132.9      88    88.1    64.5    73.4    48.9    48.7    74.6    58.9    57.8  32.638   2.875    12.5   1.514  13.852   1.898
1981    73.1    89.5   127.7    85.4    86.6    58.1    80.4    52.5    53.1    87.1      67      63  35.246   3.089  13.102   1.715  15.478   1.862
1982    69.3    88.9   110.3    75.6    77.9    49.7    80.9    53.7    58.3   100.2    70.2    67.1  33.613   3.133  12.426   1.746  14.611   1.698
1983    78.3    88.7   117.4    81.7    89.5    56.7    82.3    68.1    61.2   105.6      70      71   38.62   3.969  13.881   1.987  16.736   2.047
1984    79.2    90.6   116.8    82.6    90.3    54.8    84.6    65.6    63.8   110.3    73.4      75   40.19   3.905  14.398   2.101  17.697   2.089
1985      77    90.8   109.9    79.5      87    53.2    84.3      64    65.9   107.8    73.4    78.2  38.931   3.818  13.983   1.974   17.04   2.117
1986    80.4    90.9   112.8      83    88.5    55.6      85    78.1    67.8    99.7    73.7    78.1  40.975   4.668  14.777   1.906  17.415   2.209
1987    86.5    91.1   119.1    91.3    95.1    61.2    86.8    77.4    71.1    97.9    76.6    81.6  45.052   4.633   16.35   2.059  19.468   2.542
1988    86.4    91.2   117.4    91.3      88    68.5    90.4      76    74.2    96.4    87.3    83.2   46.83   4.553  16.831   2.029  20.518   2.899
1989    88.3    91.5   115.5      92    90.7    77.9    92.3    70.5    78.6    99.4    89.7    83.2  48.895   4.238  17.526   2.106  21.725     3.3
1990    86.2      92   109.3    88.5    88.2    79.2    94.3    85.5    80.7    97.4    89.7    84.9  48.726   5.172  17.023   1.987  21.121   3.423
1991    85.8    92.1   107.6    90.5    86.6    84.2      95    89.3    82.4    95.4    89.5    85.6  48.884   5.406  17.134   1.989   20.69   3.664
1992    92.9    92.6   108.5    94.5    91.9    95.2    95.8   121.6    86.5      96    87.8    87.1  53.383   7.402  18.131   2.091  21.541   4.219
1993    97.6    93.9   109.8    98.8    97.4    98.3    95.6   110.6    89.8    97.9    89.9    90.2  55.964   6.819  19.041   2.229  23.364   4.512
1994   101.5    96.5   111.4   104.7   101.9   102.3    95.8    97.8    93.4    98.5    91.2    93.5  58.342   6.205  20.088   2.375  24.808   4.866
1995   100.5    98.8   105.7   106.2    99.7   102.7    98.8    88.8    96.5    94.4   100.7    96.3  59.593   5.765  19.701    2.31  26.782   5.035
1996     100     100     100     100     100     100     100     100     100     100     100     100  59.979   6.572  19.316   2.305  26.697   5.089
1997   100.7   101.8    99.7    95.9      99    97.2   100.4    98.8   102.4   101.8   101.7   104.2  60.601   6.605  19.713   2.248  26.879   5.155
1998    99.6   105.6    95.7    94.1   101.5    92.2     100    94.3   106.8    95.5    97.3   107.6  59.763   6.548  19.739    2.07  26.358   5.049
1999    96.9   106.9    88.5    91.7    93.7    85.2    97.4    86.3   113.1    97.2    97.3   110.6  56.602   6.061  19.337   2.054  24.354   4.796
2000    95.2   106.2    85.6    90.3    87.9    80.3    97.3      68   116.3   112.1   104.9   114.5  55.599   4.748  19.231   2.332  24.611   4.676
2001    85.3   103.5    74.5    81.1    76.3    68.3      97    71.5   118.5   115.4   105.5   117.3  49.627   4.865  17.042   2.156   21.49   4.074
;

data klems;
set klems;
   array values {5} vk vl ve vm vs;
   array costshares {5} sk sl se sm ss;
   cost = sum(vk,vl,ve,vm,vs);
   do i = 1 to 5;
      costshares{i} = values{i}/cost;
   end;
run;

data klems;
set klems;
label y="Output"
      k="Capital"
      l="Labor"
      e="Energy"
      m="Materials"
      s="Services"
      pk="Capital Price"
      pl="Labor Price"
      pe="Energy Price"
      pm="Materials Price"
      ps="Services Price"
      vk="Capital Value"
      vl="Labor Value"
      ve="Energy Value"
      vm="Materials Value"
      vs="Services Value"
      sk="Capital Share"
      sl="Labor Share"
      se="Energy Share"
      sm="Materials Share"
      ss="Services Share";
run;

proc sgplot data = klems;
   series x = year y = k / markers markerattrs =(symbol=circle);
   series x = year y = l / markers markerattrs =(symbol=square);
   series x = year y = e / markers markerattrs =(symbol=star);
   series x = year y = m / markers markerattrs =(symbol=diamond);
   series x = year y = s / markers markerattrs =(symbol=hash);
   title 'Factor Quantities';
   yaxis label = 'Quantity';
run;

proc sgplot data = klems;
   series x = year y = pk / markers markerattrs =(symbol=circle);
   series x = year y = pl / markers markerattrs =(symbol=square);
   series x = year y = pe / markers markerattrs =(symbol=star);
   series x = year y = pm / markers markerattrs =(symbol=diamond);
   series x = year y = ps / markers markerattrs =(symbol=hash);
   title 'Factor Prices';
   yaxis label = 'Price';
run;

proc sgplot data = klems;
   series x = year y = sk / markers markerattrs =(symbol=circle);
   series x = year y = sl / markers markerattrs =(symbol=square);
   series x = year y = se / markers markerattrs =(symbol=star);
   series x = year y = sm / markers markerattrs =(symbol=diamond);
   series x = year y = ss / markers markerattrs =(symbol=hash);
   title 'Factor Cost Shares';
   yaxis label = 'Cost Share';
run;

   goptions reset=title;

proc model data = klems;
   parameters a_k gkk gkl gke gkm gks gky
              a_l glk gll gle glm gls gly
          a_e gek gel gee gem ges gey
          a_m gmk gml gme gmm gms gmy;
   endogenous sk sl se sm;
   exogenous pk pl pe pm ps y;

   /*System of Derived Demand Equations*/
   sk = a_k + gkk*log(pk) + gkl*log(pl) + gke*log(pe) + gkm*log(pm) + gks*log(ps)
            + gky*log(y);
   sl = a_l + glk*log(pk) + gll*log(pl) + gle*log(pe) + glm*log(pm) + gls*log(ps)
            + gly*log(y);
   se = a_e + gek*log(pk) + gel*log(pl) + gee*log(pe) + gem*log(pm) + ges*log(ps)
            + gey*log(y);
   sm = a_m + gmk*log(pk) + gml*log(pl) + gme*log(pe) + gmm*log(pm) + gms*log(ps)
            + gmy*log(y);

   fit sk sl se sm / itsur;

   label a_k = "SK Intercept"
         a_l = "SL Intercept"
         a_e = "SE Intercept"
         a_m = "SM Intercept"
         gkk = "SK K Price"
         gkl = "SK L Price"
         gke = "SK E Price"
         gkm = "SK M Price"
         gks = "SK S Price"
         gky = "SK Output"
         glk = "SL K Price"
         gll = "SL L Price"
         gle = "SL E Price"
         glm = "SL M Price"
         gls = "SL S Price"
         gly = "SL Output"
         gek = "SE K Price"
         gel = "SE L Price"
         gee = "SE E Price"
         gem = "SE M Price"
         ges = "SE S Price"
         gey = "SE Output"
         gmk = "SM K Price"
         gml = "SM L Price"
         gme = "SM E Price"
         gmm = "SM M Price"
         gms = "SM S Price"
         gmy = "SM Output";

   test "Homogeneity"
      gkk+gkl+gke+gkm+gks=0,
      glk+gll+gle+glm+gls=0,
      gek+gel+gee+gem+ges=0,
      gmk+gml+gme+gmm+gms=0, / lr;

   test "Symmetry"
      gkl=glk,
      gke=gek,
      gkm=gmk,
      glm=gml,
      gle=gel,
      gem=gme, / lr;

   test "Joint Homogeneity and Symmetry"
      gkk+gkl+gke+gkm+gks=0,
      glk+gll+gle+glm+gls=0,
      gek+gel+gee+gem+ges=0,
      gmk+gml+gme+gmm+gms=0,
      gkl=glk,
      gke=gek,
      gkm=gmk,
      glm=gml,
      gle=gel,
      gem=gme, / lr;
run;

proc model data = klems;
   parameters a_k gkk gkl gke gkm gks gky
              a_l glk gll gle glm gls gly
              a_e gek gel gee gem ges gey
              a_m gmk gml gme gmm gms gmy;
   endogenous sk sl se sm;
   exogenous pk pl pe pm ps y;
   restrict /*Homogeneity Restrictions*/
            gks+gkk+gkl+gke+gkm=0,
            gls+gkl+gll+gle+glm=0,
            ges+gke+gle+gee+gem=0,
            gms+gkm+glm+gem+gmm=0,
            /*Symmetry Restrictions*/
            gkl=glk, gke=gek, gkm=gmk, gle=gel, glm=gml, gem=gme;

   /*System of Derived Demand Equations*/
   sk = a_k + gkk*log(pk) + gkl*log(pl) + gke*log(pe) + gkm*log(pm) + gks*log(ps)
            + gky*log(y);
   sl = a_l + glk*log(pk) + gll*log(pl) + gle*log(pe) + glm*log(pm) + gls*log(ps)
            + gly*log(y);
   se = a_e + gek*log(pk) + gel*log(pl) + gee*log(pe) + gem*log(pm) + ges*log(ps)
            + gey*log(y);
   sm = a_m + gmk*log(pk) + gml*log(pl) + gme*log(pe) + gmm*log(pm) + gms*log(ps)
            + gmy*log(y);

   fit sk sl se sm / itsur chow = (24) outest=est;

   label a_k = "SK Intercept"
         a_l = "SL Intercept"
         a_e = "SE Intercept"
         a_m = "SM Intercept"
         gkk = "SK K Price"
         gkl = "SK L Price"
         gke = "SK E Price"
         gkm = "SK M Price"
         gks = "SK S Price"
         gky = "SK Output"
         glk = "SL K Price"
         gll = "SL L Price"
         gle = "SL E Price"
         glm = "SL M Price"
         gls = "SL S Price"
         gly = "SL Output"
         gek = "SE K Price"
         gel = "SE L Price"
         gee = "SE E Price"
         gem = "SE M Price"
         ges = "SE S Price"
         gey = "SE Output"
         gmk = "SM K Price"
         gml = "SM L Price"
         gme = "SM E Price"
         gmm = "SM M Price"
         gms = "SM S Price"
         gmy = "SM Output";

   test "Constant Returns to Scale"
      gky=0,
      gly=0,
      gey=0,
      gmy=0, / lr;
run;


proc means data = klems noprint mean;
   variables sk sl se sm ss;
   output out = meanshares mean = sk sl se sm ss;
run;

proc iml;
   /*Read in parameter estimates*/
   use est;
   read all var {gkk gkl gke gkm gks};
   read all var {gll gle glm gls};
   read all var {gee gem ges};
   read all var {gmm gms};
   close est;

   /*Calculate S parameter based on homogeneity constraint*/
   gss=0-gks-gls-ges-gms;

   /*Read in mean cost shares and construct vector*/
   use meanshares;
   read all var {sk sl se sm ss};
   close meanshares;

   w = sk//sl//se//sm//ss;

  print w;

  /*Construct matrix of parameter estimates*/
  gij = (gkk||gkl||gke||gkm||gks)//
        (gkl||gll||gle||glm||gls)//
        (gke||gle||gee||gem||ges)//
        (gkm||glm||gem||gmm||gms)//
        (gks||gls||ges||gms||gss);

   print gij;

   nk=ncol(gij);
   mi = -1#I(nk);    /*Initialize negative identity matrix*/
   eos = j(nk,nk,0); /*Initialize Marshallian EOS Matrix*/
   mos = j(nk,nk,0); /*Initialize Morishima EOS Matrix*/
   ep  = j(nk,nk,0); /*Initialize Price EOD Matrix*/

   /*Calculate Marshallian EOS and Price EOD Matrices*/
   i=1;
   do i=1 to nk;
   j=1;
   do j=1 to nk;
       eos[i,j] = (gij[i,j]+w[i]#w[j]+mi[i,j]#w[i])/(w[i]#w[j]);
       ep[i,j] = w[j]#eos[i,j];
   end;
   end;

   /*Calculate Morishima EOS Matrix*/
   i=1;
   do i=1 to nk;
   j=1;
   do j=1 to nk;
      mos[i,j] = ep[i,j]-ep[j,j];
   end;
   end;

   /*Print Elasticity Matrices*/
   factors = {"Capital" "Labor" "Energy" "Materials" "Services"};
   print
      ep[label="Price Elasticities of Demand" rowname=factors colname=factors
         format=d7.3],
      eos[label="Hicks-Allen Elasticities of Substitution" rowname=factors colname=factors
          format=d7.3],
      mos[label="Morishima Elasticities of Substitution" rowname=factors colname=factors
          format=d7.3];

run;