Associer les colonnes par nomJ'ai quelque chose à faire ici
Résolu : Tracer automatiquement les colonnes associées – Communauté d'utilisateurs JMP
Mais je suis presque sûr que c'est inutilement fastidieux. J'ai des noms de colonnes se terminant par la lettre H (High) que je dois associer à des noms de colonnes correspondants, mais se terminant par la lettre L (Low). Je peux créer un tableau associatif dont les noms de colonnes ont été supprimés. Je ne sais pas quoi faire ensuite ?
names default to here(1);
dt = Current Data Table();
colList = dt << get column names( string );
for each({col,index}, colList,
//colList[index] = substr(col,1,3)
colList[index] = Left(col,Length(col)-1)
);
grps = associative array(colList)<<GET keys=""></GET>
<P>Par exemple, VT123ABCH doit tracer par rapport à VT123ABCL et ainsi de suite.</P><LINGO-LABS id="lingo-labs-848773" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisation et scripts</LINGO-LABEL></LINGO-LABS>Re : Associer les colonnes par nomLes paires existent-elles toujours ? Y a-t-il d'autres colonnes dans le tableau que ces paires ? Sont-elles dans un ordre précis ?
Modifier:
Peut probablement être considérablement amélioré en fonction du cas d'utilisation réel
names default to here(1);
dt = New Table("",
New Column("VT123ABCH"),
New Column("VT123ABCL")
);
collist = dt << get column names(string);
hcols = Filter Each({colname}, colList,
Ends With(colname, "H");
);
aa = Associative Array();
For Each({hcolname}, hcols,
lcolname = Left(hcolname, Length(hcolname) - 1) || "L";
If(dt << Has Column(lcolname),
aa[hcolname] = lcolname
);
);
Show(aa);Re : Associer les colonnes par nomVoici un exemple de la façon dont vous pourriez faire ce que vous voulez

Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
colNames = dt << get column names( continuous, string );
For Each( {col}, colNames,
If( Ends With( col, "1" ) & Contains( colNames, Substr( col, 1, Length( col ) - 1 ) || "2" ),
Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( As Column( col ) ), Y( As Column( Substr( col, 1, Length( col ) - 1 ) || "2" ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
)
);Re : Associer les colonnes par nomJarmo
Cela semble beaucoup plus propre que ce que j'avais, cependant, j'obtiens cette erreur.
« L'objet « Tableau de données » ne reconnaît pas le message « A une colonne » »
Re : Associer les colonnes par nomCela a été ajouté dans JMP18

Vous pouvez le changer en Contient() et cela devrait fonctionner la plupart du temps
Contains(collist, lcolname)
Re : Associer les colonnes par nomJarmo
C'est proche, mais je remarque que hcolname est vide, alors que lcolname a une valeur. Dois-je définir hcolname comme un objet ou une liste ?
Re : Associer les colonnes par nomLes colonnes hcol doivent contenir la liste de toutes les colonnes se terminant par « H ». Celle-ci est ensuite utilisée dans les fonctions For Each et Each si les éléments sont utilisés un par un comme hcolname. Vous pouvez ajouter des impressions de débogage pour comprendre ce qui se passe. De plus, ce n'est certainement pas la seule façon de procéder : vous pouvez facilement utiliser une seule boucle, par exemple.
Re : Associer les colonnes par nom
Jarmo
Cela me rapproche un peu plus, mais le lcolname n'est pas renseigné avant la valeur finale.
For Each({hcolname, index}, hcols,
{lcolname, index}, hcols = Left(hcolname, Length(hcolname) - 1) || "L";
If(dt << Contains(collist, lcolname),
aa[hcolname] = lcolname
);
);Re : Associer les colonnes par nomPour moi, cela semble fonctionner correctement. Vous pouvez modifier le tableau d'exemple pour indiquer la capacité des semi-conducteurs et vérifier les chiffres à la fin.
Names default to here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
collist = dt << get column names(string);
hcols = Filter Each({colname}, colList,
Ends With(colname, "1");
);
aa = Associative Array();
For Each({hcolname}, hcols,
lcolname = Left(hcolname, Length(hcolname) - 1) || "2";
If(dt << Has Column(lcolname),
aa[hcolname] = lcolname
);
);
Show(aa);
aa = ["ESM1" => "ESM2", "FST1" => "FST2", "INM1" => "INM2", "IVP1" => "IVP2", "NPN1" => "NPN2", "PBA1" => "PBA2", "PLG1" => "PLG2", "PLY1" => "PLY2", "PNP1" => "PNP2", "RES1" => "RES2", "RSP1" => "RSP2", "SIT1" => "SIT2", "VDP1" => "VDP2", "VPM1" => "VPM2"];
Mais vous pouvez également emprunter une voie un peu différente avec un peu plus d'options de configuration
Names Default To Here(1);
endchar1 = "1";
endchar2 = "2";
rgx_endchar1 = Eval Insert("(.+?)^endchar1^$");
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
collist = dt << get column names(string);
aa = Associative Array();
For Each({colname}, collist,
col_ptrn = Regex(colname, rgx_endchar1, "\1");
If(!IsMissing(col_ptrn), // ends with H
If(Contains(collist, col_ptrn || endchar2),
aa[col_ptrn || endchar1] = col_ptrn || endchar2;
);
);
);
show(aa);
Ces deux-là me donnent les mêmes résultats
Re : Associer les colonnes par nomJim
Excellent script, beaucoup plus simple. Je l'ai légèrement modifié pour afficher toutes les intrigues dans une fenêtre « Compilation ».
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( continuous, string );
New Window( "Compilation",
For Each( {col}, colNames,
If(
Starts With( col, "VT" ) & Contains(
colNames,
Substr( col, 1, Length( col ) - 1 ) || "H"
),
Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables(
X( As Column( col ) ),
Y( As Column( Substr( col, 1, Length( col ) - 1 ) || "L" ) )
),
Wrap( :LOT ),
Elements(
Points( X, Y, Legend( 1 ) ),
Line Of Fit( X, Y, Legend( 3 ) )
)
)
)
)
);Re : Associer les colonnes par nomJarmo
Bizarrerie de JMP. Le premier ne fonctionne pas, le deuxième oui, JMP 17 peut-être ? Merci de votre patience.