Market-to-Book (M/B) Ratio

The Market-to-Book ratio is commonly defined as the market value of a firm's equity divided by the book value of equity.

M/B Ratio Introduction and Background Information

Author: Denys Glushkov, WRDS (Published: Sep 2011)

The Market-to-Book ratio is commonly defined as the market value of a firm's equity divided by the book value of equity. The ratio is widely used by researchers both in accounting and finance as a proxy (albeit, a noisy one) for firm's growth opportunities, distress or potential mispricing, and was shown to exhibit a considerable variation both over time and across firms and industries at any given point in time.

Specifically, low values of M/B may indicate potential distress, whereas high values may signal high growth opportunities, and as a scaled-price variable, M/B is also a generic valuation indicator that tends to vary with any source of mispricing or rational expected returns.

This application provides a sample methodology for calculating firm and industry-level Market-to-Book using first only the Compustat Xpressfeed database. This approach uses Compustat Fundamentals and Security Pricing data and does not rely on CRSP. In the next step, the program also compares the availability of valid M/B ratio values calculated using Compustat only with a method where CRSP pricing data are used instead of Compustat's. The latter approach relies on using CRSP-Compustat Merged product and restricts the sample to only those companies for which CRSP market values are available. The program focuses on the US-incorporated companies reporting in USD, but can be easily modified to be used with Compustat Global database to calculate similar measures for international companies.

Top of Section

Market Value of Equity

Market value of equity as of the December end of any given fiscal year can be obtained as a product of the close market price at the calendar year end (PRCC_C variable in FUNDA) times the shares outstanding (CSHO). CSHO represents the net number of all common shares outstanding at year-end, excluding treasury shares and scrip. If this market value of equity is not available, we take the product of monthly close market price (PRCCM) and the quarterly shares outstanding (CSHOQ) as of December from the Compustat Security pricing table (SECM). Note that in case a company has more than one common stock issue, the program selects the price of the primary issue identified by Compustat as the issue with the highest average trading volume over a period of time (PRIMISS='P'). One potential concern here is that the price used represents the price of a single issue, whereas the shares oustanding reflect all common shares. According to WRDS analysis, it does not appear to affect the results as the aggregation of shares outstanding across various stock issues is done by Compustat primarily in cases when issues have similar price.

 

Top of Section

Book Value of Equity

Book value of equity reported any time within a given calendar year is calculated following Daniel and Titman (2006)1. If the fiscal year end falls between January and May, then the M/B ratio for, say, calendar year 2005 will be the market value of equity as of Dec 2004 scaled by the book equity reported for the fiscal year 2003 (fyear=2003). If the fiscal year end falls between June and December, then M/B ratios for calendar year 2005 will be the market value of equity of as Dec 2004 divided by book equity in fiscal year 2004 (fyear=2004). There is, however, evidence (see Asness and Frazzini, 2011), which suggests that using more recent price data in calculating Market-to-Book ratio better captures the magnitude of the value premium as opposed to using the traditional way to align Market and Book in calendar time. This modification can be easily incorporated into the existing program.

Top of Section

Compustat Pricing Data Versus CRSP-Compustat Merged database

Relying on Compustat pricing data produces greater number of companies with valid M/B ratios compared to using CRSP-Compustat Merged database due to the fact that Compustat pricing data does not restrict the sample to include only those firms that are listed on NYSE/AMEX/NASDAQ and ARCA (CRSP Universe). This is particularly evident starting from 1987, when Compustat considerably improved its coverage of shares outstanding. The table below demonstrates the percentage difference in availability of M/B ratios between two sources by 10 Fama-French Industries over the period of 1980-2010 (positive numbers indicate better coverage when Compustat used alone). When relying on Compustat only, the coverage, for example, for Telecom and Energy industries increases by around 14% and 16%, respectively. On average, the US-based sample expands by ~10% , whereas the overall correlation between CCM-based and Compustat-based M/B ratios is 0.97.

Comparison between the availability of valid M/B ratios calculated using Compustat only vs. CRSP-Compustat Merged
(% indicates the fraction of firms outside of CRSP universe in a given industry for which using Compustat Fundamentals&Pricing data yields a valid M/B ratio).

mb coverage comparison
M/B Coverage Comparison

Top of Section

Market to Book SAS Code

/* *************************************************************************** */
/* ********* W R D S   R E S E A R C H   A P P L I C A T I O N S ************* */
/* *************************************************************************** */
/*  Program      : market_to_book.sas                                          */
/*  Author       : Denys Glushkov, WRDS                                        */
/*  Date Created : Aug 2011                                                    */
/*  Last Modified: Aug 2011                                                    */
/*                                                                             */
/*  Description  : Calculate Raw and Industry Adjusted Market-to-Book Ratio    */
/*                 using separately Compustat only and CRSP-Compustat Merged   */
/*                 Compares the coverage, compute industry-level M/B ratios as */
/*                 well as industry-adjusted M/B at the company level          */
/* Output        : The output table INDADJMB contains firm-level raw M/B Ratios*/
/*                 using both approaches as well as their industry-adjusted    */
/*                 counterparts                                                */
/*                                                                             */
/*  Notes        : The program is based on a book-equity definition used by    */
/*                 Daniel and Titman in their "Market Reactions to Tangible    */
/*                 and Intangible Information" (Journal of Finance, 2006).     */
/*                 RA focuses on US companies, but can be extended to include  */
/*                 Canadian and international companies                        */
/*                                                                             */
/*                 Compustat Xpressfeed Total Liabilities(LT) no longer include*/              
/*                 the minority interest (MIB).Therefore, the new balance sheet*/
/*                 equation Total Assets (AT) = Total Liabilities (LT) +       */
/*                 Minority Interest (MIB) + Stockholders? Equity (SEQ)        */
/* *************************************************************************** */
   
/* Calculating Market-to-Book using Compustat only                             */
/* Advantage: captures many firms that are in Compustat, but not in CRSP       */
%let bdate=01jan1962; %let edate=31dec2010;
%let comp=comp; 
%let crsp=crsp;
/* Standard Compustat Filter*/
%let comp_filter=consol='C' and indfmt='INDL' and datafmt='STD' and popsrc='D';
%let ind=10; *number of FF industries for which to compute median M/B ratio;
   
/* Step 1. Create Book Equity (BE) measure                                     */
/* CSHO is a company level item and includes all classes of common stock       */
/* prcc_c is the price as of Dec of the FISCAL year. So, for instance, if a    */
/* company's fiscal year end falls b/w jan and may 1990, then prcc_c will be   */
/* the Dec end price as of Dec 1989. However, if the fiscal year end falls b/w */
/* june and dec 1990, then prcc_c will be the price as of Dec 1990             */
   
data comp_extract/view=comp_extract; set &comp..funda;
   where (at>0 or not missing(sale)) and &comp_filter and fic='USA';
   calyear=year(datadate);
   mcap_c=prcc_c*csho; /*Market Value of Equity at Dec end of fiscal year t  */
   /*to obtain shareholders equity, use stockholders equity, if not missing  */
   if not missing(SEQ) then SHE=SEQ;else
   /*if SEQ missing, use Total Common Equity plus Preferred Stock Par Value  */
   if nmiss(CEQ,PSTK)=0 then SHE=CEQ+PSTK;else
   /*if CEQ or PSTK is missing, use                                          */
   /*Total Assets-(Total Liabilities+Minority Interest), if all exist        */
   if nmiss(AT,LT)=0 then SHE=AT-sum(LT,MIB);
   else SHE=.;
  /*to obtain book equity,subtract from the shareholders' equity the preferred*/
  /*stock value,using redemption,liquididating or carrying value in that order*/
   /*if available*/
   PS = coalesce(PSTKRV,PSTKL,PSTK,0);
   BE0 = SHE-PS;
   /* Accounting data since calendar year 't-1'*/
   if year("&bdate"d) - 1<=calyear<=year("&edate"d) + 1;
   keep gvkey calyear fyr fyear BE0 indfmt consol mcap_c sich 
        datafmt popsrc datadate TXDITC prcc_f prcc_c curcd;
run;
   
/* Finally, if not missing, add balance sheet deferred taxes and */
/* subtract off the FASB106 adjustment                           */
proc sql; create table comp_be
as select 
  a.gvkey, a.calyear, a.fyr, a.datadate, a.fyear, a.mcap_c,
  a.prcc_f, a.prcc_c, sum(a.BE0,a.TXDITC,-b.PRBA) as BE,a.curcd, a.sich
from comp_extract a left join 
     &comp..aco_pnfnda (where=(&comp_filter)) b
on a.gvkey=b.gvkey and a.datadate=b.datadate;
quit;
   
/* Step 2: calculate the market value as of Dec end                 */
/* Curcdm is the currency in which the monthly prices are available */
/* Primiss='P' is the primary issue with the highest average trading*/
/* volume over a period of time                                     */
data mvalue/view=mvalue; set &comp..secm;
  where month(datadate)=12 and primiss='P' and fic='USA'
  and "&bdate"d<=datadate<="&edate"d;
  mcap_dec=prccm*cshoq;
  rename prccm=prc_dec;
  keep gvkey datadate prccm curcdm mcap_dec;
run;
   
/* Step 3a. Create Book to Market (BM) ratios using Compustat only   */
/* This step is needed, because sometimes PRCC_C or CSHO is missing  */
/* in Compustat Fundamentals Annual dataset, so bring December market*/
/* value calculated from Compustat Security file                     */
/* BE- book equity reported in fiscal year t                         */
/* MCAP - market equity as of Dec of fiscal year t if available      */
/* Coalesce function returns the first non-missing value for the M/B */
/* the order of the listed arguments                                 */
/* MB_COMP contains the M/B ratios for the entire Compustat Universe */
proc sql; create table mb_comp
as select a.gvkey, a.datadate format date9., a.calyear, a.fyear, 
          a.prcc_f, a.prcc_c,b.prc_dec, a.curcd, a.sich,
          a.be, a.mcap_c, b.mcap_dec, mdy(12,31,a.fyear) as fyear_end, 
          coalesce(mcap_c/((be>0)*be),mcap_dec/((be>0)*be)) as mb_comp
from comp_be a left join mvalue b
on a.gvkey=b.gvkey and a.fyear=year(b.datadate) and a.curcd=b.curcdm
order by a.gvkey, a.datadate;
quit;
   
/* Step 3b. Alternatively, one can use Market value from CRSP as of  */
/* Dec end of fiscal year. Note that this will restrict the sample   */
/* to CRSP stocks only                                               */
/* Select Compustat's SICH as primary SIC code, if not available     */
/* then use CRSP's historical SICCD                                  */
proc sql; create table mb_comp_crsp
  as select a.*, b.lpermno as permno, b.lpermco as permco, 
          abs(c.prc*c.shrout)/(1000*(a.be>0)*a.be) as mb_crsp, 
          coalesce(a.sich,d.siccd) as sic
   from mb_comp a left join &crsp..ccmxpf_linktable b
   on a.gvkey=b.gvkey and b.linkdt<=a.datadate and b.usedflag=1
   and linkprim in ('P','C') 
   and (a.datadate<=b.linkenddt or missing(b.linkenddt)) 
   
  /* market value from CRSP as the Dec end of fiscal year end*/
  left join &crsp..msf (keep=permno date prc shrout) c
  on b.lpermno=c.permno and put(a.fyear_end,yymmn6.)=put(c.date,yymmn6.)
  /*Merge in historical SIC code from CRSP*/
  left join (select distinct permno, siccd, min(namedt) as mindate, 
          max(nameenddt) as maxdate
          from &crsp..stocknames group by permno, siccd) d
  on b.lpermno=d.permno and d.mindate<=a.fyear_end<=d.maxdate
  order by a.gvkey, a.datadate, sic;
quit;
 
/* Step 4. Invoke FF industry classification                  */
/* MB_COMP_CRSP contains M/B ratios based on "Compustat only" */
/* and CRSP-Compustat Merged database                         */
data mb_comp_crsp; set mb_comp_crsp;
 by gvkey datadate;
 if last.datadate; /*selects the record with non-zero SIC code*/
  %ffi&ind(sic);
run;
   
/*trimming extreme values of Market-To-Book within industries*/
proc sort data=mb_comp_crsp;
  by calyear ffi&ind._desc; 
run;
proc rank data=mb_comp_crsp out=mb_comp_crsp groups=100;
  by calyear ffi&ind._desc; var mb_comp mb_crsp;
  ranks rmb_comp rmb_crsp;
run; 
data mb_comp_crsp; set mb_comp_crsp;
  if rmb_comp=99 then mb_comp=.;
  if rmb_crsp=99 then mb_crsp=.;
run;
   
/* Step 6. Number of distinct companies with non-missing M/B
/* based on Compustat only and based on Crsp-Compustat products*/
proc sql; 
  create table mbcomp
  as select distinct calyear,ffi&ind._desc, 
            count(distinct gvkey) as ngvkeys
  from mb_comp_crsp where not missing(mb_comp)  and curcd='USD'
  group by calyear, ffi&ind._desc;
    
  create table mbcrsp
  as select distinct calyear,ffi&ind._desc, 
            count(distinct permco) as npermnos
  from mb_comp_crsp where not missing(mb_crsp)  and curcd='USD'
  group by calyear, ffi&ind._desc;
quit;
data comparembcov; 
  merge mbcomp mbcrsp;
    by calyear ffi&ind._desc;
    diff=(ngvkeys-npermnos)/npermnos;
    format diff percent7.4;
    if 1980<=calyear<=2010;
run;
proc transpose data=comparembcov out=comparembcov 
 (drop=_name_ label='Comparing Market-to-Book coverage between two methods');
  by calyear; id ffi&ind._desc;
  var diff;
run;
   
/*Step 7.  M/B ratios for different FF industries over time*/
/*Step 8. Industry-adjusted M/B ratios at the firm-year level*/
proc means data=mb_comp_crsp noprint;
  class calyear ffi&ind._desc;
  var mb_comp mb_crsp; where not missing(ffi&ind);
  output out=medians median=/autoname;
run;
proc sort data=medians; by calyear ffi&ind._desc;run;
proc transpose data=medians out=temp
  (label="Median Market-to-Book ratios for &ind  FF industries");
  by calyear; id ffi&ind._desc;
  where 1970<=calyear<=2010; 
  var mb_comp_median;
run;
options orientation=landscape device=pdf; 
symbol1 interpol =join ci =green co =green w = 3 ; 
symbol2 interpol =join ci =blue co =blue w=3; 
symbol3 interpol =join ci =red co =red w=3; 
proc gplot data =temp;
  Title 'Median M/B ratios of sample industries' ;  
  plot hitec*calyear= 1 hlth*calyear= 2 manuf*calyear=3/ overlay legend ; 
run; quit; 
   
/* Take out the industry component                            */
/* INDADJMB contains the firm-level raw and industry-adjusted */
/* Market-to-Book ratios calculated using Compustat Only      */
/* as well as CRSP-Compustat Merged Product                   */
data indadjmb; merge mb_comp_crsp medians;
  by calyear ffi&ind._desc;
  mb_comp_indadj=mb_comp-mb_comp_median;
  mb_crsp_indadj=mb_crsp-mb_crsp_median;
  if missing(ffi&ind._desc) then do;
  mb_comp_indadj=.;mb_crsp_indadj=.;end;
  keep gvkey datadate permco permno fyear calyear mb_comp mb_crsp; 
  keep mb_comp_indadj mb_crsp_indadj ffi&ind._desc sic;
  label calyear='Calendar year of the fiscal period end'
      mb_comp='M/B ratio (Compustat Only)'
      mb_crsp='M/B ratio (CRSP-Compustat Merged)'
      mb_comp_indadj='Industry-adjusted M/B ratio (Compustat Only)'
      mb_crsp_indadj='Industry-adjusted M/B ratio (CRSP-Compustat Merged')
      sic='Historical SIC code';
      if not missing(gvkey);
run;
   
/* Clean the house*/
proc sql; 
drop table comparembcov, comp_be, mbcomp, mbcrsp,mb_comp,
           mb_comp_crsp, medians, temp
      view comp_extract, mvalue;
quit; 
 
/* ********************************************************************************* */
/* *************  Material Copyright Wharton Research Data Services  *************** */
/* ****************************** All Rights Reserved ****************************** */
/* ********************************************************************************* */
mb industry graph resized

Final Output

final output resized

Top of Section

References

1  Daniel, Kent and Titman, Sheridan (2006), “Market Reactions to Tangible and Intangible Information”, Vol. 61, Issue 4, pp. 1605-1643.

Top of Section

Top