임시 변수에 대한 수식 만들기모두 안녕
저는 아직 JMP 스크립팅이 처음입니다. 값을 자체 이름으로 변수로 만드는 수식을 만드는 데 도움이 필요합니다. 내가 의미하는 바는 아래와 같습니다. 그래서 아래 4열을 분포 그래프의 변수로 만들 수 있는 수식을 만들고자 합니다.
플라스틱 = 0.424542와 같습니다.
현재 문제는 수식 이름이 t4 = :TYPE;:MIN;과 동일하다는 것입니다. 따라서 분포 그래프에서 플라스틱의 최소값을 플롯하려면 암석의 공식도 t4이므로 암석의 최소값을 사용합니다.
그래서 변수 값이
플라스틱 = :TYPE;:MIN;
종이 = :유형;:최소;
등등 이미 독립 변수가 될 수 있습니다. 누군가가 이것에 도움을 줄 수 있다면 정말 감사하겠습니다. 나는 이미 몇 시간 동안 인터넷을 들여다 보았다.

Re: 임시 변수에 대한 수식을 생성합니다.제 실수였습니다. ")"를 빠뜨렸습니다.이 코드를 사용해보십시오
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ");";
// Run the generated code
Eval( Parse( theExpr ) );Re: 임시 변수에 대한 수식을 생성합니다.안녕 짐,
여기에 약간의 수정만으로 제공한 코드를 실행하기 위해 테이블을 첨부했습니다. 여기에 작성한 스크립트를 실행하면 분포 그래프가 자동으로 생성되지 않습니다.
나는 로그를 확인하고 무엇이 잘못되었는지 디버깅하려고 시도했지만 오류가 있다고 불평하는 이유를 찾을 수없는 것 같습니다. 그것은 나에게 괜찮아 보인다.
오류는 아래와 같습니다.
예기치 않은 입력 종료. 누락된 "," 또는 ")"가 있을 수 있습니다.
"배포" 함수의 인수를 구문 분석하려고 합니다.
라인 2 열 560: ...Normal Quantile Plot(1));►...
Re: 임시 변수에 대한 수식을 생성합니다.내가 제공한 코드도 배포판을 생성해야 합니다.
문제가 무엇인지 확인할 수 있도록 실행 중인 데이터 테이블의 복사본을 첨부해 주시겠습니까?...로그 파일을 살펴보면 문제가 무엇인지도 알 수 있습니다.
Re: 임시 변수에 대한 수식을 생성합니다.안녕 짐,
예, 열의 많은 TYPE 값에 대해 작동하지만 분포 그래프를 플로팅할 때 여전히 수동으로 플로팅해야 합니다.
모든 TYPE 값에 대한 모든 한계를 계산한 후 분포 그래프를 자동으로 플롯하도록 할 수 있습니까? 스크립트를 내보내기 위해 그래프를 수동으로 플로팅해 보았지만 여기에서만 제공한 예제 테이블의 TYPE 값에 모든 것이 하드코딩된 것 같습니다.
TYPE 값도 수시로 달라집니다. 따라서 JSL에서 하드코딩된 줄을 피해야 합니다.
@txnelson
Re: 임시 변수에 대한 수식을 생성합니다.내가 작성한 코드는 데이터 테이블에서 찾은 만큼 많은 TYPE 값과 함께 작동해야 합니다.그렇지 않으면 오류이므로 코드를 수정해야 합니다.
Re: 임시 변수에 대한 수식을 생성합니다.내가 제공한 코드는 데이터 테이블에서 찾은 만큼 많은 TYPE 값에 대해 작동해야 합니다.
Re: 임시 변수에 대한 수식을 생성합니다.안녕 짐,
내 말은 모든 제한을 계산한 후 계산된 제한과 함께 모든 TYPE 값에 대한 분포 그래프를 직접 플롯한다는 것입니다. 따라서 스크립트를 사용하여 이 작업을 수행하려고 생각하지만 모든 TYPE 분포 그래프를 플로팅한 후 스크립트를 내보내려고 하면 모든 유형 그래프가 현재 테이블에만 하드코딩된 것처럼 보입니다.
TYPE 열에 대한 새 항목이 있으면 분포 그래프를 그리지 않습니다. 유형 열에만 해당 4개 항목만 표시합니다.
이것이 귀하의 질문에 답변되기를 바랍니다. 이에 대해 더 자세한 설명이 필요하면 알려주십시오. 감사해요!Re: 임시 변수에 대한 수식을 생성합니다.@mhalwi
"라는 말의 의미를 설명해 주시겠습니까? 자동으로 분포 그래프 플로팅 "?새 데이터 테이블을 열 때 JMP에서 플롯을 실행하시겠습니까?아니면 일부 시스템에서 새 데이터를 사용할 수 있을 때 JMP가 인식하도록 하시겠습니까?
Re: 임시 변수에 대한 수식을 생성합니다.안녕 짐,
정말 감사합니다! 귀하의 방법도 훌륭하게 작동합니다. 수동으로 그래프를 그리는 대신 JSL을 사용하여 자동으로 분포 그래프를 그릴 기회가 있습니까?Re: 임시 변수에 대한 수식을 생성합니다.안녕 @줄리안 ,
두 솔루션 모두 훌륭하게 작동합니다!! 고마워!
alt 방법에 대한 질문 1개는 테이블이 분할된 후 수동으로 그래프를 그려야 합니다. TYPE 열 값이 항상 변경되므로 모든 열에 대한 분포 그래프를 그리는 방법이 있습니까?
도움을 주셔서 다시 한 번 감사드립니다!!
Re: 임시 변수에 대한 수식을 생성합니다.다음은 생성하려는 출력에 대한 다른 접근 방식입니다. 사양 제한을 열 속성으로 갖고 배포 플랫폼이 이를 인식하고 플랫폼
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ";";
// Run the generated code
Eval( Parse( theExpr ) );Re: 임시 변수에 대한 수식을 생성합니다.안녕 @mhalwi ,
지금 무엇을 하려는지 정확히 알 수 있습니다. 요약 테이블을 빌드한 후 다음 jsl을 삽입하면 유형의 각 수준에 대해 명명된 LSL 및 USL에 대한 변수가 생깁니다(여기에 첨부된 전체 스크립트, LSL USL - Original method.jsl).
For Each Row(Eval(Parse(Concat("LSL_",:Type," = ",Char(lower_limit)))));
For Each Row(Eval(Parse(Concat("USL_",:Type," = ",Char(upper_limit)))));
이제 각 유형에 대해 Distribution을 호출하고 참조 라인을 작성할 때 유형 이름을 LSL 및 USL에 추가하십시오. 예를 들어 Dispatch for "Paper"에서:
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL_Paper, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL_Paper, Solid, "Medium Dark Red", "", 2 )}
)
그래도 생각이 났어요.이 작업을 수행하는 약간 다른 방법에 대해 열려 있습니까? 이를 수행할 수 있는 또 다른 방법은 원래 테이블을 분할하는 경우 jsl을 통해 LSL 및 USL을 열 속성으로 설정할 수 있습니다. 그런 다음 Distribution()을 호출하면 한계가 자동으로 표시될 수 있습니다. 이를 위한 JSL도 첨부되어 있습니다(LSL USL - Alt method.jsl).
도움이 되나요?
@줄리안
Re: 임시 변수에 대한 수식을 생성합니다.안녕 모두,
안녕 @uday_guntupalli 그리고 @줄리안 ,
여기에 샘플 테이블과 jmp 스크립트를 첨부하여 여러분이 시도해보고 여기서 달성하려는 아이디어를 얻을 수 있도록 했습니다. 컴퓨터에서 데이터 테이블의 경로를 변경하기만 하면 됩니다.
스크립트에서 볼 수 있듯이 데이터 테이블 요약에 수식(USL 및 LSL)이 있습니다.
그래서 지금 해야 할 일은 플라스틱 등에 대한 USL의 값을 취할 수 있는 다른 공식을 만들고 이를 Plastic_USL = 0.4와 같이 지정하는 것입니다. 그런 다음 변수(Plastic_USL)를 사용하여 sendToReport 함수를 사용하여 플라스틱 분포 그래프를 그릴 수 있습니다. 따라서 TYPE 열에 있는 항목의 다른 목록도 마찬가지입니다.
USL 변수를 직접 사용할 수 없습니다. 왜냐하면 이 변수를 사용하면 계산된 마지막 USL 값인 ROCK만 가져와서 모든 그래프(Plastic, Cotton, Paper, Rock)에 플롯하기 때문입니다. 그런 다음 USL에 대한 선은 1개의 그래프에 대해서만 정확하고 나머지 그래프에 대해서는 잘못된 것입니다.
나는 이것을 할 수있는 방법을 찾고 있었지만 아무데도 갈 수 없으며 여기 여러분의 도움이 정말로 필요합니다. 여러분의 도움에 정말 감사드립니다!
dt = Open ("C:\*\data_table.csv");
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE );
);
Summary(
Group(:TYPE ),
Mean( :NUMERIC_RESULT ),
Std Dev( :NUMERIC_RESULT )
);
New Column( "lower_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
LSL = :Name( "Mean(NUMERIC_RESULT)" ) - 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
New Column( "upper_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
USL = :Name( "Mean(NUMERIC_RESULT)" ) + 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
wait (1);
dr = Fit Group (
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE )
);
SendToReport(Dispatch({"Distributions TYPE=Cotton","NUMERIC_RESULT"},"1",ScaleBox,
{Min( LSL - 1 ), Max( USL + 1 ), Inc( 0.005 ), Minor Ticks( 1 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Plastic",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.1 ), Max( 0.4 ), Inc( 0.005 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Rock",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.01 ), Max( 3.5 ), Inc( 0.01 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
)<<REPORT></REPORT>
Re: 임시 변수에 대한 수식을 생성합니다.안녕 @mhalwi ,
정확히 무엇을 묻고 계신지 모르겠지만 두 가지 추측이 있으니 하나가 맞기를 바랍니다!
첫 번째 추측: 유형 텍스트, 등호 기호, 최소 열의 값이 있는 열을 반환하는 수식을 구성하려고 합니까? 수식 열의 다음 수식은 이를 수행합니다.
Concat(:Type," = ",Char(:Min))
다음과 같은 테이블을 반환합니다.
도움이 될 수 있도록 예제 표를 첨부했습니다.
두 번째 추측: 유형 열의 셀에 대해 명명된 새 변수를 최소 열의 값으로 설정하려고 합니다. 또는 다르게 말하면 위 표의 4열에 있는 텍스트를 평가하려고 합니다. 그것이 당신이 추구하는 것이라면(그리고 이 테이블을 만들었다면) 다음 jsl을 실행할 수 있습니다.
For Each Row(Eval(Parse(:Column 4)));
그러나 단지 그것을 평가하기 위해 그 칼럼을 만드는 것은 아마도 가장 인색한 접근법이 아닐 것입니다. 이것이 당신이 하려는 것이라면 다음은 해당 수식 열을 만들지 않고 해당 변수를 설정합니다.
For Each Row(Eval(Parse(Concat(:Type," = ",Char(:Min)))))
이 두 가지 답변 중 하나가 도움이 되었으면 합니다!
@줄리안
Re: 임시 변수에 대한 수식을 생성합니다.@mhalwi ,
당신이하려는 일을 이해하고 있는지 잘 모르겠습니다. 그러나 나는 내가 이해한 것을 바탕으로 설명하려고 노력할 것이다.
아래에 표시된 것은 당신이하려는 일에 대한 나의 해석입니다. 유형의 최소값을 볼 수 있도록 기본적으로 데이터 분포를 플로팅합니다. 아래에 표시된 그래프가 이를 달성했다고 가정합니다.
이것이 당신이 추구하는 것이 아니라면, 커뮤니티가 당신이 달성하고자 하는 것을 도울 수 있도록 당신이 하려는 일(Excel에서 수행)의 스크린샷을 제공할 수 있을 만큼 친절할 수 있습니까?
