Veröffentlicht am :
Macro EXTERNE

DBMSlist Makro - Stapelweises Abfragen von Datenbanken

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses Makro automatisiert den 'Chunking'-Prozess. Zuerst zählt es die Gesamtzahl der Beobachtungen im Quelldatensatz (`dsn`). Dann iteriert es in Blöcken (Größe definiert durch `bitesize`). Bei jeder Iteration erstellt es eine temporäre Tabelle (`gwhxxxx2`), ruft zwei externe Makros auf (`%MakeList` zum Formatieren der Werteliste und `%RunQuery` zum Ausführen der SQL-Abfrage) und aggregiert die Ergebnisse in der Zieltabelle (`newdsn`) über `PROC APPEND`. Das Skript verwaltet auch einen Testmodus, um nur eine einzige Iteration auszuführen.
Datenanalyse

Type : EXTERNE


Das Makro erwartet einen Eingabedatensatz über den Parameter `dsn`. Es generiert temporäre Tabellen (`gwhxxxx1` Makro-Variable, `gwhxxxx2`, `gwhxxxx3`) und eine finale Tabelle, die durch `newdsn` angegeben wird.

1 Codeblock
PROC SQL
Erklärung :
Zählt die Gesamtzahl der Datensätze im Quelldatensatz, um die Anzahl der erforderlichen Durchläufe zu bestimmen. Beendet die Ausführung, wenn die Tabelle leer ist.
Kopiert!
1PROC SQL noprint;
2 select count(*) into :gwhxxxx1
3 from &dsn;
4QUIT;
5 
6%IF &gwhxxxx1=0 %THEN %DO;
7 %put ====== WARNING: INPUT DATA SET &dsn is empty, macro ends =======;
8 %goto exit;
9%END;
2 Codeblock
DATA STEP Data
Erklärung :
Hauptschleife: Berechnet die Anzahl der Durchläufe, extrahiert einen Daten-Teilbereich (Chunk) in `gwhxxxx2` und ruft die Hilfsmakros (hier nicht definiert) `%MakeList` und `%RunQuery` auf, um dieses Los zu verarbeiten.
Kopiert!
1%let totpass=%sysevalf(&gwhxxxx1/&bitesize, ceil);
2%IF &test=no %THEN %DO j=1 %to &gwhxxxx1 %BY &bitesize;
3 %let p=%sysevalf(&j/&bitesize, ceil);
4 %put ================= Starting pass &p of &totpass ==================;
5
6 DATA gwhxxxx2;
7 SET &dsn (firstobs=&j obs=%eval(&j+&bitesize-1));
8 RUN;
9 
10 %MakeList(mylist, gwhxxxx2, &column, &vtype);
11 %RunQuery(&dbname, gwhxxxx3, &query);
12 
13 /* ... Logique d'accumulation ... */
14%END;
3 Codeblock
DATA STEP / PROC APPEND Data
Erklärung :
Aggregationslogik: Initialisiert die Ausgabetabelle (`newdsn`) bei der ersten Iteration und fügt die Ergebnisse (`gwhxxxx3`, zurückgegeben von `%RunQuery`) bei nachfolgenden Iterationen über `PROC APPEND` hinzu.
Kopiert!
1%IF &j=1 %THEN %DO;
2 DATA &newdsn;
3 SET gwhxxxx3;
4 RUN;
5%END;
6%ELSE %DO;
7 PROC APPEND base=&newdsn DATA=gwhxxxx3;
8 RUN;
9%END;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Garth W. Helf, 2001 "Can't Relate? A Primer on Using SAS With Your Relational Database", SUGI 27 Paper 155-27