Importnew.ado (requires R)
| Gabriel |
After hearing from two friends in a single day who are still on Stata 10 that they were having trouble opening Stata 12 .dta files, I rewrote my importspss.ado script to translate Stata files into an older format, by default Stata 9.
I’ve tested this with Stata 12 and in theory it should work with older versions, but please post positive or negative results in the comments. Remember that you need to have R installed. Anyway, I would recommend handling the backwards compatibility issue on the sender’s side with the native “saveold” command, but this should work in a pinch if for some reason you can’t impose on the sender to fix it and you need to fix it on the recipient’s end. Be especially careful if the dataset includes formats that Stata’s been updating a lot lately (e.g., the date formats).
The syntax is just:
Here’s the code:
*importnew.ado *by GHR 10/7/2011 *this script uses R to make new Stata files backwards compatible * that is, use it when your collaborator forgot to use "saveold" *use great caution if you are using data formats introduced in recent versions * eg, %tb *DEPENDENCY: R and library(foreign) *if R exists but is not in PATH, change the reference to "R" in line 29 to be the specific location capture program drop importnew program define importnew set more off local future `1' local version=9 /* version number for your copy of Stata */ local obsolete=round(runiform()*1000) local sourcefile=round(runiform()*1000) capture file close rsource file open rsource using `sourcefile'.R, write text replace file write rsource "library(foreign)" _n file write rsource `"directory <- "`c(pwd)'" "' _n file write rsource `"future <- "`future'" "' _n file write rsource `"obsolete <- paste("`obsolete'",".dta",sep="") "' _n file write rsource "setwd(directory)" _n file write rsource `"data <- read.dta(future, convert.factors=TRUE, missing.type=FALSE)"' _n file write rsource `"write.dta(data, file=obsolete, version=`version')"' _n file close rsource shell R --vanilla <`sourcefile'.R erase `sourcefile'.R use `obsolete'.dta, clear erase `obsolete'.dta end *have a nice day