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?