Wednesday 8 November 2017

Berechnen Gleit Durchschnitt Sas


Der Beispielcode auf der Registerkarte Vollcode veranschaulicht, wie man 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 berechnet. 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 über einen ganzen Datensatz, über die letzten N Beobachtungen in einem Datensatz oder über die letzten N Beobachtungen innerhalb einer BY-Gruppe. Beginning in Release 6.08 des SAS-Systems, kann PROC EXPAND in SASETS Software Verwendet werden, um eine Vielzahl von Daten-Transformationen zu machen. 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 Release-InformationenIch habe einen Screenshot hinzugefügt, um mein Problem zu klären: Ich versuche, irgendeine Art von gleitendem Durchschnitt zu berechnen und die Standardabweichung zu bewegen. Die Sache ist, dass ich die Variationskoeffizienten (stdevavg) für den tatsächlichen Wert berechnen möchte. Normalerweise erfolgt dies durch die Berechnung der stdev und avg für die letzten 5 Jahre. Allerdings gibt es manchmal auch Beobachtungen in meiner Datenbank, für die ich nicht die Informationen der letzten 5 Jahre habe (vielleicht nur 3, 2 usw.). Thats, warum ich einen Code wünsche, der das avg und stdev berechnet, selbst wenn es keine Informationen für die ganzen 5 Jahre gibt. Auch, wie Sie in den Beobachtungen sehen, manchmal habe ich Informationen über mehr als 5 Jahre, wenn dies der Fall ist, brauche ich irgendeinen gleitenden Durchschnitt, der mir erlaubt, das avg und stdev für die letzten 5 Jahre zu berechnen. Wenn also ein Unternehmen 7 Jahre lang Informationen hat, brauche ich irgendeine Art von Code, der das avg und stdev berechnen wird, sagen wir 1997 (von 1991-1996), 1998 (von 1992-1997) und 1999 (1993-1998). Da ich nicht sehr vertraut mit sas Befehlen es aussehen sollte (sehr sehr grob) wie: Oder so etwas, ich habe wirklich keine Ahnung, Im gonna versuchen und es herauszufinden, aber es lohnt es zu veröffentlichen, wenn ich es nicht selbst finden werde Mit Datumsbereich gleitender Durchschnitt mit Datumsbereich gleitender Durchschnitt mit Datumsbereich Im neu in SAS, und ich habe einige Probleme mit der Berechnung der gleitenden Durchschnitt auf der Grundlage von Daten und Gruppierungen innerhalb des Datensatzes. Grundsätzlich versuche ich, den gleitenden Durchschnitt für jede Beobachtung auf der Grundlage der letzten 90 Tage zu berechnen. Jede Beobachtung hat ein Datum. Ich muss sie auch gruppieren, damit der gleitende Durchschnitt nur auf der Gruppe basiert. Mit anderen Worten, wenn ich es mit Früchten gruppiert hätte, hätten Äpfel nur einen gleitenden Durchschnitt und Ornamente, etc. Ich weiß, dass ich den Datensatz zuerst sortieren muss, dann benutze eine Beilegung. Ich dachte eigentlich daran, ein Makro zu machen. Ich habe das angefangen, aber ich kann nicht daran teilnehmen. Kann mir jemand helfen, ich weiß, wie man die Sortierung macht, aber ich weiß auch, wie man den Durchschnitt bekommt, aber seine Gruppierung nicht richtig. Es gibt mir nur den Wert der Beobachtung. Ich habe dann versucht, es mit SQL zu tun, aber es funktioniert auch nicht. Dies ist, was ich kam mit. Proc sql create table data. movingavg als select a., Mean (basis) als Verschieben von xx wo verunreinigte Gruppe nach Produkt RE: gleitender Durchschnitt mit Datumsbereich dies funktioniert auch nicht. Data new set old von id beibehalten base if date90 dann avg mean (basis) run RE: gleitender Durchschnitt mit Datumsbereich Hier ist ein Beispiel für meinen Datensatz. Produkt Datum Basis Apfel may20 4 Orangen march2 3 Apfel April 3 Bananen Jan 33 33 Apfel Feb13 88 Apfel Dezember 12 Was ich brauche ist ein laufender Gleitender Durchschnitt der letzten 90 Tage nach Produkt auf der Grundlage der Basis Menge. Entschuldigung für die mehrfache Post, aber nachdem ich meinen früheren Post gelesen hatte, schien es verwirrend, was ich versuche zu tun. Danke RE: gleitender Durchschnitt mit Datumsbereich klaz2002 (Programmierer) 25 Sep 07 16:00 Ich muss anfangen, danke für diese Frage zu sagen. Weil es mir keine Ruhe gab, bis ich es lösen konnte. Lassen Sie mich sagen, was ich glaube, ist Ihre Anforderung nur so dass Sie und ich sind auf der gleichen Seite. Req 1) Sie wollen einen gleitenden Durchschnitt der letzten 90 Tage Daten nach Produktnamen haben. Bedeutet, dass für ein einziges Produkt (zB Apfel) Sie nur an den Basiswerten dieses Produktes interessiert sind, die 90 Tage zurückgehen. 2) Ich habe davon ausgegangen, dass Sie eine (1) Aufzeichnung pro Produkt pro Tag haben. Das heißt, Sie haben nie mehr als einen Basiswert pro Produkt pro Tag. (Der Code behandelt jetzt nicht mehr) Um das Historieproblem zu lösen (Werte, die 90 Tage zurückgehen) habe ich die Lagx () benutzt und die Tage 1-90 in Variablen gelegt und dann zu einem ARRAY hinzugefügt. Da die Variable in das Array aufgenommen werden muss, habe ich ein kleines Makro erstellt, das die Codezeilen erzeugt hat, die ich benötigte. MACRO DAS SCHAFFT 270 VARIABLEN FÜR 90 TAGE DER GESCHICHTE Makro SetVars do i1 bis 90 prodampi lagampi (product) dateampi lagampi (date) baseampi lagampi (basis) end mend ERSTES SORTIEREN DURCH PRODUKT UND DATUM Proc sortieren Daten Ihre Daten aus datiert nach Produktdatum Laufdaten Endgültiger Satz nach Produktdatum sortiert prod1-prod90 7 date1-date90 basis1-basis90 mysum 8 array aktuelles mysum array prod prod1-prod90 array dt date1-date90 array bs basis1-base90 SetVars SET DATUM 90 TAGE AGO TO CHECK DateMinus90 date-90 Bctr 1 mysum 0 LOOP DURCH ALLE MÖGLICHEN TAGE ICH ICH WERDE AUSNAHME FÜR ERSTEN FALL IN DER PRODUKTGRUPPE WIE ES IST KEIN LAG JETZT, wenn das erste. Produkt, das sich dann bewegt, für jeden Fall, )) Trim (upcase (Produkt)) und dt dateminus90 dann mache IF FOUND DANN HINZUFÜGEN, SOLLEN SICH VAR mysum sum (mysum, basis, bs) KEEP A COUNT von WIE VIELE DATAPOINTS GEFUNDEN bctr 1 End Ende IF NONE GEFUNDEN DANN DEN AKTUELLEN BASISWERT SOLLTE VERWENDET WERDEN, wenn mysum 0 dann myavg Basis sonst myavg mysumbctr laufen proc print dataFINAL var Produkt Datum dateminus90 Basis myavg Format Datum dateminus90 mmddyy10. Ich hoffe, dass dir das hilft. Du solltest das wirklich so aussehen, wie ich das wirklich ohne umfangreiche Kontrolle gemacht habe. Es kann viele Einschränkungen für diesen Code so hüten.

No comments:

Post a Comment