Friday, October 21, 2016

Gleitende Durchschnittsfunktion In Sas

Der Beispielcode auf der Registerkarte Voller Code veranschaulicht, wie der gleitende Durchschnitt einer Variablen über einen gesamten Datensatz, über die letzten N Beobachtungen in einem Datensatz oder über die letzten N Beobachtungen innerhalb einer BY-Gruppe berechnet wird. Diese Beispieldateien und Codebeispiele werden von SAS Institute Inc. bereitgestellt, und zwar ohne Gewährleistung jeglicher Art, entweder ausdrücklich oder implizit, einschließlich aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck. Die Empfänger erkennen an und stimmen zu, dass SAS Institute nicht für irgendwelche Schäden haftbar ist, die sich aus ihrer Verwendung dieses Materials ergeben. Darüber hinaus bietet das SAS Institute keine Unterstützung für die hierin enthaltenen Materialien. Diese Beispieldateien und Codebeispiele werden von SAS Institute Inc. bereitgestellt, und zwar ohne Gewährleistung jeglicher Art, entweder ausdrücklich oder implizit, einschließlich aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck. Die Empfänger erkennen an und stimmen zu, dass SAS Institute nicht für irgendwelche Schäden haftbar ist, die sich aus ihrer Verwendung dieses Materials ergeben. Darüber hinaus bietet das SAS Institute keine Unterstützung für die hierin enthaltenen Materialien. Berechnen Sie den gleitenden Durchschnitt einer Variablen über einen ganzen Datensatz, über die letzten N Beobachtungen in einem Datensatz oder über die letzten N Beobachtungen innerhalb einer BY-Gruppe. Moving Average In diesem Beispiel erfahren Sie, wie Sie den gleitenden Durchschnitt einer Zeit berechnen können Reihe in Excel. Eine Bewegung wird verwendet, um Unregelmäßigkeiten (Spitzen und Täler) zu glätten, um Trends leicht zu erkennen. 1. Erstens, werfen wir einen Blick auf unsere Zeitreihe. 2. Klicken Sie auf der Registerkarte Daten auf Datenanalyse. Hinweis: Klicken Sie hier, um das Analyse-ToolPak-Add-In zu laden. 3. Wählen Sie Verschiebender Durchschnitt aus, und klicken Sie auf OK. 4. Klicken Sie im Feld Eingabebereich auf den Bereich B2: M2. 5. Klicken Sie in das Feld Intervall und geben Sie 6 ein. 6. Klicken Sie in das Feld Ausgabebereich und wählen Sie Zelle B3 aus. 8. Zeichnen Sie ein Diagramm dieser Werte. Erläuterung: Da wir das Intervall auf 6 setzen, ist der gleitende Durchschnitt der Durchschnitt der letzten 5 Datenpunkte und der aktuelle Datenpunkt. Als Ergebnis werden Spitzen und Täler geglättet. Die Grafik zeigt eine zunehmende Tendenz. Excel kann den gleitenden Durchschnitt für die ersten 5 Datenpunkte nicht berechnen, da nicht genügend frühere Datenpunkte vorhanden sind. 9. Wiederholen Sie die Schritte 2 bis 8 für Intervall 2 und Intervall 4. Fazit: Je größer das Intervall, desto mehr werden die Spitzen und Täler geglättet. Je kleiner das Intervall, desto näher sind die gleitenden Mittelwerte zu den tatsächlichen Datenpunkten. Gefällt Ihnen diese kostenlose Website Bitte teilen Sie diese Seite auf GoogleSummary-Funktionen erzeugen eine statistische Zusammenfassung der gesamten Tabelle oder Ansicht in der FROM-Klausel oder für jede Gruppe in einer GROUP BY-Klausel angegeben. Wenn GROUP BY weggelassen wird, werden alle Zeilen in der Tabelle oder Ansicht als eine einzelne Gruppe betrachtet. Diese Funktionen reduzieren alle Werte in jeder Zeile oder Spalte in einer Tabelle auf einen Summen - oder Summenwert. Aus diesem Grund werden diese Funktionen oft als Aggregatfunktionen bezeichnet. Beispielsweise ergibt sich aus der Addition aller Werte in der Spalte die Summe (ein Wert) einer Spalte. Einige Funktionen haben mehr als einen Namen, um sowohl SAS - als auch SQL-Konventionen zu berücksichtigen: AVG, MEAN-Mittelwerte oder Durchschnittswerte der Werte COUN, FREQ, N Anzahl der nicht vernachlässigten Werte CSS korrigierte Quadratsumme CV Variationskoeffizient (Prozent) MAX größter Wert MIN kleinster Wert NMISS Anzahl der fehlenden Werte PRT Wahrscheinlichkeit eines größeren Absolutwerts der Studenten t RANGE Wertebereich STD Standardabweichung STDERR Standardfehler der mittleren SUM Summe der Werte SUMWGT Summe der WEIGHT Variablenwerte (Fußnote 1) T Schüler t Wert zum Testen der Hypothese, dass die Bevölkerungszahl Null ist USS unkorrigierte Quadratsumme Eine Beschreibung und die Formeln, die für diese Statistiken verwendet werden, finden Sie unter SAS Elementare Statistikprozeduren Die COUNT-Funktion zählt Zeilen. COUNT () gibt die Gesamtzahl der Zeilen in einer Gruppe oder in einer Tabelle zurück. Wenn Sie einen Spaltennamen als Argument für COUNT verwenden, ist das Ergebnis die Gesamtzahl der Zeilen in einer Gruppe oder in einer Tabelle, die einen nicht zulässigen Wert für diese Spalte aufweisen. Wenn Sie die eindeutigen Werte in einer Spalte zählen möchten, geben Sie COUNT (Spalte DISTINCT) an. Wenn die SELECT-Klausel eines Tabellenausdrucks eine oder mehrere Summationsfunktionen enthält und der Tabellenausdruck auf keine Zeilen aufgelöst wird, sind die Ergebnisse der Ergebniszusammenfassung fehlende Werte. Im Folgenden finden Sie Ausnahmen, die Nullen zurückgeben: Die Anzahl der in einer Summary-Funktion angegebenen Argumente wirkt sich auf die Berechnung der Berechnung aus. Wenn Sie ein einzelnes Argument angeben, werden die Werte in der Spalte berechnet. Wenn Sie mehrere Argumente angeben, werden die aufgelisteten Argumente oder Spalten für jede Zeile berechnet. Betrachten Sie zum Beispiel Berechnungen in der folgenden Tabelle. Wenn Sie ein Argument in der Funktion verwenden, wird die Berechnung nur in dieser Spalte durchgeführt. Wenn Sie mehr als ein Argument verwenden, wird die Berechnung für jede Zeile der angegebenen Spalten durchgeführt. Im folgenden PROC SQL-Schritt geben die MIN - und MAX-Funktionen das Minimum und Maximum der Spalten zurück, mit denen sie verwandt werden. Die SUM-Funktion gibt die Summe jeder Zeile der Spalten zurück, die als Argumente angegeben werden: Wenn Sie eine Summary-Funktion in einer SELECT-Klausel oder einer HAVING-Klausel verwenden, sehen Sie möglicherweise die folgende Meldung im SAS-Protokoll: Der Prozess des Auftretens umfasst zwei Durchläufe die Daten. Beim ersten Durchlauf berechnet PROC SQL den Wert der Summenfunktionen und gibt diesen zurück. Es verwendet dann das Ergebnis, um die arithmetischen Ausdrücke zu berechnen, an denen die Zusammenfassungsfunktion beteiligt ist. Gruppendaten gemäß der GROUP BY-Klausel. Beim zweiten Durchlauf ermittelt PROC SQL alle zusätzlichen Spalten und Zeilen, die in der Ausgabe angezeigt werden sollen. In den folgenden Beispielen wird die Tabelle PROCLIB. PAYROLL (unter Erstellen einer Tabelle aus einem Querys-Ergebnis) angezeigt, die zeigt, wann das erneute Aufzeichnen der Daten erfolgt und nicht erforderlich ist. Die erste Abfrage erfordert das Auftauchen. Der erste Durchlauf durch die Daten gruppiert die Daten nach Jobcode und löscht die AVG-Funktion für jede Gruppe. Jedoch muss PROC SQL einen zweiten Durchlauf machen, um die Werte von IdNumber und Salary abzurufen. Sie können die vorherige Abfrage ändern, um nur den durchschnittlichen Lohn für jeden Jobcode zurückzugeben. Die folgende Abfrage erfordert kein Auftauchen, da der erste Durchlauf der Daten die Zusammenfassung und die Gruppierung führt. Ein zweiter Durchlauf ist nicht erforderlich. Wenn Sie die HAVING-Klausel verwenden, muss PROC SQL möglicherweise Daten neu aufrufen, um den HAVING-Ausdruck aufzulösen. Betrachten Sie zuerst eine Abfrage, die HAVING verwendet, aber das erfordert kein Wiederauftauchen. Die Abfrage gruppiert die Daten nach Werten des Jobcodes und das Ergebnis enthält eine Zeile für jeden Jobcode - und Summenwert für Personen in jedem Jobcode. Beim ersten Durchlauf liefern die Summenfunktionen Werte für die Zahl. Durchschnittsalter . Und Durchschnittsgehaltsspalten. Der erste Durchgang liefert alles, was PROC SQL braucht, um die HAVING-Klausel aufzulösen, so dass kein Neustart erforderlich ist. In der folgenden Abfrage legt PROC SQL die Daten wieder auf, da die HAVING-Klausel die SALARY-Spalte im Vergleich verwendet und SALARY nicht in der GROUP BY-Klausel steht. Denken Sie daran, dass PROC SQL Daten erneut regeneriert, wenn die Werte, die von einer Summary-Funktion zurückgegeben werden, in einer Berechnung verwendet werden. Beispielsweise gibt die folgende Abfrage die Werte von X und den Prozentsatz der Summe für jede Zeile zurück. Auf dem ersten Durchlauf berechnet PROC SQL die Summe von X, und auf dem zweiten Durchlauf berechnet PROC SQL den Prozentsatz der Summe für jeden Wert von X: die von einer Summary-Funktion zurückgegebenen Werte werden mit Werten einer Spalte verglichen, die nicht angegeben ist In der GROUP BY-Klausel. Die folgende Abfrage verwendet beispielsweise die PROCLIB. PAYROLL-Tabelle. PROC SQL regeneriert Daten, da die Spalte Gehalt in der GROUP BY-Klausel nicht angegeben ist: eine Spalte aus der Eingabetabelle wird in der SELECT-Klausel angegeben und in der GROUP BY-Klausel nicht angegeben. Diese Regel bezieht sich nicht auf Spalten, die als Argumente für Summationsfunktionen in der SELECT-Klausel verwendet werden. Beispielsweise führt in der folgenden Abfrage das Vorhandensein von IdNumber in der SELECT-Klausel dazu, dass PROC SQL die Daten erneut eingibt, da IdNumber während des ersten Durchlaufs nicht an einer Gruppierung oder einer Zusammenfassung beteiligt ist. Um für PROC SQL die Werte für IdNumber abzurufen, muss es einen zweiten Durchlauf durch die data. Im ein SAS Anfänger und Im neugierig machen, wenn die folgende Aufgabe kann viel einfacher getan werden, wie es derzeit in meinem Kopf. Ich habe die folgenden (vereinfachten) Metadaten in einer Tabelle namens userdatemoney: Benutzer - Datum - Geld mit verschiedenen Benutzern und Daten für jeden Kalendertag (für die letzten 4 Jahre). Die Daten werden von User ASC und Date ASC geordnet, Beispieldaten sieht so aus: Ich möchte nun einen fünftägigen gleitenden Durchschnitt für das Geld berechnen. Ich begann mit der beliebten apprach mit der Funktion lag () wie folgt: Das Problem mit dieser Methode tritt auf, wenn der Datenschritt in einen neuen Benutzer läuft. Aron würde einige verzögerte Werte von Anna bekommen, was natürlich nicht passieren sollte. Nun meine Frage: Ich bin ziemlich sicher, dass Sie den Benutzer wechseln können, indem Sie einige zusätzliche Felder wie laggeduser und durch Rücksetzen der N, Summe und Mean-Variablen, wenn Sie einen solchen Schalter bemerken, aber: Kann dies in einer einfacheren Weise getan werden Vielleicht mit dem BY-Klausel in irgendeiner Weise Vielen Dank für Ihre Ideen und Hilfe Ich denke, der einfachste Weg ist, um PROC EXPAND verwenden: Und wie in Johns Kommentar erwähnt, ist es wichtig, über fehlende Werte (und auch über Anfang und Ende Beobachtungen) zu erinnern. Ive hinzugefügt SETMISS-Option, um den Code, da Sie klar, dass Sie zerofy fehlende Werte wollen, ignorieren sie (Standard-MOVAVE-Verhalten). Und wenn Sie die ersten 4 Beobachtungen für jeden Benutzer ausschließen möchten (da sie nicht genug Vorgeschichte haben, um den gleitenden Durchschnitt 5 zu berechnen), können Sie die Option TRIMLEFT 4 innerhalb von TRANSFORMOUT () verwenden. Antwortete Dec 3 13 um 15: 29In diesem Beitrag, zeige ich einen Trick, um gleitende durchschnittliche Berechnung zu tun (kann auf andere Operationen erweitert werden, die Fenster-Funktionen), die super schnell ist. Häufig müssen SAS-Analytiker eine gleitende Durchschnittsberechnung durchführen und es gibt mehrere Optionen in der Reihenfolge der Präferenz: 1. PROC EXPAND 2. DATENSCHRITT 3. PROC SQL Aber viele Standorte dürfen nicht SAS / ETS verwenden, um PROC EXPAND zu verwenden und gleitenden Durchschnitt zu machen In DATA STEP erfordert eine Codierung und ist fehleranfällig. PROC SQL ist eine natürliche Wahl für Junior-Programmierer und in vielen Business-Fällen die einzige Lösung, aber SAS39s PROC SQL fehlt Fenster-Funktionen, die in vielen DBs verfügbar sind, um gleitende durchschnittliche Berechnung zu erleichtern. Eine Technik, die Menschen in der Regel verwenden, ist CROSS JOIN, das ist sehr teuer und keine praktikable Lösung für auch mittelgroße Datensätze. In diesem Beitrag zeige ich einen Trick, um die gleitende Durchschnittsberechnung durchzuführen (kann auf andere Operationen erweitert werden, die Fensterfunktionen erfordern), die super schnell ist. Man betrachte die einfachste gleitende Durchschnittsberechnung, wo die nachfolgenden K-Beobachtungen in die Berechnung einbezogen werden, nämlich MA (K), hier setzen wir K5. Zuerst erzeugen wir 20 Obsample-Daten, wobei die Variablen-ID für das Fenstering verwendet werden soll und die Variable X für die MA-Berechnung verwendet wird. Anschließend wenden wir den Standard CROSS JOIN an, um zuerst die resultierenden Daten, nicht gruppiert, zu untersuchen Um zu verstehen, wie die Datenstruktur genutzt werden kann. Aus dem resultierenden Datensatz ist es schwer, einen Anhaltspunkt zu finden, jetzt let39s sortieren durch quotbidquot Spalte in diesem Datensatz: Von diesen sortierten Daten ist es klar, dass wir tatsächlich don39t haben, CROSS JOIN den gesamten ursprünglichen Datensatz, Können wir einen Quotequotdatensatz erzeugen, der den Differenzwert enthält und den ursprünglichen Datensatz CROSS JOIN mit diesem viel kleineren Quottendatensatz setzen und alle Daten, die wir für die MA-Berechnung verwenden müssen, dort sein werden. Nun let39s tun es: CROSS JOIN ursprünglichen Daten mit quot Operationquot-Daten, sortieren nach (a. idops), die eigentlich quotbid39 in sortierten Datensatz Beachten Sie, dass in obigen Code ist es notwendig, ax multiplizieren mit b. weight, so dass die Daten Kann zwischengeschleift werden, da sonst der gleiche X-Wert aus der ursprünglichen Tabelle ausgegeben wird und die MA-Berechnung fehlgeschlagen ist. Die explizite Gewichtsvariable fügt der gesamten MA-Berechnung tatsächlich mehr Flexibilität hinzu. Beim Festlegen von 1 für alle obs-Ergebnisse in einer einfachen MA-Berechnung, zuweisen, verschiedene Gewichte wird dazu beitragen, komplexere MA-Computing, wie z. B. geben weitere Beobachtungen weniger Gewicht für ein zerlegtes MA. Wenn unterschiedliche K-Parameter in MA (K) Berechnungen erforderlich sind, muss nur der Betriebsdatensatz aktualisiert werden, was trivialer Job ist. Nun ist die eigentliche Code-Vorlage für MA (K) Berechnung: Mit dieser neuen Methode ist es interessant, sie mit dem teuren Self CROSS JOIN sowie PROC EXPAND zu vergleichen. Auf meiner Workstation (Intel i5 3.8Ghz, 32GB Speicher, 1TB 72K HDD) ist selbst CROSS JOIN prohibitiv lang in der Laufzeit (wenn die Daten groß sind), während die neue Methode nur 2X so viel Zeit wie PROC EXPAND verwendet, sind beide Zeitaufwendungen Trivial Vergleich mit Self CROSS JOIN. Der unten gezeigte Zeitverbrauch ist in Sekunden angegeben. Unten können die Code-Leser laufen und vergleichen Sie sich. Geschrieben 10. Mai 2015 von Liang Xie SAS Programmierung für Data Mining


No comments:

Post a Comment