JSL-Skript zum Transponieren von Spalten in ZeilenIch bin mir nicht sicher, wie ich anfangen soll. Ich möchte Hilfe bei einem Skript, das automatisch ausgewählte Spalten in Zeilen umwandelt.
Ich weiß, wie man es manuell macht, aber ich brauche ein Skript, da dies eine sehr sich wiederholende Aufgabe für Hunderte von Datendateien ist
In der angehängten JMP-Datei finden Sie ein Beispiel für Daten und die gewünschten Ergebnisse
Ich würde mich sehr über Ihre Hilfe freuen
DatentabelleSkriptingBetreff: JSL-Skript zum Transponieren von Spalten in ZeilenDas folgende Skript ist ein guter Anfang für die Erstellung der von Ihnen angeforderten Ausgabetabelle
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the values to the new columns
For( i = 1, i <= N Rows( dtTrans2 ), i++,
dtTrans2:Column 1[i] = Word( 1, dtTrans2:Label[i], ":" );
dtTrans2:Column 2[i] = Word( 2, dtTrans2:Label[i], ":" );
specs = Column( dt, dtTrans2:Label[i] ) << get property( "spec limits" );
If( Is Missing( specs["LSL"] ) == 0,
dtTrans2:Column 3[i] = specs["LSL"]
);
If( Is Missing( specs["USL"] ) == 0,
dtTrans2:Column 4[i] = specs["USL"]
);
If( Column( dt, dtTrans2:Label[i] ) << get property( "Units" ) != "",
dtTrans2:Column 5[i] = Column( dt, dtTrans2:Label[i] ) << get property( "Units" )
);
);
// Get rid of the label column which is no longer needed
dtTrans2 << delete columns( :Label );
// Change the names of the Trans2 table to match the names in the Trans1 table
For( i = 6, i <= N Cols( dtTrans2 ), i++,
Column( dtTrans2, i ) << set name( "Column " || Char( i ) )
);
// Combine the 2 Transformed data tables
dtFinal = dtTrans1 << concatenate( dtTrans2 );
// Cleanup the no longer needed data tables
close( dtTrans1, nosave );
close( dtTrans2, nosave );Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenDankeschön! das scheint gut zu funktionieren. Aus irgendeinem Grund werden die Spalten Testname Lo Limit und Hi Limits an letzter Stelle gesetzt. Wie können wir sie neu anordnen und im Skript kennzeichnen?

Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenWelche Version von JMP verwenden Sie?Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenIch benutze JMP 14
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenHier ist eine korrigierte Version des Skripts, die die Spezifikationsspalten usw. an der richtigen Stelle positioniert und auch die Spaltenbeschriftungen hinzufügt
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Betreff: JSL-Skript zum Transponieren von Spalten in Zeilendanke Jim! Das Format ist perfekt. Aus irgendeinem Grund funktioniert es jedoch nicht mit anderen ähnlichen Datensätzen. irgendeinen Grund warum?
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenGibt es Fehlermeldungen im Protokoll?
Was sind die Unterschiede zwischen den beiden Datentabellen?
Stoppt das Skript, bevor es abgeschlossen ist?
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenEs liegt kein Protokollfehler vor. Wenn ich das Skript ausführe, macht es einfach nichts. Der einzige Unterschied sind die Testnamen ... sie sind unterschiedlich. Alle anderen Header sind jedoch gleichBetreff: JSL-Skript zum Transponieren von Spalten in ZeilenVersuchen Sie, den Code für Zeile 1 bis Zeile 26 auszuführen. Sie müssen lediglich diese Zeilen in Ihrem Skript auswählen (hervorheben) und dann auf das Symbol Ausführen klicken.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
Überprüfen Sie, ob die Transpose 1-Datentabelle wie folgt aussieht:

Die laufen die Linien 30 - 35
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
und prüfen Sie, ob die parameterColNamesList die Namen aller Tests in der Datentabelle enthält.
Überprüfen Sie dann die verschiedenen Codeabschnitte, bis Sie feststellen, was nicht richtig ausgeführt wird.
Wenn Sie mir eine Kopie der Datentabelle zur Verfügung stellen können, die Sie einlesen möchten, wäre ich bereit, die Überprüfung selbst durchzuführen.
Betreff: JSL-Skript zum Transponieren von Spalten in Zeilenok sicher hier ist es
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenHier ist eine zufällige Stichprobe Daten
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenIgnorieren Sie das vorherige Beispiel, bitte verwenden Sie dieses
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenHier ist eine
Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenDas Problem war, dass einer oder mehrere der Parameter als Zeichendaten eingegeben wurden.Die Transponierte kann keine gemischten Daten verarbeiten.Daher habe ich eine Überprüfung hinzugefügt, um sicherzustellen, dass alle erkannten Parameter numerisch sind.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Betreff: JSL-Skript zum Transponieren von Spalten in Zeilendanke jim aber ich habe immer noch den gleichen fehler mit dem aktualisierten script aus einigen gründen

Betreff: JSL-Skript zum Transponieren von Spalten in ZeilenMein Fehler ... versehentlich hatte der letzte Eintrag, den ich an Sie gesendet habe, meine Änderungen nicht. Ich habe meine letzte Antwort bearbeitet und die JSL aktualisiert. Bitte gehen Sie zurück und ziehen Sie die JSL und führen Sie sie aus. Es enthält jetzt den korrigierten Code.Betreff: JSL-Skript zum Transponieren von Spalten in Zeilendanke jim