Monday, 21 August 2017

Calcola Mobile Media In Sas


In questo post, vi mostro un trucco per fare movimento calcolo della media (può essere estesa ad altre operazioni che richiedono funzioni di windowing), che è super veloce. Spesso, gli analisti SAS bisogno per condurre in movimento calcolo della media e ci sono diverse opzioni per l'ordine di preferenza: 1. PROC EXPAND 2. DATI FASE 3. PROC SQL, ma molti siti non possono licenza SASETS da utilizzare PROC espandere e fare media mobile a DATI STEP richiede un po 'di codifica ed è soggetto a errori. PROC SQL è una scelta naturale per i programmatori minori e, in molti casi aziendali l'unica soluzione, ma SAS39s PROC SQL manca funzioni di windowing che sono disponibili in molti DB per facilitare lo spostamento calcolo della media. Una tecnica la gente di solito usano è CROSS JOIN, che è molto costoso e non una soluzione valida per il set di dati, anche di medie dimensioni. In questo post, vi mostro un trucco per fare movimento calcolo della media (può essere estesa ad altre operazioni che richiedono funzioni di windowing), che è super veloce. Si consideri il semplice movimento calcolo della media in cui le finali osservazioni K sono inclusi nel calcolo, vale a dire MA (K), qui abbiamo fissato K5. Per prima cosa generare un 20 dati di esempio OB, dove variabile ID deve essere utilizzato per finestre e la variabile X è quello di essere utilizzato in calcoli MA, e poi applichiamo il CROSS standard di JOIN di esaminare prima i dati risultanti, non raggruppati, basta per capire come sfruttare la struttura di dati. Dal conseguente insieme di dati, è difficile trovare un indizio, ora let39s ordina per colonna quotbidquot in questo insieme di dati: Da questo allineati i dati, è chiaro che in realtà don39t devono attraversare ENTRA l'intero insieme di dati originale, ma, invece, siamo in grado di generare un insieme di dati quotoperationquot che contiene il valore della differenza, e lasciare che l'originale set di dati CROSS JOIN con questo set di dati quotoperationquot molto più piccolo, e tutti i dati che dobbiamo usare per il calcolo MA saremo lì. Ora let39s farlo: CROSS JOIN dati originali con i dati quotoperationquot, sort by (a. idops), che è in realtà quotbid39 in ordinata serie di dati noti che nel codice di cui sopra, è necessario avere ascia moltiplicare per b. weight in modo che i dati possono essere inter-foglie, altrimenti lo stesso valore X da tavolo originale verrà emesso e il calcolo MA saranno fallito. La variabile di peso esplicito in realtà aggiunge a una maggiore flessibilità per l'intero calcolo di MA. Durante l'impostazione che sia 1 per tutti i risultato OB in un semplice calcolo MA, assegnare pesi diversi aiuteranno a risolvere più complesso MA computing, come dare ulteriori osservazioni meno peso per un MA decaduto. Se sono necessari diversi parametri K in MA (K) i calcoli, solo il set di dati di funzionamento ha bisogno di essere aggiornato, che è lavoro banale. Ora il modello di codice effettivo per il calcolo MA (K) sarà: Con questo nuovo metodo, è interessante confrontarlo con la costosa auto CROSS JOIN e per proc espandersi. Sul mio posto di lavoro (Intel i5 3,8 GHz, 32GB di memoria, 1TB 72K HDD), l'auto CROSS JOIN è proibitivo a lungo nel tempo di esecuzione (se i dati è grande), mentre il nuovo metodo utilizza solo 2X quanto più tempo PROC EXPAND, sia i consumi di tempo sono banale confronto con sé CROSS JOIN. consumo di tempo indicato di seguito è in quotsecondquot. Qui di seguito è il lettori di codici possano correre e confrontare voi stessi. Pubblicato 10 Maggio 2015 da Liang Xie SAS di programmazione per i dati MiningI incluso uno screenshot per contribuire a chiarire il mio problema: Im cercando di calcolare una sorta di media mobile e in movimento deviazione standard. Il fatto è che voglio per il calcolo dei coefficienti di variazione (stdevavg) per il valore effettivo. Normalmente questo si fa calcolando la STDEV e medio per gli ultimi 5 anni. Tuttavia a volte ci saranno osservazioni nel mio database per il quale non ho le informazioni degli ultimi 5 anni (forse solo 3, 2, ecc). Ecco perché voglio un codice che calcola la media e STDEV anche se non ci sono informazioni per l'intero 5 anni. Inoltre, come si vede nelle osservazioni, a volte ho informazioni su più di 5 anni, quando questo è il caso ho bisogno di un qualche tipo di media mobile che mi permette di calcolare la media e STDEV per il passato 5 anni. Quindi, se una società ha informazioni per 7 anni ho bisogno di un certo tipo di codice che calcola la media e STDEV per, diciamo, 1997 (dal 1991-1996), 1998 (dal 1992-1997) e nel 1999 (1993-1998). Come im non molto familiarità con i comandi sas dovrebbe apparire (molto molto approssimativamente) come: O qualcosa di simile, ho davvero alcun indizio, Im che va provare e calcolare fuori, ma il suo valore distacco, se non lo vorrei trovo myself. moving media con intervallo di date media mobile con intervallo di date media mobile con intervallo di date Im nuovo a SAS, e sto avendo alcuni problemi con il calcolo media mobile basata su date e gruppi all'interno del set di dati. In sostanza, sto cercando di calcolare la media mobile per ogni osservazione sulla base degli ultimi 90 giorni. Ogni osservazione ha una data. Ho anche bisogno di raggrupparli in modo che la media mobile si basa solo sul gruppo. In altre parole, se mi è stato raggruppando che da frutti, mele avrebbero il suo unico media mobile e orages, ecc so che avrò bisogno di ordinare prima il set di dati, quindi utilizzare una dichiarazione conservare. Mi è stato effettivamente pensando di fare una macro troppo. Ho iniziato questo, ma non posso sembra di avere una parte di esso a lavorare. Qualcuno mi può aiutare io so come fare la cernita, ma so anche come ottenere la media, ma non è il raggruppamento in modo corretto. E 'solo mi dà il valore dell'osservazione. Allora ho provato a farlo con SQL, ma la sua non funziona neanche. questo è ciò che mi è venuta. proc SQL CREATE tavolo data. movingavg come selezionare un, media (base), come si spostano da xx dove datedate gruppo da RE di prodotto:. media mobile con intervallo di date questo non funziona neanche. Dati nuovo set vecchio da id conservare base se date90 poi avg RE (base) run media: media mobile con intervallo di date Ecco un esempio del mio set di dati. data del prodotto base mela may20 4 arancia march2 3 mele 3 aprile banane jan31 33 mela feb13 88 mela DEC2 12 che cosa ho bisogno è una media mobile di corsa degli ultimi 90 giorni di per prodotto in base alla quantità di base. dispiace per il posto più, ma dopo che ho riletto il mio post precedente, sembrava confuso da quello che sto cercando di fare. Grazie RE: media mobile con intervallo di date klaz2002 (programmatore) al 25 7 Settembre 16:00 devo iniziare dicendo grazie per questa domanda. Perché mi ha dato riposo fino a quando ho potuto risolverlo. Vorrei dire quello che credo sia la vostra esigenza solo così che tu ed io siamo sulla stessa pagina. Req 1) Si desidera avere una media mobile degli ultimi 90 giorni di dati in base al nome del prodotto. Il che significa, che per un singolo prodotto (es. Mela) youre interessati solo nella base valori di tale prodotto che risale a 90 giorni. 2) Ho pensato che si dispone di un (1) record per prodotto al giorno. Ciò significa che non hai mai più di un valore base per prodotto per giorno. (Il manico codice pretende molto di più in questo momento) per risolvere il problema della storia (valori che risale a 90 giorni) ho usato la lagx () e mettere giorni 1-90 nelle variabili e poi aggiunti ad un array. Dal momento che la variabile deve essere inclusi nella matrice ho creato una piccola macro che ha generato le righe di codice di cui avevo bisogno. Macro che crea 270 variabili per 90 giorni della storia SetVars macro non I1 a 90 prodampi lagampi (prodotto) dateampi lagampi (data) basisampi lagampi (base) fine riparare Ordina dati prodotto e data proc ordinamento yourdata out datasorted per data prodotto dati run serie finale datasorted per data prodotto lunghezza prod1-prod90 7 date1-date90 basis1-basis90 MySum 8 gamma attuale gamma MySum prod prod1-prod90 serie DT date1-date90 bs matrice SetVars basis1-basis90 impostare la data 90 GIORNI FA pER CONTROLLARE DateMinus90 data-90 bctr 1 MySum 0 scorrere tutti possibili giorni non I1 a 90 WRITE ECCEZIONE pER primo caso in gruppo di prodotti nON C'È ANCORA GAL se first. product poi movingavg base CONTROLLO pER STESSO NOME DEL PRODOTTO ed entro 90 giorni se altro assetto (upcase (prod )) trim (upcase (prodotto)) e dt dateminus90 poi fare se trovato quindi aggiungere ALLA sum sum VAR MySum (MySum, base, bs) tenere un conteggio dI datapoints quanti di questi hanno bctr fine 1 end If None found poi la base valore corrente deve essere usato se MySum 0 allora myavg base altro myavg proc tiratura mysumbctr dataFINAL VAR prodotto base dateminus90 formato myavg data dateminus90 mmddyy10. Corro Spero che questo ti aiuta. È davvero dovrebbe guardare questo più come ho fatto davvero, senza ampi controlli. Ci possono essere molte limitazioni a questo codice in modo beware. The codice di esempio sulla scheda codice completo illustra come calcolare la media mobile di una variabile attraverso un intero set di dati, nel corso degli ultimi N osservazioni in un insieme di dati, o nel corso dell'ultimo N osservazioni entro un BY-gruppo. Questi file di esempio e gli esempi di codice sono forniti da SAS Institute Inc. come è, senza alcun tipo di garanzia, espressa o implicita, compreso ma non limitato alle garanzie implicite di commerciabilità e idoneità per uno scopo particolare. Destinatari riconoscono e concordano sul fatto che SAS Institute non sarà responsabile per qualsiasi danno derivante dal loro uso di questo materiale. Inoltre, SAS Institute fornirà alcun supporto per i materiali qui contenuti. Questi file di esempio e gli esempi di codice sono forniti da SAS Institute Inc. come è, senza alcun tipo di garanzia, espressa o implicita, compreso ma non limitato alle garanzie implicite di commerciabilità e idoneità per uno scopo particolare. Destinatari riconoscono e concordano sul fatto che SAS Institute non sarà responsabile per qualsiasi danno derivante dal loro uso di questo materiale. Inoltre, SAS Institute fornirà alcun supporto per i materiali qui contenuti. Calcolare la media mobile di una variabile attraverso un intero set di dati, nel corso degli ultimi N osservazioni in un insieme di dati, o nel corso degli ultimi N osservazioni entro un by-gruppo.

No comments:

Post a Comment