안녕하세요 여러분,
이것이 가능한지는 확실하지 않지만 행운을 빌어 봅니다.
JSL에서 일종의 크로스탭 상자를 만들고 싶지만 내 값으로 사용자 정의합니다. 나 자신을 더 잘 이해하려면:
다음은 표시하려는 데이터가 포함된 표(그림 1)입니다.
FIG. 1 - TabulateFIG. 1 - Tabulate무화과. 1 - 표로 작성
이것은 괜찮지만 내가 원하는 것은 아닙니다. 내가 얻고 싶은 것은 그림 2와 같이 우발적 분석을 호출할 때 나타나는 교차 탭 상자와 유사한 것입니다.
FIG.2 - contingency tableFIG.2 - contingency table 그림 2 - 비상표
그러나 "개수", "전체%" 등 대신 표의 분석 열에 해당하는 평균값을 셀에 입력합니다.
이 디자인에서 내가 좋아하는 기능과 표 버전에는 없는 기능은 다음과 같습니다.
- 하나의 셀에 여러 값을 표시할 수 있는 가능성(왼쪽 상단에 범례 표시)
- 열 및 행 헤더의 음영
- 열 헤더 아래에 "평균" 줄이 없습니다.
탭 상자를 사용하여 표를 원하는 것으로 변환하는 방법을 찾을 수 없습니다. 그게 가능할 거라고 생각하시나요?
감사해요
TableBox 및 ColSpan Boxes를 사용하여 Tabulate를 상당히 쉽게 다시 만들 수 있습니다. 예를 보려면 아래를 참조하세요.
Names Default To Here( 1 );
New Window( "Col Span Box",
Table Box(
Number Col Box( "CAT_ECH", {1, 2, 3} ),
Col Span Box(
"CAT_MK",
Col Span Box(
"0-100",
Col Span Box("COUT_TOT_ENVIRONNE",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("TEMPS",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("COUT_CONSOS",Number Col Box( "Mean", {1, 2, 3} ))
),
Col Span Box(
">=100",
Col Span Box("COUT_TOT_ENVIRONNE",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("TEMPS",Number Col Box( "Mean", {1, 2, 3} )),
Col Span Box("COUT_CONSOS",Number Col Box( "Mean", {1, 2, 3} ))
)
)
)
);
Col Span Box 방법은 다음과 같습니다.

CrossTabBox DisplayBox는 JSL을 사용하여 스크립트할 수 없으므로 Contingency 플랫폼에서 사용되는 것과 같은 것을 다시 생성하려면 다른 방법을 사용해야 합니다.
LineupBox를 사용하여 자신만의 사용자 정의 테이블을 만드는 개념을 사용하여 이 작업을 수행할 수 있습니다. 이 방법은 많은 코드 중복을 피하기 위해 각 셀 생성에 사용자 정의 함수를 사용합니다. 자세한 내용은 내 의견을 참조하세요.
//helper function to create cells in the lineupBOx "table"
getCell = Function( {values, altShading, justify = "left"},
{Default Local},
// Create a lineup box to add each of the values to
lb = Lineup Box( N Col( 1 ), SPacing( 0 ) ); // 1 column and no spacing
// loop through and add each value
For( i = 1, i <= N Items( values ), i++,
// if justify is left, put the spacer box on the right, otherwise, put it on the left
If( justify == "left",
// borderBox to give values some spacing (and for shading)
b = Border Box( Right( 5 ), Left( 5 ), top( 1 ), bottom( 1 ),
H List Box(
//Text box with current value
Text Box( values[i] ),
// Spacing to fill the cell shading all the way to the right (will grow horizontally, but not vertially)
Spacer Box( <<SET max="" size="">=100", "", "", ""}, 0 ),
getCell( {"Total", "", "", ""}, 0 ),
//Row 2
getCell( {"0-250", "", "", ""}, 0 ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
//Row 3
getCell( {"250-3000", "", "", ""}, 0 ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
//Row 4
getCell( {">=3000", "", "", ""}, 0 ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
getCell( {"13", "30.95", "43.33", "68.42"}, 1, "Right" ),
//Row 5
getCell( {"Total", ""}, 0 ),
getCell( {"13", "30.95"}, 1, "Right" ),
getCell( {"13", "30.95"}, 1, "Right" ),
getCell( {"13", "30.95"}, 1, "Right" )
)
)
)
)
)
);</SET>
이 방법을 사용하면 결과 창이 다음과 같이 표시됩니다.
