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), kannst du die Option TRIMLEFT 4 innerhalb von TRANSFORMOUT () verwenden. Beantwortet am 3. Dezember 13 um 15: 29Der Beispielcode auf der Registerkarte Vollcode veranschaulicht, wie man 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 berechnet - Gruppe. 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. Dieses Beispiel zeigt, wie man Rollsummen und Rollmittel durch Berechnen von Array berechnet Um die Werte für die aktuellste Anzahl von gewünschten Perioden zu halten. Sobald das Array die gewünschten Werte enthält, ist die Berechnung der Summe unter Verwendung der SUM-Funktion und des Mittelwerts mit der MEAN-Funktion einfach. Man kann einfach das Array an die Funktion geben, um die gewünschte Statistik zu erhalten: Dieses Beispiel hebt die Logik hervor, die benötigt wird, um immer die letzten Perioden im Array zu haben, bevor der nächste Satz von Rollstatistiken berechnet wird. Das Konzept, den ältesten Wert zu entfernen und es mit dem aktuellsten Wert zu ersetzen, wird üblicherweise als FIFO - First In, First Out bezeichnet. Sobald das Array mit der anfänglichen Anzahl von Perioden belegt ist, werden die Rollstatistiken berechnet. Eine Zählervariable wird verwendet, um das Element im Array mit dem ältesten Wert zu verfolgen und zu spezifizieren, dem der neue aktuellste Wert zugewiesen werden soll. Der neue Wert überschreibt den ältesten Wert. Nach Abtretung werden neue Rollstatistiken berechnet. Dieser Vorgang wird fortgesetzt, bis der letzte Wert, der zur Statistik beiträgt, aus der Datenquelle gelesen wurde. Anmerkung: Andere Rollstatistiken konnten auch berechnet werden. Wie die Standardabweichung: 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. Im ersten DATA-Schritt unten werden die Musterdaten für 36 Monate erstellt. Im zweiten DATA-Schritt wird ein Array mit der gleichen Anzahl von Elementen wie die gewünschte Anzahl von Perioden erstellt, die bei der Berechnung einer Rollsumme und eines Durchschnitts verwendet werden sollen. Sobald das Array anfänglich mit der gewünschten Anzahl von Perioden gefüllt wurde, ersetzt die nächste Periode die älteste Periode innerhalb des Arrays. In dieser Stichprobe beträgt die gewünschte Anzahl von Perioden 12. Nachdem die Rollsumme und der Durchschnitt in den ersten 12 Perioden berechnet werden, wird die 13. Periode die 1. Periode ersetzen und eine neue Rollsumme und ein Durchschnittswert berechnet. Dann wird die 14. Periode die 2. Periode ersetzen und eine neue Rollsumme und - durchschnitt werden dann 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 ist Aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck. 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. Ein Array kann verwendet werden, um die letzte N Anzahl von Werten zu halten, so dass eine rollende Summe und ein Mittelwert aus den Werten innerhalb des Arrays berechnet werden kann. sas, 12 Monate rollende Summenhilfe von sasnewb raquo Fr, 24 Sep 2004 01:13:17 GMT Ich habe einen Datensatz, der wie folgt aufgebaut ist: Monatswert 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 weitere Monatswertbeobachtungen. Ich möchte eine Variable erstellen, die die 12-Monats-Rollsumme für jeden Monat ist, z. B. Monat mth12val 200106 194339 und so weiter bis zum aktuellen Monat, 200409 für diesen Monat, 200410 für Oktober etc. Kann jemand eine Lösung dafür anbieten. Chuck aka Sasnewb erhalten bezahlt. Mit deiner kostenlosen E-Mail an zwalletindex. htmlusersasnewb sas gtgt 12 Monate rollende Summenhilfe von yhuang raquo Fr, 24 Sep 2004 01:34:36 GMT Am Do, 23 Sep 2004 17:13:17 0000, Chuck Windsor lt XXXXXXXXX gt Monat zB Oktober Etc. Diese Art von rollenden Summe oder gleitenden Durchschnitt kann leicht von SQL behandelt werden. Angenommen, Sie haben keinen fehlenden Monat, und die Daten sind bereits nach Jahr und Monat sortiert, dann kann die Beobachtungsnummer verwendet werden, um jeden Monat zu identifizieren: Daten xx Eingang Monat Wert nn Karten 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 proc sql select unterschiedlich a., Sum (b. value) als rollen von xx a. Xx b wo a lt bn lt a. n12 gruppe durch einen --------- monat wert n rollen ------------------------ -------------- 200106 13256 1 194339 200107 4888 2 182781 200108 67602 3 177893 200109 529 4 110291 200110 13743 5 109762 200111 53340 6 96019 200112 912 7 42679 200201 1003 8 41767 200202 7982 9 40764 200203 9620 10 32782 200204 2674 11 23162 200205 18790 12 20488 200206 1698 13 1698 Wenn die Daten fehlenden Monat haben, dann müssen wir einige SAS-Funktionen verwenden, um das Fenster zu identifizieren, was auch nicht sehr schwer ist. Sas gtgt 12 Monate rollende Summe Hilfe von diskin raquo Fr, 24 Sep 2004 03:55:07 GMT Ya Huang gab dir schon eine ordentliche SQL-Lösung. (Ich nehme an, es funktioniert). Im Fall wie ich, du bist nicht zu wild über SQL: Angenommen, es gibt keine fehlenden Datenpunkte und die Daten werden in absteigender Datumsreihenfolge sortiert. Sie können die Verzögerungsfunktion verwenden, um entweder alle 12 Verzögerungen jedes Mal zu addieren oder die Summe zu behalten und hinzuzufügen Der neue Wert bei der Subtraktion der 13. Verzögerung. Das ehemalige ist einfacher zu schreiben, aber ich fürchte, nicht sehr effizient, aber dann haben Sie nicht viel Daten. Daten ein Eingangsjahr 1-4 Monat 5-6 v Karten 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 laufe proc sortieren data nach absteigend Jahr absteigend Monat Laufdaten B setzen eine Rollsumme (v, lag1 (v), lag2 (v), lag3 (v), lag4 (v), lag5 (v), lag6 (v), lag7 (v), lag8 (v), la g9 (V), lag10 (v), lag11 (v)) laufen HTH, Dennis Diskin Von: Chuck Windsor Gesendet: 9232004 1:21:17 PM Zu: XXXXXXXXX Betreff: 12 Monate rollende Summe Hilfe Ich habe einen Datensatz wie folgt aufgebaut: Monatswert 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 weitere Monatswertbeobachtungen. Ich möchte eine Variable erstellen, die die 12-Monats-Rollsumme für jeden Monat ist, z. B. Monat mth12val 200106 194339 und so weiter bis zum aktuellen Monat, 200409 für diesen Monat, 200410 für Oktober etc. Kann jemand eine Lösung dafür anbieten. Chuck aka Sasnewb
Comments
Post a Comment