루프에서 사전 평가된 통계(Col Mean, Col Median)안녕,
JSL의 여러 열에 대한 그룹별 표준 편차의 평균과 중앙값을 계산하려고 합니다. 제가 사용하고 있는 데이터 테이블은 아래와 같이 첨부되어 있습니다. 값 오른쪽에 있는 열에서 올바른 계산을 확인했지만 JSL 출력이 정확히 일치하지 않습니다. 아래 코드는 두 값에 대한 그룹별 표준 편차의 평균을 올바르게 계산하지만 중앙값은 첫 번째 값에 대해서만 올바르게 계산합니다. 두 번째 값의 중앙값에 대한 결과는 첫 번째 값에 대해 계산된 것과 정확히 동일합니다. 루프에서 평균 값이 올바르게 업데이트되지만 중간 값이 업데이트되지 않는 이유를 알 수 없습니다. 이에 대한 도움을 주시면 감사하겠습니다. JSL에서 가장 좋은 방법이 무엇인지 알려주십시오.

JSL:
For( i = 2, i < 4, i++,
N = Column Name( i );
Print( "i = " || Char( i ) );
Print( "Column Name = " || Char( Column Name( i ) ) );
Print( "Column Mean Std Dev by Group = " || Char( Col Mean( Col Std Dev( N, :Group ) ) ) );
Print( "Column Median Std Dev by Group = " || Char( Col Median( Col Std Dev( N, :Group ) ) ) );
);
JSL 출력:
"i = 2"
"Column Name = Value 1"
"Column Mean Std Dev by Group = 3.9849040980727"
"Column Median Std Dev by Group = 3.60555127546399"
"i = 3"
"Column Name = Value 2"
"Column Mean Std Dev by Group = 5.14008843607314"
"Column Median Std Dev by Group = 3.60555127546399"
JMP 프로 v16
감사
해석학스크립팅Re: 루프에서 사전 평가된 통계(Col Mean, Col Median)루핑과 수식을 사용하여 이와 같은 계산을 수행해야 하는 이유가 있습니까? JMP는 수행하려는 작업에 따라 더 나은 옵션이 될 수 있는 요약(표), 요약 및 표 만들기를 제공합니다.
루핑의 경우 byVar를 사용하는 동안 Col 함수를 루핑할 수 있는지(또는 그래야 하는지) 확실하지 않습니다. 왜냐하면 약간 이상하게 평가되기 때문입니다.

Re: 루프에서 사전 평가된 통계(Col Mean, Col Median)이런 식으로 계산을 수행하는 이유는 각 열의 데이터를 별도로 플롯하고 상한 및 하한 플로팅 한계에 대해 계산된 값을 사용하는 스크립트에 결과를 제공하고 싶습니다.
Re: 루프에서 사전 평가된 통계(Col Mean, Col Median)요약은 여기에서 상당히 잘 작동해야 합니다.
Names Default To Here(1);
dt = Current Data Table();
Summarize(dt, groups = By(:Group), v1_std = StdDev(:Value 1), v2_std = StdDev(:Value 2));
Show(groups, v1_std, v2_std);
Show(Mean(v1_std));
Show(Mean(v2_std));
Show(Median(v1_std));
Show(Median(v2_std));<BR /><BR />/*groups = {"A", "B", "C", "D"};<BR />v1_std = [3.60555127546399, 2.64575131106459, 3.60555127546399, 6.08276253029822];<BR />v2_std = [7.23417813807024, 8.9628864398325, 0.577350269189626, 3.78593889720018];<BR />Mean(v1_std) = 3.9849040980727;<BR />Mean(v2_std) = 5.14008843607314;<BR />Median(v1_std) = 3.60555127546399;<BR />Median(v2_std) = 5.51005851763521;*/Re: 루프에서 사전 평가된 통계(Col Mean, Col Median)동의합니다. 이것이 이것을 처리하는 올바른 방법인 것 같습니다. 그러나 모든 열 이름을 입력해야 합니다. 열 이름을 모른 채 많은 열에 대해 일반화할 수 있는 방법이 있습니까? 이것이 내 코드에서 For 루프를 사용하는 주된 이유였습니다.
Re: 루프에서 사전 평가된 통계(Col Mean, Col Median)계속 반복할 수 있지만 byVar에서 작동하지 않을 수 있는 함수 Col 함수 대신 Summarize를 사용하십시오. 이것은 하나의 옵션입니다:
Names Default To Here(1);
dt = Current Data Table();
col_list = {"Value 1", "Value 2"};
For Each({col_name}, col_list,
Summarize(dt, groups = By(:Group), v_std = StdDev(Eval(col_name)));
Show(col_name, v_std);
Show(Mean(v_std));
Show(Median(v_std));
);
다음은 요약 테이블과 함께 사용할 수 있는 다른 옵션입니다(계산을 위한 두 가지 방법).
Names Default To Here(1);
dt = Current Data Table();
col_list = {"Value 1", "Value 2"};
dt_summary = dt << Summary(
Group(:Group),
Std Dev(EvalList({col_list})),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
invisible
);
For Each({col_name}, col_list,
mea = Mean(dt_summary[0, col_name]);
med = Median(dt_summary[0, col_name]);
// or
mea1 = Col Mean(As Column(col_name));
med1 = Col Median(As Column(col_name));
Show(col_name, mea, med, mea1, med1);
);
Close(dt_summary, no save);