LesezeichenAbonnierenRSS-Feed abonnieren
basefan
Obsidian | Level 7

Hallo Michael,

mein Beispiel war kein proc print data=test(obs=3); sondern er war mit einer where-Bedingung, aber das geht mit dem data step genauso.

Die Idee im EG statt dem proc print den data step zu nehmen, dessen Ergebnis sich normalerweise sofort+automatisch öffnet, ist gut. Als EG-Neuling hatte ich an daran gar nicht gedacht. Das Feature 'öffnet sich automatisch' war just seit ein paar tagen deaktiviert, weil ich zu diesem Problem ein Ticket bei der Hotline eröffnet hatte und der Kollege meinte, ich sollte das deaktivieren, ob das die Meldung verhindern würde. Hat es nicht, aber ich hatte es immer noch deaktiviert.

Dank Deinem Tipp weiß ich, wie ich es im EG anders als im DM mache.

 

Das Rätsel, warum der proc print diese unpassende Meldung bringt ist mittlerweile auch gelöst. Lt. SAS-Hotline reagiert der EG bei der where-Bedingung nicht wie man das erwartet (Eingrenzung der Daten ganz unten, ganz nah an der DB), sondern holt alle Daten 'zu sich' und wertet erst dann die where-Bedingung aus. Wenn er so ungeschickt arbeitet, ist die Meldung klar. Aber wer konnte wissen, dass der EG so extrem ungeschickt arbeitet?

Übrigens erzeugt der proc print data=test(obs=3); die gleiche Meldung, also ist auch hier die gleiche ungeschickte Arbeitsweise des EG.

 

Im SAS-Wiki steht zum Where-Statement genau das drin:

Die Selektion findet also *vor* dem Einlesen der Daten in den eigentlichen Datenschritt statt und ist besonders bei großen Tabellen sehr effizient.

(siehe http://saswiki.org/wiki/WHERE)

Was ist nur in die EG-Entwickler gefahren, dass sie so eine ungeschickte Art der Realisierung gewählt haben? Ich bin entsetzt!

 

Gruß aus Betzdorf

Hans

Kurt_Bremser
Super User

Wie sieht Eure Datenhaltung aus?

 

Ich habe das soeben getestet

(EG 7.1, SAS 9.4 TS1M2 auf AIX 7, native SAS-Tabelle, ca. 1,8 GB groß, > 7.000.000 Obs, 81 Spalten)

Code:

data person;
set xxx.tperson;
where name = 'Bremser';
run;

proc print data=xxx.tperson;
where name = 'Bremser';
run;

Log dazu

41         data person;
42         set xxx.tperson;
43         where name = 'Bremser';
44         run;

NOTE: There were 7 observations read from the data set XXX.TPERSON.
      WHERE name='Bremser';
NOTE: The data set WORK.PERSON has 7 observations and 81 variables.
NOTE: DATA statement used (Total process time):
      real time           5.57 seconds
      cpu time            3.21 seconds
      

45         
46         proc print data=xxx.tperson;
47         where name = 'Bremser';
48         run;

NOTE: There were 7 observations read from the data set XXX.TPERSON.
      WHERE name='Bremser';
NOTE: The PROCEDURE PRINT printed pages 1-5.
NOTE: PROZEDUR PRINT used (Total process time):
      real time           5.73 seconds
      cpu time            3.20 seconds

Der PROC PRINT dauert praktisch genauso lang wie der data step, und die Anzeige war auch sofort da.

basefan
Obsidian | Level 7

Hallo Kurt,

bei uns ist es so:

EG 7.13 HF5 (7.100.3.5486) (64-bit) auf Win-7 PC, SAS 9.4 TS1M3 auf Suse Linux (64bit), native SAS-Tabelle, ca. 4,3 GB groß, > 3.000.000 Obs, 156 Spalten)

Code:

data test6;    /* data set has 3 observations and 156 variables */
  set dm3_g.a_kopo_G;
  if auftnum eq '2100004711';
run;


proc print data=dm3_g.a_kopo_G;  /* The results are large (116.274.692 bytes) and could take a long time and a large amount of system resources to add to the project. */
  var %varsort( dm3_g.a_kopo_G ); /* 156 variables */
  where auftnum eq '2100004711';
run;

 

Log dazu aus dem EG:

66         data test6;       /* data set has 3 observations and 156 variables */
67           set dm3_g.a_kopo_G;
68           if auftnum eq '2100004711';
69         run;

NOTE: There were 3072064 observations read from the data set DM3_G.A_KOPO_G.
NOTE: The data set WORK.TEST6 has 3 observations and 156 variables.
NOTE: Compressing data set WORK.TEST6 increased size by 100.00 percent.
      Compressed is 2 pages; un-compressed would require 1 pages.
NOTE: DATA statement used (Total process time):
      real time           1.15 seconds
      cpu time            1.16 seconds
     

70        
71        
72         proc print data=dm3_g.a_kopo_G;  /* The reults are large (116.274.692 bytes) and could take a long time and a large amount of system resources to add to the project. */
73           var %varsort( dm3_g.a_kopo_G ); /* 156 variables */
MPRINT(LEFT):   ABGRU_AP ANLDAT_A ANLDAT_V ANRSCHL ANSPRNUM ANZFPOS ARBEITSTAG ARCHI_AP ARTINUM ARTINUM8 ARTINUME ARTINUMH ARTINUMW ARTINUMZ ARTINUMZ8 AUDMA AUDMA_AK AUFTART AUFTDAT AUFTJJJJ AUFTNUM
AUFTPOS AUFTPOSH AUFTWOCH BELQUELL BEL_CD BILDPOS BRSCH BSARK BSTDK BSTNK_AK BSTZD BTR00 BTR01 BTR02 BTR03 BTR04 BTR05 BTR06 BTR07 BTR08 CTLPC_AK DUBLETTE EAN01 EAN02 EANANZ FEIERTAG FIL3NR FLIEF
HTN01 HTNANZ INTEXT INTEXTGR2 KAMGEBIE KDARCHI KLASSIFI KONDM KOTX01 KOTX02 KOTX03 KOTX04 KOTX05 KUNDNUM KUNDNUMO KUNDNWE LABOR LAGERJN LAND1 LPRIO MENGE MENGENAFRA MENGE_FPK MMDD_AK MMDD_AP NAFRA_AP
NBEJN NBEJN_O NETWR_AP NETWR_FPK NNWRW_AP PLZ PRLI_AK PRLI_AP PRLI_EP PRLI_EP_ZZ PRODH PRODH2 PRODH4 PRODH6 PRODH8 PRODHAPP PRODH_AP PRODH_AP2 PRODH_AP4 PRODH_AP6 PRODH_AP8 PRODUKT PSTYP RV_WP
SA_ODER_SO SCORNECJ SCORNECW SDABW SEITE SEX SGE SKENNUNG SORTIK SPARTE SPRAS SPRAS2 STKLIPOS STRJN STRJN_O TAGTYP THEMA TITSCHL VAGEBIET VA_NR VGBLPOS VKAUS_AP VKBUR VKGRP VKORG VRWRB_AP VRWRT_AP
VRWRT_FPK VSART_AK VSART_AP VSTEL_AP VTWEG WAERK WAERS WAGRU WAGRU2 WAGRU4 WEBID WERK_AP WE_JN WLDAT ZTERM ZZADH_AK ZZAUH_AK ZZBRS_AK ZZBRS_KD ZZGCI ZZKON_AK ZZKON_KD ZZKWD ZZMON ZZNEUKA ZZNEUKV
ZZSCO_AK ZZSTA ZZVTR_AK ZZWI8
74           where auftnum eq '2100004711';
75         run;

NOTE: There were 3 observations read from the data set DM3_G.A_KOPO_G.
      WHERE auftnum='2100004711';
NOTE: PROCEDURE PRINT used (Total process time):
      real time           2.80 seconds
      cpu time            2.81 seconds

 

 

Der Log aus dem DM:

370     data test6;                         /* data set has 3 observations and 156 variables */
371       set dm3_g.a_kopo_G;
372       if auftnum eq '2100004711';
373     run;

NOTE: There were 3072064 observations read from the data set DM3_G.A_KOPO_G.
NOTE: The data set WORK.TEST6 has 3 observations and 156 variables.
NOTE: Compressing data set WORK.TEST6 increased size by 100.00 percent.
      Compressed is 2 pages; un-compressed would require 1 pages.
NOTE: DATA statement used (Total process time):
      real time           1.22 seconds
      cpu time            1.22 seconds


374
375
376     proc print data=dm3_g.a_kopo_G;     /* The results are large (116.274.692 bytes) and could take a long time and a large amount of system resources to add to the project. */
377       var %varsort( dm3_g.a_kopo_G );   /* 156 variables */
MPRINT(LEFT):   ABGRU_AP ANLDAT_A ANLDAT_V ANRSCHL ANSPRNUM ANZFPOS ARBEITSTAG ARCHI_AP ARTINUM ARTINUM8 ARTINUME ARTINUMH ARTINUMW ARTINUMZ ARTINUMZ8 AUDMA AUDMA_AK AUFTART AUFTDAT AUFTJJJJ AUFTNUM
AUFTPOS AUFTPOSH AUFTWOCH BELQUELL BEL_CD BILDPOS BRSCH BSARK BSTDK BSTNK_AK BSTZD BTR00 BTR01 BTR02 BTR03 BTR04 BTR05 BTR06 BTR07 BTR08 CTLPC_AK DUBLETTE EAN01 EAN02 EANANZ FEIERTAG FIL3NR FLIEF
HTN01 HTNANZ INTEXT INTEXTGR2 KAMGEBIE KDARCHI KLASSIFI KONDM KOTX01 KOTX02 KOTX03 KOTX04 KOTX05 KUNDNUM KUNDNUMO KUNDNWE LABOR LAGERJN LAND1 LPRIO MENGE MENGENAFRA MENGE_FPK MMDD_AK MMDD_AP NAFRA_AP
NBEJN NBEJN_O NETWR_AP NETWR_FPK NNWRW_AP PLZ PRLI_AK PRLI_AP PRLI_EP PRLI_EP_ZZ PRODH PRODH2 PRODH4 PRODH6 PRODH8 PRODHAPP PRODH_AP PRODH_AP2 PRODH_AP4 PRODH_AP6 PRODH_AP8 PRODUKT PSTYP RV_WP
SA_ODER_SO SCORNECJ SCORNECW SDABW SEITE SEX SGE SKENNUNG SORTIK SPARTE SPRAS SPRAS2 STKLIPOS STRJN STRJN_O TAGTYP THEMA TITSCHL VAGEBIET VA_NR VGBLPOS VKAUS_AP VKBUR VKGRP VKORG VRWRB_AP VRWRT_AP
VRWRT_FPK VSART_AK VSART_AP VSTEL_AP VTWEG WAERK WAERS WAGRU WAGRU2 WAGRU4 WEBID WERK_AP WE_JN WLDAT ZTERM ZZADH_AK ZZAUH_AK ZZBRS_AK ZZBRS_KD ZZGCI ZZKON_AK ZZKON_KD ZZKWD ZZMON ZZNEUKA ZZNEUKV
ZZSCO_AK ZZSTA ZZVTR_AK ZZWI8
378       where auftnum eq '2100004711';
379     run;

NOTE: There were 3 observations read from the data set DM3_G.A_KOPO_G.
      WHERE auftnum='2100004711';
NOTE: The PROCEDURE PRINT printed page 24.
NOTE: PROCEDURE PRINT used (Total process time):
      real time           1.96 seconds
      cpu time            1.95 seconds

 

 

Der Data Step ist beiden gleich langsam (langsam, weil if statt where verwendet wurde), aber der proc print ist im EG deutlich langsamer als im DM.

Mittlerweile ist aber klar, woran das liegt, siehe mein voriger Kommentar mit der Aussage von der Hotline.

Es liegt an der ineffektiven Realisierung im EG. Der Code im DM wurde von mir natürlich mit rsubmit gestartet, d.h. es werden keine unnötigen Daten unnötig weit durchs Firmen-Netz bewegt.

 

Gruß aus Betzdorf

Hans

 

P.S.: Die obigen Log-Auszüge mit den Laufzeiten sind von meinen Test von gestern. Eben habe ich den Proc Print erneut getestet. Jetzt hat er sogar "real time 17.45 seconds" benötigt! Zwei Tests mit zwei ähnlich schlechten Ergebnissen!

mfab
Quartz | Level 8

Hallo Hans,

 

das würde ich ggf. mit dem SAS Support durchgehen.

Aus der Erfahrung bei unseren Systemen kann ich sagen, dass hier durchaus die generelle Systemauslastung durch parallele Prozesse, SAN-Anbindung, etc. eine Rolle spielen können.

Hier kann es immer mal zu einem Bottleneck kommen und die Zeiten schnellen dann teilweise stark nach oben.

 

Ein guter Indikator ist die Differenz von "real time" zu "cpu time", um zu sehen, ob die Verarbeitung an sich einfach viel Rechenzeit benötigt (Differenz ist klein) oder ob z.B. viel auf I/O gewartet wird => real time deutlich höher als cpu time.

Mit der Option "fullstimer" lassen sich da auch noch weitere Faktoren betrachten.

 

Ich wünsche viel Erfolg und ich bin mal gespannt, was letztendlich das Ergebnis sein wird 🙂

 

Schönes Wochenende!

Michael

jakarman
Barite | Level 11

Geht es um ganz schnell mit wenig system belastung information uber tabellen ansichtlich zu machen dan:
- schau mal an attrn/atrrc fucntionen. Die greifen am tabellen information selbst an.

  http://support.sas.com/documentation/cdl/en/lefunctionsref/69762/HTML/default/viewer.htm#p12uchp7hm5...

- Mit externe DBMS tabellen ist ein count(*) ohne etwas zu filteren sehr schnell weil es das dictionary.tables benutz 

  Accessing SAS tabellen und external dbms tabellen wirden schrecklich langsam.

  http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#p00cato8pe46ein1bjci...

---->-- ja karman --<-----
basefan
Obsidian | Level 7

Hallo zusammen,

mittlerweile habe ich gefunden, dass ich das Problem mit der Meldung 'The results are too large (116.274.692 bytes) and could take a long time and a large amount of system resources to add to the project.' schon einmal hatte.

Es war im Aug. 2013. Damals hieß es, das Ausgabe-Format "SAS Report" (die ODS destination "ODS tagsets.sasreport13") wäre der Grund und die Lösung war mehr ein Work-Around, nämlich das Ausgabe-Format "SAS Report" auszuschalten, also

Tools->Options->Results->"Result Formats"->"SAS Report" AUS-Schalten

und stattdessen z.B. die HTML-Ausgabe zu aktivieren.

 

Die damalige Lösung hilft auch hier. Mit HTML-Ausgabe und ohne das Ausgabe-Format "SAS Report" klappt der proc print ohne Meldung.

Die Laufzeit ist mit real time 5.23 seconds im Vergleich zum Display Manager mit real time 1.96 seconds immer noch nicht so super, aber das hatte ich davor schon berichtet.

 

Gruß aus Betzdorf

Hans

 

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 20 Antworten
  • 2356 Aufrufe
  • 0 Kudos
  • 8 in Unterhaltung