Column() vs As Column() vs dataable:column vs dt:As name("column")JSL에는 여러 가지 방법으로 열을 참조할 수 있습니다. 먼저 데이터 테이블을 열겠습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
이제 우리는 이와 같은 테이블 스크립트를 생성합니다.
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
자동화된 스크립트(예: 그래프)에서 사용자가 열 이름을 변경하면 스크립트가 새 열 이름에 맞게 조정되는 것 같습니다. 사용자 지정 JSL에서는 Index()와 같은 항목이 표시되어 실패했습니다.
이러한 모든 방법을 사용하여 JSL 스크립트를 열 이름 변경에 강력하게 만드는 방법은 무엇입니까?
문안 인사,
스크립팅재: Column() vs As Column() vs datable:column vs dt:As name("column")실제로 놀라운 것은 계기반 열 이름을 바꾼 후에도 여전히 작동합니다.
- 테이블 스크립트로 저장된 경우 
훌륭한 자동 수정 알고리즘을 구현해 주셔서 감사합니다.
재: Column() vs As Column() vs datable:column vs dt:As name("column")여기 소원이 있습니다 
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idi-p/556596
JMP 17의 새로운 Workflow 빌더에 비슷한 기능이 도입되었으므로 이제 JSL 편집기에 쉽게 구현할 수 있습니다.
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
재: Column() vs As Column() vs datable:column vs dt:As name("column")column()과 as column()의 차이점에 대한 멋진 비디오 자습서:
가장 일반적인 JSL 실수 및 이를 방지하는 방법(2020-US-30MP-571)
(5분 18초부터 시작)
예를 들어
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
에 관하여
이러한 모든 방법을 사용하여 JSL 스크립트를 열 이름 변경에 강력하게 만드는 방법은 무엇입니까?
열 이름이 변경된 후 누락된 열 이벤트를 포착하는 오류 처리 기능은 어떻습니까? 코드를 자동 수정하는 옵션이 있습니다.
아이디어:
열이 누락된 경우 오류 메시지를 표시하는 대신 JMP는 열 목록이 있는 창을 열어 올바른 열을 선택할 수 있습니다.
그러면 코드 실행이 계속 실행되고 소스 코드가 자동으로 수정될 수 있습니다.
재: Column() vs As Column() vs datable:column vs dt:As name("column")최고의 참조(내 자신의 경험과 많은 시행착오를 제외하고)는 스크립팅 인덱스에서 가져온 것입니다.


도움말 페이지는 다른 곳입니다. 열(- , "이름", "형식") 그리고
열(이름)로 . 이것도 약간의 정보가 있습니다 스크립팅 안내서 > JSL 빌딩 블록 > 이름 확인 규칙 > 이름 확인에 대해 자주 묻는 질문 그리고 스크립팅 안내서 > 데이터 테이블 > 열 > 데이터 열 개체에 메시지 보내기 또한 테이블의 행에서 반복 , 기본적으로 설명서(특히 스크립팅 가이드).
재: Column() vs As Column() vs datable:column vs dt:As name("column")이 비트를 설명하는 참조를 답변에 포함시켜 주시겠습니까?
"Column()이 열( 이것이 의미하는 바는 경우에 따라 다릅니다 ... )."
재: Column() vs As Column() vs datable:column vs dt:As name("column")평소에 +1 소식을 좋아하지는 않지만 @jthi 이것은 내가 프로덕션 스크립트에 대해 수행하는 것과 정확히 동일한 방법론입니다.나는 보통 이렇게 생각한다.
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
재: Column() vs As Column() vs datable:column vs dt:As name("column")글이 좀 길고 여기저기 뛰어다니네요 죄송합니다..
Column(), Column(), :colname, ...은 JSL에서 단순하지 않으며 사용하는 경우에 따라 다릅니다. 내가 선호하는 방법은 언제나 사용(할 수 없거나 스크립트에서 좀 더 깔끔한 모양을 원하는 경우 제외) Column(datatable_reference, "열 이름의 문자열"). :colname은 때때로 스크립터 이점을 위해 사용될 수 있는 이점이 있습니다(일부는 여기에서 언급됨). 스크립팅 안내서 > JSL 빌딩 블록 > 이름 해석 규칙 > 이름 해석 규칙 예외 섹션에서).
또한 여기저기서 발생할 수 있는 몇 가지 문제를 피하기 위해 :colname 구문 대신 열 이름의 문자열을 사용하는 것을 좋아합니다. 예를 들어 << Get Column Names() 대신 << Get Column Names("String")을 사용한 다음 필요한 경우 Column(string)을 사용하여 참조를 가져옵니다.
열(- , "이름", "형식") 그리고
열(이름)로 동일하지 않습니다. Column()은 열에 대한 참조를 반환하고 As Column은 열에 "액세스"합니다(이 의미는 사례에 따라 다름...). 이 스크립트를 처음 실행하면 JMP의 인덱싱에 대해 Row()가 제대로 정의되지 않았기 때문에 dt:timestamp가 누락된 값을 반환합니다(0으로 초기화됨).
더보기...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//Row() = 0;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"));
Row() = 1;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"), Column(dt, "name")[], Column(dt, "name")[Row()]);
Print(dt:name == Column(dt, "name"));
// 0
Print(Column(dt, "name") == As Column(dt, "name"));
//0
Print(dt:name == As Column(dt, "name"));
//1
stop();
//
Show(Column("name") << get values);
Show(As Column("name") << get values);
Show(:name << get values);
stop();
col1 = "name";
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(col1), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Eval(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(As Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(dt, col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
@ih 열에서 이름 변경을 관리하는 방법에 대한 좋은 제안이 있습니다. 또한 예를 들어 Graph Builder에 열을 삽입할 때 다음을 사용할 수 있습니다. Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입 때로는 Eval(). << Get Name은 예를 들어 Filter Col Selector / Col List Box로 사용자 인터페이스를 구축하거나 때때로 도움이 될 수 있습니다. @폴딘 제안).
재: Column() vs As Column() vs datable:column vs dt:As name("column")이런 뜻인가요?
코드를 실행한 후 TABLE SCRIPT의 처음 두 항목이 자동으로 새 이름으로 변경되었습니다.
:"name"n에서도 작동했습니다.
모든 그래프 등에 대해 동일한 동작: 새 열 이름으로 자동 조정됩니다.
그러나 As column() 및 Column()의 경우 작동하지 않았습니다.
원래 스크립트의 열 이름에 대해서도 마찬가지였습니다. 
전에:

후에:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Script(
"script",
:name;
:"name"n;<BR /> As Column( "name" );
Column("name");
);
dt:name << Set Name( "name_2" );
dt:name[1]
재: Column() vs As Column() vs datable:column vs dt:As name("column")어떻게 너 스크립트가 참조해야 하는 열을 알고 있습니까?열 이름 변경을 실제로 모니터링해야 하는 경우 테이블의 변경 사항을 구독하고 해당 열 이름을 어딘가에 기록하여 이를 수행할 수 있지만 꽤 복잡할 것 같습니다.대신 열 속성을 정의하고 검색할 수 있습니까?
스크립팅 가이드의 구독 예:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
열 속성 사용
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];재: Column() vs As Column() vs datable:column vs dt:As name("column")숫자 열(dt, 1)로 열을 인덱싱하거나 사용자에게 열을 선택하거나 열 이름을 입력하라는 메시지를 표시합니다. 도움말 파일에서 New Window()를 살펴보십시오.