Im ein SAS Anfänger und Im neugierig, wenn die folgende Aufgabe viel einfacher gemacht werden kann, wie es derzeit in meinem Kopf ist. Ich habe die folgenden (vereinfachten) Metadaten in einer Tabelle namens userdatemoney: User - Date - 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 bestellt, Beispieldaten sehen so aus: Ich möchte nun einen fünftägigen gleitenden Durchschnitt für das Geld berechnen. Ich begann mit dem ziemlich populären apprach mit der lag () Funktion wie folgt: Wie Sie sehen, das Problem mit dieser Methode tritt auf, wenn es wenn der Datenschritt in einen neuen Benutzer läuft. Aron bekam einige hintere Werte von Anna, was natürlich nicht passieren sollte. Nun meine Frage: Ich bin mir ziemlich sicher, dass du mit dem User-Switch umgehen kannst, indem du einige zusätzliche Felder wie laggeduser hinzufügst und die N-, Summen - und Mean-Variablen zurücksetzest, wenn du einen solchen Schalter kennst, aber das kann man einfacher machen BY Klausel in irgendeiner Weise Danke für deine Ideen und Hilfe Ich denke, der einfachste Weg ist, PROC EXPAND zu verwenden: Und wie in Johns Kommentar erwähnt, ist es wichtig, sich an fehlende Werte zu erinnern (und auch über Anfangs - und Endbeobachtungen). Ive hat die SETMISS-Option zum Code hinzugefügt, da du klar gemacht hast, dass du zerofy fehlende Werte willst, ignorierst sie nicht (Standard-MOVAVE-Verhalten). Und wenn du die ersten 4 Beobachtungen für jeden Benutzer ausschließen willst (da sie nicht genug Vorgeschichte haben, um den gleitenden Durchschnitt zu berechnen 5), kannst du die Option TRIMLEFT 4 innerhalb von TRANSFORMOUT () verwenden. Beantwortet am 3. Dezember 13 um 15: 29Beginnend in Release 6.08 des SAS-Systems kann PROC EXPAND in der SASETS-Software verwendet werden, um eine Vielzahl von Datenumwandlungen vorzunehmen. Diese Transformationen beinhalten: Leads, Lags, gewichtete und ungewichtete gleitende Durchschnitte, bewegte Summen und kumulative Summen, um nur einige zu nennen. Viele neue Transformationen wurden in Release 6.12 hinzugefügt, einschließlich separater Spezifikationen für zentrierte und rückwärts bewegte Durchschnitte. Diese neuen Transformationen machten es notwendig, die Syntax für einige der vor Release 6.12 unterstützten Transformationen zu ändern. Beispiele für die Angabe der Syntax für zentrierte und rückwärts bewegte Mittelwerte mit Release 6.11 und früher und Release 6.12 und höher sind nachfolgend aufgeführt. PROC EXPAND kann entweder einen zentrierten gleitenden Durchschnitt oder einen rückwärts gleitenden Durchschnitt berechnen. Ein 5-Perioden-zentrierter gleitender Durchschnitt wird berechnet durch Mittelung von insgesamt 5 aufeinanderfolgenden Werten der Reihe (der aktuelle Periodenwert zusätzlich zu den beiden unmittelbar vorhergehenden Werten und zwei unmittelbar nach dem aktuellen Wert folgenden Werten). Ein 5-fach rückwärts gleitender Durchschnitt wird berechnet, indem der aktuelle Periodenwert mit den Werten aus den 4 unmittelbar vorhergehenden Perioden gemittelt wird. Die folgende Syntax veranschaulicht, wie die TRANSFORM (MOVAVE n) - Spezifikation verwendet wird, um einen 5-Perioden-Zentrier-Gleitender Durchschnitt mit Release 6.11 oder früher zu berechnen: Um einen n-Perioden-Rückwärts-Gleitender Durchschnitt mit Release 6.11 oder früher zu berechnen, verwenden Sie die TRANSFORM (MOVAVE N LAG k) Spezifikation, wobei k (n-1) 2, wenn n ungerade ist oder wo k (n-2) 2 ist, wenn n gerade ist. Beispielsweise veranschaulicht die folgende Syntax, wie ein 5-fach rückwärts gleitender Durchschnitt mit Release 6.11 oder früher berechnet werden kann. Die folgende Syntax veranschaulicht, wie die TRANSFORM (CMOVAVE n) - Spezifikation verwendet wird, um einen 5-Perioden-zentrierten gleitenden Durchschnitt mit Release 6.12 oder zu berechnen Später: Die folgende ähnliche Syntax veranschaulicht, wie die TRANSFORM (MOVAVE n) - Spezifikation verwendet wird, um einen 5-fach rückwärts gleitenden Durchschnitt mit Release 6.12 oder höher zu berechnen: Weitere Informationen finden Sie unter Transformationsoperationen im EXPAND-Kapitel des SASETS-Benutzerhandbuchs. Wenn Sie keinen Zugriff auf SASETS haben, können Sie einen gleitenden Durchschnitt im DATA-Schritt berechnen, wie in diesem Beispielprogramm dargestellt. Betriebssystem - und Freigabeinformationen Der Beispielcode auf der Registerkarte Vollcode veranschaulicht, wie der gleitende 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 berechnet wird. Diese Beispieldateien und Codebeispiele werden von SAS Institute Inc. zur Verfügung gestellt, wie es ohne jegliche Gewährleistung, weder ausdrücklich noch stillschweigend, einschließlich, aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck ist. Die Empfänger bestätigen und stimmen zu, dass das SAS-Institut nicht für irgendwelche Schäden haftbar ist, die sich aus der Verwendung dieses Materials ergeben. Darüber hinaus wird das SAS-Institut die hierin enthaltenen Materialien nicht unterstützen. Diese Beispieldateien und Codebeispiele werden von SAS Institute Inc. zur Verfügung gestellt, wie es ohne jegliche Gewährleistung, weder ausdrücklich noch stillschweigend, einschließlich, aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck ist. Die Empfänger bestätigen und stimmen zu, dass das SAS-Institut nicht für irgendwelche Schäden haftbar ist, die sich aus der Verwendung dieses Materials ergeben. Darüber hinaus wird das SAS-Institut die hierin enthaltenen Materialien nicht unterstützen. Berechnen Sie den gleitenden Durchschnitt einer Variablen durch einen ganzen Datensatz, über die letzten N Beobachtungen in einem Datensatz oder über die letzten N Beobachtungen innerhalb eines BY-grouppute einen gleitenden Durchschnitt in SAS Eine gemeinsame Frage zu SAS Diskussionsforen ist, wie zu berechnen Ein gleitender Durchschnitt in SAS. Dieser Artikel zeigt, wie man PROC EXPAND verwendet und Links zu Artikeln enthält, die den DATA-Schritt oder Makros verwenden, um gleitende Mittelwerte in SAS zu berechnen. In einem früheren Beitrag erklärte ich, wie man einen gleitenden Durchschnitt definiert und ein Beispiel gibt, das hier gezeigt wird. Die Grafik ist ein Streudiagramm des monatlichen Schlusskurses für IBM Lager über einen Zeitraum von 20 Jahren. Die drei Kurven bewegen sich im Durchschnitt. Die MA-Kurve ist ein Fünfpunkt - (nachlaufender) gleitender Durchschnitt. Die WMA-Kurve ist ein gewichteter gleitender Durchschnitt mit den Gewichten 1 bis 5. (Bei der Berechnung des gewichteten gleitenden Durchschnitts zum Zeitpunkt t ist der Wert yt das Gewicht 5, der Wert y t-1 hat das Gewicht 4, der Wert y t-2 hat ein Gewicht 3 und so weiter.) Die EWMA-Kurve ist ein exponentiell gewichteter gleitender Durchschnitt mit Glättungsfaktor alpha 0.3. Dieser Artikel zeigt, wie die EXPAND-Prozedur in der SASETS-Software verwendet wird, um einen einfachen gleitenden Durchschnitt, einen gewichteten gleitenden Durchschnitt und einen exponentiell gewichteten gleitenden Durchschnitt in SAS zu berechnen. Für einen Überblick über PROC EXPAND und seine vielen Fähigkeiten empfehle ich das Lesen der kurzen Papier Stupid Human Tricks mit PROC EXPAND von David Cassell (2010). Da nicht jeder SAS-Kunde eine Lizenz für SASETS-Software hat, gibt es Links am Ende dieses Artikels, die zeigen, wie man einen einfachen gleitenden Durchschnitt in SAS mit dem DATA-Schritt berechnet. Erstellen Sie eine Beispiel-Zeitreihe Bevor Sie einen gleitenden Durchschnitt in SAS berechnen können, benötigen Sie Daten. Der folgende Aufruf von PROC SORT erstellt eine Beispiel-Zeitreihe mit 233 Beobachtungen. Es gibt keine fehlenden Werte. Die Daten werden nach der Zeitvariable T verrechnet. Die Variable Y enthält den monatlichen Schlusskurs der IBM Aktie während eines Zeitraums von 20 Jahren. Berechnen Sie einen gleitenden Durchschnitt in SAS mit PROC EXPAND PROC EXPAND berechnet viele Arten von gleitenden Durchschnitten und andere rollende Statistiken, wie z. B. rollende Standardabweichungen, Korrelationen und kumulative Summen von Quadraten. In der Prozedur identifiziert die ID-Anweisung die Zeitvariable T. Die Daten sollten nach der ID-Variablen sortiert werden. Die CONVERT-Anweisung gibt die Namen der Ein - und Ausgangsvariablen an. Die Option TRANSFORMOUT gibt die Methode und die Parameter an, die zur Berechnung der Rollstatistik verwendet werden. Das Beispiel verwendet drei CONVERT-Anweisungen: Die erste gibt an, dass MA eine Ausgangsvariable ist, die als (rückwärts) gleitender Durchschnitt berechnet wird, der fünf Datenwerte (k 5) verwendet. Die zweite CONVERT-Anweisung gibt an, dass WMA eine Ausgangsvariable ist, die ein gewichteter gleitender Durchschnitt ist. Die Gewichte werden nach dem Verfahren automatisch standardisiert, so dass die Formel WMA (t) (5 yt 4 y t-1 3 y t-2 2 y t-3 1 y t-4) ist. 15. Die dritte CONVERT-Anweisung gibt an, dass EWMA Ist eine Ausgangsvariable, die ein exponentiell gewichteter gleitender Durchschnitt mit Parameter 0.3 ist. Beachten Sie die Option METHODNONE auf der PROC EXPAND-Anweisung. Standardmäßig passt die EXPAND-Prozedur zu kubischen Spline-Kurven zu den nichtmissenden Werten von Variablen. Die METHODNONE-Optionen sorgen dafür, dass die Rohdatenpunkte zur Berechnung der gleitenden Mittelwerte und nicht für interpolierte Werte verwendet werden. Visualisierung von gleitenden Durchschnitten Eine wichtige Verwendung eines gleitenden Durchschnitts ist es, eine Kurve auf einem Streudiagramm der Rohdaten zu überlagern. Damit können Sie kurzfristige Trends in den Daten visualisieren. Der folgende Aufruf von PROC SGPOT erstellt den Graphen an der Oberseite dieses Artikels: Um diesen Artikel so einfach wie möglich zu halten, habe ich nicht diskutiert, wie man fehlende Daten bei der Berechnung von Bewegungsdurchschnitten behandelt. Siehe die Dokumentation für PROC EXPAND für verschiedene Fragen im Zusammenhang mit fehlenden Daten. Insbesondere können Sie die Option METHOD verwenden, um festzulegen, wie man fehlende Werte interpoliert. Sie können auch Transformationsoptionen verwenden, um zu steuern, wie Bewegungsdurchschnitte für die ersten Datenpunkte definiert werden. Erstellen Sie einen gleitenden Durchschnitt in SAS, indem Sie den DATA-Schritt verwenden Wenn Sie keine SASETS-Software haben, zeigen die folgenden Referenzen, wie Sie den SAS-DATA-Schritt verwenden, um einfache gleitende Mittelwerte mit der LAG-Funktion zu berechnen. Die SAS Knowledge Base liefert den Artikel Berechnen Sie den gleitenden Durchschnitt einer Variablen. Premal Vora (2008) vergleicht den DATA-Schritt mit dem PROC EXPAND-Code im Papier Easy Rolling Statistics mit PROC EXPAND. Ron Cody enthält ein SAS-Makro in mehreren seiner Bücher. Zum Beispiel, Codys Sammlung von beliebten SAS-Programmierung Aufgaben und wie man sie anpacken bietet ein Makro namens movingAve. Sie können das Makro als Teil des Beispielcodes und der Daten für das Buch herunterladen. Der DATA-Schritt, der entworfen ist, um eine Beobachtung zu einem Zeitpunkt zu behandeln, ist nicht das beste Werkzeug für Zeitreihenberechnungen, die natürlich mehrere Beobachtungen (Verzögerungen und Leads) erfordern. In einem zukünftigen Blogpost werde ich zeigen, wie man SASIML-Funktionen schreibt, die einfache, gewichtete und exponentiell gewichtete Bewegungsdurchschnitte berechnen. Die Matrixsprache in PROC IML ist einfacher zu arbeiten für Berechnungen, die Zugriff auf mehrere Zeitpunkte erfordern. Über Autor Rick Wicklin, PhD, ist ein renommierter Forscher in Computational Statistics bei SAS und ist ein Hauptentwickler von PROC IML und SASIML Studio. Zu seinen Fachgebieten gehören Berechnungsstatistiken, Simulationen, statistische Grafiken und moderne Methoden in der statistischen Datenanalyse. Rick ist Autor der Bücher Statistische Programmierung mit SASIML Software und Simulation von Daten mit SAS. 7 Kommentare Sie können auch Rollendurchschnitte erstellen, indem Sie PROC SUMMARY mit einem MLFormat kombinieren und auch mit Hilfe von Arrays im DATA-Schritt. Sie können mehr über diese Techniken im Buch Carpenters Guide to Innovative SAS Techniques lesen. Ich habe ein Problem mit bewegten Durchschnitten, dass ich konnte nicht herausfinden, jede Lösung so weit. Ich muss den gleitenden Durchschnitt der letzten 6 Monate für 6 Monate berechnen. Die Sache ist, ich möchte die vorherigen berechneten bewegten Durchschnitte einschließlich der bewegten Statistik enthalten. Ive versucht es mit LAG-Funktion und mit PROC EXPAND, aber es hat nicht funktioniert. Die X-Spalte ist meine ursprüngliche Information, die Y1 ist was im Erreichen (SAS betrachtet M7 zu M12 als fehlt) und das Y2 ist was ich will MX Y1 Y2 M1 100,0 100,0 100,0 M2 200,0 200,0 200,0 M3 300,0 300,0 300,0 M4 400,0 400,0 400,0 M5 500,0 500,0 500,0 M6 600,0 600,0 600,0 M7 350,0 350,0 M8 400,0 391,7 M9 450,0 423,6 M10 500,0 444,2 M11 550,0 451,6 M12 600,0 443,5 Es empfiehlt sich, SAS-Programmierfragen auf der SAS-Support-Community zu fragen, weil es Hat Funktionen, die Fragen stellen und SAS-Code einfacher machen. Sie können auch Rat von vielen Leuten bekommen, nicht nur ich. Hallo. Dies ist nur eine leichte Abweichung von einer SQL-Lösung, die auf der SAS Community veröffentlicht wurde (nicht jeder hat Zugriff auf SASETS und PROC EXPAND). Füge eine Beobachtungsnummer zu den bereits sortierten Datensatzdaten ein. Serienreihe xn run proc sql create table moving as select, (select mean (y) aus der Reihe, wobei x zwischen ax-4 und ax) als movingavg aus der Serie als beenden den Wert Von MOVINGAVG ersten vier Beobachtungen verwenden 1, 2, 3 und 4 Werte von Y, um den gleitenden Durchschnitt zu berechnen und von da an immer die aktuelle Beobachtung plus die vorherige 4. seine modifiziert von. Geschrieben von SAS Yoda, Ksharp
Comments
Post a Comment