Abrufen des Spaltennamens mit bestimmten GrenzwertenHallo,
Ich versuche, aus diesen Datenbeispielen bestimmte Spaltennamen zu zählen und zu erhalten (meine tatsächlichen Daten enthielten 180 Spalten und 20.000 Zeilen).
Ich möchte die Spalte auswählen, deren Cut-off > 1000 ist
| NEIN. | Ein*1:01 | Ein*2:01 | B*9:02 | C*10:01 | DR*56:01 | DP*07_G | Namen abrufen |
| 1 | 10,67 | 0 | 9520.23 | 15000,1 | 90,56 | 40,89 | B*9:02, C*10:01 |
| 2 | 0 | 0 | 0 | 0 | 0 | 9,56 | |
| 3 | 9040.3 | 345.3 | 345,9 | 999,9 | 345 | 10.5 | Ein*1:01 |
| 4 | 34.4 | 4566 | 45 | 7 | 0 | 0 | Ein*2:01 |
| 5 | 9190.2 | 13567 | 3456 | 6789 | 9088 | 0 | A*1:01,A*2:01,B*9:02,C*10:01,DR*56:01 |
| 6 | 0 | 0 | 0 | 0 | 0 | 0 | |
| ... | | | | | | | |
Ich versuche das vorherige Skript wie folgt
Names Default To Here( 1 );
// Create a sample data table
dt = New Table( "Example",
Add Rows( 2 ),
New Column( "A*1:01", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 50000] ) ),
New Column( "A*2:01", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 50000] ) ),
New Column( "B*9:02", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 50000] ) ),
New Column( "C*10:01", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 50000] ) ),
New Column( "DR*56:01", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 50000] ) ),
//get wanted columns. Assumes that IMC columns start from column 1 and all IMC columns are one after another
colNames = dt << Get Column Names("String");
For(i = N Items(colNames), i > 3000 , i--,
);
//new column with IMC with value 1
dt << New Column( "Ag", Character,
<< Set Each Value(
rowValues = dt[Row(), 0][1::N Items(colNames)]; //get values of row as matrix
colIndex = Contains(rowValues, 1); //get index of
If(colIndex > 0, //handle
colNames[colIndex], //get column name with the index
""; //when no 1 found use ""
);
);
);Könnten Sie bitte meine Skripte korrigieren? Danke!
Darüber hinaus kann ich eine Matrix verwenden, da ich die „neue Spalte“ mit 180 Spalten generieren muss.
Am besten,
Datenzusammenführung und -bereinigungBetreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenSo würde ich damit umgehen

names default to here(1);
dt = New Table( "Example",
Add Rows( 6 ),
New Column( "A*1:01",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[10.67, 0, 9040.2999999999993, 34.399999999999999, 9190.2000000000007, 0
]
)
),
New Column( "A*2:01",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 0, 345.30000000000001, 4566, 13567, 0] )
),
New Column( "B*9:02",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9520.2299999999996, 0, 345.89999999999998, 45, 3456, 0] )
),
New Column( "C*10:01",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [15000.1, 0, 999.89999999999998, 7, 6789, 0] )
),
New Column( "DR*56:01",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [90.560000000000002, 0, 345, 0, 9088, 0] )
),
New Column( "DP*07_G",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [40.890000000000001, 9.5600000000000005, 10.5, 0, 0, 0] )
)
);
dt << New Column( "Get Name",character);
colNames = dt << get column names( continuous,string );
For Each Row(
theList = {};
For Each( {col, i}, colNames,
If( As Column( col ) > 3000,
Insert Into( theList, col )
)
);
:Get Name = Concat Items( theList, "," );
);
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenHallo Jim,
Vielen Dank für Ihre Hilfe. Allerdings habe ich 180 Spalten und 20.000 Zeilen mit unterschiedlichen Wörtern und kann sie nicht alle als folgende Skripte einfügen. Können Sie mir bitte weitere Vorschläge machen?
Danke
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenDas könnte schnell genug sein
Names Default To Here(1);
// Create a sample data table
dt = New Table("Example",
Add Rows(20000),
invisible
);
colcount = 200;
For(i = 1, i <= colcount, i++,
newcol = dt << New Column(Char(i), Numeric, Continuous, Formula(
Random Normal() * 1000
));
dt << run formulas;
newcol << delete formula;
);
start = Tick Seconds();
colnames = dt << Get Column Names("String");
newcol = dt << New Column("getname", Character, Nominal, Formula(
valid_idx = Loc(dt[Row(), colnames] > 1000);
If(N Items(valid_idx) > 0,
Concat Items(colnames[valid_idx], ", ")
,
""
);
));
dt << run formulas;
newcol << delete formula;
wait(0);
end = Tick Seconds();
show(end - start);Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenHallo Jarmo,
Vielen Dank. Aber das Ergebnis ist „Ende – Start = 0,0333333333255723;“ Das ist nicht die neue Tabelle. Könnten Sie bitte weitere Lösungen bereitstellen? Bitte zeigen Sie mir die folgende Datentabelle auf JMP.
Danke
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenMein Skript erstellt eine neue Spalte "getname" mit den Werten

Mit Ihren Daten, nachdem Sie Ihre Spalten auf numerisch festgelegt haben (und die Spalte „Keine“ gelöscht haben)

Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenHallo Jarmo,
Vielen Dank für Ihre Hilfe, aber um ehrlich zu sein, kann ich das Skript nicht wie im folgenden Anhang ausführen, als ich das unten angezeigte Skript (Befehl + 1) überprüft habe. Vielen Dank für Ihre Hilfe.
dt = New Table("Example",
Add Rows(20000),
invisible
);
colcount = 200;
For(i = 1, i <= colcount, i++,
newcol = dt << New Column(Char(i), Numeric, Continuous, Formula(
Random Normal() * 1000
));
dt << run formulas;
newcol << delete formula;
);
start = Tick Seconds();
colnames = dt << Get Column Names("String");
newcol = dt << New Column("getname", Character, Nominal, Formula(
valid_idx = Loc(dt[Row(), colnames] > 1000);
If(N Items(valid_idx) > 0,
Concat Items(colnames[valid_idx], ", ")
,
""
);
));
dt << run formulas;
newcol << delete formula;
wait(0);
end = Tick Seconds();
show(end - start);
/*:
end - start = 0.683333333348855;
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenSie müssen Ihre Tabelle öffnen, die Spalten korrigieren und dann den Teil ausführen, in dem die neue Spalte erstellt wird
Names Default To Here(1);
dt = Open("$DOWNLOADS/Examples_get column name_by cutoff.jmp", invisible);
colnames = Remove(dt << Get Column Names("String"), 1); // drop No column
// Fix data and modeling types
For Each({colname}, colnames,
Column(dt, colname) << Data Type("Numeric") << Modeling Type("Continuous");
);
newcol = dt << New Column("getname", Character, Nominal, Formula(
valid_idx = Loc(dt[Row(), colnames] > 1000);
If(N Items(valid_idx) > 0,
Concat Items(colnames[valid_idx], ", ")
,
""
);
));
dt << run formulas;
newcol << delete formula;
Ich empfehle Ihnen dringend , den Scripting Guide der JMP-Hilfe zu lesen.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenHallo Jarmo, hast du eine Idee, wie man die Werte, die über dem Grenzwert liegen (wenn ich 50 Spalten habe), mit jedem Spaltennamen extrahieren kann (Spalte getname in einem Beispiel)?
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenWie möchten Sie sie extrahieren? Erstellt meine Lösung nicht eine neue Spalte, die die Spaltennamen als Zeichenfolgen enthält, die durch , und Leerzeichen getrennt sind?

Möchten Sie die Werte spaltenweise statt zeilenweise prüfen? Oder etwas anderes?
Bearbeiten:
Wenn Sie nur eine andere Spaltenliste möchten, müsste ich wissen, wie man sie filtert. Wenn Sie nur alle Spalten möchten, entfernen Sie die Funktion Remove()
Names Default To Here(1);
dt = Open("$DOWNLOADS/Examples_get column name_by cutoff.jmp", invisible);
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
Column(dt, colname) << Data Type("Numeric") << Modeling Type("Continuous");
);
For(i = 1, i < 100, i++,
newcol = dt << New Column(Hex(i), Numeric, Nominal, Values(J(1, N Rows(dt), Random Normal()*1000)));
);
colnames = dt << Get Column Names("String");
newcol = dt << New Column("getname", Character, Nominal, Formula(
valid_idx = Loc(dt[Row(), colnames] > 1000);
If(N Items(valid_idx) > 0,
Concat Items(colnames[valid_idx], ", ")
,
""
);
));
dt << run formulas;
newcol << delete formula;Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenHier ist eine alternative Methode, die bei einer großen Anzahl von Spalten hilfreich sein kann
Names Default To Here( 1 );
dt = Open("$DOWNLOADS/Examples_get column name_by cutoff.jmp");
colnames = Remove( dt << Get Column Names( "String" ), 1 ); // drop No column
// Fix data and modeling types
For Each({colname}, colnames,
Column(dt, colname) << Data Type("Numeric") << Modeling Type("Continuous");
);
dtStack = dt << Stack(
columns( colnames ),
Source Label Column( "ColName" ),
Stacked Data Column( "Value" ),
Output Table( "The Stack" )
);
dtStack << select where( :value <= 1000 );
dtStack << delete rows;
dtStack << delete columns( Value );
dtSplit = dtStack << Split(
Split By( :ColName ),
Split( :ColName ),
Group( :No ),
Output Table( "Split of The Stack by ColName" ),
Sort by Column Property
);
close( dtStack, nosave );
colnames = Remove( dtSplit << Get Column Names( "String" ), 1 );
dtSplit << Combine Columns(
delimiter( "," ),
columns( colnames ),
Column Name( "Get Name" )
);
dtSplit << delete columns( colnames );
dt << Update( With( dtSplit ), Match Columns( :No = :No ) );
Close( dtSplit, nosave );Betreff: Abrufen des Spaltennamens mit bestimmten Grenzwerten
Vielen Dank, ich möchte das klarstellen. Ich habe eine weitere Spalte von Interesse als „Alphabet von Interesse“ und möchte den Namen und den Wert aller Spalten mit Werten > 1.000 erhalten und alle Spalten stimmen mit dem Spaltenalphabet von Interesse überein.
Danke schön!
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenDanke, Jim, aber es funktioniert nicht. Bitte sehen Sie sich die angehängte Datei an.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenWahrscheinlich ist es schneller und einfacher, so etwas wie Jim vorgeschlagen zu machen, aber Sie können so etwas auch mit der Methode machen, die ich demonstriert habe
Names Default To Here(1);
dt = Open("$DOWNLOADS/Examples_get column name_by cutoff.jmp", invisible);
Summarize(dt, alphs = By(:"Alphabet of interest"n));
aa = Associative Array(alphs, Repeat({{}}, N Items(alphs)));
collist = dt << Get Column Names("String");
For Each({colname}, collist,
alph = Word(1, colname, "*");
If(Contains(aa, alph),
Insert Into(aa[alph], colname);
Column(dt, colname) << Set Data Type("Numeric") << Modeling Type("Continuous");
);
);
str_template = "^col^ (^val^)";
newcol = dt << New Column("getname", Character, Nominal, Formula(
cols = aa[:"Alphabet of interest"n];
vals = dt[Row(), aa[:"Alphabet of interest"n]];
valid_idx = Loc(vals > 1000);
If(N Items(valid_idx) > 0,
res = {};
For Each({{col, val}}, Across(cols[valid_idx], vals[valid_idx]),
Insert Into(res, Eval Insert(str_template));
);
Concat Items(res, ", ");
,
""
);
));
dt << run formulas;
newcol << delete formula;
dt << show window(1);

Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenWenn das Skript so geschrieben wurde, dass es mit einer Spalte namens „Nein“ gefolgt von numerischen Spalten ausgeführt wird. Ihre bereitgestellte Datentabelle hat zusätzlich zu den numerischen Spalten zwei Zeichenspalten. Wenn Sie die Spalten „Interessantes Alphabet“ und „Name und Wert abrufen“ entfernen und dann das Skript ausführen, funktioniert es einwandfrei.
Sie sollten das Skript problemlos ändern können, um die zusätzlichen Spalten zu kompensieren. Entweder löschen Sie sie im Skript, bevor Sie mit dem Abrufen der Spaltennamen beginnen, oder Sie löschen sie aus der Spaltennamenliste, bevor Sie For Each verarbeiten. Das sollte funktionieren.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenVielen Dank. Dieses Skript funktioniert. Es tut mir jedoch leid, dass meine ursprünglichen Daten komplizierter waren. Das Alphabet von Interesse enthält mehrere „Buchstaben“ und „Zahlen“, die durch „“, (A1, B9) getrennt sind, als angehängte Dateien. Wie kann ich eine Spalte mit Namen und Wert erhalten, die das Alphabet von Interesse und den Spaltennamen korreliert?

Ich danke Ihnen für Ihre Hilfe.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenWie werden diese „Alphabete“ bestimmt? Ist das alles, was nach dem letzten „_“ kommt? Wenn das der Fall ist, sollten Sie in der Lage sein, mein Skript geringfügig zu ändern und das letzte Wort anstelle des ersten zu verwenden und ein anderes Trennzeichen zu verwenden. Dieser Teil erfordert also geringfügige Änderungen.
alph = Word(1, colname, "*");
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenVielen Dank für Ihren Vorschlag. Wenn ich das erste Wort vor ":" abgleichen möchte, sollte es dies sein
alph = Word(1, colname, ":");
und wenn ich das letzte Wort nach "_" abgleichen möchte, sollte es dies sein
alph = Word(-1, colname, "_");
Was ist, wenn ich vor ":" und nach "_" gleichzeitig eine Übereinstimmung finden muss? Nachdem ich die Skripte, die ich oben ausgeführt habe, zusammengeführt habe, kam ich mit Duplikaten (genau dasselbe) nicht zurecht.
Danke
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenWenn Sie sich Ihre Tabelle ansehen, werden Anfang und Ende unterschiedlich sein (Anfang A*1 und Ende A1), daher müssen Sie diese „zusätzlichen“ Schlüssel zum assoziativen Array hinzufügen, um den Vergleich durchzuführen UND Duplikate später zu verarbeiten.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenAußerdem wurde das Skript nicht ausgeführt, wenn eine Spalte im betreffenden Alphabet mehr als 1 enthielt. Haben Sie dazu einen Vorschlag?
Danke schön!
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenMein Skript hat die von Ihnen beschriebenen Situationen verarbeitet. Abhängig von der eigentlichen Frage muss das Skript möglicherweise vollständig neu geschrieben werden oder es müssen nur einige kleine Änderungen vorgenommen werden.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenVielen Dank, Jarmo. Ich möchte die Datei anhängen, die mit dem, was ich hier tun möchte, kompatibel ist. Ich möchte die Alphabet-Spalte, die aus DOA und DO besteht, mit jeder Spalte von DOA1*0x:0x,DOB1*0x:0x_DOx abgleichen. DOA0x stimmt mit DOA1*0x überein (nicht nach ":") und DOx oder DOB1*Ox stimmt mit DOx überein. Alle müssen einen Wert über 1000 haben, um in der Ergebnisspalte angezeigt zu werden. Ich kann die vorhandene Formel nicht wie von Ihnen angegeben korrigieren. Vielen Dank im Voraus!
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenWarum würde DOA1*0x nicht mit DOx übereinstimmen?
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenHier ist eine Art Skript. Ich kann die richtigen Regeln nur erraten und habe keine Ahnung, ob es das tut, was es tun soll.
Names Default To Here(1);
dt = Open("$DOWNLOADS/Examples_get column name_edit.jmp");
// fix data
For Each({colname}, dt << Get Column Names("Character", "String"),
If(colname == "Alphabet",
break();
);
Column(dt, colname) << Set Data Type("Numeric") << Set Modeling Type("Continuous");
);
dt << Delete Columns("get name and value");
dt << New Column("R", Numeric, Ordinal, Formula(Row()));
dt_stacked = dt << Stack(
columns(
:"DOA1*01:01,DOB1*01:01_DO1"n, :"DOA1*02:01,DOB1*01:01_DO1"n,
:"DOA1*03:01,DOB1*01:01_DO1"n, :"DOA1*02:01,DOB1*02:01_DO2"n,
:"DOA1*01:05,DOB1*02:01_DO2"n, :"DOA1*04:03,DOB1*03:01_DO3"n,
:"DOA1*06:01,DOB1*04:01_DO4"n, :"DOA1*05:01,DOB1*03:01_DO7"n
),
Source Label Column("Label"),
Stacked Data Column("Data"),
Output Table("stacked")
);
rows_to_delete = dt_stacked << Get Rows Where(:Data <= 1000);
dt_stacked << Delete Rows(rows_to_delete);
dt_stacked << New Column("Match", Numeric, Nominal);
For Each Row(dt_stacked,
alphs = Words(:Alphabet, ",");
temp_label = Regex(:Label, "(\d\*)", "", GLOBALREPLACE);
retval = 0;
For Each({alph}, alphs,
If(Contains(temp_label, alph),
retval = 1;
break();
);
);
:Match = retval;
);
rows_to_delete = dt_stacked << Get Rows Where(:Match == 0);
dt_stacked << Delete Rows(rows_to_delete);
dt_stacked << New Column("NewStr", Character, Nominal, Formula(
:Label || " (" || Char(:Data) || ")"
));
Summarize(dt_stacked, rs = By(:R));
fixed_rs = Transform Each({r}, rs, Num(r));
vals = Associative Array();
For Each({r}, fixed_rs,
t = dt_stacked << Get Rows Where(:R == r);
vals[r] = Concat Items(dt_stacked[t, "NewStr"], ",");
);
Close(dt_ stacked);
new_col = dt << New Column("Res", Character, Nominal, Formula(
If(Contains(vals, :R),
vals[:R]
,
""
);
));
dt << run formulas;
new_col << Delete Formula;
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenDie Biologie entspricht dem nicht.
Betreff: Abrufen des Spaltennamens mit bestimmten GrenzwertenDanke, Jarmo. Es ist Arbeit!