Im un débutant de SAS et Im curieux si la tâche suivante peut être faite beaucoup plus simple comme il est actuellement dans ma tête. J'ai les métadonnées (simplifiées) suivantes dans une table nommée userdatemoney: Utilisateur - Date - Money avec différents utilisateurs et des dates pour chaque jour de calendrier (pour les 4 dernières années). Les données sont commandées par User ASC et Date ASC, les données d'échantillon ressemble à ceci: Je veux maintenant calculer une moyenne mobile de cinq jours pour l'argent. J'ai commencé avec l'apprach assez populaire avec la fonction de lag () comme ceci: comme vous voyez, le problème avec cette méthode se produit si là si l'étape de données exécute dans un nouvel utilisateur. Aron obtiendrait des valeurs retardées d'Anna qui bien sûr ne devrait pas se produire. Maintenant, ma question: Je suis sûr que vous pouvez gérer le commutateur utilisateur en ajoutant des champs supplémentaires comme laggeduser et en réinitialisant les variables N, Somme et Moyenne si vous remarquez un tel changement, mais: Cela peut-il être fait d'une manière plus facile? Par Clause en aucune façon Merci pour vos idées et aide Je pense que la façon la plus simple est d'utiliser PROC EXPAND: Et comme mentionné dans le commentaire de Johns, il est important de se souvenir des valeurs manquantes (et des observations de début et de fin aussi). Ive a ajouté l'option SETMISS au code, car vous avez clairement indiqué que vous voulez zéro les valeurs manquantes, ne les ignorez pas (comportement MOVAVE par défaut). Et si vous voulez exclure les 4 premières observations pour chaque utilisateur (car ils n'ont pas assez de pré-historique pour calculer la moyenne mobile 5), vous pouvez utiliser l'option TRIMLEFT 4 à l'intérieur de TRANSFORMOUT (). Répondue Dec 3 13 at 15: 29Voir MACMA1 dans la bibliothèque d'exemples SASQC L'exemple précédent illustre comment vous pouvez créer des diagrammes à moyenne mobile en utilisant des données brutes (mesures de processus). Cependant, dans de nombreuses applications, les données sont fournies sous forme de statistiques sommaires de sous-groupes. Cet exemple illustre comment vous pouvez utiliser l'instruction MACHART avec des données de ce type. L'ensemble de données suivant (CLIPSUM) fournit les données de l'exemple précédent sous une forme résumée: Une liste de CLIPSUM est montrée à la Figure 21.3. Il y a exactement une observation pour chaque sous-groupe (notez que les sous-groupes sont toujours indexés par JOUR). La variable GAPX contient les sous-groupes, la variable GAPS contient les écarts-types des sous-groupes et la variable GAPN contient les tailles des sous-groupes d'échantillons. L'ensemble de données CLIPSUM Figure 21.3: Ensemble de données récapitulatives CLIPSUM Vous pouvez lire ce jeu de données en le spécifiant comme ensemble de données HISTORY dans l'instruction PROC MACONTROL, comme suit: Le graphique de la moyenne mobile résultant est illustré à la figure 21.4. Étant donné que l'option LINEPRINTER est spécifiée dans l'instruction PROC MACONTROL, la sortie de l'imprimante ligne est produite. L'astérisque () spécifié entre guillemets simples après la variable de sous-groupe indique le caractère utilisé pour tracer les points. Ce personnage doit suivre un signe égal. Notez que GAP n'est pas le nom d'une variable SAS dans l'ensemble de données, mais plutôt le préfixe commun pour les noms des trois variables SAS GAPX, GAPS et GAPN. Les caractères de suffixe X. S. Et N indiquent la moyenne. Écart-type. Et la taille de l'échantillon. respectivement. Ainsi, vous pouvez spécifier trois variables de résumé de sous-groupe dans un ensemble de données HISTORY avec un seul nom (GAP), appelé processus. Les variables GAPX, GAPS et GAPN sont toutes requises. Le nom DAY spécifié après l'astérisque est le nom de la variable de sous-groupe. Figure 21.4: Graphique de moyenne mobile pondérée uniformément à partir des données récapitulatives En général, un ensemble de données d'entrée HISTORIQUE utilisé avec l'instruction MACHART doit contenir les variables suivantes: sous-groupe variable sous-groupe moyenne variable sous-groupe écart type variable sous-groupe taille de l'échantillon variable En outre , Les noms de la moyenne des sous-groupes, de l'écart type et des variables de taille de l'échantillon doivent commencer par le nom du processus spécifié dans l'instruction MACHART et se terminer par les caractères de suffixe spéciaux X. S. et n . respectivement. Si les noms ne suivent pas cette convention, vous pouvez utiliser l'option RENAME dans l'instruction PROC MACONTROL pour renommer les variables pour la durée de l'étape de procédure MACONTROL. En résumé, l'interprétation du processus dépend de l'ensemble de données d'entrée. Si les données brutes sont lues à l'aide de l'option DATA (comme dans l'exemple précédent), process est le nom de la variable SAS contenant les mesures du processus. Si les données récapitulatives sont lues à l'aide de l'option HISTORY (comme dans cet exemple), process est le préfixe commun pour les noms des variables contenant les statistiques de synthèse. Pour plus d'informations, voir 34HISTORY Data Set34. 13 13Cette solution utilise une vue en ligne pour créer une table temporaire qui élimine les valeurs de données négatives dans la colonne Poids. La vue en ligne est une requête qui sélectionne les colonnes Genre et Valeur. Utilise une expression CASE pour sélectionner la valeur de la colonne Poids. Si le poids est supérieur à zéro, il est récupéré si Poids est inférieur à zéro, puis une valeur de zéro est utilisée à la place de la valeur Poids. La première instruction SELECT, ou externe, dans la requête, sélectionne la colonne Genre, construit une moyenne pondérée à partir des résultats obtenus par la vue en ligne. La moyenne pondérée est la somme des produits de valeur et de poids divisés par la somme des poids. Enfin, la requête utilise une clause GROUP BY pour combiner les données afin que le calcul soit effectué pour chaque sexe.
No comments:
Post a Comment