Ignorer les lignes "exclues"Bonjour,
J'essaie toujours de surmonter la "bosse" de la JSL, alors pardonnez la question fondamentale.
Le problème:
- J'ai un exemple de table qui contient des ensembles de données pour trois répliques avec un exemple de suffixe a1, a2 et a3.
- Parfois, l'une des répliques doit être définie sur l'état "Exclu" (l'exemple ci-dessous est a2)
- J'écris un script batch qui ouvrira une table et n'appliquera les calculs que les ensembles qui n'ont pas été exclus.
- Cependant, je ne suis toujours pas là avec ma tentative (illustrée ci-dessous) car les données des trois sont toujours à l'étude.
- J'ai l'impression qu'une instruction "et" peut être nécessaire pour identifier les lignes non exclues, puis appliquer la recherche de suffixes.
Toute contribution serait très appréciée.
Merci Neil
states = Current Data Table() << Get Row States();
For( i = 1, i <= N Rows( states ), i++,
rs = As Row State( states[i] );
if (Excluded(rs)==0,
a1 = dt << Get Rows Where(Contains(:Sample,"a1"));
a2 = dt << Get Rows Where(Contains(:Sample,"a2"));
a3 = dt << Get Rows Where(Contains(:Sample,"a3"));
);
)
Tableau de donnéesRe: Ignorer les lignes "Exclues"Il semble que vous parcourez la liste des lignes exclues, mais que vous effectuez ensuite la même analyse à chaque fois, ce qui ne fait référence nulle part à la liste des lignes exclues.Voici une façon de résoudre votre problème, qui obtient les lignes correspondantes et les lignes exclues, puis supprime simplement les lignes exclues de la liste.
Names default to here(1);
//Make a sample dataset with some excluded rows
dt = Open("$Sample_data/iris.jmp");
excluded rows to set = [ 4, 9, 52 ];
dt << Select Rows( excluded rows to set );
dt << Exclude(1);
//Find all matching rows and load in associative array, useful for Remove From function later
species matches = associative array(dt << Get Rows Where(:Species == "setosa"));
//get excluded rows
excluded rows = dt << get excluded rows();
//remove excluded rows from the list of rows matching the species
Remove From (species matches, excluded rows);
//get the matching rows as a list
speciesmatches << get keys;Re: Ignorer les lignes "Exclues"euh,
Merci beaucoup pour votre contribution. Je suis encore un peu novice, mais j'ai essayé le concept Associative Array. Le code est affiché et fonctionnera jusqu'à "Obtenir les clés". Cependant, je ne suis toujours pas sûr de savoir comment récupérer les informations dont j'ai besoin dans les "correspondances d'espèces" pour effectuer les calculs nécessaires (6 dernières lignes répertoriées). J'ai pris une image d'une table typique qui contiendrait des ensembles exclus.
Neil
dt = Open( path );
// Find row that were excluded and load into list
Exc_row = dt << Get Excluded Rows;
dt << Select Rows( Exc_row );
dt << Exclude(1);
//Find all matching rows and load in associative array, useful for Remove From function later
species matches = associative array(dt << Get Rows Where(Contains(:Sample,"a1") |Contains(:Sample,"a2") |Contains(:Sample,"a3")));
//get excluded rows
Exc_row = dt << get excluded rows();
//remove excluded rows from the list of rows matching the species
Remove From (species matches, Exc_row);
//get the matching rows as a list
speciesmatches << get keys;
// What needs to be done to get mean of three (or 2 sets in the case of exclusion see table image)
a1 = dt << Get Rows Where(Contains(:Sample,"a1"));
a2 = dt << Get Rows Where(Contains(:Sample,"a2"));
a3 = dt << Get Rows Where(Contains(:Sample,"a3"));<BR />
c1 = Column("Image A pore area (%)");
mean1 = Mean(c1[a1[1]], c1[a2[1]], c1[a3[1]]);
Re: Ignorer les lignes "Exclues"Voici un script mis à jour qui parcourt chaque espèce dans la table de données d'iris et calcule la moyenne des lignes correspondant à ces critères.Cela dit, maintenant que je comprends mieux ce que vous faites, je vais probablement procéder différemment et utiliser tabulate pour trouver ces valeurs à la place.
Names default to here(1);
//Make a sample dataset with some excluded rows
dt = Open("$Sample_data/iris.jmp");
excluded rows to set = [ 4, 9, 52 ];
dt << Select Rows( excluded rows to set );
dt << Exclude(1);
species list = {"setosa", "versicolor", "virginica"};
//For each species
for(s=1, s<= n items (species list), s++,
//Find all matching rows and load in associative array, useful for Remove From function later
species matches = associative array(dt << Get Rows Where(:Species == species list[s]));
//get excluded rows
excluded rows = dt << get excluded rows();
//remove excluded rows from the list of rows matching the species
Remove From (species matches, excluded rows);
//get the matching rows as a list, use that to find which rows to average
mn = mean( :Sepal length[speciesmatches << get keys] );
//output averages to the log
write(species list[s] || " mean = " || char(mn) || "\!n")
);
Option utilisant tabulate:
Names default to here(1);
//Make a sample dataset with some excluded rows
dt = Open("$Sample_data/iris.jmp");
excluded rows to set = [ 4, 9, 52 ];
dt << Select Rows( excluded rows to set );
dt << Exclude(1);
//New column with the check for each value
New Column("Species_", Character, "Nominal", Formula(If(Contains(:Species, "se"), "se", Contains(:Species, "ve"), "ve", Contains(:Species, "vi"), "vi")));
//tabulate to find averages - script copied from 'source' of data table after selecting
//'make into data table' from tabulate platform, then inserted dt reference
dtTab = (dt << Tabulate(
Set Format( Mean( :Sepal length( 10, 4 ) ) ),
Add Table(
Column Table( Analysis Columns( :Sepal length ), Statistics( Mean ) ),
Row Table( Grouping Columns( :Species_ ) )
)
)) << Make Into Data Table;
//Now get values from the table
dtTab:"Mean(Sepal length)"n[dtTab << Get Rows Where(:Species_ == "se")];Re: Ignorer les lignes "Exclues"Merci beaucoup!
Je vais essayer et voir comment ça se passe.
L'intention initiale était simplement de prendre la porosité d'une ligne pour chaque ensemble (a1, a2 et a3) et d'obtenir la moyenne. La porosité est la même pour chaque réplique, mais il n'a pas été possible de trouver un moyen plus simple d'extraire seulement 3 points distincts et une moyenne.
Encore merci pour votre contribution.
Neil
Re: Ignorer les lignes "Exclues"Jetez un coup d'œil à la fois à la plate-forme de tabulation et à la fonction de synthèse JSL, je pense que les deux peuvent obtenir votre réponse assez rapidement.