Comment créer un script group by pour gérer un nombre flexible de groupesSalut,
Travail sur l'automatisation de l'analyse et nécessité de rendre le script généré automatiquement plus générique.
Le flux de travail consiste à créer un tableau récapitulatif regroupé par trois colonnes avec quatre colonnes obtenant des valeurs dérivées. C'est bon.
Maintenant, je veux créer des tracés à sens unique avec l'une des variables de regroupement d'origine et également regrouper les tracés par une deuxième variable.
Regroupement : Cycle, Étape, Étape unique
4 allers simples séparés par cycle regroupés Step.
Le script généré automatiquement fonctionne correctement sur mon fichier de test. La question est de savoir comment le rendre plus générique.
Si je regarde le script, il y a des appels spécifiques pour la valeur de la colonne d'étape
<<{Disposer en lignes(4)}, Où(:Étape == 1), Où(:Étape == 1))
Et dans le cas de test, il y a 19 valeurs pour step. Comment dois-je m'y prendre pour être flexible quant au nombre d'étapes ? Différents fichiers auront différents nombres d'étapes. Quelles sont les meilleures pratiques ici ? Mon résultat souhaité est d'avoir les quatre parcelles dans une rangée avec la boîte de regroupement ayant également la valeur de l'étape affichée (maintenant c'est en petit texte après les parcelles) et des robots au nombre d'étapes qu'un fichier entrant pourrait avoir.
Andy
dt1=Data Table( dt) <<SUMMARY></SUMMARY>
Fusion et nettoyage des donnéesRe : Comment créer un script group by pour gérer un nombre flexible de groupesPourriez-vous utiliser une Line Up Box ?
New Window( "Row-Wise",
Line Up Box( N Col(2),
Oneway( Y( :weight ), X( :sex), By( :age ))
)
);
Re : Comment créer un script group by pour gérer un nombre flexible de groupesSalut,
Merci beaucoup txnelson ! J'ai fait quelques ajustements, je l'ai simplifié et je l'ai fait fonctionner
J'ai travaillé un peu et je suis arrivé à une solution. La mise en accusation des parcelles peut être simplifiée puisque la nouvelle fenêtre définit leur boîte de réception pour avoir un arrangement de 4 parcelles et dans mon cas, je veux que les quatre aillent ensemble à la suite, je peux simplement remplir dès le début dans une simple boucle. Comptez simplement le nombre d'articles, parcourez-les et ajoutez-les à la boîte.
view = dt1 << Oneway(
Y( {:"Min(TV Pres (torr))"n ,:"Min(DS Pres (torr))"n,:"Max(TV Pres (torr))"n, :"Max(DS Pres (torr))"n}),
X( :Cycle ),
by (:Step),
Quantiles( 1 ),
Means( 1 ),
Mean Diamonds( 0 ),
Box Plots( 1 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
SendToReport(
Dispatch( {}, "Quantiles", OutlineBox, {Close( 1 )} ),
Dispatch( {}, "Oneway Anova", OutlineBox, {Close( 1 )} ),
Dispatch( {"Oneway Anova"}, "Analysis of Variance", OutlineBox, {Close( 1 )} )
)
);
nw = New Window( "test", lub = Lineup Box( N Col( 4 ) ) );
numRows = N Items( view );
For( theRow = 1, theRow <= numRows, theRow++,
lub << append( Report(view[(theRow)]) <BR /> );
Andy
Re : Comment créer un script group by pour gérer un nombre flexible de groupesSalut,
Je reçois une erreur autour de l'appel i++ dans le dernier bit du code. Je ne vois pas de variable, i, initialisée plus tôt dans le code. A quoi fait-il référence ?
AndyRe : Comment créer un script group by pour gérer un nombre flexible de groupesVous trouverez ci-dessous un exemple qui place les 4 graphiques dans une seule ligne, et une ligne pour chaque colonne spécifiée dans l'analyse

Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA\big class.jmp" );
// restrict to 4 ages to match the 4 level requirement
dt1 << select where( :age >= 16 );
dt1 << delete rows;
// Create a window to place the output in
nw = New Window( "test", lub = Lineup Box( N Col( 4 ) ) );
// Run the analysis with a By clause
view = dt1 << Oneway(
invisible,
Y( :height, :weight ),
X( :sex ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 1 ),
by( :age ),
SendToReport(
Dispatch( {}, "Quantiles", OutlineBox, {Close( 1 )} ),
Dispatch( {}, "Oneway Anova", OutlineBox, {Close( 1 )} ),
Dispatch( {"Oneway Anova"}, "Analysis of Variance", OutlineBox, {Close( 1 )} )
)
);
// Take the elements from the outout and place in the window
// The display produces all levels of the by across one level
// of by group and then moves onto the next by group. Therefore
// the displays need to be picked across the full range of outputs
// to get the four grqaphs aligned
numCols = N Items( view ) / 4;
For( col = 1, col <= numCols, col++,
For( theRow = 1, theRow <= 4, theRow++,
lub << append( Report( view[(theRow - 1) * numCols + col] ) );
i++;
)
)
;
Re : Comment créer un script group by pour gérer un nombre flexible de groupesA fait quelques progrès.
La majeure partie du travail pourrait être gérée en utilisant l'opérateur "Par".
Ce qui manque encore, c'est comment obtenir les groupes disposés en groupes de 4 afin que les parcelles de chacun par groupement soient sur la même ligne.
Des pensées
Andy
view = dt1 << Oneway(
Y( {:"Min(TV Pres (torr))"n ,:"Min(DS Pres (torr))"n,:"Max(TV Pres (torr))"n, :"Max(DS Pres (torr))"n}),
X( :Cycle ),
by (:Step),
Quantiles( 1 ),
Means( 1 ),
Mean Diamonds( 0 ),
Box Plots( 1 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
SendToReport(
Dispatch( {}, "Quantiles", OutlineBox, {Close( 1 )} ),
Dispatch( {}, "Oneway Anova", OutlineBox, {Close( 1 )} ),
Dispatch( {"Oneway Anova"}, "Analysis of Variance", OutlineBox, {Close( 1 )} )
)
);