Spalten nach Namen zuordnenIch habe hier etwas zu tun
Gelöst: Zugehörige Spalten automatisch darstellen - JMP User Community
aber ich bin mir ziemlich sicher, dass es unnötig umständlich ist. Ich habe Spaltennamen, die mit dem Buchstaben H (High) enden, die ich mit Spaltennamen verknüpfen muss, die ansonsten übereinstimmen, aber mit dem Buchstaben L (Low) enden. Ich kann ein assoziatives Array erstellen, wobei das letzte Zeichen der Spaltennamen entfernt wird. Ich weiß nicht, was ich als Nächstes tun soll?
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>Beispielsweise muss VT123ABCH gegen VT123ABCL usw. dargestellt werden.</P><LINGO-LABS id="lingo-labs-848773" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisierung und Skripting</LINGO-LABEL></LINGO-LABS>Betreff: Spalten nach Namen zuordnenSind die Paare immer vorhanden? Gibt es neben diesen Paaren noch weitere Spalten in der Tabelle? Stehen sie in einer bestimmten Reihenfolge?
Bearbeiten:
Kann je nach tatsächlichem Anwendungsfall höchstwahrscheinlich deutlich verbessert werden
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);Betreff: Spalten nach Namen zuordnenHier ist ein Beispiel, wie Sie das gewünschte Ziel erreichen können.

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 ) ) )
);
)
);Betreff: Spalten nach Namen zuordnenJarmo
Sieht viel ordentlicher aus als das, was ich hatte, aber ich bekomme diesen Fehler.
„Objekt ‚Datentabelle‘ erkennt die Meldung ‚Hat Spalte‘ nicht“
Betreff: Spalten nach Namen zuordnenDas wurde in JMP18 hinzugefügt

Sie können es in Contains() ändern und es sollte meistens in Ordnung sein
Contains(collist, lcolname)
Betreff: Spalten nach Namen zuordnenJarmo
Das ist naheliegend, aber mir fällt auf, dass hcolname leer ist, während lcolname einen Wert hat. Muss ich hcolname als Objekt oder Liste festlegen?
Betreff: Spalten nach Namen zuordnenhcols sollte eine Liste aller Spalten enthalten, die mit "H" enden. Diese wird dann in For Each verwendet, und jedes Element wird einzeln als hcolname verwendet. Sie können Debug-Ausdrucke hinzufügen, um zu verstehen, was passiert. Dies ist definitiv nicht die einzige Möglichkeit, dies zu tun. Sie können dies beispielsweise problemlos in einer einzigen Schleife tun.
Betreff: Spalten nach Namen zuordnen
Jarmo
Damit komme ich dem Ziel etwas näher, aber der lcolname wird erst mit dem endgültigen Wert gefüllt.
For Each({hcolname, index}, hcols,
{lcolname, index}, hcols = Left(hcolname, Length(hcolname) - 1) || "L";
If(dt << Contains(collist, lcolname),
aa[hcolname] = lcolname
);
);Betreff: Spalten nach Namen zuordnenBei mir scheint es gut zu funktionieren. Sie können die Beispieltabelle auf Halbleiterfähigkeit ändern und am Ende einige Zahlen überprüfen.
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"];
Sie können aber auch einen etwas anderen Weg mit etwas mehr Konfigurationsoptionen gehen.
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);
Beide liefern bei mir die gleichen Ergebnisse
Betreff: Spalten nach Namen zuordnenJim
Tolles Skript und viel einfacher. Ich habe es ein wenig optimiert, um alle Plots in einem „Zusammenstellungs“ -Fenster anzuzeigen.
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 ) )
)
)
)
)
);Betreff: Spalten nach Namen zuordnenJarmo
Merkwürdigkeiten mit JMP. Das erste funktioniert nicht, das zweite schon, vielleicht JMP 17? Danke fürs Aushalten.