이름 인용 이상한 열 이름적합 모델 식에 열 이름을 삽입하려고 합니다. 이를 위해 :"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: 이름 인용이 이상한 열 이름입니다.@Mark_Bailey
아, 너무 쉬워! 엄청난!!!
에서 듣고 놀랐습니다 @폴딘 :
https://community.jmp.com/t5/Discussions/Name-quote-a-strange-column-name/mp/415735/highlight/true#M66485
저것
맞춤 모델 스크립트를 작성할 때 column() 형식을 사용할 수 없습니다.</CODE><HR /></BLOCKQUOTE><P> </P><PRE><CODE class=" language-jsl">Fit Model(
//Y( :"Plating Thickness (m\!"\!")"n ), <- works
Y(column("Plating Thickness (m\!"\!"")), //<- does not work좋아, 만약 그렇다면, 컬럼 없이 컬럼을 얻는 가장 쉬운 해결책은 무엇일까? 열() ...
이제 나는 (귀하의 코드를 실행하여) 그것이 실제로 작동하는 것을 보고 놀랐습니다.
그리고 이전 스니펫으로 돌아가서 작동하지 않았습니다.
와!
두 줄의 코드를 서로 정확히 아래에 넣으면 퍼즐이 풀립니다.

-> 다행스럽게도 Fit Model에 멋진 non-Column() 코딩이 필요하지 않습니다.
Re: 이름 인용이 이상한 열 이름입니다.Names Default To Here( 1 );
dt = New Table( "plating",
New Column( "Plating Thickness (m\!"\!")", Set Values( [1, 2, 3, 4] ) ),
New Column( "X", Set Values( [12, 26, 33, 39] ) )
);
col = Column( dt, "Plating Thickness (m\!"\!")" );
Fit Model(
Y( col ), // <- works :)
Effects( :X ),
Personality( "Standard Least Squares" ),
Run
);
Re: 이름 인용이 이상한 열 이름입니다.
dt = New Table( "plating",
Add Rows( 4 ),
New Column( "Plating Thickness (m\!"\!")",Set Values( [1, 2, 3, 4] )),
New Column( "X",Set Values( [12, 26, 33, 39] ))
);
colListY = {"Plating Thickness (m\!"\!")"};<BR /><BR /><BR />
newcolumnref = Name Expr(AsColumn(colListY[1])); // -> :"String"n<BR />
Fit Model(
//Y( :"Plating Thickness (m\!"\!")"n ), <- works
//Y(column("Plating Thickness (m\!"\!"")), //<- does not work
Y(newcolumnref), // <- works :)
Effects(:X),
Personality( "Standard Least Squares" )
);~에서
https://community.jmp.com/t5/Discussions/Need-help-with-expressions-column-references-formulas-and-column/mp/490220/highlight/true#M73282
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() 함수가 없으면 이스케이프 처리에 어떤 함수를 사용해야 할지 모르겠습니다(규칙이 너무 복잡해서 직접 작성할 수 없습니다.) 원래 이름에 따옴표가 포함되어 있기 때문에 이스케이프 처리가 필요합니다. 로 바뀌었다 열 이름 상수 .
데이터 테이블이 열려 있으면 거의 동일한 방식으로 column() 함수를 사용하여 열 개체 (확신합니다) 모든 동일한 장소에서 사용할 수 있습니다. 열 이름 상수 나타날 수 있습니다. 저것 열 객체 적어도 테이블이 닫힐 때까지 실제 열을 참조합니다. 만료된 플랫폼 실행 열 객체 또는 열 이름 상수 테이블 열과 일치하지 않는 경우 예상되는 오류 메시지가 생성됩니다.
@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" mode="NONE">Re: 이름 인용이 이상한 열 이름입니다.</LINGO-SUB><LINGO-BODY id="lingo-body-415759" slang="en-US" mode="NONE"><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 substitutedrun 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 목록 상자()가 있는 열을 선택하고 << 항목 가져오기 메시지를 전달합니다. 그러면 열 이름 목록이 문자열로 제공됩니다. 테이블에서 해당 열 이름을 찾고 열 번호를 찾을 수 있지만 효과 식을 조합할 때 이 방법으로는 위에 표시된 대로 상호 작용을 만들 수 없습니다.
이름 이스케이프를 사용하여 문자열에서 열 참조로 이동하는 식 연결을 수행하는 방법이 있습니까?
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: 이름 인용이 이상한 열 이름입니다.Column 또는 As Column 기능을 사용하여 복잡한 열 이름을 보호할 수 있습니다.
colListY = {"Plating Thickness (m\!"\!")"};
newcolumnref = eval insert("column(\!"^colListY[1]^\!")");