저는 JSL을 처음 사용합니다. "#"으로 구분된 값이 포함된 텍스트 문자열이 있습니다. 숫자는 3개의 열로 그룹화됩니다.
"#"으로 구분된 열에 값을 입력하는 코드를 작성할 수 있다는 것을 알고 있지만 테이블이 완성될 때까지 각 행에 3개의 값이 포함된 테이블을 어떻게 생성합니까? 처음 3개의 숫자가 두 번째에서 네 번째 열에 있으므로 문제를 방지하려면 첫 번째 "#"도 제거해야 할 수도 있다는 것을 알고 있습니다.
예를 들어:
| #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 |
이것으로 갈 수 있습니다 :
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 |
하지만 이를 얻기 위해 JSL 코드를 어떻게 작성합니까?
| 값1 | 값2 | 값3 |
| 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 |
이 예에서는 테이블에 5개의 행이 있지만 행 수는 다를 수 있습니다.
이것을 얻으려면 Text To Columns를 사용하십시오.

그런 다음 여러 계열 스택으로 데이터를 쌓습니다.

마지막으로 추가 열을 제거하고, 열 헤더 이름을 바꾸고, 열 데이터/모델링 유형을 수정합니다.

JMP 생성 스크립트는 최종 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);
);여기에 한 가지 접근 방식이 있습니다.
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);
