Extraire une chaîne d'un en-tête de colonne et l'ajouter à un autreBonjour,
J'ai un script d'importation que j'utilise pour importer des résultats dans JMP à partir d'Excel. Le modèle Excel est utilisé par de nombreuses personnes et est verrouillé pour modification. Nous avons deux colonnes de résultats dans Excel qui sont toutes deux appelées « Résultats - XXX » où XXX est remplacé à l'aide d'un macro Excel par ce qui est étudié, donc des changements dans chaque fichier. Nous avons également des colonnes appelées JMP Result 1 et JMP Result 2 qui sont égales aux colonnes de résultats et au format numérique. que nous utilisons comme importation JMP ne peut pas importer un nombre scientifique à partir d'Excel. Lorsque j'ouvre Excel dans JMP, j'obtiens quelque chose comme l'image ci-dessous :

J'essaie d'écrire un script qui extraira le mot suivant « Résultats - » de l'en-tête de la colonne et remplacera l'en-tête de la colonne de résultats JMP, mais en m'assurant qu'il remplace l'en-tête correct. Le résultat serait donc :

Je ne sais pas si c'est possible dans JMP mais toute aide serait grandement appréciée. Je ne sais même pas comment commencer par extraire la fin de la chaîne de l'en-tête de colonne, sans parler des étapes ultérieures. Merci d'avance.
Automatisation et scriptsRe : Extraire une chaîne d'un en-tête de colonne et l'ajouter à un autreVoici une option JSL pure. Elle peut (et va) se casser assez facilement en fonction de vos données car j'ai dû faire pas mal d'hypothèses
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Results - DNA", Numeric, "Continuous", Format("Best", 12), Set Values([.]), ),
New Column("Results - Protein", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 2", Numeric, "Continuous", Format("Best", 12), Set Values([.]))
);
// Assume that you extract last word from result columns
// and results are first then jmp columns and there is equal amount
result_columns = {};
jmp_columns = {};
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Starts With(colname, "Results - "),
Insert into(result_columns, Word(-1, colname, " "));
,
Insert Into(jmp_columns, colname)
)
);
For Each({{rescol, jmpcol}}, Across(result_columns, jmp_columns),
Column(dt, jmpcol) << Set Name(rescol);
);
Write();Re : Extraire une chaîne d'un en-tête de colonne et l'ajouter à un autreSalut,
J'ai joint un tableau de données de test. Essayez ce script :
dt = current data table();
for each({name,i}, dt << get column names(string),
if (contains(name, "Results -"),
new_name_string = word(2, name, "- ");
column(dt,i) << set name(substitute(name, "Results -", "Results_Excel -" ));
for each({name2,p}, dt << get column names(string),
if (contains(name2, "JMP Result"),
column(dt,p) << set name(new_name_string);
Break();
,
);
);
,
);
);
Cela devrait vous permettre d'atteindre votre objectif. Merci de nous le faire savoir si ce n'est pas le cas.
Edit : je viens de voir la superbe solution de Jarmo. Vous pouvez choisir celle-ci si vous ne souhaitez pas modifier les noms des colonnes « Excel ».
Acclamations,
Jonas
Re : Extraire une chaîne d'un en-tête de colonne et l'ajouter à un autreL’option sans script m’est également venue à l’esprit.
Créer une table empilée

Créer la colonne du dernier mot à partir de l'étiquette

Vous avez maintenant une table de mappage

Revenez à votre table d’origine et recodez les noms des colonnes

Utiliser Appliquer le mappage pour la table...


Et cliquez sur Recoder


Dommage que JMP ne soit pas en mesure de créer automatiquement un script approprié pour cela, car il utilisera simplement les valeurs de mappage directement dans le script. Cela pourrait donc être un processus manuel, à moins que vous ne soyez en mesure de créer une « table de mappage complète » d'une manière ou d'une autre pour la remplir dans le script.
// Recode column names
Local({dt = Data Table("Untitled 2"), names},
names = Recode(
dt << Get Column Names(String),
{Map Value(
_rcOrig,
{"JMP Result 1", "DNA", "JMP Result 2", "Protein"},
Unmatched(_rcNow)
)}
);
For Each({name, i}, names, Column(dt, i) << Set Name(name));
);