[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
Re: st: memory required for -merge-
Danielle H Ferry wrote:
When you do a match-merge, Stata must prepare for the maximal
possible resulting dataset, which would be the result of a total
mismatch between the two existing datasets. That result would be a
dataset with n1 + n2 observations, where n1 = number of obs in the
master set, and n2 = number of obs in the using set. The width of
this set, which is independent of the degree of matching, is (width
of master) + (width of using) - (width of common variables). So you
can get a very large potential set, even if the actual set is much
smaller (due to matches). (The actual number of observations formed
is n1 + n1 - (number of matched observations) ).
Is there a rule for the amount of memory required for -merge-? I keep
getting a "no room to add more variables due to width" error on the
same merge. I am attempting to -merge- on only one variable
(placefip), and 67% of memory is free before I attempt the -merge-
(i.e., while the "master" dataset is loaded). The "using dataset is
small, and I've got the memory set quite high (900m). So, I can't
understand why I am running into memory problems.
If it happens that you don't want any unmatched observations from the
using set, then use the -nokeep- option. This discards unused
observations from the using set before they get a chance to be joined
on to he master. And Stata adjusts its expected maximal size
accordingly; that would be just n1 observations (though, of course,
the width will usually increase.) In other words...
merge varlist using usingset
drop if _merge==2
merge varlist using usingset, nokeep
are equivalent in the end result, but that the latter demands less
memory. The former grows a big set and then trims it; the latter
grows a leaner set to begin with.
* For searches and help try: