?> aggregate - WeAreCAS
aggregation

aggregate

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
alignGibt die Ausrichtung des repräsentativen Wertes in Bezug auf ein Intervall oder einen Bin an.
binGibt die Minimal- und Maximalwerte eines Bins an.
casOutGibt die Einstellungen für eine Ausgabetabelle an.
contributeWenn der Parameter doESP auf True gesetzt ist, können Sie eine Variable angeben, deren Werte innerhalb jedes Aggregationsintervalls aufgezeichnet werden.
contributeColumnLabelGibt einen Wert an, um das Variablenlabel der contribute-Variable zu überschreiben.
contributeColumnNameGibt einen Wert an, um den Variablennamen der contribute-Variable zu überschreiben.
contributeDelimiterGibt ein Trennzeichen an, das zwischen verketteten Werten der contribute-Variable verwendet wird.
contributeTrimWenn auf True gesetzt, werden führende und nachfolgende Leerzeichen vom formatierten Wert der contribute-Variable entfernt.
contributeUnrollWenn auf True gesetzt, fügt jeder Rohwert aus der contribute-Variable eine Zeile zur Ergebnistabelle hinzu.
copyVarsGibt die Variablen an, die von der Eingabetabelle in die Ausgabetabelle kopiert werden sollen.
doESPWenn auf True gesetzt, kann die Aktion die Partitionierung und Sortierung der Eingabetabelle nutzen.
edgeIdGibt eine numerische Variable an, deren Werte zur Sortierung der Werte jeder varSpecs-Spezifikation verwendet werden, die die Aggregatoren FIRST, LAST, FNE oder LNE verwendet.
exclnpwgtWenn auf True gesetzt und eine Gewichtungsvariable angegeben ist, werden Beobachtungen mit einem nicht-positiven Gewichtungswert von der Analyse ausgeschlossen.
excludeSelfWenn auf True gesetzt und der doESP-Parameter True ist, schließt die Aggregation den Beitrag der aktuellen Beobachtung aus.
freqGibt eine numerische Variable an, deren Werte als Häufigkeit der Analysevariablenwerte verwendet werden.
freqStrictBezieht 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.
groupByLimitGibt die maximale Anzahl von Ebenen in einem Group-by-Satz an.
groupedIntervalOutputWenn auf True gesetzt, wird nur eines der gleichen aggregierten Intervalle in Bezug auf den letzten Id-Wert gespeichert.
idGibt eine numerische Variable an, die den Zeitstempel identifiziert, der mit jeder Beobachtung in der Eingabetabelle verknüpft ist.
idEndGibt den inklusiven Maximalwert der ID-Variable an, der in der Analyse berücksichtigt werden soll.
idOutputNameGibt den neuen Namen der ID-Variable in der Ausgabetabelle an.
idRangeGibt die inklusiven Minimal- und Maximalwerte der ID-Variable an, die in der Analyse berücksichtigt werden sollen.
idStartGibt den inklusiven Minimalwert der ID-Variable an, der in der Analyse berücksichtigt werden soll.
includeEmptyIntervalStandardmäßig werden Intervalle mit einem fehlenden Wert für die ID-Variable in die Ausgabe einbezogen. Wenn auf False gesetzt, werden diese Intervalle ausgeschlossen.
includeMissingStandardmäßig werden fehlende Werte in die Analyse einbezogen. Wenn auf False gesetzt, werden Beobachtungen mit fehlenden Werten ausgeschlossen.
inputsGibt die Eingabevariablen an, die in der Analyse verwendet werden sollen.
intervalGibt den Zeitraum für die Akkumulation von Beobachtungen an.
jumpingWindowWenn 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.
keepRecordWenn auf True gesetzt, wird der ursprüngliche Wert jeder Beobachtung für die ID-Variable ohne Intervallausrichtung beibehalten.
keepRecordIdWenn auf True gesetzt und der doESP-Parameter True ist, wird der ursprüngliche ID-Wert jeder Beobachtung ohne Intervallausrichtung beibehalten.
modeSingleBezieht 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.
offsetGibt den Versatz jedes Intervalls an.
partKeyWenn die Tabelle partitioniert ist, können Sie einen Partitionsschlüssel angeben, damit die Ergebnisse nur für diese Partition berechnet werden.
pctlDefGibt an, wie Quantilstatistiken (Perzentile) berechnet werden.
ptiGibt den Zeitwert an, zu dem die Aggregation innerhalb eines Intervalls oder Bins beendet wird.
ptwGibt das Unterintervall in Bezug auf jedes Fensterintervall an.
rawWenn auf True gesetzt, werden Rohwerte der Variablen im input-Parameter verwendet.
saveGroupbyFormatStandardmäßig werden die formatierten Werte der groupBy-Variablen aus der Eingabetabelle in die Ergebnisse kopiert. Wenn auf False gesetzt, werden sie nicht kopiert.
saveGroupbyRawStandardmäßig werden die Rohwerte der groupBy-Variablen aus der Eingabetabelle in die Ergebnisse kopiert. Wenn auf False gesetzt, werden sie nicht kopiert.
saveVariableColumnStandardmäßig wird der Variablenname für jede Analysevariable in die Ergebnisse aufgenommen. Wenn auf False gesetzt, wird diese Spalte nicht aufgenommen.
saveVariableSpecificationStandardmäßig enthalten die Ergebnisse eine Spalte 'Variable Specification'. Wenn auf False gesetzt, wird diese Spalte nicht aufgenommen.
subBinOffsetGibt einen Versatz vom Anfang eines Bins an.
subBinWidthGibt die Breite des Unter-Bins innerhalb eines Bins an.
subIntervalGibt ein kleineres Intervall an, um die Ausrichtung des Zeitraums innerhalb jedes Intervalls für die Aggregation von Beobachtungen zu steuern.
tableGibt den Namen der Tabelle, die Caslib und andere allgemeine Parameter an.
varSpecsGibt die zu aggregierende Variable und die Einstellungen für den Aggregator an.
weightGibt eine numerische Variable an, deren Werte als Gewichtung der numerischen Analysevariablenwerte verwendet werden, wenn der Aggregator SUMMARY ist.
windowBinGibt die Minimal- und Maximalwerte eines Fenster-Bins an.
windowIntGibt das Zeitfenster für die Akkumulation von Beobachtungen in Bezug auf jedes Zeitintervall an.
windowOffsetGibt den Versatz jedes Fensterintervalls an.
windowSubBinOffsetGibt den Startpunkt innerhalb eines Fenster-Bins an, an dem die Aggregation von Datensatzwerten beginnt.
windowSubBinWidthGibt 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.
Datenaufbereitung
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.

data mycas.my_table;
  informat date DATE9.;
  format date DATE9.;
  input product $ date date9. quantity;
  datalines;
ProductA 01JAN2023 10
ProductB 01JAN2023 20
ProductA 02JAN2023 15
ProductC 02JAN2023 30
ProductB 03JAN2023 25
ProductA 03JAN2023 12
;
run;

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
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
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
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
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...