이름 인용 이상한 열 이름맞춤 모델 표현식에 열 이름을 삽입하려고 합니다. 이를 위해 :"name"n 규칙을 사용하기 위해 열 이름에서 이상한 문자를 이스케이프 처리해야 합니다. 그렇다면 문자열 열 이름에서 이 형식으로 어떻게 이동합니까?
colListY = {"Plating Thickness (m\!"\!")"};
//This doesn't work
newcolumnref = eval insert("\[:"^colListY[1]^"n]\");
//Looking for this end result
:"Plating Thickness (m\!"\!")"n예를 들어 다음과 같이 어디에나 삽입할 수 있습니다.
insert into(expr(Y()), newcolumnref);
누구든지이 작업을 수행하는 강력한 방법을 알고 있습니까?
스크립팅Re: 이름 인용 이상한 열 이름colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
Eval(
Eval Expr(
dt << New Column( "test",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 2 ),
Formula( Column( Expr( colListY[1] ) )[] ),
Set Display Width( 78 )
)
)
);비어 있는 [ ]는 JMP에 현재 행의 열을 평가하도록 지시합니다.
이와 같은 열 수식을 작성하면 JMP의 수식 평가기에서 기본 열 종속성을 숨길 수 있습니다. 보다 논의 . 다른 수식 열에 종속된 수식 열이 있는 경우 JMP는 먼저 평가할 대상을 파악하기 위해 이 간접 참조를 확인하지 못할 수 있습니다.
Re: 이름 인용 이상한 열 이름결과적으로 열 수식 오류가 발생합니다.
Re: 이름 인용 이상한 열 이름(시도하지 않으면 틀릴 수 있음)
Formula( column(expr(colListY[1])) - :height ),
나는 당신이 열 안에 expr을 원한다고 생각합니다. 그렇게 하면 이전에 캡처한 문자열을 사용하여 열 함수가 나중에 평가됩니다.
Re: 이름 인용 이상한 열 이름@XanGregg 열 수식은 이 방식으로 작동하지 않으며 특별한 인용 방법이 작동합니다.
colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
eval(eval expr(dt << New Column( "test",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 2 ),
Formula( expr(column(colListY[1])) - :height ),
Set Display Width( 78 )
)));수식이 다음과 같은 함수 열을 생성합니다.
Column( "Plating Thickness (m\!"\!")" ) - /*###*/:height/*###*/
평가하지 않는 것.
이것은 다음을 수행합니다.
WrapColumns = Function({ColName},{default local},
ReturnList = {};
If(is list(ColName),
For(i=1, i<=n items(ColName), i++,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName[i] ) ) || "n"))
);
,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName ) ) || "n"))
);
Return(ReturnList);
);
eval(eval expr(dt << New Column( "test2",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 2 ),
Formula( expr(WrapColumns(colListY)[1]) - :height ),
Set Display Width( 78 )
)));column() 시스템으로 이 문제를 해결하는 방법을 알고 있습니까?
Re: 이름 인용 이상한 열 이름주의 깊게 테스트하고 몇 가지 스크립트를 검토한 후 다시 실패하게 만들 수 없었습니다. 확인해주셔서 감사합니다!
Re: 이름 인용 이상한 열 이름이것은 좋은 질문입니다!
Re: 이름 인용 이상한 열 이름이것은 좋은 질문입니다!
Re: 이름 인용 이상한 열 이름@XanGregg 이제 코드로 테스트 중이므로 여기에서도 작동합니다. 내가 실패한 예를 더 완벽하게 공유할 수 있는지 조사하고 보겠습니다...
Re: 이름 인용 이상한 열 이름킥킥거리기 위해 코드를 JMP 11.2.1로 다시 가져갔고 훌륭하게 작동합니다.
Re: 이름 인용 이상한 열 이름"작동하지 않는" 부분에 대해 자세히 설명해 주시겠습니까? JMP 15로 버전을 다시 시도했는데 다음이 작동하는 것 같습니다. 어쩌면 내가 문제의 일부를 놓치고 있는지도 모릅니다.
Data Table( "Big Class" ):weight << Set Name( "weight\!"\!"" );
Fit Model(
Y( Column( "weight\!"\!"" ) ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Run()
);
Re: 이름 인용 이상한 열 이름보고 있는 사람을 위해 설명하자면, 인쇄 기능은 두 가지 일을 합니다. 내부 따옴표(및 기타 특수한 경우)를 이스케이프하고 외부 따옴표를 추가합니다. 그러면 유효한 문자열이 생성되고 Paul의 코드는 앞에 :를 추가하고 뒤에 n을 추가하고 결과를 JSL로 구문 분석합니다. 열 이름 상수 . 실제 열이 있을 수도 있고 없을 수도 있습니다. 열 이름 상수 스크립트에서 사용될 때 에 첨부할 수 있습니다. Paul의 코드가 실행될 때 열이 존재할 필요는 없습니다. print() 함수가 없으면 이스케이프를 수행하는 데 어떤 함수를 사용해야 하는지 잘 모르겠습니다. 로 바뀌었다 열 이름 상수 .
데이터 테이블이 열려 있으면 열() 함수를 사용하여 거의 동일한 방식으로 데이터를 얻을 수 있습니다. 열 개체 그것은 (나는 꽤 확신한다) 모든 동일한 장소에서 사용될 수 있습니다 열 이름 상수 나타날 수 있습니다. 저것 열 개체 적어도 테이블이 닫힐 때까지 실제 열을 참조합니다. 만료된 플랫폼 출시 열 개체 또는 열 이름 상수 테이블 열과 일치하지 않으면 예상되는 오류 메시지가 생성됩니다.
@XanGregg
Re: 이름 인용 이상한 열 이름Craige의 피드백으로 업데이트되었습니다. 1/i에 감사드립니다!
WrapColumns = Function({ColName},{default local},
ReturnList = {};
If(is list(ColName),
For(i=1, i<=n items(ColName), i++,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName[i] ) ) || "n"))
);
,
insert into(ReturnList, parse(":" || Log Capture( Print( ColName ) ) || "n"))
);
Return(ReturnList);
);Re: 이름 인용 이상한 열 이름그것 ~이다 너무 복잡한. 그것이 전부이기 때문에 아마도 regex()를 trim()으로 대체할 수 있습니다. 원래는 print()가 남기는 외부 따옴표를 제거할 것이라고 생각했습니다. (편집: 입력을 구문 분석하기 위해 트리밍할 필요가 전혀 없습니다!)
귀하의 예에서 [i]가 필요한 곳에 [1]이 있을 수 있습니다.
Re: 이름 인용 이상한 열 이름Craige 감사합니다. 생각보다 복잡한 것 같지만 작동합니다. 
이 작업을 수행하려는 사람을 위해 Craige의 솔루션을 함수에 넣었습니다.
WrapColumns = Function({ColName},{default local},
ReturnList = {};
If(is list(ColName),
For(i=1, i<=n items(ColName), i++,
insert into(ReturnList, parse(":" || Regex( Log Capture( Print( ColName[1] ) ), "^\s*(.*)\s*$", "\1" ) || "n");)
);
,
insert into(ReturnList, parse(":" || Regex( Log Capture( Print( ColName ) ), "^\s*(.*)\s*$", "\1" ) || "n");)
);
Return(ReturnList);
);Re: 이름 인용 이상한 열 이름추가 참고 사항:
열 함수에서 테이블을 명시적으로 참조했습니다. 여러 테이블이 열려 있으면 차이가 날 수 있습니다.
문자열을 연결하는 경우 이렇게 할 수 있습니다. 필요하지 않은 경우에도 항상 :"height"n을 사용할 수 있습니다(예: 높이).
colreftxt = ":" || Regex( Log Capture( Print( colListY[1] ) ), "^\s*(.*)\s*$", "\1" ) || "n";
write(colreftxt);
:"도금 두께(m\!"\!")"n
</CODE>탈출 할 수 있습니다. 식 조작은 아마도 이와 같이 조합된 텍스트를 구문 분석하는 것보다 쉬울 것입니다.</P><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-415759" slang="en-US">Re: 이름 인용 이상한 열 이름</LINGO-SUB><LINGO-BODY id="lingo-body-415759" slang="en-US"><P>이 두 가지 답변의 조합을 시도하십시오.</P><PRE><CODE class=" language-jsl">colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
script = Expr(
Fit Model(
Y( F1 ),
Effects( :height ),
Personality( "Standard Least Squares" ),
Run( F1 << {Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )} )
)
);
Substitute Into( script, Expr( F1 ), Column( dt, colListY[1] ) );
Write( Name Expr( script ) );
/*
Fit Model(
Y( Column( "Plating Thickness (m\!"\!")" ) ),
Effects( :height ),
Personality( "Standard Least Squares" ),
Run(
Column( "Plating Thickness (m\!"\!")" ) << {Plot Actual by Predicted( 1 ),
Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )}
)
)
*/
Eval( script );
run with column substituted대체된 열로 실행
Re: 이름 인용 이상한 열 이름@txnelson 문제는 맞춤 모델 스크립트를 작성할 때 column() 형식을 사용할 수 없다는 것입니다.
Fit Model(
//Y( :"Plating Thickness (m\!"\!")"n ), <- works
Y(column("Plating Thickness (m\!"\!"")), //<- does not work
Effects(
:"Shift-temp"n, :Position, :Subgroup, :"Shift-temp"n * :Position,
:"Shift-temp"n * :Subgroup, :Position * :Subgroup
),
Personality( "Standard Least Squares" )
);@Craige_Hales 사용자는 Col list box()로 열을 선택하고 나는 << get items 메시지를 전달합니다. 열 이름 목록을 문자열로 제공합니다. 테이블에서 해당 열 이름을 찾고 열 번호를 찾을 수 있지만 효과 표현식을 조합할 때 이 방법을 사용하면 위에 표시된 대로 상호 작용을 빌드할 수 없습니다.
이름 이스케이프를 사용하여 문자열에서 열 참조로 이동하기 위해 표현식 연결을 수행하는 방법이 있습니까?
Re: 이름 인용 이상한 열 이름열 이름을 문자열로 가져오는 것을 방지하고 대신 열 개체를 가져오는 것이 더 쉬울 수 있습니다. 아래에서 cols는 이름이 아닌 열 개체의 목록입니다.
colListY = {"Plating Thickness (m\!"\!")"};
dt = Open( "$sample_data/big class.jmp" );
dt:age << setname( colListY[1] );
cols = dt << getcolumnnames;// don't use the string keyword
/* {name, "Plating Thickness (m\!"\!")"n, sex, height, weight} */
script = Expr(
Fit Model(
Y( :weight ),
Effects( F1 ),
Personality( "Standard Least Squares" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Effect Leverage( 1 )}
)
)
);
Substitute Into( script, Expr( F1 ), cols[2] );
Write( Name Expr( script ) );
/*
Fit Model(
Y( :weight ),
Effects( "Plating Thickness (m\!"\!")"n ),
Personality( "Standard Least Squares" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Effect Leverage( 1 )}
)
);
*/Re: 이름 인용 이상한 열 이름열 또는 열로 함수를 사용하여 복잡한 열 이름을 보호할 수 있습니다.
colListY = {"Plating Thickness (m\!"\!")"};
newcolumnref = eval insert("column(\!"^colListY[1]^\!")");