안녕,
원본 데이터 세트(table1)가 있고 이를 테이블 2의 결과로 스크립팅하려고 합니다.
300 미만의 숫자가 있으면 "type1" 문자열을 "result1" 열에 인쇄합니다.
숫자가 300을 초과하면 "type2" 문자열을 "result2" 열에 인쇄합니다.
| 숫자 |
유형 1 |
유형 2 |
결과1 |
결과 2 |
| 100 |
a1 |
a2 |
|
|
| 200 |
b1 |
b2 |
|
|
| 150 |
c1 |
c2 |
|
|
| 275 |
d1 |
d2 |
|
|
| 555 |
e1 |
e2 |
|
|
| 424 |
f1 |
f2 |
|
|
| 572 |
g1 |
g2 |
|
|
| 783 |
h1 |
h2 |
|
|
| 125 |
i1 |
i2 |
|
|
표1: 원본 데이터
| 숫자 |
유형 1 |
유형 2 |
결과1 |
결과 2 |
| 100 |
a1 |
a2 |
a1 |
|
| 200 |
b1 |
b2 |
b1 |
|
| 150 |
c1 |
c2 |
c1 |
|
| 275 |
d1 |
d2 |
d1 |
|
| 555 |
e1 |
e2 |
|
e2 |
| 424 |
f1 |
f2 |
|
f2 |
| 572 |
g1 |
g2 |
|
g2 |
| 783 |
h1 |
h2 |
|
h2 |
| 125 |
i1 |
i2 |
i1 |
|
표 2: 결과
지금까지 내가 스크립트에서 수행한 작업은 다음과 같습니다.
dt = Current Data Table();
dt << New Column("result1",
Character,
"Nominal",
For Each Row(If(:Number << 300), :result1 == :type1, "")
);
dt << New Column("result2",
Character,
"Nominal",
For Each Row(If(:Number >> 300), :result2 == :type2, "")
);
저는 개인적으로 각 열에 개별 수식을 적용하여 새 열을 생성하는 Excel과 같은 접근 방식을 사용하여 이와 같은 문제에 접근하는 것이 혼란스럽고 비효율적이라고 생각합니다."개방형" JSL 코드에서 데이터 테이블 값을 직접 수정하는 JMP의 기능을 사용하면 문제를 더욱 깔끔하고 효율적으로 해결할 수 있습니다.
// Create the new columns
dt << New Column( "result1", Character );
dt << New Column( "result2", Character );
// Populate the columns
For Each Row( If( :Number < 300, :result1 = :type1, :result2 = :type1 ) );
안녕하세요 jthi, 좋습니다. 도움말 정보를 시험해 보겠습니다. 스크립트가 작동합니다. 도와 주셔서 감사합니다.
>>/<<를 비교로 사용하고 열 생성 내에서 For Each Row를 사용하는 데 몇 가지 문제가 있습니다. 다음은 << Set Each Value를 사용하는 작업 구문에 대한 옵션 중 하나입니다(값이 정확히 300이면 비어 있게 됩니다).
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(9),
Compress File When Saved(1),
New Column("Number", Numeric, "Nominal", Format("Best", 9), Set Values([100, 200, 150, 275, 555, 424, 572, 783, 125])),
New Column("type1", Character(16), "Nominal", Set Values({"a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1", "i1"})),
New Column("type2", Character(16), "Nominal", Set Values({"a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2", "i2"}))
);
dt << New Column("result1", Character, "Nominal", << Set Each Value(
If(:Number < 300,
:type1
, //else
""
)
));
dt << New Column("result2", Character, Nominal, << Set Each Value(
If(:Number > 300,
:type2
, //else
""
)
));
JMP의 도움말 메뉴에서 직접 스크립팅 색인을 확인하고 JMP 도움말 페이지의 스크립팅 가이드 .다음과 같은 다른 스크립팅 소스도 있습니다.
JMP 스크립팅 언어 소개 구문을 알기 위해