Calculer la moyenne mobile basée sur 2 colonnes catégorielles et sur des données combinéesJ'ai un ensemble de données avec des dizaines d'œufs en moyenne par OrderId et OrderDate pour Trial (Before, After) et TrialWeek (1, 2, 3, 4, 5). Je voudrais utiliser la fonction Moyenne mobile pour calculer la moyenne des dizaines à la fin de chaque semaine, en utilisant les données des semaines précédentes, puis entrer ce nombre dans une nouvelle colonne. Il devrait donc y avoir des dizaines de moyennes répétées pour chaque ligne qui ont les mêmes Trial et TrialWeek.
Par example:
Trial == Avant & TrialWeek == 1 = Moyenne des dizaines pour TrialWeek 1
Trial == Avant & TrialWeek == 1 & 2 = Moyenne des dizaines de TrialWeek 2
Trial == Before & TrialWeek == 1 & 2 & 3 = Mean Dozens TrialWeek 3, et ainsi de suite.
La moyenne mobile veut que je saisisse le nombre de lignes sur lesquelles la moyenne est calculée, mais le nombre de lignes par TrialWeek n'est pas le même, donc je ne peux pas utiliser un nombre fixe de lignes pour calculer cela. Je sais que j'aurai besoin d'écrire une formule pour ce faire, mais je ne sais pas comment composer la formule. J'utilise JMP Pro 16. Toute aide serait grandement appréciée!
ScriptingRe: Calculer la moyenne mobile basée sur 2 colonnes catégorielles et sur des données combinéesEst-ce ce que vous recherchez?

x = .;
curWeek = :TrialWeek;
If( :Trial == "Before" & :TrialWeek != :TrialWeek[Row() + 1],
x = Col Mean( If( :Trial == "Before" & :TrialWeek <= curWeek, :Dozens, . ) )
);
x;
Re: Calculer la moyenne mobile basée sur 2 colonnes catégorielles et sur des données combinéesMerci @txnelson !
J'ai ajusté le code pour calculer également la moyenne mobile pour Trial == After, donc cela semble fonctionner. Mais j'ai remarqué que le code ne calculait pas la moyenne mobile pour TrialWeek == 1 à moins que le tableau ne soit trié.
x = .;
curWeek = :TrialWeek;
If(
:Trial == "Before" & :TrialWeek != :TrialWeek[Row() + 1], x = Col Mean( If( :Trial == "Before" & :TrialWeek <= curWeek, :Dozens, . ) ),
:Trial == "After" & :TrialWeek != :TrialWeek[Row() + 1], x = Col Mean( If( :Trial == "After" & :TrialWeek <= curWeek, :Dozens, . ) )
);
x;