aggregation

aggregate

L'essentiel
Auf einen Blick
In der Welt der Big-Data-Verarbeitung ist die effiziente Verdichtung von Informationen entscheidend; hierbei übernimmt die Aktion aggregate eine Schlüsselrolle innerhalb des aggregation-Action-Sets. Sie ermöglicht es Analysten, aus riesigen Datenbeständen aussagekräftige Kennzahlen zu extrahieren, indem sie komplexe Gruppierungen und zeitbasierte Intervalle berechnet, anstatt lediglich Rohdaten zu laden. Diese Funktionalität ist unerlässlich für die Erstellung performanter Berichte und die Vorbereitung von Zeitreihenanalysen, da sie die Datenstruktur gezielt für nachgelagerte Prozesse optimiert. Im folgenden Bereich finden Sie umfassende Antworten auf häufige Fragen zur technischen Umsetzung und zur optimalen Nutzung dieser Aggregationslogik.

Beschreibung

Die Aktion `aggregate` im Aktionssatz `aggregation` ist ein leistungsstarkes Werkzeug zur Durchführung von Datenaggregationen in SAS Viya. Sie ermöglicht es Benutzern, die Werte einer oder mehrerer Variablen basierend auf verschiedenen Kriterien zusammenzufassen. Diese Aktion ist besonders nützlich für die Datenvorverarbeitung, das Feature-Engineering und die Erstellung von zusammenfassenden Berichten. Sie kann einfache Aggregationen wie Mittelwert, Summe oder Anzahl berechnen, aber auch komplexere Operationen wie die Berechnung von Quantilen, Modus oder das Zusammenfassen von Daten über Zeitintervalle oder rollierende Fenster durchführen. Die Flexibilität der Aktion wird durch eine Vielzahl von Parametern gewährleistet, die eine feinkörnige Steuerung des Aggregationsprozesses ermöglichen, einschließlich der Gruppierung nach Variablen, der Handhabung fehlender Werte und der Formatierung der Ausgabe.

aggregation.aggregate result=results status=rc / align="BEGINNING" | "ENDING" | "MIDDLE", bin={double-1, double-2, ...}, casOut={caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1", "variable-name-2", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", "string-2", ...}}, contribute="variable-name", contributeColumnLabel="string", contributeColumnName="string", contributeDelimiter="string", contributeTrim=TRUE | FALSE, contributeUnroll=TRUE | FALSE, copyVars={"variable-name-1", "variable-name-2", ...}, doESP=TRUE | FALSE, edgeId="variable-name", exclnpwgt=TRUE | FALSE, excludeSelf=TRUE | FALSE, freq="variable-name", freqStrict=TRUE | FALSE, groupByLimit=64-bit-integer, groupedIntervalOutput=TRUE | FALSE, id="variable-name", idEnd=double, idOutputName="string", idRange={double-1, double-2, ...}, idStart=double, includeEmptyInterval=TRUE | FALSE, includeMissing=TRUE | FALSE, inputs={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, interval="string", jumpingWindow=TRUE | FALSE, keepRecord=TRUE | FALSE, keepRecordId=TRUE | FALSE, modeSingle=TRUE | FALSE, offset=integer, partKey={"string-1", "string-2", ...}, pctlDef=integer, pti=double, ptw=double, raw=TRUE | FALSE, saveGroupbyFormat=TRUE | FALSE, saveGroupbyRaw=TRUE | FALSE, saveVariableColumn=TRUE | FALSE, saveVariableSpecification=TRUE | FALSE, subBinOffset=double, subBinWidth=double, subInterval="string", table={caslib="string", computedOnDemand=TRUE | FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1, key-2=any-list-or-data-type-2, ...}, groupBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, groupByMode="NOSORT" | "REDISTRIBUTE", importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", orderBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, singlePass=TRUE | FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, where="where-expression"}}, varSpecs={{agg="FIRST" | "FIRSTNOTEMPTY" | "LAST" | "LASTNOTEMPTY" | "MAXIMUM" | "MINIMUM" | "MODE" | "N" | "NDISTINCT" | "NMISS" | "NTOTAL" | "PERCENT" | "PERCENTILE" | "PGT" | "PLT" | "Q1" | "Q2" | "Q3" | "SUMMARY", ciAlpha=double, ciType="LOWER" | "TWOSIDED" | "UPPER", columnNames={"string-1", "string-2", ...}, edgeId="variable-name", exclnpwgt=TRUE | FALSE, format="string", formats={"string-1", "string-2", ...}, freq="variable-name", freqStrict=TRUE | FALSE, includeMissing=TRUE | FALSE, k=integer, missDbl=double, missStr="string", modeSingle=TRUE | FALSE, name="variable-name", names={"variable-name-1", "variable-name-2", ...}, pctlDef=integer, percentile={double-1, double-2, ...}, pN=double, pRange={double-1, double-2, ...}, pRangeMax=double, pRangeMin=double, pStrN="string", pStrRange={"string-1", "string-2", ...}, pStrRangeMax="string", pStrRangeMin="string", range={double-1, double-2, ...}, rangeMax=double, rangeMin=double, strRange={"string-1", "string-2", ...}, strRangeMax="string", strRangeMin="string", summarySubset={"CSS", "CV", "KURT", "KURTOSIS", "MAX", "MAXIMUM", "MEAN", "MIN", "MINIMUM", "N", "NMISS", "PROBT", "SKEW", "SKEWNESS", "STD", "STDERR", "SUM", "T", "TSTAT", "USS", "VAR"}, weight="variable-name"}, ...}, weight="variable-name", windowBin={double-1, double-2, ...}, windowInt="string", windowOffset=integer, windowSubBinOffset=double, windowSubBinWidth=double, windowSubInt="string";
Einstellungen
ParameterBeschreibung
align Gibt die Ausrichtung des repräsentativen Wertes in Bezug auf ein Intervall oder einen Bin an.
bin Gibt die Minimal- und Maximalwerte eines Bins an.
casOut Gibt die Einstellungen für eine Ausgabetabelle an.
contribute Wenn der Parameter doESP auf True gesetzt ist, können Sie eine Variable angeben, deren Werte innerhalb jedes Aggregationsintervalls aufgezeichnet werden.
contributeColumnLabel Gibt einen Wert an, um das Variablenlabel der contribute-Variable zu überschreiben.
contributeColumnName Gibt einen Wert an, um den Variablennamen der contribute-Variable zu überschreiben.
contributeDelimiter Gibt ein Trennzeichen an, das zwischen verketteten Werten der contribute-Variable verwendet wird.
contributeTrim Wenn auf True gesetzt, werden führende und nachfolgende Leerzeichen vom formatierten Wert der contribute-Variable entfernt.
contributeUnroll Wenn auf True gesetzt, fügt jeder Rohwert aus der contribute-Variable eine Zeile zur Ergebnistabelle hinzu.
copyVars Gibt die Variablen an, die von der Eingabetabelle in die Ausgabetabelle kopiert werden sollen.
doESP Wenn auf True gesetzt, kann die Aktion die Partitionierung und Sortierung der Eingabetabelle nutzen.
edgeId Gibt eine numerische Variable an, deren Werte zur Sortierung der Werte jeder varSpecs-Spezifikation verwendet werden, die die Aggregatoren FIRST, LAST, FNE oder LNE verwendet.
exclnpwgt Wenn auf True gesetzt und eine Gewichtungsvariable angegeben ist, werden Beobachtungen mit einem nicht-positiven Gewichtungswert von der Analyse ausgeschlossen.
excludeSelf Wenn auf True gesetzt und der doESP-Parameter True ist, schließt die Aggregation den Beitrag der aktuellen Beobachtung aus.
freq Gibt eine numerische Variable an, deren Werte als Häufigkeit der Analysevariablenwerte verwendet werden.
freqStrict Bezieht sich auf die Verwendung des MODE-Aggregators. Standardmäßig werden Beobachtungen mit fehlenden oder kleineren als 1 Häufigkeitswerten ausgeschlossen. Wenn auf False gesetzt, werden negative und Dezimalwerte verwendet.
groupByLimit Gibt die maximale Anzahl von Ebenen in einem Group-by-Satz an.
groupedIntervalOutput Wenn auf True gesetzt, wird nur eines der gleichen aggregierten Intervalle in Bezug auf den letzten Id-Wert gespeichert.
id Gibt eine numerische Variable an, die den Zeitstempel identifiziert, der mit jeder Beobachtung in der Eingabetabelle verknüpft ist.
idEnd Gibt den inklusiven Maximalwert der ID-Variable an, der in der Analyse berücksichtigt werden soll.
idOutputName Gibt den neuen Namen der ID-Variable in der Ausgabetabelle an.
idRange Gibt die inklusiven Minimal- und Maximalwerte der ID-Variable an, die in der Analyse berücksichtigt werden sollen.
idStart Gibt den inklusiven Minimalwert der ID-Variable an, der in der Analyse berücksichtigt werden soll.
includeEmptyInterval Standardmäßig werden Intervalle mit einem fehlenden Wert für die ID-Variable in die Ausgabe einbezogen. Wenn auf False gesetzt, werden diese Intervalle ausgeschlossen.
includeMissing Standardmäßig werden fehlende Werte in die Analyse einbezogen. Wenn auf False gesetzt, werden Beobachtungen mit fehlenden Werten ausgeschlossen.
inputs Gibt die Eingabevariablen an, die in der Analyse verwendet werden sollen.
interval Gibt den Zeitraum für die Akkumulation von Beobachtungen an.
jumpingWindow Wenn auf True gesetzt, erfolgt die Aggregation über ein Zeitfenster, das mehrere Intervalle enthalten kann, und die Aggregation wird zurückgesetzt, wenn der angegebene Zeitbereich abläuft.
keepRecord Wenn auf True gesetzt, wird der ursprüngliche Wert jeder Beobachtung für die ID-Variable ohne Intervallausrichtung beibehalten.
keepRecordId Wenn auf True gesetzt und der doESP-Parameter True ist, wird der ursprüngliche ID-Wert jeder Beobachtung ohne Intervallausrichtung beibehalten.
modeSingle Bezieht sich auf die Verwendung des MODE-Aggregators. Wenn auf True gesetzt, wird der kleinste der distinkten Werte als häufigster Wert zurückgegeben, falls alle distinkten Werte eine Häufigkeit von 1 haben.
offset Gibt den Versatz jedes Intervalls an.
partKey Wenn die Tabelle partitioniert ist, können Sie einen Partitionsschlüssel angeben, damit die Ergebnisse nur für diese Partition berechnet werden.
pctlDef Gibt an, wie Quantilstatistiken (Perzentile) berechnet werden.
pti Gibt den Zeitwert an, zu dem die Aggregation innerhalb eines Intervalls oder Bins beendet wird.
ptw Gibt das Unterintervall in Bezug auf jedes Fensterintervall an.
raw Wenn auf True gesetzt, werden Rohwerte der Variablen im input-Parameter verwendet.
saveGroupbyFormat Standardmäßig werden die formatierten Werte der groupBy-Variablen aus der Eingabetabelle in die Ergebnisse kopiert. Wenn auf False gesetzt, werden sie nicht kopiert.
saveGroupbyRaw Standardmäßig werden die Rohwerte der groupBy-Variablen aus der Eingabetabelle in die Ergebnisse kopiert. Wenn auf False gesetzt, werden sie nicht kopiert.
saveVariableColumn Standardmäßig wird der Variablenname für jede Analysevariable in die Ergebnisse aufgenommen. Wenn auf False gesetzt, wird diese Spalte nicht aufgenommen.
saveVariableSpecification Standardmäßig enthalten die Ergebnisse eine Spalte 'Variable Specification'. Wenn auf False gesetzt, wird diese Spalte nicht aufgenommen.
subBinOffset Gibt einen Versatz vom Anfang eines Bins an.
subBinWidth Gibt die Breite des Unter-Bins innerhalb eines Bins an.
subInterval Gibt ein kleineres Intervall an, um die Ausrichtung des Zeitraums innerhalb jedes Intervalls für die Aggregation von Beobachtungen zu steuern.
table Gibt den Namen der Tabelle, die Caslib und andere allgemeine Parameter an.
varSpecs Gibt die zu aggregierende Variable und die Einstellungen für den Aggregator an.
weight Gibt eine numerische Variable an, deren Werte als Gewichtung der numerischen Analysevariablenwerte verwendet werden, wenn der Aggregator SUMMARY ist.
windowBin Gibt die Minimal- und Maximalwerte eines Fenster-Bins an.
windowInt Gibt das Zeitfenster für die Akkumulation von Beobachtungen in Bezug auf jedes Zeitintervall an.
windowOffset Gibt den Versatz jedes Fensterintervalls an.
windowSubBinOffset Gibt den Startpunkt innerhalb eines Fenster-Bins an, an dem die Aggregation von Datensatzwerten beginnt.
windowSubBinWidth Gibt die Breite des Unter-Bins innerhalb jedes windowBin an.
windowSubInt Ähnlich wie subInterval, gibt ein kleineres Intervall zur Steuerung der Ausrichtung des Unterzeitraums innerhalb jedes Fensterintervalls an.
Erstellung von Beispieldaten

Dieser Code erstellt eine CAS-Tabelle namens 'my_table', die für die folgenden Beispiele verwendet wird. Sie enthält Informationen über Produkte, Verkaufsdaten und Mengen.

Kopiert!
1DATA mycas.my_table;
2 informat date DATE9.;
3 FORMAT date DATE9.;
4 INPUT product $ date date9. quantity;
5 DATALINES;
6ProductA 01JAN2023 10
7ProductB 01JAN2023 20
8ProductA 02JAN2023 15
9ProductC 02JAN2023 30
10ProductB 03JAN2023 25
11ProductA 03JAN2023 12
12;
13RUN;

Beispiele

Dieses Beispiel zeigt, wie man grundlegende zusammenfassende Statistiken für eine einzelne numerische Spalte ('quantity') in der Tabelle 'my_table' berechnet.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 aggregation.aggregate /
3 TABLE={name='my_table'},
4 varSpecs={{name='quantity'}}
5 ;
6RUN;
Ergebnis :
Die Ergebnistabelle zeigt die zusammenfassenden Statistiken (MIN, MAX, N, MEAN, SUM, STD, usw.) für die Spalte 'quantity' über die gesamte Tabelle.

Dieses Beispiel aggregiert die 'quantity'-Spalte, gruppiert aber die Ergebnisse nach der 'product'-Spalte. Anstatt aller zusammenfassenden Statistiken werden nur die Anzahl der Beobachtungen (N), die Summe (SUM) und der Mittelwert (MEAN) für jedes Produkt berechnet.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 aggregation.aggregate /
3 TABLE={name='my_table', groupBy={'product'}},
4 varSpecs={{name='quantity', agg='SUMMARY', summarySubset={'N', 'SUM', 'MEAN'}}}
5 ;
6RUN;
Ergebnis :
Die Ergebnistabelle enthält drei Zeilen, eine für jedes Produkt (ProductA, ProductB, ProductC). Jede Zeile zeigt die Anzahl der Verkäufe, die Gesamtmenge und die durchschnittliche Menge für das jeweilige Produkt.

Dieses Beispiel zeigt, wie man Daten über Zeitintervalle aggregiert. Es verwendet die 'date'-Spalte als ID-Variable und aggregiert die 'quantity'-Daten täglich ('DAY'). Dies ist nützlich, um Zeitreihenanalysen durchzuführen.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 aggregation.aggregate /
3 TABLE={name='my_table', groupBy={'date'}},
4 id='date',
5 interval='DAY',
6 varSpecs={{name='quantity', agg='SUM'}}
7 ;
8RUN;
Ergebnis :
Die Ergebnistabelle zeigt die Gesamtmenge ('quantity_SUM') für jeden Tag, der in den Daten vorhanden ist. Die 'date'-Spalte wird als Zeit-ID für die aggregierten Ergebnisse verwendet.

Dieses Beispiel führt eine rollierende Aggregation durch. Es berechnet die Summe der 'quantity' über ein rollierendes 2-Tage-Fenster. Der Parameter 'doESP' wird verwendet, um die Verarbeitung zu optimieren, indem die Daten nach Datum sortiert werden.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 aggregation.aggregate /
3 TABLE={name='my_table', groupBy={'date'}, orderBy={'date'}},
4 id='date',
5 interval='DAY',
6 windowInt='DAY2',
7 doESP=true,
8 varSpecs={{name='quantity', agg='SUM'}}
9 ;
10RUN;
Ergebnis :
Die Ergebnistabelle zeigt für jedes Datum die Summe der 'quantity' des aktuellen Tages und des Vortages. Dies erzeugt eine rollierende Summe über ein 2-Tage-Fenster.

FAQ

Was bewirkt die Aktion `aggregate`?
Was sind einige häufige Anwendungsfälle für die Aktion `aggregate`?
Wie gebe ich die Eingabetabelle für die Aktion `aggregate` an?
Wie kann ich eine Ausgabetabelle für die Ergebnisse der Aggregation definieren?
Welchen Zweck hat der Parameter `varSpecs`?
Welche Arten von Aggregatoren sind in der Aktion `aggregate` verfügbar?
Wie kann ich Daten basierend auf Zeitintervallen aggregieren?

Zugehörige Szenarien

Anwendungsfall
Monatliche Produktleistungsanalyse nach Region

Ein Einzelhandelsunternehmen möchte die monatliche Verkaufsleistung für verschiedene Produktkategorien in mehreren Regionen analysieren. Ziel ist es, den Gesamtumsatz, den durch...

Anwendungsfall
Analyse der Datenqualität von IoT-Sensoren mit fehlenden Werten

Ein Industrieunternehmen überwacht Maschinen mit IoT-Sensoren, die minütlich Temperaturdaten senden. Aufgrund von Netzwerkproblemen gehen einige Messwerte verloren. Das Ziel ist...

Anwendungsfall
Berechnung des rollierenden Transaktionsvolumens zur Betrugserkennung

Eine Finanzinstitution muss zur Betrugserkennung in Echtzeit ein rollierendes 30-Minuten-Fenster der Transaktionssummen für jeden Kunden berechnen. Eine plötzliche hohe Summe ka...