Suggestions on how to merge multiple datasets with an imperfect ID across databases? I have four databases of books that I have assembled from various sources, websites, etc. I would like to merge the databases, but I face a significant merging issue in that there is no "perfect" match ID among the databases. Each database has the title and publication date, but it's not perfect. For example, I might have the following entries for title and publication date:


*

*(1) The Catcher and the Rye, 7/16/51

*(2) The Catcher & the Rye, 7/16/51

*(3) Catcher and the Rye, 1951

*(4) The Catcher and the Rye (1951), [missing]


So I have tried things like getting rid of common words, spaces and other non-letter characters, using only the first 15 characters of the title and only publication year (or month and year), but I don't think I have a comprehensive solution or approach to getting the best match.
Does anybody have any suggestions on approaches, software, an algorithm I can follow or look up, etc. to help me get the best match possible? (The databases range from 9,000 observations to 15,000 observations so doing it manually isn't really an option)
I work primarily in Stata, but I have basic knowledge of R and Python if that guides any responses. 
 A: I would try two things. There is a user-written command called strgroup, which you can install with -ssc install strgroup-. It uses Levenshtein distances to do string matching. 
If that does not work, I would look into a free program called Google Refine. It's pretty easy to use once you watch the instructional video.
A: There is a user-written Stata command called reclink.  It can perform record linkage between two files using a standard probabilistic matching scheme. 
I've been wanting to re-write the program in Mata (to speed it up) and to add various features, but it works OK for probabilistic merging. Given your example, it should work just fine after you do some standardization of your fields (e.g. convert date variable to year/month/day, clean up "&", maybe add fields for phonetic algorithms of the book title).  Programs like Link King, LinkageWiz, and others can do a lot of the cleaning up automatically.
A: Despite the date of this post, I would like to share something that made my life easier.
I use to start by following the Stata tip 64: Cleaning up user-entered string variables (see here) in order to eliminate small inconsistencies, i.e removing leading and trailing spaces (trim and itrim); avoiding uppercase and lowercase variations (upper,lower, proper) and eliminating other common differences that arise from hyphens, accented characters and ampersands -  as in "The Catcher and the Rye" and "The Catcher & the Rye" (subinstr). It seems to increase the efficiency of strgroup, which uses the aforementioned Levenshtein edit distance to matches similar strings together, since the function is case sensitive.
Regards!
