Benennen Sie Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umHallo,
Ich bin JSL-Neuling und bin daher für meine Hilfe dankbar.
Ich habe drei Dateien.
Datei Nr. 1: Es handelt sich um die Referenzdatei [als ref.csv] mit den folgenden 3 Spalten.
Kategorie, Breite, Beschriftung
--------------------------------
A,0,L1.abc
A,1,L2.xt
A,2,L8.dr
A,3,L20.ws
A,4,L72.oz
B,0,L11.qq
....
B,6,L61.er
Datei Nr. 2: Datendatei Nr. 1 in JMP, die Kategorie, Daten und viele andere Spalten enthält.
Datei Nr. 3: Datendatei Nr. 2 in JMP, die Kategorie, Daten und viele andere Spalten enthält.
Der Unterschied zwischen den beiden Datendateien [Datei Nr. 2 und Datei Nr. 3] besteht im Kategorietyp und in der Breite des Werts in der Datenspalte.
Datendatei Nr. 1:
Kategorie|Daten|viele Spalten.....
----------------------------------------
A 123,23 ....
A 321,45 ....
.....
viele Reihen
Die Breite der Werte in der Spalte „Daten“ [ohne Punkte] stimmt mit der Anzahl der Zeilen in Datei Nr. 1 für eine bestimmte Kategorie überein
Beispiel:
Die Breite von 123,23 in Zeile 1 in Datendatei Nr. 1 beträgt 5.
Die Anzahl der Zeilen in der Referenzdatei für Kategorie A wäre 5. Dies muss nicht einzeln getestet werden. So kommen die Tabellen herein [d. h. wenn sie aus der Quelle abgerufen werden]
In Zukunft wird in der Referenzdatei, beispielsweise für Kategorie A, die Anzahl der Zeilen auf 6 oder mehr erhöht, und die Breite des in der Datenspalte in der Dateidatendatei Nr. 1 enthaltenen Werts würde sich auch erhöhen, wenn Informationen aus der Datenbank abgerufen werden.
Datendatei Nr. 2:
Kategorie|Daten|viele Spalten....
----------------------------------------
B 1236.23 ....
B 3213.45 ....
.....
viele Reihen
Ziel 1: Erstellen Sie neue Spalten abhängig von der Breite des Werts, der in der Spalte „Daten“ in der Datendatei Nr. 1 [und anderen Datendateien] enthalten ist.
Ich bin mit Ziel Nr. 1 fertig!
ex:
Die aktualisierte Datendatei Nr. 1 würde so aussehen:
Kategorie|Daten|c1|c2|c3|c4|c5|viele Spalten.....
----------------------------------------
A 123,23 1 2 3 2 3 ....
A 321,45 3 2 1 4 5 ....
.....
Ziel 2: Benennen Sie die neuen Spalten in der Datendatei Nr. 1 [dh c1 bis c5] in L1... bis L72... um, wie in der Spalte „Beschriftung“ in der Referenzdatei definiert. Keine Änderung der Zellwerte, nur die ausgewählten Spaltennamen werden aktualisiert.
erwartete Ausgabe, nachdem Ziel 2 erreicht ist:
Aktualisieren Sie die Datendatei Nr. 1 so, dass sie wie folgt aussieht:
Kategorie|Daten|L1.abc|L2.xt|L8.dr|L20.ws|L72.oz|viele Spalten.....
----------------------------------------
A 123,23 1 2 3 2 3 ....
A 321,45 3 2 1 4 5 ....
.....
Ich brauche Hilfe bei Ziel Nr. 2.
Für Ziel Nr. 2 habe ich die Referenzdatei geöffnet, bin mir aber nicht sicher, ob ich fortfahren soll.
Danke
David
DatenzugriffMassenanpassungBetreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenOK.....das ist etwas wählerisch....aber was in der dataTablesList ist, ist keine Liste von Datentabellennamen, sondern data table()-Funktionen, die auf Datentabellen verweisen.
{"Table1", "Table2"} // Eine Liste von Datentabellennamen
{ data table( "Table1" ), data table( "Table2" ) } // eine Liste von Zeigern auf DatentabellenBetreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenJawohl. habe es. enthält den Namen der Datentabelle
-David
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennendataTableList enthält nicht die Datentabellen, sondern nur Zeiger auf die Tabellen. Erstellen Sie die Liste und führen Sie sie dann aus
Show( dataTableList );
und Sie werden sehen, was in der Liste enthalten ist.
Sie können auch sehen, was sich in der Liste befindet, indem Sie einfach mit der Maus über die Variable fahren, und deren Wert wird angezeigt
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenDanke Jim. Mit geringfügigen Änderungen [an meine Bedürfnisse] funktioniert es! Danke !!
Frage: Kann die Liste [datatableList] viele Informationen enthalten?
Jede meiner Tabellen hat viele Tausenderzeilen und auch viele Spalten.
-David
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenEntschuldigung für meine Fehlinformation.Ich habe die Struktur der Datentabelle „Kategorien“ falsch verstanden.Unten sehen Sie ein Skript, das einige Datentabellen und eine Kategorientabelle erstellt, dann die Datentabellen erweitert und schließlich die Spalten basierend auf den Einträgen in der Kategoriendatentabelle umbenennt.Ich hoffe, das bringt uns wieder auf den richtigen Weg.Das Skript bearbeitet so viele Datentabellen wie nötig.Alles, was getan werden muss, ist, alle zu verarbeitenden Datentabellen zur dataTableList-Liste hinzuzufügen
Names Default To Here( 1 );
// This example script opens up 2 data tables and 1 category table.
// In reality, as many as necessary data tables could be used
// Create the tables
dt1 = New Table( "Table1",
Add Rows( 3 ),
New Column( "Category", Character, "Nominal", Set Values( {"ABC", "ABC", "ABC"} ) ),
New Column( "DATA", Character( 33 ), "Nominal", Set Values( {"123.56.8.342", "431.02.0.567", "318.00.1.816"} ), Set Display Width( 182 ) )
);
dt2 = New Table( "Table2",
Add Rows( 3 ),
New Column( "Category", Character, "Nominal", Set Values( {"B", "B", "B"} ) ),
New Column( "Data", Character, "Nominal", Set Values( {"13.24", "98.44", "63.89"} ) )
);
dtCat = New Table( "The Categories",
Add Rows( 13 ),
New Column( "Category",
Character,
"Nominal",
Set Values( {"ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "B", "B", "B", "B"} ),
Set Display Width( 67 )
),
New Column( "Width", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3] ) ),
New Column( "Label",
Character( 16 ),
"Nominal",
Set Values(
{"label0.0", "label0.1", "label0.2", "label0.3", "label0.4", "label0.5", "label0.6", "label0.7", "label0.8", "thelabel.1", "thelabel.2",
"thelabel.3", "thelabel.4"}
),
Set Display Width( 99 )
)
);
// Below this line, is the script that will add the new columns to each of the data tables
// and will take the names from the dtCat (Categories) data table and change the names to
// the columns in each of the data tables
// Create a list of the pointers to the data tables. This will allow for the using of the list
// entries to point to the data tables using a subscript
dataTableList = {};
insert into(dataTableList, dt1 );
insert into(dataTableList, dt2 );
// Loop across the data table list and expand the columns based upon the the column called Data
For( i = 1, i <= N Items( dataTableList ), i++,
ncols_to_add = length( substitute((dataTableList[i]:Data)[1],".",""));
For( k = 1, k <= ncols_to_add, k++, // the || operator joins two strings
dataTableList[i] << New Column( "c" || Char( i ),
Numeric,
Continous,
<<SET each="" value=""></SET>Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenJim,
Für Schritt 2 mit den folgenden Änderungen [unten gezeigt]
++++
Das ist meine ref.csv:
Kategorie|Breite|Beschriftung
ABC 0 label0.0
ABC 1-Label0.1
ABC 2-Label0.2
ABC 3-Label0.3
ABC 4-Label0.4
ABC 5-Etikett0,5
ABC 6-Label0.6
ABC 7-Label0.7
ABC 8-Etikett0.8
ABC 9-Label0.9
ABC 10-Etikett0,10
ABC 11-Etikett0.11
ABC 12-Etikett0.12
ABC 13-Etikett0.13
ABC 14-Etikett0,14
ABC 15-Etikett1.15
ABC 16-Etikett0,16
ABC 17-Etikett0,17
ABC 18-Etikett0,18
ABC 19-Etikett0,19
ABC 20-Etikett0,20
B 0 Etikett11.22
C 1 Etikett11.21
D 2 Etikett11.23
E 0 Etikett11.24
Mein Code:
dt_ref = Öffnen ("ref.csv");
For( i=1, i<= N Rows( dt_ref ), i++,
einfügen in(Category_List, word(1,:label[i],".") || "." || word(2,:label[i], "." ) );
);
show(Category_List);
+++
Ich erhalte im Protokoll Folgendes:
Category_List = {"label0.0", "label0.1", "label0.2", "label0.3", "label0.4", "label0.5", "label0.6", "label0.7" , „label0.8“, „label0.9“, „label0.10“, „label0.11“, „label0.12“, „label0.13“, „label0.14“, „label1.15“, „ label0.16", "label0.17", "label0.18", "label0.19", "label0.20", "label11.22", "label11.21", "label11.23", "label11. 24", ".", "."};
Ich möchte, dass die Beschriftungen nur ausgewählt werden, wenn die Kategorie ABC ist. wie mache ich das?
Ich habe Folgendes versucht, aber es wird nichts für die Category_List zurückgegeben:
prod_found ={"ABC"};
if (:product == prod_found,
For( i=1, i<= N Rows( dt_ref ), i++,
insert into(Category_List, word(1,:name[i],".") || "." || Wort(2,:name[i], "." ) );
);
);
Danke,
David
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenIch habe mir den von Ihnen bereitgestellten Code angesehen. Es scheint einige Verwirrung zu geben.
So habe ich es abgefangen und korrigiert, es ist falsch.
dtcat ist die Referenztabelle mit dem Spaltennamen [ Kategorie, Breite, Beschriftung].
Es gibt mehrere Datentabellen dt1, dt2 usw. mit derselben Struktur und Spaltennamen [Kategorie|Daten|viele Spalten.....]
Wenn ich den Code ausführe, passiert nichts
Es gibt keine Spalte mit dem Namen „data“ in der dtcat-Tabelle und habe im Debug nachgesehen.
Möglicherweise meinten Sie die dt1-Tabelle, da es sich um eine Datenspalte handelt.
Ich habe versucht, herumzuspielen, aber es hat nicht geholfen.
Ich denke, wir stimmen mit den Definitionen in der Tabelle überein. Verwenden Sie das, was ich im ursprünglichen Beitrag beschrieben habe. Meiner Meinung nach könnte ich helfen.
Nochmals vielen Dank für die Hilfe hier.
Lassen Sie mich die Empfehlung für Schritt 2 geben
Danke
David
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennen- Sie geben an, dass mein letzter Code nicht funktioniert. Warum nicht?
- Hier finden Sie eine Möglichkeit, die gewünschte Liste zu erstellen
Category_List = {};
For( i=1, i<= N Rows( dtCat ), i++,
insert into(Category_List, word(3,:data[i],".") || "." || word(4,:data[i], "." ) );
);
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenDanke Jim.Es funktioniert nicht.
Für Ziel Nr. 2 habe ich die gesamte Logik in Werteschritte unterteilt.
Schritt 1: Holen Sie sich die Kategorienamen aus der Datentabelle [sagen wir dt1] und speichern Sie sie in einer Variablen [sagen wir, sie enthält die Kategorie A] – FERTIG
Schritt 2: Variable aus Schritt 1 lesen und alle Zeilen finden, die mit Kategorie = A übereinstimmen. Etikettennamen aus der Spalte „Label“ aus der ref.csv [die Sie als dtCat aufgerufen haben] abrufen und in einer Liste oder Variablen speichern. [sagen wir, es heißt „category_list“]
Verwenden Sie also das in der Diskussion angegebene Beispiel. Ich erwarte, dass die Kategorieliste unter den Werten liegt.
Category_list = L1.abc, L2.xt, L8.dr, L20.ws, L72.oz
Ich weiß nicht, wie ich das machen soll. Schätzen Sie Hilfe.
Schritt 3: Überprüfen Sie die Anzahl in der Liste == Nr. der neuen Spalten, die im dt1 erstellt wurden. Das ist eine zusätzliche Sache, die ich aus Gründen der Robustheit mache.
Die Anzahl in der Kategorieliste beträgt 5 Elemente
Die in dt1 erstellten neuen Spalten sind 5. [Ich habe dies von Ziel 1 erhalten, da ich eine Variable besitze, um herauszufinden, wie viele neue Spalten benötigt werden].
Schritt 4: Ersetzen Sie die Spaltennamen in dt1, d. h. c[i] durch list [i], indem Sie eine Schleife verwenden, in der i = 5
c1 ersetzt
Ich bin gerade in Schritt 2 und brauche Hilfe.
Danke,
David
Betreff: Spaltennamen in einer JMP-Datei gemäß den Werten in Zeilen in einer separaten CSV-Datei umbenennenHier ist ein ungetestetes Skript, das Ihrem zweiten Ziel ziemlich nahe kommen sollte
dtCat = Data Table( "file#1 name" );
dt1 = Data Table( "file#2 name" );
dt2 = Data Table( " file#3 name" );
// add dt3, dt4 etc. for each of the categories you have
// Find the number of data tables to process....A B C......
// Create a temporary new column in data table dtCat that has just the category
dtCat << New Column( "temp", character, formula( Word( 1, :data, "." ) ) );
// Summarize the data getting one element in the ByGroup list for each Category found
Summarize( dt, Categories = ByGroup( :temp ) );
numCategories = N Items( Categories );
For( i = 1, i <= numCategories, i++,
// Subset the dtCat table into the a new data table with just the one
// category being processed
dtCat << select where( :temp == Categories[i] );
dtSub = dtCat << subset( selected rows == 1, selected columns( 0 ) );
// set the offset of where to start the renaming
offset = 3;
// Loop
// Change names in dt1 to match the Label in
For( k = 1, k <= N Rows( dtSub ), k++,
Eval(
Substitute(
Expr(
Column( __dt__, k + offset ) << set name( Word( 3, dtSub:Data[k], "." ) ),
Expr( __dt__ ),
Parse( "dt" || Char( i ) )
)
)
)
);
Close( dtSub, nosave );
);