Saturday, 18 March 2017

Sas Moving Average Array

Ich habe folgendes Datensatz: CustID NGIF RAMN RFA1 2001 6 52 1 2002 1 23 1 2003 8 99 1 2004 20 100 4 2005 11 114 3 2006 9 138 1 2007 7 105 3 2008 15 190 2 2009 27 297 1 2010 22 207 1 2011 19 171 2 Ich möchte für jede RFA1-Ebene (die 1-4), der Durchschnitt (Gesamt-RAMN für eine RFA1-Ebene Gesamtzahl dieser RFA1-Ebene) mit Arrays zu berechnen. Ohne Arrays, wenn ich mich spalte und tue, bekomme ich das Ergebnis auf individueller Ebene. Im Folgenden ist der Code: Mein Problem ist, wie schreibe ich diesen Code für alle 4 Ebenen von RFA1 mit Arrays. Fragte am 23.09 um 3:49 Vielen Dank für Ihre Antwort Joe. Ich habe das mit PROC MEANS ausprobiert und ja, was sie tun, was erforderlich ist. Aber ich lerne SAS und frischer und will auch Arrays lernen. Also versuche ich es mit Arrays zu lösen. Ich denke, mit 39amp39 Ich bin die Initialisierung von drei Variablen in einem Satz auf der Grundlage der if-Bedingung. Bitte verzeihen Sie mich für meine Unwissenheit und lassen Sie mich wissen, wo ich falsch gehe. Ndash Charlotte Sep 23 14 bei 14: 51Machen Sie MACMA1 in der SASQC-Beispielbibliothek Das vorherige Beispiel veranschaulicht, wie Sie gleitende Durchschnittsdiagramme mit Rohdaten (Prozessmessungen) erstellen können. In vielen Anwendungen werden die Daten jedoch als Untergruppen-Übersichtsstatistiken bereitgestellt. Dieses Beispiel veranschaulicht, wie Sie die MACHART-Anweisung mit Daten dieses Typs verwenden können. Der folgende Datensatz (CLIPSUM) liefert die Daten aus dem vorstehenden Beispiel in zusammengefasster Form: Eine Auflistung von CLIPSUM ist in Abbildung 21.3 dargestellt. Es gibt genau eine Beobachtung für jede Untergruppe (beachten Sie, dass die Untergruppen immer noch von DAY indiziert sind). Die Variable GAPX enthält die Untergruppen-Mittel, die Variable GAPS enthält die Untergruppen-Standardabweichungen und die Variable GAPN enthält die Untergruppen-Stichprobengrößen (das sind alle fünf). Der Datensatz CLIPSUM Abbildung 21.3: Der Zusammenfassungsdatensatz CLIPSUM Sie können diesen Datensatz lesen, indem Sie ihn als GESCHICHTE-Datensatz in der PROC MACONTROL-Anweisung wie folgt angeben: Das daraus resultierende gleitende Durchschnittsdiagramm ist in Abbildung 21.4 dargestellt. Da die Option LINEPRINTER in der PROC MACONTROL-Anweisung angegeben ist, wird die Zeilendruckerausgabe erzeugt. Der Asterisk (), der in den einzelnen Anführungszeichen nach der Untergruppenvariablen angegeben ist, gibt den Zeichen an, der verwendet wird, um Punkte zu platzieren. Dieser Charakter muss einem Gleichheitszeichen folgen. Beachten Sie, dass GAP nicht der Name einer SAS-Variable im Datensatz ist, sondern stattdessen das gemeinsame Präfix für die Namen der drei SAS-Variablen GAPX, GAPS und GAPN ist. Die Suffixzeichen X. S. Und N geben Mittel an. Standardabweichung . Und Stichprobengröße. beziehungsweise. So können Sie drei Untergruppen-Summenvariablen in einem GESCHICHTE-Datensatz mit einem einzigen Namen (GAP) angeben, der als Prozess bezeichnet wird. Die Variablen GAPX, GAPS und GAPN sind alle erforderlich. Der nach dem Sternchen angegebene Name DAY ist der Name der Untergruppenvariablen. Verschieben von Durchschnittsdiagrammen für Gap-Messungen Abbildung 21.4: Einheitlich gewichtetes bewegliches Durchschnittsdiagramm aus Zusammenfassungsdaten Im Allgemeinen muss ein GESCHICHTE-Eingangsdatensatz, der mit der MACHART-Anweisung verwendet wird, die folgenden Variablen enthalten: Untergruppe Variable Untergruppe mittlere variable Untergruppe Standardabweichung Variable Untergruppe Stichprobengrößenvariable Weiterhin , Die Namen der Untergruppe bedeuten, Standardabweichung und Stichprobengrößenvariablen müssen mit dem in der MACHART-Anweisung angegebenen Prozessnamen beginnen und mit den speziellen Suffixzeichen X enden. S. Und N. beziehungsweise. Wenn die Namen dieser Konvention nicht folgen, können Sie die Option RENAME in der PROC MACONTROL-Anweisung verwenden, um die Variablen für die Dauer des MACONTROL-Prozedurschrittes umzubenennen. Zusammenfassend hängt die Interpretation des Prozesses vom Eingabedatensatz ab. Wenn Rohdaten mit der DATA-Option (wie im vorherigen Beispiel) gelesen werden, ist der Vorgang der Name der SAS-Variablen, die die Prozessmessungen enthält. Wenn die Zusammenfassungsdaten mit der Option HISTORY (wie in diesem Beispiel) gelesen werden, ist der Prozess das gemeinsame Präfix für die Namen der Variablen, die die Zusammenfassungsstatistiken enthalten. Weitere Informationen finden Sie unter 34HISTORY Data Set34. 13 13moving Durchschnitt 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 der Datensatz. 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 gibt viele Einschränkungen für diesen Code, also hüte dich. Der Beispielcode auf der Registerkarte Vollständige Code veranschaulicht, wie man den gleitenden Durchschnitt einer Variablen durch einen ganzen Datensatz, über die letzten N Beobachtungen in einem Datensatz oder über dem letzten N berechnet Beobachtungen innerhalb einer BY-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 durch einen ganzen Datensatz, über die letzten N Beobachtungen in einem Datensatz oder über die letzten N Beobachtungen innerhalb einer BY-Gruppe.


No comments:

Post a Comment