Monday, 6 February 2017

Calculer Mobile Moyenne En Sas

J'ai inclus une capture d'écran pour aider à clarifier mon problème: Im essaie de calculer une sorte de moyenne mobile et de déplacer l'écart type. La chose est que je veux calculer les coefficients de variation (stdevavg) pour la valeur réelle. Normalement, cela se fait en calculant le stdev et avg pour les 5 dernières années. Cependant, parfois, il y aura des observations dans ma base de données pour lesquelles je n'ai pas les informations des 5 dernières années (peut-être seulement 3, 2 etc). C'est pourquoi je veux un code qui va calculer le AVG et stdev même s'il n'y a aucune information pour l'ensemble 5 ans. En outre, comme vous le voyez dans les observations, parfois j'ai des informations sur plus de 5 ans, quand c'est le cas, j'ai besoin d'une sorte de moyenne mobile qui me permet de calculer le AVG et stdev pour les 5 dernières années. Donc, si une entreprise a des informations pour 7 ans, j'ai besoin d'une sorte de code qui va calculer le AVG et stdev pour, disons, 1997 (1991-1996), 1998 (1992-1997) et 1999 (1993-1998). Comme je ne suis pas très familier avec les commandes sas, il devrait regarder (très très grossièrement) comme: Ou quelque chose comme ça, je n'ai vraiment aucune idée, je vais essayer de comprendre, mais il vaut la peine de l'afficher si je ne vais pas le trouver moi-même. Post, je montre un tour pour faire le calcul de la moyenne mobile (peut être étendu à d'autres opérations nécessitant des fonctions de fenêtrage) qui est super rapide. 1. PROC EXPAND 2. DATA ETAPE 3. PROC SQL Mais de nombreux sites peuvent ne pas autoriser SASETS à utiliser PROC EXPAND et faire la moyenne mobile dans DATA STEP nécessite un certain codage et est sujet à erreurs. PROC SQL est un choix naturel pour les programmeurs juniors et dans de nombreux business cases la seule solution, mais SAS39s PROC SQL manque des fonctions de fenêtrage qui sont disponibles dans de nombreux DB pour faciliter le calcul de la moyenne mobile. Une technique que les gens utilisent habituellement est CROSS JOIN, ce qui est très coûteux et pas une solution viable pour les ensembles de données même de taille moyenne. Dans ce post, je montre un truc pour faire le calcul de la moyenne mobile (peut être étendu à d'autres opérations nécessitant des fonctions de fenêtrage) qui est super rapide. Considérons le calcul de la moyenne mobile le plus simple où les observations K à la traîne sont incluses dans le calcul, à savoir MA (K), ici nous mettons K5. On génère d'abord une donnée d'échantillon de 20 obs, où l'ID de variable doit être utilisée pour le fenêtrage et la variable X doit être utilisée dans le calcul MA, puis on applique le CROSS JOIN standard pour examiner d'abord les données résultantes, non groupées, Pour comprendre comment tirer parti de la structure de données. À partir de l'ensemble de données résultant, il est difficile de trouver un indice, maintenant let39s trier par quotbidquot colonne dans cet ensemble de données: à partir de ces données triées, il est clair que nous don39t ont effectivement CROSS JOIN ensemble ensemble de données originales, Nous pouvons générer un ensemble de données quotoperationquot qui contient la valeur de différence et laisser l'ensemble de données d'origine CROSS JOIN avec cet ensemble de données quotoperationquot beaucoup plus petit et toutes les données que nous devons utiliser pour le calcul MA seront là. Maintenant let39s le faire: CROSS JOIN données originales avec quotoperationquot données, trier par (a. idops), qui est en fait quotbid39 dans le jeu de données triées Notez que dans le code ci-dessus, il est nécessaire d'avoir ax multiplier par b. weight de sorte que les données Peut être intercalaire, sinon la même valeur X de la table d'origine sera sortie et le calcul MA sera échoué. La variable de poids explicite ajoute en fait plus de souplesse à l'ensemble du calcul MA. Bien que la définition de 1 pour tous obs résultent en un simple calcul de MA, affecter des poids différents aidera à résoudre le calcul MA plus complexes, comme donner d'autres observations moins de poids pour un MA décomposé. Si un paramètre K différent dans les calculs MA (K) est nécessaire, seul l'ensemble des données opérationnelles doit être mis à jour, ce qui est un travail triviale. Maintenant, le modèle de code réel pour le calcul MA (K) sera: Avec cette nouvelle méthode, il est intéressant de le comparer à l'auto coûteux CROSS JOIN ainsi qu'à PROC EXPAND. Sur mon poste de travail (Intel i5 3.8Ghz, 32 Go de mémoire, 1 To 72K HDD), auto CROSS JOIN est prohibitivement long en temps de fonctionnement (si les données sont grandes) alors que la nouvelle méthode utilise seulement 2X autant de temps que PROC EXPAND, les deux consommations de temps sont Trivial comparant à l'auto CROSS JOIN. La consommation de temps indiquée ci-dessous est en quotsecondquot. Ci-dessous les lecteurs de code peuvent exécuter et comparer vous-mêmes. Publié le 10 mai 2015 par Liang Xie Programmation SAS pour le Data MiningBeginning dans la version 6.08 du système SAS, PROC EXPAND dans le logiciel SASETS peut être utilisé pour effectuer une variété de transformations de données. Ces transformations incluent: les prospects, les retards, les moyennes mobiles pondérées et non pondérées, les sommes mobiles et les sommes cumulatives, pour n'en nommer que quelques-unes. De nombreuses nouvelles transformations ont été ajoutées dans la version 6.12, incluant des spécifications distinctes pour les moyennes mobiles centrées et arrières. Ces nouvelles transformations ont obligé à modifier la syntaxe de certaines des transformations prises en charge avant la version 6.12. Des exemples de la façon de spécifier la syntaxe des moyennes mobiles centrées et arrières utilisant la version 6.11 et antérieure et la version 6.12 et plus tard sont donnés ci-dessous. PROC EXPAND peut calculer soit une moyenne mobile centrée, soit une moyenne mobile en arrière. Une moyenne mobile centrée sur 5 périodes est calculée en faisant la moyenne d'un total de 5 valeurs consécutives de la série (la valeur de la période courante en plus des deux valeurs immédiatement précédentes et deux valeurs immédiatement après la valeur courante). Une moyenne mobile en arrière de 5 périodes est calculée en faisant la moyenne de la valeur de la période courante avec les valeurs des 4 périodes immédiatement précédentes. La syntaxe suivante illustre comment utiliser la spécification TRANSFORM (MOVAVE n) pour calculer une moyenne mobile centrée sur 5 périodes à l'aide de la version 6.11 ou antérieure: Pour calculer une moyenne mobile en arrière de période n en utilisant la version 6.11 ou antérieure, utilisez TRANSFORM (MOVAVE) N LAG k), où k (n-1) 2 si n est impair ou où k (n-2) 2 si n est pair. La syntaxe suivante illustre comment utiliser la spécification TRANSFORM (CMOVAVE n) pour calculer une moyenne mobile centrée sur 5 périodes en utilisant la version 6.12 ou plus récente: La syntaxe suivante illustre comment utiliser la spécification TRANSFORM (MOVAVE n) pour calculer une moyenne mobile en arrière de 5 périodes en utilisant la version 6.12 ou ultérieure: Pour plus d'informations, voir Opérations de transformation dans le chapitre EXPAND du Guide de l'utilisateur de SASETS. Si vous n'avez pas accès à SASETS, vous pouvez calculer une moyenne mobile dans l'étape DATA comme illustré dans cet exemple de programme. Informations sur le système d'exploitation et les versions


No comments:

Post a Comment