Stata project folder shortcut

Stata project folder shortcut

On any given day, I will usually be working on only one of several projects in Stata. These projects will often take several years. It should be easy to switch to the folders for these files. For example, to switch to my project on Stamp Duty the command go stamp would be handy.

I wrote a small bit of code to make that happen. You can download go.ado here. Download it, edit it with your own shortcuts, save it to your preferred ado folder, and make it easier to jump to different projects.

Different fonts for Matlab plots exported to PDF

Different fonts for Matlab plots exported to PDF

When exporting graphics from Stata or Matlab, it’s better to select a lossless/vectorized format instead of a rasterized pic. This ensures your image is high-quality and not grainy/pixelated.

Grainy exports

Poor quality, grainy image

Better quality export


Unfortunately, Matlab does not allow lossless PDF exports of pictures with non-standard fonts. (I’m not the first person to notice this problem. I failed to implement Juan Guerrero’s suggested solution.) Matlab will export the font in PNG no problem, but your image will appear grainy. If you try to export as a PDF, your fonts will be reverted to something weird. Obviously this doesn’t matter if you’re happy with the default fonts, but this bug does limit your ability to customize the output.

Thankfully, with the help of the nice people at Inkscape ( there is a workaround.

  1. Install Inkscape
  2. Generate your figure in Matlab
  3. In “Export Setup”, change the Font to anything saved on your system. Export as Scalable Vector Graphic (SVG) file
  4. Open the SVG in Inkscape
  5. Save it a lossless PDF as, say, figure7.pdf
  6. Include in your LaTeX document with \includegraphics{figure7}


Exams/problem sets with individual student names in LaTeX

Exams/problem sets with individual student names in LaTeX

Usually my exams have a large blank space for students to write their names in.

If, instead, I wanted to generate individualised exams with their names printed in that space, this code will do that for you. It uses the pgffor package to loop over the list of names you provide.

\def\classlist{Enda Hargaden,
George Akerlof,
Joe Stiglitz,
Don Bruce}
\foreach \studentname in \classlist{

Econ 381 Problem Set: \studentname's Copy

\item What is OLS?
\item What's the square root of 25?
\item More questions yadda yadda


Colouring table cells to indicate statistical significance

Colouring table cells to indicate statistical significance

Over on Twitter, Gray Kimbrough suggests using colour to indicate statistical significance/p-values instead of the traditional stars. This was part of a broader argument for Powerpoint over Beamer.

I much prefer Beamer to Powerpoint, and I knew it would be very easy to implement coloured cells in regression tables directly from Stata into LaTeX/beamer.

Significant colours

I use the wonderful estout to produce regression tables (and have modified it in the past) so here’s how to produce the table above with one extra line in your do-file.

sysuse auto

** This line generates a local named siggreen, defining significance with green opacity
local siggreen "star(\cellcolor{green!10} 0.10 \cellcolor{green!35} 0.05 \cellcolor{green!95} 0.01) nonotes"

** Run a few sample regressions
qui eststo: reg price foreign mpg weight
qui eststo: reg price foreign mpg weight turn
qui eststo: reg price foreign mpg weight turn gear_ratio displacement headroom

** Using esttab, produce the output with Enda's preferred options
esttab using myoutput.tex, replace booktabs nodepvars nomtitle se label ar2 `siggreen' title("Green Regression")

Then, to include that table into your TeX document:


If you want to include this tables in your Beamer slides, see this post.

Making Stata tables smaller (fit on slide) in beamer

Making Stata tables smaller (fit on slide) in beamer

I’ve discussed in the past how to indicate statistical significance with colour rather than stars. Another concern people have about using Beamer is that it can be hard to squish results into one slide. In my opinion, that is solved very easily with my tinytable command.


\newcommand{\tinytable}[1]{\textcolor{black}{\tiny \input{#1} }}


\frametitle{Still fascinating, but smaller}

This generates the following:

Fitting table to one slide

Fix for LaTeX references in economics bibliography styles

Fix for LaTeX references in economics bibliography styles

The economic package includes old commands that are now deprecated within LaTeX. This caused me a problem using the AER bibliography style (aer.bst), and likely causes problems with other BibTeX styles too. My particular problem was with scrartcl refusing to recognise the \bf command rather than the newer \textbf version.

Very specifically, the problem was “Class scrartcl Error: undefined old font command `\bf’.”

The fix for this is simple. Just include the following two lines in the preamble of your document.


You could alternatively open up your *.bst file and manually change the code, but the two lines above should fix it.

The reasons why headlines about corporate taxes are misleading

The reasons why headlines about corporate taxes are misleading

There has been much hand-wringing about Apple’s low effective tax rates, particularly since the European Commission’s declaration that they know more about the correct implementation of Ireland’s tax laws than Ireland’s own tax authorities. This has focused the public eye on the taxation of multinational corporations in Ireland and elsewhere. There is a problem with the taxation of MNCs, but I argue it is a problem largely attributable to actions in Washington DC, not anywhere else.

Let me explain. The US headline corporate tax rate is 35%. Thus if an American company earns $100 in the United States, the IRS expects that company to pay a total of $35 in taxes. Further, the US corporate tax base is structured on a worldwide income system. So if Starbucks earns $100 in Denmark, the IRS still expects the company to pay a total of $35 in taxes. For example, if Starbucks pays $20 in taxes to Denmark, the residual $15 is due in taxes to the US. (See here for an example of this offsetting rule.)

Continuing with the Denmark example, the amount due to the Danish government must by law account for the fact that a lot of Starbucks’ profitability comes from its intellectual property: its recipes, branding, and so on. That intellectual property is American, not Danish. For the sake of argument, let’s say that 75% of Starbucks’ profitability in Denmark is based on American intellectual property, and the rest is due to shrewd decisions by managers in Copenhagen. (Change these numbers as you see fit, the idea still holds.) Thus although Starbucks will technically book $100 of profit in Denmark, 75% of that is “American profit”, with only 25% attributable to decisions by the Danish operation. Denmark’s corporate tax rate is 22%, so Starbucks will owe 22% of $25 = $5.50 to Denmark. But recall that they booked $100 of gross profits in Denmark so, on the face of it, The Guardian and other such outlets will wail that Starbucks gets away with a tax rate of only 5.5%. How unfair, how unjust, etc.

Of course what The Guardian and The Huffington Post will typically fail to mention is that the IRS expects the residual $29.50 to be paid in the US ($35 less the $5.50 paid in Denmark = $29.50). That is the main reason why newspaper headlines mislead the public. But a further, more substantive issue that is rarely discussed in the media is where the real problem comes in: the United States’ unusual treatment of (unrepatriated) foreign profits.

What is this unusual treatment? Starbucks do not have to pay that tax liability until they redistribute the profits back to the shareholders by way of a dividend payment. So it is perfectly legal, as per the Tax Reform Act of 1986, for Starbucks’ profits to sit in a bank earning interest rather than paying up to the IRS.

Regular US taxpayers have to pay their previous year’s taxes by April 15th. Corporations can choose when they pay up, and they are welcome under US tax law to wait many years to do so. They may even hold out in the hope that Congress drops the tax rate — for example Donald Trump has proposed lowering the corporate tax rate from 35% to 15% — and end up paying much less than previously thought. Apple is sitting on about $150bn dollars of unrepatriated profits. They’re holding out (completely sensibly, from their perspective) for a law change so when it comes to paying up, they do so at a lower rate. This holding out again makes it appear that companies like Apple’s tax liabilities are lower than they actually are. How unfair, how unjust, etc. Yet I don’t think I have ever seen a newspaper discuss the intricacies of why an existing US law — the Tax Reform Act of 1986 — encourages this perverse behaviour, nor do I predict a flurry of articles heaping praise on Apple or Starbucks when their effective tax rate shoots through the roof when they eventually repatriate back-dated income.

You can also perhaps see why Apple’s low tax payments in Ireland are an issue for Washington, not Dublin.

Finally, all this is relatively moot if we fail to consider the incidence of corporate taxes. Most members of the public understand that taxes on oil are passed onto the consumer, at least in part. However, the same logic has yet to penetrate the public consciousness on corporate taxes. If you tax a corporation, the workers and customers of that corporation cannot magically wave a moral wand and avoid the economic repercussions of the tax. Some of that tax will inevitably be passed onto consumers, some onto workers, some onto shareholders, etc.

Exactly how the tax is split between groups is a tricky thing to statistically disentangle. However, recent research suggests that about 30% of corporate taxes in the US are passed onto the corporation’s employees; and excellent work by German economists suggests that over there perhaps as much as 80% is passed onto workers. The clamour for increased taxation of multinationals almost never considers this reality. I have never seen it mentioned in newspapers that if large multinationals are successfully dodging taxes, it is almost certain that their consumers and workers also benefit from this.

To be clear: I like The Guardian; the Tax Reform Act was a considerable improvement overall; and corporations should pay the tax rates that are demanded of them by law. However the depiction of corporate taxation in the media routinely overlooks mandatory deductions for intellectual property, the deferral of unrepatriated foreign earnings, and the crucial issue of incidence/who actually pays the corporate tax.

Debate on the topic suffers as a result.

LaTeX problem sets with hidden answers

LaTeX problem sets with hidden answers

I like being able to hide content in documents, for example including but not revealing the answers in a problem set. That makes it very easy to then produce the problem set solutions, simply by revealing the answers. I made this easier with a \hide{} command, that can be “turned off” so the answers are revealed.

This is the basic code I use for producing problem sets. The only change needed to convert a problem set into a solution set is to redefine the \showanswers variable to equal 1 rather than 0.


% Set this =0 to hide, =1 to show


   #1 \vspace{\baselineskip}

   \vspace{2\baselineskip} \hspace{2cm}


   \item This is question 1.
   \hide{Here is a hidden solution.}

   \item What is the answer to question 2?
   \hide{The answer is here.}

Using R’s ggplot2 with Stata

Using R’s ggplot2 with Stata

Stata is great, but it’s true that R makes prettier graphs, especially when you make use of the outstandingly excellent ggplot2 Thanks to Roger Newson we can have both. This post walks you through exploiting ggplot2 directly from Stata. I’ve tested this with both Stata 13 and Stata 14 on Windows 7 on two different computers.

A simple ggplot produced directly from Stata

Here are the steps:

  • First, you need the foreign and ggplot2 packages installed in R. Install them using the install.packages() command, e.g. install.packages("ggplot2")
  • Second, you need the rsource package installed in Stata. You can do this with the ssc inst rsource command.
  • Third, you need to find the R terminal program, named Rterm.exe. For me, this is located in C:/Program Files/R/R-3.3.0/bin/x64/Rterm.exe. You then need to change the line in the code that begins with global Rterm_path to wherever Rterm.exe is on your computer.

Then you can use this code (click here for download). It’s well commented below so you should be able to understand what it’s doing. It produces the graph you can see above.

** Open up R interactively through Stata
** Enda Patrick Hargaden
** Boyd Center / Economics
** University of Tennessee, July 2016

** For sample purposes, let's use the auto dataset. Obviously you change this to your data.
sysuse auto

** You need to adjust this. Find the location of Rterm.exe on your machine
global Rterm_path `"C:/Program Files/R/R-3.3.0/bin/x64/Rterm.exe"'

** This records Stata's present working directory in R-compatible format
local r_pwd = subinstr("`c(pwd)'","","/",.)

** Temporarily make a copy of the dataset in a format R will probably understand
saveold holderfile.dta, version(12) replace

** Start R via rsource, pass your present working directory to it
rsource, terminator("end_r_stata") roptions(`" --vanilla --args "`r_pwd'" "')

## We're now in R, so switching the comment designation from star to hash
## Stata may mention an error anytime you include an R comment. Don't worry about it.

## Use the argument (i.e. pwd) passed via Stata and move to it
stata_pwd = commandArgs(trailingOnly=TRUE);

## Load the packages.

## Read and then delete the data
df = read.dta("holderfile.dta", convert.f=TRUE)

## Draw the graph
ggplot(df, aes(x=mpg, y=price, color=foreign)) +
geom_point() +
ggtitle("Ahh, lovely R graphs through Stata")

## Save both a PDF and PNG version

## And now you stop using R

And there we have it. Transferring the data over to R and generating nice ggplots without ever leaving Stata. Of course you don’t need to restrict yourself to ggplots. With this basic idea you can use any of R’s capabilities directly from Stata.