안녕하세요,
기본 데이터 테이블에서 요약 테이블을 생성하려고 합니다.
지금까지는 그룹화(2열)를 통해 모든 측정항목을 1열에 넣을 수 있었습니다.
그런 다음 Count, Mean, StdDev, +4sigma, -4sigma로 채울 수 있습니다.
다음 단계는 다음 분석에서와 동일한 방식으로 평균 및 STD에 대한 신뢰 구간(95%)을 추가하는 것입니다.
Y를 X로 맞춤 > 평균 및 표준 편차
FOR() 루프를 사용하여 모든 분석을 하나씩 실행하고 DisplayBox를 사용하여 각 값을 선택하고 요약 데이터 테이블을 채울 수 있지만 실제로는 그렇게 하지 않을 것입니다. 일반적으로 이렇게 하면 분석 속도가 많이 느려질 것입니다. 1000개 이상의 측정항목과 10000개 이상의 행을 처리합니다.
도움을 주셔서 미리 감사드립니다.
- 설교자
예시로 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님,
예, 위 스크립트를 시도했는데 큰 데이터 파일에서 원활하고 빠르게 실행되었습니다.
정말 고마워!!
- 설교자
su나는 당신이 각 레벨에 대해 이 모든 것을 추출하고 싶다고 가정합니다.

나는 이것이 훨씬 더 빠를 것이라고 생각합니다 (적어도 스크립트하기는 더 쉽습니다)
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>그런 다음 업데이트를 사용하여 최종 테이블에 필요한 열을 추가할 수 있습니다.</P>
<P> </P>
<P>어떤 이유로든 이것이 작동하지 않으면 루핑이 작동하며 이를 수행할 수 있는 옵션은 거의 없습니다. << 데이터 테이블로 만들기 및 업데이트를 사용하거나 테이블 상자의 결과를 목록으로 가져오고(<< 가져오기로 충분할 수 있음) 목록 + 데이터 테이블 첨자를 사용하여 데이터를 업데이트합니다.</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);