So, this might not work perfectly, but why not leverage RLink?
Needs["RLink`"];
InstallR[];
REvaluate["library('foreign')"];
Shallow[rf=REvaluate["read.dta('airfare.dta')"]];
If you now look at rf, you will see that it has three parts, including an evocative second part with the header RData. If we then try this:
Transpose[List @@ rf[[2]]]
We get something that sure looks like the data you want.
I don't vouch that this is (a) the best way or (b) works for all forms of .dta files (about which I know nothing), but since R knows what to do with .dta files and Mathematica now speaks to R, why not put the two together?