Grenzen von SAS 8.2

Morgen liebes Forum,
ich habe beim Kompilieren eines SCL-Programms folgende Meldung erhalten:

ERROR: Overflow has occurred; evaluation is terminated.
ERROR: Out of memory.

Das SCL-Programm hat 10002 Zeilen, incl Kommentarzeilen. Löscht man min 10 Zeilen, ist Kompilieren wieder möglich.

Das SAS 8.2 läuft aus einer SunFire 440, Solaris 9, mit folgendem Config-File:

-path !SASROOT/hotfix/sasexe
-sasscript (!SASROOT/misc/connect)
-sasautos (
'!SASROOT/sasautos' )
-sashelp (
'!SASROOT/hotfix/sashelp' '!SASROOT/sascfg' '!SASROOT/sashelp' )
-maps !SASROOT/maps
-msg !SASROOT/sasmsg
-insert msg !SASROOT/hotfix/sasmsg
-sasuser      ~/
sasuser.800
-work         /projekte_1/tmp
-dmsexp
-setjmp

-mvarsize
1024K
-msymtabmax
16M
-sortsize
48M
-memsize
256M
-maxmemquery
16M
-noasynchio

-helploc (
'!sasuser/classdoc' '!SASROOT/X11/native_help' )
-docloc !SASROOT/install/docloc.htm
-appletloc !SASROOT/misc/applets
-news !SASROOT/misc/base/news

-path !SASROOT/sasexe
-yearcutoff
1909
-source2
-engine V8
-msglevel=i

Die Verdopplung des zur Verfügung stehenden Speichers hat keine Auswirkung auf das Programm.
Das Programm, incl Frame hat eine Größe von 232847 Byte nach dem kompilieren. Der gesamte Katalog hat eine Größe von 1,5 MByte.

An welcher Schraube kann man drehen, um mehr als 10000 Programmzeilen in einem Programm zu verwenden? Das Auslagern einzelner Programmteile in separate SCL-Programme ist nur mit größeren Änderungen möglich.

Danke im Voraus,

Guido

Kennen den Fehler auch

Hallo,
wir kennen den Fehler auch. Er hat nach unserer Erfahrung nichts mit der reinenProgramm-Größe zu tun... Beispiel:

/* Reduzierte SatzAnzahl, sonst kommt der doofe "Overflow has occurred"-Fehler */
data _m_i_li_;  
  
set _m_i_li_(obs=&SatzAnzM.);
run;
%macro AUS;
  
/* mit Blanc kommt Fehler früher                     */
  
/* (bei ca. 3.400 Auftragsnrn, je char10)            */
  
/* see also:                                         */   
  
/* www.sas.com/service/techsup/unotes/V6/6/6719.html */
  
proc sql noprint;
    select quote(trim(left(&
invar.)))    
      into:&
InLisNam. separated by ", "  
      
from _m_i_li_     ;  
  quit;
%mend AUS;
proc sql noprint;
  
select quote(trim(left(&invar.)))  /* ohne Blanc, dann klappt's etw.länger */
    
into:&InLisNam. separated by "," /* The buffer used for collecting       */
    
from _m_i_li_                    /* the characters for the parameter     */
  
;                                  /* is limited to 32K                    */
quit;
Für uns gilt in dieser Konstellation (Kopie aus unserer Doku):
proc sql select into hat ab ca. 34.000 Byte ein Overflow-Problem, deshalb die Abfrage auf 850 Dateinamen, je max. 40 Byte (bei ca. 850 Namen, je char40) Overflow has occurred; evaluation is terminated. Out of memory. See also: www.sas.com/service/techsup/unotes/V6/6/6719.html

Vielleicht hat Ihr Problem ein ähnliche Ursache.
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)

dumme Sache

Das sieht gar nicht gut aus. Da hab ich 8 Gbyte Arbeitsspeicher und werde für Macrospeicher auf 32 kByte begrenzt. Man könnte meinen ein MicroSoft-Produkt zu verwenden.
Da hätte ich auch bei meinem C64 bleiben können.

Aber danke für die "Hilfe". Das Problem entsteht sicher durch diese Begrenzung, da SCL-Variable scheinbar im selben Speicherbereich wie die lokalen Macrovariablen abgelegt werden. Dadurch unterliegen sie auch der 32 KB Begrenzung. Jetzt heißt es Kode optimieren, so wie früher, als Speicher noch in Byte gemessen wurde oder das Programm in mehrere SCL-Programme aufteilen, da wohl jedes SCL-Programm seine eigenen 32KB hat.

Gruß
Guido Stosnach
Winicker Norimed GmbH

die Welt wird besser

Hallo,
wie man an dem Link in meinem Code sieht ist meine Info Stein-Alt. Sie gilt ab V6.08 !
Die neue Version ab Version 7 kann immerhin bis 64K (es lebe der Fortschritt), siehe

/*
   http://support.sas.com/kb/5/178.html

   (sascode als Trick 17 für autom. html-Link!)
*/
Ab Version 9 ist ....
die
Fehlermeldung genauer !!! Aber noch nicht für alle Betriebssysteme (z.B. nicht für Solaris) !
Die Grenze blieb unverändert. Das ist doch was ;-)
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)