Saturday 7 October 2017

Sas Glidande Medelvärde Ucla


Provkoden på fliken Fullständig kod illustrerar hur man beräknar det rörliga genomsnittet för en variabel genom en hel dataset, över de sista N-observationerna i en dataset eller över de sista N-observationerna inom en BY-grupp. Dessa samplingsfiler och kodexempel tillhandahålls av SAS Institute Inc., utan garantin av något slag, varken uttryckligt eller underförstått, inklusive men inte begränsat till de underförstådda garantierna för säljbarhet och lämplighet för ett visst ändamål. Mottagarna bekräftar och godkänner att SAS Institute inte är ansvarigt för eventuella skador som uppstår på grund av deras användning av detta material. Dessutom kommer SAS Institute att inte ge något stöd för materialet som ingår i häri. Dessa samplingsfiler och kodexempel tillhandahålls av SAS Institute Inc., utan garantin av något slag, varken uttryckligt eller underförstått, inklusive men inte begränsat till de underförstådda garantierna för säljbarhet och lämplighet för ett visst ändamål. Mottagarna bekräftar och godkänner att SAS Institute inte är ansvarigt för eventuella skador som uppstår på grund av deras användning av detta material. Dessutom kommer SAS Institute att inte ge något stöd för materialet som ingår i häri. Beräkna det rörliga genomsnittet av en variabel genom en hel dataset, över de sista N-observationerna i en dataset eller över de sista N-observationerna inom en BY-grupp. I det här inlägget visar jag ett knep för att flytta genomsnittlig beräkning (kan utvidgas till andra operationer som kräver fönsterfunktioner) som är super snabbt. Ofta behöver SAS-analytiker genomföra glidande medelberäkningar och det finns flera alternativ i preferensordningen: 1. PROC EXPAND 2. DATA STEG 3. PROC SQL Men många webbplatser får inte licensierade SASETS att använda PROC EXPAND och flytta genomsnittet i DATA STEP kräver viss kodning och är felaktig. PROC SQL är ett naturligt val för juniorprogrammerare och i många affärsfall är den enda lösningen, men SAS39s PROC SQL saknar fönsterfunktioner som finns tillgängliga i många DB: er för att underlätta glidande medelberäkning. En teknik som vanligtvis används är CROSS JOIN, vilket är väldigt dyrt och inte en lönsam lösning för även medelstor dataset. I det här inlägget visar jag ett knep för att röra genomsnittlig beräkning (kan utvidgas till andra operationer som kräver fönsterfunktioner) som är super snabbt. Tänk på den enklaste glidande genomsnittliga beräkningen där de efterföljande K-observationerna ingår i beräkningen, nämligen MA (K), här ställer vi in ​​K5. Vi skapar först en 20 obs provdata, där variabel ID ska användas för fönstret och variabeln X ska användas vid MA-beräkning, och sedan tillämpar vi standard CROSS JOIN för att först undersöka de resulterande data, Ej grupperade, bara för att förstå hur man utnyttjar datastrukturen. Från den resulterande datasatsen är det svårt att hitta en ledtråd, nu let39s sortera efter quotbidquot-kolumnen i denna dataset: Från den här sorterade data är det uppenbart att vi faktiskt inte behöver kryssa ihop hela den ursprungliga datasatsen, utan istället, Vi kan generera en quotationationquot dataset som innehåller skillnadsvärdet och låt den ursprungliga datasatsen CROSS JOIN med denna mycket mindre quotoperationquot dataset och alla data vi behöver använda för MA-beräkning kommer att finnas där. Låt oss nu göra det: KROSS GÅ MED originaldata med quotoperationquot-data, sortera efter (a. idops), som faktiskt är quotbid39 i sorterad dataset. Observera att i ovanstående kod är det nödvändigt att ha ax multipliceras med b. weight så att data kan vara mellanliggande, annars kommer samma X-värde från originalbordet att matas ut och MA-beräkningen misslyckas. Den uttryckliga viktvariabeln lägger faktiskt i mer flexibilitet till hela MA-beräkningen. Medan man bestämmer att det är 1 för alla, resulterar det i en enkel MA-beräkning. Tilldela olika vikter hjälper till att lösa mer komplicerad MA-databehandling, till exempel att ge ytterligare observationer mindre vikt för en förfallna MA. Om olika K-parametrar i MA (K) beräkningar är nödvändiga behöver endast operationsdatasatsen uppdateras vilket är trivialt jobb. Nu är den faktiska kodmallen för MA (K) beräkning: Med den här nya metoden är det intressant att jämföra det med det dyra själv CROSS JOIN såväl som PROC EXPAND. På min arbetsstation (Intel i5 3.8Ghz, 32GB-minne, 1TB 72K HDD) är självkrokslängden förbjuden länge under körtiden (om data är stor) medan den nya metoden använder endast 2X så mycket tid som PROC EXPAND, är båda tidsförbrukningarna Trivial jämförelse med sig själv CROSS JOIN. Tidsförbrukningen som visas nedan är i kvotskvot. Nedan är kodläsarna kan springa och jämföra er själva. Postat 10 maj 2015 av Liang Xie SAS Programmering för Data Miningsas, Flyttande medel sas gtgt Flyttande medelvärde av davidlcassell raquo Sun, 15 Jan 2006 09:26:44 GMT Du har redan fått några bra råd. Ta det. Jag har lite olägenhet att bidra. (Förutom att be att du inte ska gå med transponeringen, vilket kommer att bli mycket svårare att arbeta med.) Vad är detaljerna i det glidande medelvärdet du behöver För att fortsätta skapa ett genomsnittsvärde för all data som ny data gest läggs till är Inte vad vi brukar tänka på som ett glidande medelvärde. Finns det en gräns för antalet tidigare värden som ingår i medeltalet Vad gör du om du saknar värden i mitten av data Vad gör du om du har en tydlig outlier inträffa mitt i genomsnittet Vad är din genomsnittet skulle göra efteråt När det gäller ditt införlivande, om du bara behöver det här för visning, ska du överväga att göra det med PROC REPORT eller PROC TABULATE istället. Om du behöver det här för en extern dataset, använd ovanstående procs (eller PROC TRANSPOSE) och få dem att mata ut resultatet till en SAS datatabell för export. I allmänhet vänder data i sidled som du visar gör framtida analyser och sammanfattningar mycket svårare. Det gör också databashanteringen värre. Det gör dock några Excel-orienterade chefer glada kaniner. Om du måste beräkna medelvärden då ny data blir tillgänglig, spåra du bara summan och räkningen när du går. Då är medelvärdet hittills enkelt. Om du har ett fönster där du kan hantera medelvärden, skulle jag gå med PROC EXPAND, som Andrew föreslog. Det kommer att låta dig sopa mycket av detaljer och gränsvillkor under mattan. HTH, David Express dig direkt med MSN Messenger Hämta idag - det är GRATIS messenger. msn. click-urlgoonm00200471avedirect01 sas gtgt Flyttande medelvärde av ben. powell raquo Tue, 17 Jan 2006 17:33:00 GMT Visar detta ett (annat) fel i Excel eller ska du ha inkluderat: om N gt 2 gör sedan ett glidande medelvärde på ett Excel-diagram med period 3 kommer inget värde för de två första punkterna, medan din användning av den genomsnittliga funktionen, där SAS hanterar de saknade värdena, ger ett värde för de två första punkterna. Vilket är korrekt: Howard (och SAS) eller Excel På lör, 14 jan 2006 19:13:00 -0500, Howard Schreier lths AT dc-sug DOT orggt sas gtgt Flyttande medelvärde av davidlcassell raquo ons, jan 18 2006 02:48: 00 GMT Det beror på ditt affärsfall. I tidsserier måste vi ofta göra några domssamtal om glidande medelvärden och windowed beskrivande statistik, baserat på problemkrav och saker som längden på fönstret. Jag förväntar mig att tilldela ett saknat värde till de två första punkterna här, men den ursprungliga affischen bad specifikt för det resultat som Howard byggde. Så jag måste säga att Howards kod är rätt i denna situation. Huruvida den ursprungliga affischen presenterade problemet tydligt är ett annat problem. David GRATIS popup-blockering med den nya MSN Toolbar hämta det nu toolbar. msn. click-urlgoonm00200415avedirect01 sas gtgt Flyttande medelvärde av jdiebal raquo Lör, 21 Jan 2006 02:28:19 GMT Tack till alla som svarade. Jag märkte bara att jag inte hade svarat bac k förra veckan. Förlåt. Här är vad jag slutade med: data MovingAvg behåll s 0 set main4 s3D s dagar avgSpan3Dsn köra Vilket resulterar i något som: 200511 3.3 3.3 200512 10.1 6.7 200601 22.1 11.8 Jag slutade inte behöva en transponering men det skulle vara ganska standard. Tack igen. Sas gtgt moving average av JesseBlocher raquo Sat, 17 Jan 2009 02:09:11 GMT Hej alla - Vet någon ett enkelt sätt att beräkna ett glidande medelvärde i SAS Det verkar för mig att det här är en vanlig sak och jag kan inte hitta rätt proc. Jag har flera års dagliga data och vill beräkna det dagliga genomsnittet för en datapunkt över 30 dagar. Den enda tanken jag har hittills är att använda ett datasteg för att dela upp data, använd sedan PROC MEANS och iterera, men det verkar verkligen klokt. sas gtgt glidande medelvärde av hs AT dc-sug DOT org raquo Lör, 17 Jan 2009 02:39:44 GMT På fredag, 16 jan 2009 13:09:11 -0500, Blocher, Jesse lt XXXXXXXXX Gissa mig att detta är en Vanlig sak och jag kan inte hitta rätt proc. värdet på en datapunkt över 30 dagar. använd PROC MEANS och iterera, men det verkar verkligen klokt. 1. PROC EXPAND (SASETS) sas gtgt moving average av dorjetarap raquo lör, 17 jan 2009 02:44:35 GMT Om du har ETS kan du använda proc expandera. För att kontrollera om du har det kör följande och kolla loggen: proc setinit run Detta papper ger ett exempel på hur du använder det här: 2009116 Blocher, Jesse lt XXXXXXXXX gt: sas gtgt glidande medelvärde av sashole raquo lör 17 jan 2009 05: 04:05 GMT Du kan prova ett steg med 1 steg (det första steget är en provfil, och jag släpper n3 istället för 30 i ditt fall): data a gör datum 1 till 20 objekt 1 utgångslopp, låt n 3 låt w eval (1 2 n) data avg (drop :) set a (byt namn (datum datumobjekt)) summa summa (lagw (item), 0) summan avg sum w date lagn N gt w run Idén med ovanstående är att balansera summan för varje observation genom att subtrahera objektet som ligger 2N1 observationer bakom innan man lägger till det aktuella objektet (så att man undviker behovet av summering (N1) för varje observation), sedan att beräkna medelvärdet och tilldela värdena från den nth observationen bakom strömmen. Jag vet inte hur du vill hantera datumen närmare N från början och slutet, så ovanför är de helt enkelt huggade och endast de datum som helt omges av - N-föremål presenteras. På fredag, 16 jan 2009 13:09:11 -0500, Blocher, Jesse lt XXXXXXXXX Jag tycker att det här är en vanlig sak och jag kan inte hitta rätt proc. Värdet på en datapunkt över 30 dagar. använd PROC MEANS och iterate, men det verkar verkligen klokt.13 Kollapsning över observationer i SAS SAS Learning Modules Här illustrerar vi hur man ska kollapsa data över observationer med proc-medel. Vårt exempel använder en hypotetisk dataset som innehåller information om barn i tre familjer. Dessa exempel visar hur du kan kollapsa över barnen för att skapa familjeposter från barnrekorden. 1. Läsa datafilen Här är SAS-programmet som gör en datafil kallad barn. Den innehåller tre familjer (famid) var och en med tre barn. Den innehåller familjen ID, namnet på barnet, födelsebeslutet (1 2 3 för 1: a, 3: e) och ålder, vikt och sex för varje barn. Här är utsignalen från proc print. 2. Använd proc-sätt att kollapsa data över poster Vi kan använda proc-medel för att kollapsa över hela familjer. Exemplet nedan beräknar medelåldern för varje barn inom varje familj (på grund av klassfamiljen) och sedan matar resultaten ut i en SAS-datafil som heter fam2. Procedurens utdata visas nedan. Och vi använder proc print för att titta på fam2. Och den här utgången visar att datafilen fam2 innehåller medelåldern för barnen för varje familj. Det finns dock en extra post (den som visas nedan). Det här är den totala genomsnittet (märker att FREQ för det är 9, och det finns totalt nio barn). Vi vill verkligen inte detta rekord. Vi kan undertrycka skapandet av posten med det övergripande betyget med nway-alternativet på proc means-uttalandet. Generellt, när du använder proc betyder med klassutlåtandet och gör en utdatafil, brukar du vilja använda alternativet nway som visas nedan. vi släpper ut proc betyder output Nu har fam3 datafilen bara haft tre poster med medelåldern för varje familj. 3. Explicit namngivning av de kollapsade variablerna Följande proc betyder exempel exakt samma sak som föregående exempel, förutom att medeltalet av ålder uttryckligen heter, kallar det avgage. vi utelämnar proc-medelutgången. Utgången är densamma som tidigare, förutom att medelåldern kallas avgage. Resten av exemplen kommer uttryckligen att ange de kollapsade variablerna (t ex använda meanavgage istället för bara medelvärde). I allmänhet är det bättre att uttryckligen namnge variablerna för att undvika förvirring mellan den ursprungliga variabeln och den kollapsade variabeln. 4. Få hjälp med mer än en variabel Vi kan begära medelvärden för mer än en variabel. Här får vi medelvärdet för ålder och för wt alla i samma kommando. Som du ser i utgåvan nedan är avgage genomsnittlig ålder och avgwt är barnens genomsnittliga vikt i varje familj. 5. Begär flera statistiska uppgifter på en gång Vi kan begära flera statistiska uppgifter på en gång. Kommandot nedan får medelvärdet, standardavvikelsen och åldern (medelvärdet std och N) för ålder och vikt inom varje familj. Resultatet nedan visar produktionen av proc-medel. Resultaten nedan motsvarar proc-sättet ovan. Du kan se att medelåldern och wt per familj är i avgage och avgwt. På samma sätt innehåller stdage och stdwt standardavvikelsen för ålder och vikt för varje familj, och nage och nwt har det giltiga antalet observationer för ålder och vikt för varje familj. 6. Undertryckande proc betyder produktion I vårt exempel har vi bara tre familjer. För dina data kan du ha dussintals, hundratals eller tusentals familjer (eller vilken grupp du använder). Processens utmatning kan bli mycket lång, så du kanske vill undertrycka utmatningen. Du kan göra det med alternativet noprint som visas nedan. Utmatningen från proc-organet skrivs inte ut på grund av alternativet noprint. 7. Att räkna antalet pojkar och flickor i familjen Antag att du ville ha ett räkna med antalet pojkar och flickor i familjen. Vi kan göra det med ett extra steg. Vi gör en dummyvariabel som är 1 om en pojke (0 om inte) och en dummyvariabel som är 1 om en tjej (och 0 om inte). Summan av pojkens dummyvariabel inom en familj är antalet pojkar i familjen och summan av flickans dummyvariabel inom en familj är antalet tjejer i familjen. Först använder vi ett datasteg för att göra pojkens och flickans dummyvariabel. Vi använder proc-utskrift för att titta på pojk - och tjejvariablerna för att dubbelkontrollera dem. Vi använder proc-medel för att sammanfatta pojk - och tjejdummyvariablerna för varje familj och skapa en datafil som heter fam8 som innehåller summan av pojke i pojkar och summan av tjejen i tjejer. Vi använder alternativet noprint för att undertrycka produktionen av proc-medel. Vi gör ett proc print för att titta på utdatafilen. Som vi förväntar oss visar proc print att pojkar innehåller antalet pojkar i varje familj och tjejer innehåller antalet tjejer i varje familj. 8. Sammanfoga den kollapsade dataen tillbaka med originaldata Ibland vill du sammanfoga den kollapsade dataen tillbaka med originaldata. Let8217s använder ett exempel på att skapa avgage och avgwt för varje familj, sedan slå tillbaka resultaten med de ursprungliga barndata. För det första kolliderar let8217s data över familjer för att göra avgage och avgwt precis som vi tidigare gjort. För det andra sorterar vi barn och sorterar fam9 både på famid. förbereder sig för att slå samman dem. För det tredje sammanfogar vi de sorterade filerna tillsammans (skids och sfam9) av famid. Vi kan släppa typ och freq eftersom de inte behövs, men vi behöver inte släppa dem. Vi kan skriva ut resultaten, vilket visar att variablerna avgage och avgwt nu slås samman med de ursprungliga barnen så att varje barn har den associerade genomsnittliga åldern och vikten för deras familj. 9. Problem att leta efter Du kan sluta med dokument som du inte hade förväntat dig om du glömde att använda alternativet nway. Om du kollapsar över poster och sedan återigen sätter tillbaka med originaluppgifterna, var noga med att du uttryckligen namnger variablerna när du kollapsar dem. Om du don8217t kommer variablerna från de kollapsade dataerna att ha samma namn som de ursprungliga uppgifterna, och de kommer att kollidera när du sätter på data igen. 10. För mer information Mer information om sammanslagning av datafiler finns i SAS Learning Module för Matchning av datafiler i SAS.

No comments:

Post a Comment