Skip to main content

Beräkna 3-Månaders Glidande Medelvärde In Sas


Jag inkluderade en skärmdump för att klargöra mitt problem: Jag försöker att beräkna någon form av glidande medelvärde och flyttande standardavvikelse. Saken är att jag vill beräkna variationskoefficienterna (stdevavg) för det verkliga värdet. Normalt görs detta genom att beräkna stdev och avg för de senaste 5 åren. Men ibland kommer det att finnas observationer i min databas för vilken jag inte har information under de senaste 5 åren (kanske bara 3, 2 etc). Det är därför jag vill ha en kod som kommer att beräkna avg och stdev även om det inte finns någon information för hela 5 år. Också, som du ser i observationerna, har jag ibland information över mer än 5 år, då det är fallet behöver jag ett slags glidande medelvärde som gör det möjligt för mig att beräkna avg och stdev för de senaste 5 åren. Så om ett företag har information i 7 år behöver jag någon typ av kod som beräknar avg och stdev för, säger vi 1997 (1991-1996), 1998 (1992-1997) och 1999 (1993-1998). Jag är inte särskilt bekant med sas-kommandon, det borde (mycket väldigt grovt) se ut som: Eller så har jag ingen aning, jag ska försöka hitta det men det är värt att skicka det om jag inte hittar det själv. SAS nybörjare och jag är nyfiken om följande uppgift kan göras mycket enklare som det är för närvarande i mitt huvud. Jag har följande (förenklad) metadata i en tabell som heter userdatemoney: Användare - Datum - Pengar med olika användare och datum för varje kalenderdag (under de senaste 4 åren). Uppgifterna är beställda av Användar ASC och Date ASC, provdata ser ut så här: Jag vill nu beräkna ett fem dagars glidande medelvärde för pengarna. Jag började med den ganska populära apprachen med funktionen lag () som följande: Som du ser uppstår problemet med den här metoden om det går om datasteget går till en ny användare. Aron skulle få några fördröjda värden från Anna som förstås inte ska hända. Nu är min fråga: Jag är ganska säker på att du kan hantera användaromkopplaren genom att lägga till några extra fält som laggeduser och genom att återställa N, Sum och Mean variables om du märker en sådan växel men: Kan detta göras på ett enklare sätt. Tack vare klausulen på något sätt Tack för dina idéer och hjälp Jag tycker att det enklaste sättet är att använda PROC EXPAND: Och som nämnts i Johns kommentar är det viktigt att komma ihåg om det saknas värden (och om att börja och avsluta observationer också). Ive har lagt till SETMISS-alternativet till koden, eftersom du klargjorde att du vill zerofy sakna värden, inte ignorera dem (standard MOVAVE-beteende). Och om du vill utesluta första 4 observationer för varje användare (eftersom de inte har tillräckligt med förhistorik för att beräkna glidande medelvärde 5) kan du använda alternativet TRIMLEFT 4 inom TRANSFORMOUT (). svarade den 3 december kl 15: 29 med genomsnittet med datumintervallet glidande medelvärde med datumintervall glidande medelvärde med datumintervall Jag är ny på SAS, och jag har några problem med att beräkna glidande medelvärde baserat på datum och grupperingar i datasetet. I grund och botten försöker jag beräkna det rörliga genomsnittet för varje observation baserat på de senaste 90 dagarna. Varje observation har ett datum. Jag måste också gruppera dem så att det rörliga genomsnittet bara är baserat på gruppen. Med andra ord, om jag skulle gruppera det med frukter, skulle äpplen ha sitt enda glidande medelvärde och orages, etc. Jag vet att jag måste sortera dataset först och sedan använda en behållningsdeklaration. Jag tänkte faktiskt på att göra ett makro också. Jag började detta, men kan inte tyckas få någon del av det att fungera. Kan någon hjälpa mig Jag vet hur man gör sorteringen, men jag vet också hur man får medelvärdet, men det går inte att gruppera korrekt. Det ger mig bara värdet av observationen. Jag försökte sedan göra det med SQL, men det fungerar inte heller. Detta är vad jag kom fram till. proc sql skapa tabell data. movingavg som välj a., mean (basis) som flyttar från xx där dateratgrupp efter produkt RE: glidande medelvärde med datumintervall detta fungerar inte heller. data ny uppsättning gammal av id behåller grund om date90 då avg genomsnittlig (grund) kör RE: glidande medelvärde med datumintervall Här är ett exempel på min dataset. produktdatum baserad äpple may20 4 orange marsch 2 3 äpple april 3 banan jan31 33 apple feb13 88 äpple dec2 12 Vad jag behöver är ett löpande glidande medelvärde av de senaste 90 dagarna av för varje produkt baserat på basbeloppet. förlåt för flera inlägg, men efter att jag läst mitt tidigare inlägg verkade det förvirrande om vad jag försöker göra. tack RE: glidande medelvärde med datumintervall klaz2002 (programmerare) 25 sep 07 16:00 Jag måste börja med att tacka för denna fråga. Eftersom det gav mig ingen vila tills jag kunde lösa det. Låt mig ange vad jag tror är ditt krav bara så att du och jag är på samma sida. Req 1) Du vill ha ett glidande medelvärde av de senaste 90 dagarna av data efter produktnamn. Det betyder att för en enda produkt (ex. Äpple) är du bara intresserad av grundvärdena för den produkten som går tillbaka 90 dagar. 2) Jag antog att du har en (1) post per produkt per dag. Det betyder att du aldrig har mer än ett grundvärde per produkt per dag. (koden hanterar inte mer just nu) För att lösa historikproblemet (värden går tillbaka 90 dagar) använde jag lagx () och sätter dagar 1-90 i variabler och lade dem sedan till en ARRAY. Eftersom variabeln måste ingå i matrisen skapade jag ett litet makro som genererade de kodlinjer som jag behövde. MACRO som skapar 270 VARIABLER FÖR 90 DAGAR AV HISTORIA makro SetVars gör i1 till 90 prodampi lagampi (produkt) dateampi lagampi (datum) basisampi lagampi (basis) slutändring FÖRSTA SORT PER PRODUKT OCH DATE proc sortera data yourdata ut datasorted efter produktdatodatum kör data sista uppsättningen datasorterad efter produktdatumslängd prod1-prod90 7 date1-date90 basis1 - basis90 mysum 8 array nuvarande mysum array prod prod1-prod90 array dt date1-date90 array bs basis1-basis90 SetVars SÄT DATUM 90 DAGAR SOM TILL ATT CHECK DateMinus90 Date-90 bctr 1 mysum 0 LÖP UNDER ALLA MÖJLIGA DAGAR gör I1 till 90 SKRIV UTTRYCK FÖR FIRST CASE I PRODUKTGRUPPEN, OM DET INTE ÄR INGEN LAG, OM FÖRSTA PRODUKT DÄR FÖRBÄTTRING. KONTROLLERA FÖR SAMMA PRODUKTNAMN OCH INTE I 90 DAGAR ANNAN OM TJÄNSTER (uppvärmning )) trim (upcase (produkt)) och dt dateminus90 gör sedan IF FUNDER SÅ TILL ADD TO SUM VAR mysum summa (mysum, basis, bs) HÅLLA EN TEL AV HAN MAN DATAPOINTS FOUND Bctr 1 änden om inget fanns än den nuvarande basvärdet BORDE ANVÄNDAS om mysum 0 då minavg grund annan minavg mysumbctr kör proc print dataFINAL var produkt datum dateminus90 grund myavg format datum dateminus90 mmddyy10. spring Jag hoppas att detta hjälper dig. Du borde verkligen titta på detta eftersom jag gjorde det här verkligen utan omfattande kontroll. Det kan finnas många begränsningar till den här koden så var försiktig. 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 genomsnittliga beräkningar och det finns flera alternativ i preferensordningen: 1. PROC EXPAND 2. DATA STEG 3. PROC SQL Men många webbplatser kanske 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 yngre programmörer och i många affärssaker är den enda lösningen, men SAS39s PROC SQL saknar fönsterfunktioner som finns tillgängliga i många DB-datorer 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 enligt quotbidquot-kolumnen i den här datasatsen: 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 datamängden 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 sönderfallande 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älvkörningslängden förbjuden länge under körtiden (om data är stor), medan den nya metoden endast använder 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. Upplagt 10 maj 2015 av Liang Xie SAS Programmering för datavinnning

Comments

Popular posts from this blog

Binary Alternativ Strategi Iq Alternativ Inloggning

IQoption-inloggning IQoption. eu är inte en officiell webbplats för iqoption. Alla använda varumärken tillhör iqoption. IQ Option. eu är en affiliate webbplats och främjar iqoption. Vi strävar efter att all information är mest aktuell men för aktuella erbjudanden alltid kolla IQ Option officiella webbplats. Om du vill kontakta webbansvarig på denna webbplats, vänligen maila: infoiqoptions. eu Iqoption Europe ltd. officiella kontaktuppgifter: I Europa drivs av: Iqoption Europe Ltd. Registreringsnummer HE327751 Adress: Silver House Business Center, 19 Spyros Kyprianou Avenue, 3070 Limassol, Cypern Telnr. 357 25 262 010 Faxnr. 357 25 252 582 email: supportiqoption HÖG RISK INVESTERING VARNING: De finansiella tjänsterna som tillhandahålls av denna webbplats har en hög risknivå och kan leda till förlusten av alla dina medel. Du borde aldrig investera pengar som du inte har råd att förlora. Se till att du läser våra användarvillkor innan du gör något i IQOption-handelsplattformen. Under inga

Al Ansari Exchange Forex Rate

De bästa priserna och personvården för varje betalning Redha Al Ansari Exchange ger upphov till sluta pengar överföringslösningar till kunderna. Organisationen har ett brett utbud av remissionslösningar och säkerställer alltid att det ger de bästa priserna och tjänsterna till kunderna. Banköverföringar: Med stora banköverföringsmetoder som telegrafiska överföringar, efterfrågade utkast och SWIFT-överföringar, lovar Redha Al Ansari Exchange överföring av pengar till kundernas bankkonton vid den snabbaste vändningstiden. Kunder behöver bara närma sig någon av våra filialer och ge mottagarens uppgifter och obligatoriska handlingar enligt landets regler. Våra tjänstemän vid filialerna hjälper kunderna att behandla transaktionerna med kvalitet och personlig vård. Instant Money Transfer Solutions Genom att förstå kundernas krav erbjuder Redha Al Ansari Exchange olika IMT-lösningar till sina kunder. Redha Al Ansari Exchange har två direktöverföringslösningar, Fast Money och Western Union. Sna

Binär Alternativ Handelssignaler 2015 Formen

KOMMER PÅ DESTINATION Ta av osäkerheten och njut av Trading 21 oktober 2015 Erfaren handlare kanske redan är bekanta med mäklaren Banc de Binary, eftersom de är en av de ledande mäklare som är verksamma på marknaden idag. Banc de Binary grundades 2009 och är tillgängligt över hela världen och är hem för kunder från över 100 olika länder. För dem som är bekanta med sitt namn men inte mycket mer, syftar denna Banc de Binary recension till att ge ett fullständigt upplysande. Hur matchar de verkligen med andra ledande mäklare Trading Platform När det gäller den handelsplattform som Banc de Binary erbjuder, är den väldigt användarvänlig och markerad av en viss direkthet som gör det enkelt att navigera. Plattformen ishellip Så här hanterar du dina risker i binära alternativ Lär dig att minska riskerna när du handlar binära alternativ. Bakom varje bra handelsstrategi för binärt alternativ finns en bra riskhanteringsplan. I själva verket är hur du hanterar dina risker i binära alternativ en av