简体   繁体   中英

insufficient memory when using proc assoc in SAS

I'm trying to run the following and I receive an error saying that ERROR: The SAS System stopped processing this step because of insufficient memory.

The dataset has about 1170(row)*90(column) records. What are my alternatives here?

The error infor. is below:

332  proc assoc data=want1 dmdbcat=dbcat pctsup=0.5 out=frequentItems;
333  id tid;
334  target item_new;
335  run;


----- Potential 1 item sets = 188 -----
Counting items, records read:    19082
Number of customers:               203
Support level for item sets:         1
Maximum count for a set:           136
Sets meeting support level:        188
Megs of memory used:              0.51

----- Potential 2 item sets = 17578 -----
Counting items, records read:    19082
Maximum count for a set:           119
Sets meeting support level:      17484
Megs of memory used:              1.54

----- Potential 3 item sets = 1072352 -----
Counting items, records read:    19082
Maximum count for a set:           111
Sets meeting support level:    1072016
Megs of memory used:             70.14
Error: Out of memory.  Memory used=2111.5 meg.

Item Set 4 is null.
ERROR: The SAS System stopped processing this step because of insufficient memory.
WARNING: The data set WORK.FREQUENTITEMS may be incomplete.  When this step was stopped there were
         1089689 observations and 8 variables.

From the documentation ( http://support.sas.com/documentation/onlinedoc/miner/em43/assoc.pdf ):

Caution: The theoretical potential number of item sets can grow very quickly. For example, with 50 different items, you have 1225 potential 2-item sets and 19,600 3-item sets. With 5,000 items, you have over 12 million of the 2-item sets, and a correspondingly large number of 3-item sets.

Processing an extremely large number of sets could cause your system to run out of disk and/or memory resources. However, by using a higher support level, you can reduce the item sets to a more manageable number.

So - provide a support= option make sure it's sufficiently high, eg:

proc assoc data=want1 dmdbcat=dbcat pctsup=0.5 out=frequentItems support=20;
  id tid;
  target item_new;
run;

Is there a way to frame the data mining task so that it requires less memory for storage or operations? In other words, do you need all 90 columns or can you eliminate some? Is there some clear division within the data set such that PROC ASSOC wouldn't be expected to use those rows for its findings?

You may very well be up against software memory allocation limits here.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM