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!
proc sql noprint;
select count(*) into :gwhxxxx1
from &dsn;
quit;
%if &gwhxxxx1=0 %then %do;
%put ====== WARNING: Input data set &dsn is empty, macro ends =======;
%goto exit;
%end;
1
PROC SQL noprint;
2
select count(*) into :gwhxxxx1
3
from &dsn;
4
QUIT;
5
6
%IF &gwhxxxx1=0 %THEN %DO;
7
%put ====== WARNING: INPUTDATASET &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.
%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!
%if &j=1 %then %do;
data &newdsn;
set gwhxxxx3;
run;
%end;
%else %do;
Proc append base=&newdsn data=gwhxxxx3;
run;
%end;
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
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.