Eksempelkoden 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. Innledning i utgave 6.08 av SAS-systemet kan PROC EXPAND i SASETS-programvare 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 versjon 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 perioden verdi 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 Utgivelsesinformasjon Jeg inkluderte et skjermbilde for å klargjøre mitt problem: 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. med datoperiode flyttende gjennomsnitt med datoperiode glidende gjennomsnitt med datoperiode Jeg er ny hos SAS, og jeg har noen problemer med å beregne glidende gjennomsnitt basert på datoer og grupperinger i datasettet. I utgangspunktet prøver jeg å beregne glidende gjennomsnitt for hver observasjon basert på de siste 90 dagene. Hver observasjon har en dato. Jeg må også gruppere dem slik at glidende gjennomsnitt bare er basert på gruppen. Med andre ord, hvis jeg var gruppert av frukt, ville epler ha sitt eneste bevegelige gjennomsnitt og orages, etc. Jeg vet at jeg må sortere datasettet først, og deretter bruke en holdningserklæring. Jeg tenkte faktisk på å lage en makro også. Jeg startet dette, men kan ikke synes å få noen del av det til å fungere. Kan noen hjelpe meg Jeg vet hvordan å gjøre sorteringen, men jeg vet også hvordan jeg får gjennomsnittet, men det er ikke gruppering riktig. Det gir meg bare verdien av observasjonen. Jeg prøvde da å gjøre det med SQL, men det virker heller ikke. Dette er hva jeg kom opp med. proc sql lage tabell data. movingavg som velg a., mean (basis) som flytting fra xx hvor dateratgruppe etter produkt RE: glidende gjennomsnitt med datoperiode dette virker heller ikke. data nytt sett gammelt ved id behold grunnlag dersom date90 da avg gjennomsnittlig (basis) kjøre RE: glidende gjennomsnitt med datoperiode Her er et eksempel på datasettet mitt. produkt dato basis eple may20 4 oransje mars2 3 apple april 3 banan jan31 33 apple feb13 88 apple dec2 12 hva jeg trenger er et løpende glidende gjennomsnitt av de siste 90 dagene av produktet basert på basisbeløpet. Beklager for flere innlegg, men etter at jeg har lest det tidligere innlegget mitt, virket det forvirrende om hva jeg prøver å gjøre. takk RE: glidende gjennomsnitt med datoperiode klaz2002 (programmerer) 25 sep 07 16:00 Jeg må begynne med å si takk for dette spørsmålet. Fordi det ga meg ingen hvile til jeg kunne løse det. La meg si hva jeg tror er kravet ditt bare slik at du og jeg er på samme side. Req 1) Du vil ha et bevegelige gjennomsnitt av de siste 90 dagene av data etter produktnavn. Betydning, at for et enkelt produkt (for eksempel eple) er du bare interessert i basisverdiene for det produktet som går tilbake 90 dager. 2) Jeg antok at du har en (1) post per produkt per dag. Det betyr at du aldri har mer enn en basisverdi per produkt per dag. (koden håndterer ikke mer akkurat nå) For å løse historikkproblemet (verdiene går tilbake 90 dager) brukte jeg lagx () og satt dager 1-90 i variabler og deretter lagt dem til en ARRAY. Siden variabelen må inkluderes i gruppen, opprettet jeg en liten makro som genererte kodelinjene som jeg trengte. Makro som skaper 270 variabler for 90 dager i historien makro SetVars gjør i1 til 90 prodampi lagampi (produkt) dateampi lagampi (dato) basisampi lagampi (basis) sluttendring FIRST SORT BY PRODUCT AND DATE proc sorter data yourdata ut datasorted etter produktdatoen kjøre data siste sett datasorted etter produkt dato lengde prod1-prod90 7 date1-date90 basis1-basis90 mysum 8 array nåværende mysum array prod prod1-prod90 array dt date1-date90 array bs basis1-basis90 SetVars SETT DATOEN 90 DAGER AGO TO CHECK DateMinus90 date-90 bctr 1 mysum 0 LØP OVER ALLE MULIGE DAGER Gjør I1 TIL 90 SKRIV UTTRYKKELIG FOR FIRST CASE I PRODUKTGRUPPE DER ER INGEN LAG YET OM FØRSTE PRODUKT OG BEGRENSNING AV BEGRENSNING. KONTROLLER FOR DET SAMME PRODUKTNAVN OG INNEN 90 DAGER ANNEN OM TJENESTER (OPPBEVARING )) trim (oppgave (produkt)) og dt dateminus90 så gjør det dersom du legger til SUM VAR mysum summen (mysum, basis, bs) HOLD EN TEL AV HVOR MANGE DATAPOINTER FUNKSJONER 1 End Enden IF INGEN FUNKSJONER DEN NUVENDE GRUNNSVAREN BURDE BLI BRUKT hvis mysum 0 then myavg basis annet minavg mysumbctr kjøre proc print dataFINAL var produkt dato dateminus90 basis myavg format date dateminus90 mmddyy10. løp Jeg håper at dette hjelper deg. Du bør virkelig se dette over som jeg gjorde dette virkelig uten omfattende kontroll. Det kan være mange begrensninger på denne koden, så vær forsiktig.
Comments
Post a Comment