I just got home and started looking at your code again and a couple of things occurred to me. In particular, if SEQUENCE_COUNT < LSEQ then output UCST else output clean.UPDT; might have a problem by not checking for sequence_count > lseq Another thing, you've got IN= set: merge clean.UPDT (in=a) SEQ_LST (in=b rename=SEQUENCE_COUNT=LSEQ); but you never test it, so is it possible that records are coming in from seq_lst when there is no corresponding updt? In reference to the memory issue, unless told otherwise, in a data step SAS does it I/O directly - i.e. it reads a record(s) from disk, processes it, and writes to disk. There are exceptions (hash tables for example and Data set options that keep it loaded), but those are exceptions. It helps to remember that SAS was written for mainframes using punch cards (I know this personally). Memory was barely measured in K (hence the reference to K in some of the options), let alone M or G. As I stated before, its PROC SQL that tends to hog memory. Another possibility that updates a data set directly, hence is more dangerous, is the MODIFY statement. http://support.sas.com/documentation/cdl/en/lestmtsref/63323/HTML/default/viewer.htm#n0g9jfr4x5hgsfn17gtma5547lt1.htm Go through a couple of examples and back up you data.
... View more