Wednesday 25 October 2017

Beregning En Moving Average I Sas


Jeg inkluderte et skjermbilde for å avklare problemet mitt: Jeg prøver å beregne en slags bevegelige gjennomsnitt og flytte standardavvik. Saken er at jeg vil beregne variasjonskoeffisientene (stdevavg) for den faktiske verdien. Vanligvis gjøres dette ved å beregne stdev og avg for de siste 5 årene. Men noen ganger vil det være observasjoner i databasen min, som jeg ikke har informasjon om de siste 5 årene (kanskje bare 3, 2 osv.). Det er derfor jeg vil ha en kode som vil beregne avg og stdev selv om det ikke er noen informasjon for hele 5 år. Også, som du ser i observasjonene, har jeg noen ganger informasjon over mer enn 5 år, da dette er tilfelle, jeg trenger en slags glidende gjennomsnitt som gjør at jeg kan beregne avg og stdev for de siste 5 årene. Så hvis et selskap har informasjon i 7 år trenger jeg en slags kode som vil beregne avg og stdev for, kan vi si 1997 (1991-1996), 1998 (1992-1997) og 1999 (1993-1998). Jeg er ikke veldig kjent med sas-kommandoer, det burde se (veldig veldig grovt) som: Eller noe som dette, jeg har ingen anelse, jeg skal prøve å finne ut det, men det er verdt å legge det ut hvis jeg ikke finner det selv. Slett 6,08 av SAS-systemet, PROC EXPAND i SASETS-programvaren kan brukes til å lage en rekke data transformasjoner. Disse transformasjonene inkluderer: fører, lags, vektet og uvevet glidende gjennomsnitt, flytende summer og kumulative summer, for å nevne noen få. Mange nye transformasjoner ble lagt i versjon 6.12, inkludert separate spesifikasjoner for sentrert og bakovergående gjennomsnitt. Disse nye transformasjonene gjorde det nødvendig å endre syntaksen for noen av transformasjonene som ble støttet før utgivelsen 6.12. Eksempler på hvordan du angir syntaksen for sentrert og bakovergående gjennomsnitt, ved hjelp av versjon 6.11 og tidligere og versjon 6.12 og senere, er gitt nedenfor. PROC EXPAND kan beregne enten et sentrert glidende gjennomsnitt eller et bakovergående glidende gjennomsnitt. Et 5-års sentrert glidende gjennomsnitt beregnes ved å averdere totalt 5 påfølgende verdier i serien (den nåværende periodevarianten i tillegg til de to umiddelbart foregående verdiene og to verdier umiddelbart etter gjeldende verdi). Et 5-års tilbaketrekende glidende gjennomsnitt beregnes ved å gjennomsnittlig gjeldende periodeverdi med verdiene fra de 4 umiddelbart foregående perioder. Følgende syntaks illustrerer hvordan du bruker TRANSFORM (MOVAVE n) - spesifikasjonen til å beregne et 5-års sentrert glidende gjennomsnitt ved hjelp av Release 6.11 eller tidligere: Bruk TRANSFORM (MOVAVE) for å beregne et n-tilbakegående glidende gjennomsnitt ved hjelp av Release 6.11 eller tidligere. n LAG k) spesifikasjon, hvor k (n-1) 2 hvis n er merkelig eller hvor k (n-2) 2 hvis n er jevn. For eksempel illustrerer følgende syntaks hvordan du beregner et 5-årig bakovergående glidende gjennomsnitt ved hjelp av Slett 6.11 eller tidligere: Følgende syntaks illustrerer hvordan du bruker TRANSFORM (CMOVAVE n) - spesifikasjonen til å beregne et 5-års sentrert glidende gjennomsnitt ved hjelp av Slett 6.12 eller senere: Følgende lignende syntaks illustrerer hvordan du bruker TRANSFORM (MOVAVE n) - spesifikasjonen for å beregne et 5-årig bakovergående glidende gjennomsnitt ved hjelp av versjon 6.12 eller nyere: For mer informasjon, se Transformasjonsoperasjoner i EXPAND-kapitlet i SASETS brukerhåndbok. Hvis du ikke har tilgang til SASETS, kan du beregne et glidende gjennomsnitt i DATA-trinnet som illustrert i dette prøveprogrammet. Operativsystem og utgivelsesinformasjonSeksempelkoden på kategorien Fullkode illustrerer hvordan du beregner det bevegelige gjennomsnittet av en variabel gjennom et helt datasett, over de siste N observasjonene i et datasett eller over de siste N-observasjonene i en BY-gruppe. Disse prøvefiler og kodeeksempler er levert av SAS Institute Inc., som er uten garanti av noe slag, enten uttrykk eller underforstått, inkludert, men ikke begrenset til, de underforståtte garantiene for salgbarhet og egnethet for et bestemt formål. Mottakerne erkjenner og aksepterer at SAS Institute ikke skal holdes ansvarlig for eventuelle skader som måtte oppstå ved bruk av dette materialet. I tillegg vil SAS Institute ikke gi støtte til materialene som er inkludert heri. Disse prøvefiler og kodeeksempler er levert av SAS Institute Inc., som er uten garanti av noe slag, enten uttrykk eller underforstått, inkludert, men ikke begrenset til, de underforståtte garantiene for salgbarhet og egnethet for et bestemt formål. Mottakerne erkjenner og aksepterer at SAS Institute ikke skal holdes ansvarlig for eventuelle skader som måtte oppstå ved bruk av dette materialet. I tillegg vil SAS Institute ikke gi støtte til materialene som er inkludert heri. Beregn det bevegelige gjennomsnittet av en variabel gjennom et helt datasett, over de siste N observasjonene i et datasett, eller over de siste N observasjonene i en BY-gruppe. I dette innlegget viser jeg et triks for å gjøre gjennomsnittlig beregning (kan utvides til andre operasjoner som krever vindusfunksjoner) som er super fort. Ofte må SAS-analytikere gjennomføre gjennomsnittlig beregning, og det finnes flere alternativer i preferanseprosessen: 1. PROC EXPAND 2. DATA STEP 3. PROC SQL Men mange nettsteder kan ikke lisensiert SASETS å bruke PROC EXPAND og gjør bevegelige gjennomsnitt i DATA STEP krever noe koding og er feilaktig. PROC SQL er et naturlig valg for junior programmerere, og i mange forretningssaker er den eneste løsningen, men SAS39s PROC SQL mangler windowing-funksjoner som er tilgjengelige i mange DB'er for å lette glidende gjennomsnittlig beregning. En teknikk folk vanligvis bruker er CROSS JOIN, som er veldig dyrt og ikke en levedyktig løsning for enda mellomstore datasett. I dette innlegget viser jeg et triks for å flytte gjennomsnittlig beregning (kan utvides til andre operasjoner som krever windowing-funksjoner) som er super fort. Vurder den enkleste glidende gjennomsnittlige beregningen der de etterfølgende K-observasjonene er inkludert i beregningen, nemlig MA (K), her setter vi K5. Vi genererer først 20 obs eksempeldata, hvor variabel ID skal brukes til vinduer og variabelen X skal brukes i MA-beregning, og deretter bruker vi standard CROSS JOIN for først å undersøke de resulterende dataene, ikke-grupperte, bare å forstå hvordan man kan utnytte datastrukturen. Fra det resulterende datasettet er det vanskelig å finne en anelse, nå la oss sortere etter quotequot kolonne i dette datasettet: Fra disse sorterte data er det klart at vi egentlig ikke trenger å KROSSE GJENNOM hele originaldatasettet, men i stedet, vi kan generere et kvoteringsquot datasett som inneholder differanseværdien, og la det opprinnelige datasettet CROSS JOIN med dette mye mindre quotoperationquot datasettet, og alle dataene vi trenger for MA-beregning, vil være der. La oss nå gjøre det: KROSS MED originale data med quotoperationquot-data, sorter etter (a. idops), som faktisk er quotbid39 i sortert datasett. Merk at i over kode er det nødvendig å ha øksmultiplikasjon med b. weight slik at dataene kan være inter-leaved, ellers vil samme X-verdi fra originaltabellen bli utgitt og MA-beregningen mislykkes. Den eksplisitte vektvariabelen gir faktisk mer fleksibilitet til hele MA-beregningen. Ved å sette det til å være 1 for alle, resulterer det i en enkel MA-beregning. Tilordne forskjellige vekter vil bidra til å løse mer komplisert MA-databehandling, for eksempel å gi ytterligere observasjoner mindre vekt for en forfalt MA. Hvis det kreves forskjellig K-parameter i MA (K) beregninger, må bare operasjonsdatasettet oppdateres, noe som er en triviell jobb. Nå er den faktiske koden mal for MA (K) beregning: Med denne nye metoden er det interessant å sammenligne det med det dyre selv CROSS JOIN, så vel som å PROC EXPAND. På arbeidsstasjonen min (Intel i5 3.8Ghz, 32GB minne, 1TB 72K HDD), er selvkryss JOIN forbudt lenge i kjøretid (hvis dataene er store), mens den nye metoden bare bruker 2X så mye tid som PROC EXPAND, er begge tidsforbrukete trivial sammenligne med selv CROSS JOIN. Tidsforbruket som vises nedenfor er i kvotekvot. Nedenfor er kodeleserne kan kjøre og sammenligne dere selv. Skrevet 10. mai 2015 av Liang Xie SAS Programmering for Data Mining

No comments:

Post a Comment