Ich bin neu bei JSL. Ich habe eine Textzeichenfolge, die durch ein „#“ getrennte Werte enthält. Die Zahlen sind in 3 Spalten zu gruppieren
Ich weiß, dass ich einen Code schreiben kann, um die Werte in durch „#“ getrennte Spalten einzufügen, aber wie erstelle ich dann eine Tabelle mit 3 Werten in jeder Zeile, bis die Tabelle vollständig ist? Ich weiß, dass ich wahrscheinlich auch das erste „#“ entfernen muss, um Probleme zu vermeiden, da die ersten drei Zahlen in der 2. bis 4. Spalte stehen würden.
Zum Beispiel:
| #1#0,93#0,99#2#1,92#1,99#3#2,9#2,99#4#3,86#3,98#5#4,85#4,98 |
kann hierhin gehen:
1 | 0,93 | 0,99 | 2 | 1,92 | 1,99 | 3 | 2.9 | 2,99 | 4 | 3,86 | 3,98 | 5 | 4,85 | 4,98 |
Aber wie schreibe ich den JSL-Code, um Folgendes zu erreichen:
| Wert1 | Wert2 | Wert3 |
| 1 | 0,93 | 0,99 |
| 2 | 1,92 | 1,99 |
| 3 | 2.9 | 2,99 |
| 4 | 3,86 | 3,98 |
| 5 | 4,85 | 4,98 |
In diesem Beispiel gibt es 5 Zeilen in der Tabelle, aber die Anzahl der Zeilen kann variieren.
Verwenden Sie dazu „Text in Spalten“.

Dann stapeln Sie Ihre Daten mit mehreren Serienstapeln

und schließlich zusätzliche Spalten entfernen, Spaltenüberschriften umbenennen und Spaltendaten/Modellierungstypen korrigieren

Das von JMP erstellte Skript ist ein guter Ausgangspunkt für die endgültige JSL
// Text to columns
Data Table("Untitled 6") << Text to Columns(columns(:Column 1), Delimiters("#"));
// Stack data table
// → Data Table("Untitled 11")
Data Table("Untitled 6") << Stack(
columns(
:Column 1 1, :Column 1 2, :Column 1 3, :Column 1 4, :Column 1 5, :Column 1 6,
:Column 1 7, :Column 1 8, :Column 1 9, :Column 1 10, :Column 1 11,
:Column 1 12, :Column 1 13, :Column 1 14, :Column 1 15
),
Source Label Column("Label"),
Stacked Data Column("Data"),
Drop All Other Columns(1),
Number of Series(3),
Output Table("Untitled 11.jmp")
);
// Delete columns
Data Table("Untitled 11") << Delete Columns(:Label, :Label 2, :Label 3);
// Recode column names
Local({dt = Data Table("Untitled 11"), names},
names = Recode(
dt << Get Column Names(String),
{Map Value(
_rcOrig,
{"Data", "Value1", "Data 2", "Value2", "Data 3", "Value3"},
Unmatched(_rcNow)
)}
);
For Each({name, i}, names, Column(dt, i) << Set Name(name));
);
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("Untitled 11"));
For Each({col, index}, {:Value1, :Value2, :Value3},
col << Data Type(Numeric, Format("Best", 12)) <<
Set Modeling Type("Continuous")
);
Current Data Table(old dt);
);Hier ist ein Ansatz
Names Default To Here( 1 );
theString = "#1#0.93#0.99#2#1.92#1.99#3#2.9#2.99#4#3.86#3.98#5#4.85#4.98";
dt = New Table( "Start",
add rows( 1 ),
New Column( "string", character, set each value( theString ) )
);
dt << Text To Columns( delimiter( "#" ), columns( :string ) );
dt << delete columns( :string );
colNames = dt << get column names( string );
For Each( {col}, colNames,
Column( dt, col ) << Data Type( Numeric, Format( "Best", 12 ) ) <<
Set Modeling Type( "Continuous" )
);
dt << Stack(
columns( colNames ),
Source Label Column( "Label" ),
Stacked Data Column( "Value" ),
Number of Series( 3 ),
Output Table( "Final" )
);
dtFinal = Current Data Table();
dtFinal << delete columns( {:Label, :Label2, :Label3} );
dtFinal:value << set name( "Value 1" );
close( dt, nosave);
