Problème de filtrage de données en utilisant for boucleSalut à tous
J'ai maintenant un problème de visage pour filtrer les données. J'ai 2 problèmes ici:
Problème 1 : Comment je peux convertir @ en personnage ?? Parce que quand je lance le script, il en résulte une erreur.
Groupe(
: Nom ("I_P2A .6 / .045 Avg @ ET"),
: Nom ("I_N2A .3 / .045 Avg @ ET"),
: Nom ("I_P2G_G_0.6 / 0.06 Avg @ ET"),
: Nom ("I_P2HG_0.6 / 0.06 Avg @ ET")
),
Freq ("Aucun"),
Poids ("Aucun")
Problème 2: filtre de données en utilisant la boucle.
Est-il possible que si je veux regrouper les 4 paramètres ci-dessous dans un nom (déclarer le nom)?
Parce que dans mon ensemble de données, les noms de colonne sont tels que: I_P2A .6 / .045 Avg @ ET
I_N2A .3 / .045 Moyenne @ HE
I_P2G_G_0.6 / 0.06 Avg @ ET
I_P2HG_0.6 / 0.06 Avg @ ET
Mon objectif est donc de savoir comment créer 4 colonnes en un nom, car lorsque j'écris le script, je n'ai besoin que d'écrire les noms de variables que je déclare (4 paramètres), puis il va automatiser pour savoir si ces 4 paramètres sont présents. ce nom de variable. Est-il possible de grouper en un seul nom?
dt = open("---------");
family_device = Data Table("--------") << Summary (Group(:Family Device), Freq("None"), Weight("None"));
parameter = Data Table("---------") << Summary(
Group(
:Name( "I_P2A .6/.045 Avg @ ET" ),
:Name( "I_N2A .3/.045 Avg @ ET" ),
:Name( "I_P2G_G_0.6/0.06 @ ET" ),
:Name( "I_P2HG_0.6/0.06 @ ET" )
),
Freq( "None" ),
Weight( "None" )
);
For(ifamily_device = 1, ifamily_device <= NRows(family_devices), ifamily_device++,
thisFamily_Device = family_devices : Family Device[ifamily_device];
For(iparameter = 1, iparameter <= Nrows(parameters), iparameter++,
thisParameter = parameters: (column name in dataset-how i convert all these 4 parameters into one group name?)[iparameter];
Group(
:Name( "I_P2A .6/.045 Avg @ ET" ),
:Name( "I_N2A .3/.045 Avg @ ET" ),
:Name( "I_P2G_G_0.6/0.06 Avg @ ET" ),
:Name( "I_P2HG_0.6/0.06 Avg @ ET" )
)
);
);Merci.
Re: Problème de filtre de données en utilisant for for loop
Re: Problème de filtre de données en utilisant for for loopJe pense que j'utilise peut-être mieux la photo.
Disons maintenant que j'ai S_GX et qu'il utilise les paramètres I_P2A GSVT .6 / .045 Avg et I_N2A GSVT .3 / .045 Avg. Mais maintenant, je dois résumer à partir de mon jeu de données, ce qui signifie ici que j'ai besoin de résumer S_GX utilisera deux paramètres qui sont I _P2A GSVT .6 / .045 Avg et I_N2A GSVT .3 / .045 Avg.etc ...
Merci
Re: Problème de filtre de données en utilisant for for loopDésolé de ne pas expliquer clairement ce que je veux faire.
En fait, ce que je veux faire, c'est que je veux faire le résumé en fonction du type de produit, par exemple: Maintenant, j'ai le produit a, b, c, d, e et chaque produit a sa propre liste de paramètres, par exemple: I_P2A. 6 / 0,045 Moy @ ET, I_N2A .3 / 0,045 Moy @ ET, I_P2G_G_0.6 / 0,06 Moy @ ET, I_P2HG_0,6 / 0,06 Moy @ @ ET etc. Alors maintenant, je veux filtrer ou peut-être utiliser la cellule de sélection correspondante pour effectuer la synthèse du produit a utiliser I_P2A .6 / 0,045 Avg @ ET, produit b utiliser I_N2A .3 / 0,045 Avg @ ET, etc. et chacun des produits a plus d’un paramètre. Parce qu'après cela, j'ai besoin du résultat pour faire les graphiques. alors mes données sont assez nombreuses, donc je dois sous-définir les données avant de sortir les tableaux de variabilité. Et maintenant ma condition est que je ne sais pas comment faire le script pour faire le résumé que j’explique. Et je ne peux pas non plus coder en dur.
Alors, pouvez-vous me donner une partie de la suggestion?
MerciRe: Problème de filtre de données en utilisant for for loopIl semble que je ne comprenne pas ce que tu veux. Peut-être que quelqu'un a une meilleure idée que moi.
Re: Problème de filtre de données en utilisant for for loopUne question de moi:
Selon votre code, pourquoi devons-nous définir le nom de la colonne (renommer la colonne)? Parce que dans mon cas, le nom de la colonne tel que: (I_P2A .6 / .045 Moy. @ ET, I_N2A .3 / .045 Moy. @ ET, I_P2G_G_0.6 / 0.06 Moyenne @ ET, I_P2HG_0.6 / 0.06. ET-J'en ai toujours besoin comme nom de colonne), mon problème est de savoir comment regrouper 4 noms de colonnes différents pour devenir un nom afin de pouvoir facilement déclarer le code ci-dessous.
Enfin, je dois faire le résumé en fonction du périphérique familial et des paramètres (4 noms de colonne différents)
Merci.Re: Problème de filtre de données en utilisant for for loopLes erreurs dans votre code sont des symptômes de l'exécution de trop d'étapes dans la JSL, de sorte que vous ne comprenez pas quels problèmes sont à l'origine de quels problèmes. JSL fournit d'excellentes choses pour vous aider à parcourir le code afin de voir quels sont les véritables problèmes. Le premier est la possibilité de mettre en surbrillance une section de code et d’exécuter uniquement le code en surbrillance. Et la possibilité de survoler une variable et de voir quelle est sa dernière valeur. Un environnement plus formel consiste à utiliser le débogueur JSL, qui vous permettra de parcourir pas à pas votre code pour valider la logique et les calculs.
Vous trouverez ci-dessous une évaluation du code que vous avez fourni. Ce que vous allez voir, c'est que les erreurs dans le code proviennent simplement de ne pas être assez prudent avec les noms de variables.
// This line of code has nothing to do with the script, so I have commented it out
//dt = open("---------");
// For testing purposes,a data table needs to be opened and setup with the columns used in the script
// Open the Big Class data table
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// Now modify the data table to make it look like the script wants
// Delete the "name" column
dt << delete columns( "name" );
// The "sex" column will become the "Family Device" column
dt:sex << set name( "Family Device" );
// The "age", "weight", and "height" columns will be changed to three of the other columns required
dt:age << set name( "I_P2A .6/.045 Avg @ ET" );
dt:height << set name( "I_N2A .3/.045 Avg @ ET" );
dt:weight << set name( "I_P2G_G_0.6/0.06 @ ET" );
// Create the final column as a simple formula column
dt << New Column( "I_P2HG_0.6/0.06 @ ET", formula( Random Normal() ) );
// Now just remove the formula to make the values static(just a simple step to make the table clea)n
dt:Name( "I_P2HG_0.6/0.06 @ ET" ) << delete property( "Formula" );
// The sample data table is complete
// Now run the script
// The creation of the first summary data table....only the data table's name was substituted
// The summary works without error
family_device = Data Table( "Big Class" ) << Summary( Group( :Family Device ), Freq( "None" ), Weight( "None" ) );
// The creation of the second summary data table....once again only the data table name was changed
// There is no issue with the "@" being in the column names
// The summary works without error
parameter = Data Table( "Big Class" ) << Summary(
Group( :Name( "I_P2A .6/.045 Avg @ ET" ), :Name( "I_N2A .3/.045 Avg @ ET" ), :Name( "I_P2G_G_0.6/0.06 @ ET" ), :Name( "I_P2HG_0.6/0.06 @ ET" ) ),
Freq( "None" ),
Weight( "None" )
);
// There are issues here. The first one is that in the "NRows()" function, a variable by the
// name of "family_devices" is used, and there is not a variable by that name. The name of
// the variable is "family_device". When this code is run, that error is clearly listed in the Log
//For(ifamily_device = 1, ifamily_device <= NRows(family_devices), ifamily_device++,
For( ifamily_device = 1, ifamily_device <= N Rows( family_device ), ifamily_device++,
// Once again the reference to "family_device" is made
//thisFamily_Device = family_devices : Family Device[ifamily_device];
thisFamily_Device = family_device:Family Device[ifamily_device];
// For a third time, an invalid variable name has been specified. In this case, "Parameters"
// instead of "parameter"
//For(iparameter = 1, iparameter <= Nrows(parameters), iparameter++,
For( iparameter = 1, iparameter <= N Rows( parameter ), iparameter++,
// I am a bit confused on this one. First off, "parameters" instead of "parameter" is used, however
// the grouping question could be interpreted a couple of ways, so what I have done is to just
// concatenate the columns together
/*thisParameter = parameters: (column name in dataset-how i convert all these 4 parameters into one group name?)[iparameter];
Group(
:Name( "I_P2A .6/.045 Avg @ ET" ),
:Name( "I_N2A .3/.045 Avg @ ET" ),
:Name( "I_P2G_G_0.6/0.06 Avg @ ET" ),
:Name( "I_P2HG_0.6/0.06 Avg @ ET" )
)*/
thisParameter = Char( parameter:Name( "I_P2A .6/.045 Avg @ ET" )[iparameter] ) || Char( parameter:Name( "I_N2A .3/.045 Avg @ ET" )[iparameter] ) ||
Char( parameter:Name( "I_P2G_G_0.6/0.06 @ ET" )[iparameter] ) || Char( parameter:Name( "I_P2HG_0.6/0.06 @ ET" )[iparameter] );
show(thisFamily_Device, thisParameter );
);
);