JSL 스크립트는 여러 열을 만듭니다.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕
JMP 스크립팅에 대한 도움을 요청하고 싶습니다.
현재 테이블에서 여러 열 이름을 자동으로 검색하고 수식을 사용하여 각 열에 대해 새 열을 만들어야 합니다.
예를 들어 이것은 내 테이블입니다.
장치 ID Data1 Data2 Data3
A 1.1 1.2 1.1
비 1.2 1.2 1.0
씨 1.3 1.2 1.4
디 1.1 1.2 1.1
1 - Data1에서 Data3까지 열을 선택해야 합니다.
2 - Data1_Floor, Data2_Floor, Data3_Floor에 따라 3개의 새 열을 만들어야 합니다.
3 - 각각의 새 열은 원래 열의 데이터를 사용하여 "Floor" 함수로 계산됩니다. Data1_Floor = Floor (Data1), ...
몇 가지 설명과 함께 JSL 스크립트의 예를 들어 주시면 감사하겠습니다.
감사해요
알렉스
Re: JSL 스크립트는 여러 열을 생성합니다.이렇게 해야 합니다:
dt = current data table();
startcol = 2;
endcol = 4;
for (i = startcol, i <= endcol, i++,
data_col = column(i) << get name;
floor_col = data_col || "_Floor";
str = evalinsert(
"\[dt << new column( "^floor_col^", Numeric, Continuous, Format( "Best", 12 ),
formula(floor(:^data_col^)));]\");
eval(parse(str));
);
Re: JSL 스크립트는 여러 열을 생성합니다.또한 질문하겠습니다. 내 열의 이름에 공통 문자열이 없으면 어떻게 됩니까?"ifcontains" 대신 어떻게 작동하게 만들 수 있습니까? B열에서 D열로 열을 가져오거나 숫자 순서대로 열 #2에서 #4로 열을 가져오도록 스크립트에 지시해야 합니까?
Re: JSL 스크립트는 여러 열을 생성합니다.좋습니다. 작동합니다. 감사합니다.
Re: JSL 스크립트는 여러 열을 생성합니다.당신은 가까이 있습니다.변수를 할당해야 합니다. dt 데이터 테이블을 가리킵니다.다음 중 하나를 사용하여 이를 수행할 수 있습니다.
// Replace <YOUR table="" name=""> with the actual name of your table
dt = data table("<YOUR table="" name="">");
or with:
dt = current data table();</YOUR></YOUR>
Re: JSL 스크립트는 여러 열을 생성합니다.안녕하십니까?
빠른 답변 감사합니다. 감사합니다.안타깝게도 저는 JSL을 처음 사용하기 때문에 재현할 수 없습니다. "줄에서 스크립트를 실행하려고 했습니다. col_list = ..." 하지만 예상한 결과를 얻지 못했습니다.제가 뭔가 잘못하고 있는 게 틀림없어요.
여기 내가 얻고 싶은 것이 있습니다.
이것은 내 원래 데이터 테이블입니다.
| 단위 | 데이터 1 | 데이터 2 | 데이터 3 |
| ㅏ | 12.35336 | 8.876483 | 3.207919 |
| 비 | 9.838289 | 1.483974 | 2.5232 |
| 씨 | 3.136643 | 6.092754 | 0.980194 |
| 디 | 0.3593 | 4.639877 | 6.672549 |
"데이터" 문자열이 있는 모든 열을 가져오고 각각에 대해 새 열을 생성하는 스크립트를 실행하고 싶습니다. 따라서 최종 테이블은 다음과 같습니다.
| 단위 | 데이터 1 | 데이터 2 | 데이터 3 | 데이터_1층 | 데이터_2층 | 데이터_3층 |
| ㅏ | 12.35336452 | 8.876483446 | 3.207918972 | 12 | 8 | 삼 |
| 비 | 9.838288756 | 1.483974287 | 2.523200042 | 9 | 1 | 2 |
| 씨 | 3.136642653 | 6.092754288 | 0.980193636 | 삼 | 6 | 0 |
| 디 | 0.359299803 | 4.639877062 | 6.672548555 | 0 | 4 | 6 |
이 작업을 수행하는 스크립트를 만들어 주시겠습니까?
Re: JSL 스크립트는 여러 열을 생성합니다.
// Create data table
dt = New Table( "Floor Example",
Add Rows( 4 ),
New Column( "Unit ID", Character, Nominal, Set Values( {"A", "B", "C", "D"} ) ),
New Column( "Data1", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.1, 1.2, 1.3, 1.1] ) ),
New Column( "Data2", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.2, 1.2, 1.2, 1.2] ) ),
New Column( "Data3", Numeric, Continuous, Format( "Best", 12 ),
Set Values( [1.1, 1, 1.4, 1.1] ) ),
);
// Get the list of column names
col_list = dt << get column names(string);
// Loop over column names, searching for data columns
for (i = 1, i <= nitems(col_list), i++,
// If it's a Data column then add the floor formula
if (contains(col_list[i], "Data"),
data_col = ":" || col_list[i];
floor_col = col_list[i] || "_Floor";
// Build new column string dynamically and then execute it.
str = evalinsert(
"\[dt << New Column( "^floor_col^", Numeric, Continuous, Format( "Best", 12 ),
Formula( Floor( ^data_col^))
);]\");
eval(parse(str));
);
);