안녕하세요,
기본 데이터 테이블에서 요약 표를 생성하려고 합니다.
지금까지 모든 지표를 열 1에 넣고 그룹화(열 2)할 수 있었습니다.
그런 다음 Count, Mean, StdDev, +4sigma, -4sigma로 채울 수 있습니다.
다음 단계는 평균과 STD에 대한 신뢰 구간(95%)을 추가하는 것입니다. 이는 다음 분석에서 수행하는 것과 같은 방식입니다.
X > 평균 및 표준편차로 Y에 적합
FOR() 루프를 사용하여 모든 분석을 하나씩 실행하고 DisplayBox를 사용하여 각 값을 선택하여 요약 데이터 테이블을 채울 수 있지만, 저는 그렇게 하지 않는 게 좋습니다. 보통 1,000개 이상의 메트릭과 10,000개 이상의 행을 처리하기 때문에 분석 속도가 엄청나게 느려질 테니까요.
미리 도움을 주셔서 감사합니다
- 설교자
예시로 BIG CLASS.JMP를 호출하는 스크립트를 첨부했습니다.
Names Default To Here( 1 );
clear symbols();
Deletesymbols();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
SplitBy = "sex";
//Get a list from all unique configs
summarize(ColumnSplitBy=by(Column (dt, SplitBy)));
show(ColumnSplitBy);
For( i = N Items( ColumnSplitBy ), i > 0, i--,
If( ColumnSplitBy[i] == "",
Remove From( ColumnSplitBy, i, 1 );
)
);
//Get only numeric Columns
MetricCols = dt << Get Column Names( numeric, continuous );
//Create a new table to collect the stats from the "Test" table
CpkTable = New Table( "Summary Table",
New Column( "Metric", "Character", "Nominal" ),
New Column( SplitBy, "Character", "Nominal" ),
New Column( "N", "Numeric", "Continuous" ),
New Column( "LSL", "Numeric", "Continuous" ),
New Column( "USL", "Numeric", "Continuous" ),
New Column( "Mean", "Numeric", "Continuous" ),
New Column( "StdDev", "Numeric", "Continuous" ),
New Column( "+4σ", "Numeric", "Continuous", formula(:Mean + :StdDev * 4) ),
New Column( "-4σ", "Numeric", "Continuous", formula(:Mean - :StdDev * 4) ),
);
show(MetricCols);
for(i=1,i <= N Items(MetricCols) ,i++,
show(i);
// Calculate Stats
Summarize(dt, exg = by(Column (dt, SplitBy)),
exc = Count((Column (dt, Eval(Eval Expr(Expr(Char(MetricCols[i]))))))),
exm = Mean((Column (dt, Eval(Eval Expr(Expr(Char(MetricCols[i]))))))),
exstd = StdDev((Column (dt, Eval(Eval Expr(Expr(Char(MetricCols[i]))))))),
);
Limits = Column(dt,MetricCols[i]) << GetProperty ("Speclimits");
//Loop to run through all configs and fill the table
For( j= 1 ,j <= NItems(ColumnSplitBy) , j++,
Show(j );
y = Eval Expr(
CpkTable << AddRows(
{:Metric = Expr(Char( MetricCols[i] ) ) ;
As Column(Splitby) = Expr(Char( ColumnSplitBy[j] ) ) ;
:LSL= Expr(Try(Limits["LSL"]));
:USL= Expr(Try(Limits["USL"]));
:N= exc[j];
:Mean= exm[j];
:StdDev= exstd[j];
};)
);
Print(y);
Try(Eval(y));
); //For j */
); //For i안녕하세요 Jarmo님,
네, 위의 스크립트를 시도해봤는데 큰 데이터 파일에서도 원활하고 빠르게 실행됐습니다.
정말 고맙습니다!!
- 설교자
각 레벨에 대해 이 모든 것을 추출하려고 한다고 가정합니다.

이것이 더 빠를 수도 있다고 생각합니다(적어도 스크립팅이 더 쉽습니다)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp", invisible);
cont_cols = dt << Get Column Names("Continuous", "String");
ow = dt << Oneway(
Y(Eval(cont_cols)),
X(:Site),
Means and Std Dev(1),
SendToReport(
Dispatch(
{"Means and Std Deviations"},
"Std Dev Lower 95%",
NumberColBox,
{Visibility("Visible")}
),
Dispatch(
{"Means and Std Deviations"},
"Std Dev Upper 95%",
NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt_stats = tb << Make Combined Data Table;
tb << close window;
</CODE>You can run Oneway for all of your columns at the same time WITH Means and Std Dev enabled (and "hidden" columns visible), get reference to first table box and then use << Make Combined Data Table. You will get result like this</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1716921037152.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1716921037152.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/64563iD1351A0AB3071D45/jthi_2-1716921037152.png" role="button" title="jthi_2-1716921037152.png" alt="jthi_2-1716921037152.png" /></span></SPAN></P>
<P>그런 다음 Update를 사용하여 최종 테이블에 필요한 열을 추가할 수 있습니다.</P>
<P> </P>
<P>어떤 이유에서든 이것이 작동하지 않으면 루핑이 작동하고 이를 수행하는 몇 가지 옵션이 있습니다. << Make Into Data Table and Update를 사용하거나 테이블 상자에서 결과를 목록으로 가져오고(<< Get으로 충분할 수 있음) 목록 + 데이터 테이블 서브스크립팅을 사용하여 데이터를 업데이트합니다.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761889" slang="en-US" mode="CREATE">Re: Main 및 StdDev 신뢰 구간을 사용하여 요약 표 채우기</LINGO-SUB><LINGO-BODY id="lingo-body-761889" slang="en-US" mode="CREATE"><P>안녕하세요 Jarmo 님,</P><P> </P><P>감사합니다. 스크립트를 실행하는 데 8~10초가 걸리는데, PROBE.JMP가 꽤 무거운 파일인 것을 생각하면 매우 좋습니다.</P><P> </P><P>각 메트릭과 그룹화에 대해 " <STRONG>tb_vals"</STRONG> 로 요약 테이블을 채우는 요령이 있나요? 한 번에 각 값을 시도했는데 스크립트가 엄청 느려졌어요. 전체 행렬을 빠르게 테이블에 채울 방법이 있나요?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-761834" slang="en-US" mode="CREATE">Re: Main 및 StdDev 신뢰 구간을 사용하여 요약 표 채우기</LINGO-SUB><LINGO-BODY id="lingo-body-761834" slang="en-US" mode="CREATE"><P>내 답변은 질문에 답하지 않았습니다.</P>
<P> </P>
<PRE><CODE class=" language-jsl">
귀하의 경우 "많이"가 무엇인지 잘 모르겠지만, 저는 여전히 먼저 fit y by x 플랫폼을 사용해 보는 게 좋습니다.
가능한 한 적게 열고 보이지 않는 보고서(또는 jmp 버전에 따라 비공개)로 엽니다. 값을 추출한 후 닫습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp", invisible);
cont_cols = dt << Get Column Names("Continuous", "String");
start = Tick Seconds();
For Each({cont_col}, cont_cols,
fit = dt << Oneway(
Y(Eval(cont_col)),
X(:Site),
Invisible
);
tb_vals = Report(fit)[Outline Box("Means and Std Deviations"), Table Box(1)] << get;
fit << close window;
// save results from tb_vals
);
end = Tick Seconds();
show(end - start);