Suppression de plusieurs colonnes en fonction des chaînes dans leur nomSalut,
Je dois supprimer plusieurs colonnes en fonction des chaînes qu'elles contiennent, mais parfois je souhaite en conserver d'autres même si elles ne contiennent pas ces chaînes.
Donc en suivant la solution de ce post Suppression de plusieurs colonnes en fonction du nom de la colonne
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
Donc, ce que je veux, c'est supprimer tout ce qui ne contient pas "Gross" ou "Genre", mais si le nom de la colonne est == "thème", ne le supprimez pas.
Il semble que cela ne fonctionne pas pour l'instant ! Pourquoi?

Le deuxième point de cette question
Comment puis-je voir col_names comme une table de données afin que je puisse savoir quelle est la sortie sans survoler les col_names. Parce que parfois j'ai une longue liste de noms de colonnes et le survol n'est pas efficace pour voir ce qu'il y a dans cette liste de colonnes.
Merci!
Personnalisation de masseRe : Supprimer plusieurs colonnes en fonction des chaînes dans leur nomVotre confusion au sujet de la table de données est quelque chose que j'ai déjà vu.Ce qui est différent entre JMP et ses tables de données, c'est qu'une table de données doit être considérée comme un élément de base.La plupart du temps, on verra une ligne de JSL telle que :
dt = Open("$SAMPLE_DATA/big class.jmp");
Dans certaines langues, dt serait la table de données.Ce n'est pas le cas.L'instruction ci-dessus affecte uniquement un pointeur à la table de données "Big Class".Et si vous survolez la variable dt vous verrez
data table( "Big Class" )
comme sa valeur.
Par conséquent, si je lance la déclaration
xyz = dt;
Je n'obtiens pas une nouvelle instance de la table de données Big Class, comme je le ferais dans certaines langues, à la place, tout ce que j'obtiens est une variable appelée xyz qui est un pointeur vers la même table de données appelée Big Class.
Pour créer une nouvelle copie (il ne s'agit pas d'une nouvelle instance, car une fois créée, il s'agit généralement d'une nouvelle table de données totalement indépendante), on utilise l'une des plates-formes Table pour terminer la tâche
dt2 = dt << subset( all rows, all columns);
La commande ci-dessus crée une nouvelle table de données et définit la variable dt2 comme pointeur vers la nouvelle table.
Re : Supprimer plusieurs colonnes en fonction des chaînes dans leur nomJim,
Désolé, pour l'incompréhension. Mais la plupart des choses que je recherche ne sont pas bien décrites ou simplement expliquées brièvement dans le pdf jsl. En particulier les scripts récursifs (if-else, for loop) lorsque vous voulez faire des choses complexes, ils ne sont pas inclus dans le manuel. Il est également très difficile de suivre les erreurs. Je ne l'ai pas fait jusqu'à ce que vous disiez de vérifier le "journal".
Par exemple, il n'y a aucune explication sur la création d'une nouvelle table de données ou sur la manière d'attribuer une nouvelle table de données.
Ce que je pensais aussi simple que
dt_new << Data Table( col_names );
devrait créer une nouvelle table de données mais j'ai appris que ce n'est pas simple dans jmp. Nous devons demander ou pratiquer la syntaxe que je fais.
Merci beaucoup!
Re : Supprimer plusieurs colonnes en fonction des chaînes dans leur nomSi vous imprimez la valeur de "col_names" juste après sa création, elle affiche toutes les colonnes de la table de données
{"Movie Name", "Lead Studio Name", "Rotten Tomatoes Score", "Audience Score",
"Theme", "Genre", "Theaters Opening Wknd", "BOA Opening Wknd", "Domestic Gross",
"Foreign Gross", "World Gross", "Production Budget", "Profitability",
"Opening Wknd Gross"}
Si vous regardez attentivement, vous verrez qu'il n'y a pas d'entrée avec la valeur "thème". Il y a une entrée avec la valeur "Thème".Vous comparez des valeurs dans des chaînes de caractères et vous devez faire correspondre correctement les majuscules et les minuscules.
Je vous suggère fortement de lire le Guide de Scripting !
Aide==>Guide de création de scripts de la bibliothèque de documentation JMP
Re : Supprimer plusieurs colonnes en fonction des chaînes dans leur nompourquoi
col_names[i] == "theme"<BR />
ne fonctionne toujours pas ?

Re : Supprimer plusieurs colonnes en fonction des chaînes dans leur nomdt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
// At this point in the script, you have a data table
// with all of the original columns(Profitability is now a static column)
// And you have a JSL List called "col_names", which is stored in memory
// so you can do anythin you want given this
// You could just write the contents of the list to the log. Remember, the
// list "col_names", only contains the names of the columns, it does not
// contain the whole column(name, properties and data)
Print( col_names );
// or
Write( col_names );
// or
Show( col_names );
// That will give you the list of columns that are going to be deleted
// or before you want to see the columns in their entirety you can create
// a new data table with just those columns
newdt = dt << subset( all rows, columns( col_names ) );
// The statement below, is a perfectly valid statement, however, it will
// not work the way you think it will. The end result of this statement
// is to create a new list of column names.
// {"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
deleted_columns = delete columns( col_names );
Re : Supprimer plusieurs colonnes en fonction des chaînes dans leur nomSalut Jim,
Merci pour votre réponse. Ok je vois ce que tu dis.
Disons que nous ne nous soucions pas des formules. Supprimons toutes les connexions de formule et supprimons les colonnes que je voulais.
et je veux créer (et voir) ces colonnes supprimées en tant que table de données
en suivant votre suggestion
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
deleted_columns = delete columns( col_names );
cela ne crée toujours pas ce dont j'ai besoin 
Re : Supprimer plusieurs colonnes en fonction des chaînes dans leur nomDe la JSL que vous avez fournie, vous avez omis la déclaration la plus critique
dt << delete columns( col_names );
C'est la ligne qui fait réellement les suppressions.Cependant, dans cet exemple de cas, il y a un problème supplémentaire.La liste finale des colonnes
{"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
contient la colonne "World Brut", qui est utilisée dans le calcul de la colonne "Rentabilité".Lorsque le message "supprimer les colonnes" est traité, il détecte le problème et s'affiche dans le journal
Cannot delete the selected columns while some are referenced by the formulas of remaining columns.
Removing a formula leaves the data unchanged. Removing references replaces each reference with an empty value. These effects are permanent and cannot be undone.
Si vous supprimez la formule de la colonne "Rentabilité", elle convertira les valeurs en valeurs statiques,
dt:Profitability << delete formula;
alors les "colonnes de suppression" fonctionneront correctement.
En ce qui concerne votre problème de survol d'une variable pour voir sa valeur et de vouloir créer une table de données pour pouvoir voir les valeurs, il existe un moyen beaucoup plus simple de le faire.Plutôt que de survoler la variable "col_names", ce que vous devez faire, c'est de la mettre en surbrillance, puis de faire un clic droit et de sélectionner "Exécuter le script".En règle générale, si un élément d'un script JMP est mis en surbrillance, "Exécuter le script" n'exécutera que les lignes/instructions/variables en surbrillance.Les résultats seront affichés dans le journal.