Collecte de la somme cumulée de la colonne évaluéeSalut tout le monde,
J'essaie de créer une colonne qui évalue sa ligne précédente et y ajoute le zscore, puis prend le maximum entre cette évaluation et 0. J'ai essayé de déplacer la formule de décalage autour de l'équation de la somme cumulée, mais je n'ai pas eu de chance. Il ne prend que la valeur de zscore quelle que soit la ligne précédente. Toute aide sur la façon de résoudre ce problème serait grandement appréciée!
dt = Open("Big Class.jmp");
dt << New Column( "zscore", Formula((:weight - Col Mean( :weight, :sex )) / Col Std Dev( :weight, :sex )));
dt << Sort( By( :sex), Order( Ascending), Replace Table );
dt << New Column( "S_Hi", Formula( If( :sex == Lag( :sex ), Max( 0, :zscore + Lag( Col Cumulative Sum( :S_Hi ) ) ), Max( 0, :zscore ) ) ) )
Re : Rassembler la somme cumulée de la colonne évaluéeHé Mark, cela a parfaitement fonctionné. Merci pour les commentaires!
Re : Rassembler la somme cumulée de la colonne évaluéeJe pense que la solution de Jim est basée sur votre script original mais je ne pense pas que vous souhaitiez utiliser une somme cumulée distincte. Le script suivant n'est pas correct car je ne suis toujours pas sûr de ce que vous voulez, mais il est plus simple et peut-être plus proche de la vraie solution :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt << Sort( By( :sex ), Order( Ascending ), Replace Table );
dt << New Column( "Z Score", Formula( (:weight - Col Mean( :weight, :sex )) / Col Std Dev( :weight, :sex ) ) );
dt << New Column( "S_Hi",
Formula( If( :sex == Lag( :sex ), Max( 0, :zscore + Lag( :S_Hi ) ), Max( 0, :zscore ) ) )
);
Re : Rassembler la somme cumulée de la colonne évaluéeMerci pour l'aide Nelson, mais malheureusement, la valeur Max n'entre jamais en jeu. Lorsqu'elle est appliquée, la 40e ligne est déjà une valeur 5E + 10. En gros, je veux juste obtenir la somme de toutes les valeurs précédentes dans la colonne et les ajouter au zscore de cette ligne.
Re : Rassembler la somme cumulée de la colonne évaluéeVoici comment j'aborderais cela
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt << New Column( "zscore",
Formula( (:weight - Col Mean( :weight, :sex )) / Col Std Dev( :weight, :sex ) )
);
dt << Sort( By( :sex ), Order( Ascending ), Replace Table );
dt << New Column( "S_Hi",
Formula(
If(row()==1,cum=0);
If( :sex == Lag( :sex ),
x=Max( 0, :zscore + cum ),
x=Max( 0, :zscore )
);
cum=cum+x;
x;
)
);