大家好,
不確定這是否可能,但我試試運氣。
我想創建(在 jsl 中)一種交叉選項卡框,但使用我自己的值進行自定義。 為了更好地理解我自己:
這是一個表格(圖 1),其中包含我要顯示的數據:
FIG. 1 - TabulateFIG. 1 - Tabulate圖. 1 - 製表
這很好,但不完全是我想要的。 我想要得到的是類似於我們在調用應急分析時得到的交叉錶框,如圖2所示:
FIG.2 - contingency tableFIG.2 - contingency table圖2-列聯表
但我會將與表格中的分析列相對應的平均值放入單元格中,而不是“計數”、“總計%”等。
我在這個設計中喜歡但在表格版本中沒有的功能是:
- 可以在一個單元格中顯示多個值(並在左上角顯示圖例)
- 列和行標題上的陰影
- 列標題下缺少“平均”線
我找不到使用選項卡框將表格轉換為我想要的內容的方法。 你認為這可能嗎?
謝謝
您可以使用 TableBox 和 ColSpan 框相當輕鬆地重新創建 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>
使用此方法生成的窗口如下所示:
