Im un principiante SAS e Im curioso di sapere se la seguente attività può essere fatto molto di più semplice in quanto è attualmente nella mia testa. Ho il seguente (semplificato) meta-dati in una tabella denominata userdatemoney: utente - Data - i soldi con i vari utenti e le date per ogni giorno di calendario (per gli ultimi 4 anni). Il dato è ordinato da ASC Utente e Data ASC, dati di esempio appare così: Ora voglio calcolare una media mobile cinque giorni per i soldi. Ho iniziato con il apprach piuttosto popolare con la funzione di ritardo () in questo modo: come si vede, il problema con questo metodo si verifica se c'è se il passaggio di dati si imbatte in un nuovo utente. Aron sarebbe ottenere alcuni valori ritardati da Anna che, ovviamente, non dovrebbe accadere. Ora la mia domanda: Sono abbastanza sicuro che è possibile gestire lo switch utente con l'aggiunta di alcuni campi aggiuntivi, come laggeduser e reimpostando il N, Somma e media variabili se si nota un tale passaggio, ma: questo può essere fatto in un modo più semplice Forse usando il BY in alcun modo Grazie per le vostre idee e aiuto credo che il modo più semplice è quello di utilizzare PROC EXPAND: e come accennato in Johns commento, è importante ricordo di valori mancanti (e su inizio e la fine osservazioni pure). Ive ha aggiunto l'opzione SETMISS al codice, come ha chiarito che si desidera zerofy valori mancanti, non li (comportamento MOVAVE default) ignorare. E se si desidera escludere primi 4 osservazioni per ogni utente (in quanto essi non hanno abbastanza preistoria per calcolare media mobile 5), è possibile utilizzare l'opzione TrimLeft 4 all'interno TRANSFORMOUT (). ha risposto 3 dicembre 13 a 15: 29The 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 degli ultimi 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 campione BY-group. this mostra come calcolare le somme di laminazione e le medie rotolamento definendo una matrice per contenere i valori per l'ultimo numero di periodi desiderati. Una volta che l'array contiene i valori desiderati, il calcolo della somma, utilizzando la funzione SOMMA, e la media, utilizzando la funzione di media, è straight-forward. Si può semplicemente passare la matrice di due funzioni per ottenere la statistica desiderata: questo esempio sottolinea la logica necessaria per avere sempre i periodi più recenti nella matrice prima di calcolare la prossima serie di statistiche di laminazione. Il concetto di rimuovere il valore più vecchio e sostituendolo con il valore più recente è comunemente indicato come FIFO - First In First Out. Una volta che l'array è stato popolato con il numero iniziale di periodi, le statistiche di laminazione vengono calcolate. Una variabile contatore viene utilizzato per tenere traccia e specificare l'elemento della matrice contenente il valore più vecchio e al quale deve essere assegnato il nuovo valore più recente. Il nuovo valore di sovra-scrive il valore più vecchio. Dopo aver eseguito un incarico, nuove statistiche di laminazione vengono calcolate. Questo processo continua fino a quando l'ultimo valore contribuire alle statistiche è stato letto dalla fonte dei dati. Nota: Altre statistiche rotolamento potrebbero anche essere calcolati. Come ad esempio la deviazione standard: Questi file di esempio e gli esempi di codice sono forniti da SAS Institute Inc. come è, senza alcun tipo di garanzia, esplicita 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. Nella prima fase DATI seguito, i dati di vendita di esempio è stato creato per 36 mesi. Nella seconda fase DATA, viene creato un array con lo stesso numero di elementi come il numero desiderato di periodi da utilizzare per il calcolo di una somma di rotolamento e media. Una volta che l'array è stato inizialmente popolata con il numero desiderato di periodi, il periodo successivo sostituisce il periodo più antico all'interno dell'array. In questo esempio, il numero desiderato di periodi è 12. Così, dopo la somma di rotolamento e media sono calcolati sui primi 12 periodi, il periodo di 13 sostituirà il 1 ° periodo e una nuova somma di rotolamento e media sono calcolati. Poi il periodo di 14 sostituirà il 2 ° periodo, e una nuova somma di rotolamento e media vengono calcolati, ecc Questi file di esempio e gli esempi di codice sono forniti da SAS Institute Inc. come è, senza alcun tipo di garanzia, sia espressa o implicita, tra cui ma non solo, le 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. Un array può essere utilizzato per contenere l'ultimo numero N di valori in modo che una somma e la media mobile possono essere calcolate dai valori entro i array. sas, 12 mesi rolling somma aiuto sasnewb raquo Ven 24 Set 2004 01:13:17 GMT ho un set di dati costruito come segue: valore del mese 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 più osservazioni valore del mese. Vorrei creare una variabile che è la somma di laminazione 12 mesi per ogni mese ad es mese mth12val 200106 194.339 e così via fino al mese corrente, 200409 per questo mese, 200410 per ottobre ecc Chiunque può offrire una soluzione per fare questo. Chuck alias Sasnewb pagati. Con la tua email gratuito zwalletindex. htmlusersasnewb sas gtgt 12 mesi rolling somma aiuto yhuang raquo Ven, 24 set 2004 01:34:36 GMT On Thu, 23 settembre 2004 17:13:17 0000, Chuck Windsor lt XXXXXXXXX gt mese ad esempio ottobre ecc Questo tipo di rotolamento Sumation o media mobile può essere più rapido di SQL. Supponendo che non avete il mese mancanti, ei dati sono già ordinati per anno e mese, quindi il numero di osservazione può essere utilizzato per identificare ogni mese: i dati xx valore del mese di ingresso nn carte 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 proc sQL SELECT distinta a., sum (b. value) come a rotazione da xx a. xx b dove un lt bn lt gruppo a. n12 da un valore del mese n rotolamento --------- ------------------------ -------------- 200106 13256 1 194339 200107 4888 2 182781 200108 67602 3 177893 200109 529 4 110291 200110 13743 5 109762 200111 53340 6 96019 200112 912 7 42679 200201 1003 8 41767 200202 7982 9 40764 200203 9620 10 32782 200204 2674 11 23162 200205 18790 12 20488 200206 1698 13 1698 Se i dati sono mese mancante, quindi abbiamo bisogno di utilizzare alcune funzioni SAS per identificare la finestra, che non è molto difficile sia. sas gtgt 12 mesi rolling somma aiuto Diskin raquo Ven, 24 Settembre 2004 03:55:07 GMT Ya Huang già ti ha dato una soluzione SQL pulito. (Presumo che funziona). Nel caso in cui, come me, non sei troppo selvaggio su SQL: Supponendo che non ci sono punti di dati mancanti ei dati vengono sortedin Discendente Data, è possibile utilizzare la funzione di ritardo a uno sommare tutti e 12 in ritardo rispetto ogni volta, o mantenere la somma e aggiungere il nuovo valore, mentre sottraendo il 13 lag. Il primo è più semplice da scrivere, ma temo, non molto efficiente, ma poi non avete molti dati. dati di un anno di ingresso 1-4 mesi 5-6 v carte 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 corsa proc sorta dataa scendendo anno descrescente dati mese run b impostare una somma rotolo (v, lag1 (v), lag2 (v), lag3 (v), lag4 (v), lag5 (v), lag6 (v), lag7 (v), lag8 (v), la G9 (v), lag10 (v), lag11 (v)) gestito HTH, Dennis Diskin Da: Chuck Windsor Sent: 9.232.004 13:21:17 a: XXXXXXXXX Subject: 12 mesi rolling aiuto somma che ho costruito un set di dati come segue: valore del mese 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 più osservazioni valore del mese. Vorrei creare una variabile che è la somma di laminazione 12 mesi per ogni mese ad es mese mth12val 200106 194.339 e così via fino al mese corrente, 200409 per questo mese, 200410 per ottobre ecc Chiunque può offrire una soluzione per fare questo. Chuck aka Sasnewb
No comments:
Post a Comment