JMP 17.2 > 自訂報告 > 字串列框 > 如何將長列表分成多列?大家好,JMP 社區,
我正在嘗試一個自訂報表(見下文),希望將不同長度的清單分佈到String Col Box()中的多列中。例如,對於腳本中顯示的列表,我希望將其元素分佈到4列,每列17行。
簡化的腳本(我刪除了除基本行之外的所有內容):
Names Default to Here (1);
datastring = { "ASPM", "AURKA", "AURKB", "BIRC5", "BUB1", "BUB1B", "CCNB1", "CCNB2", "CCNE2", "CDC20", "CDC6", "CDCA2", "CDCA5", "CDCA8", "CDK1", "CDT1",
"CENPE", "CENPF", "CENPK", "CENPN", "CENPS", "CENPW", "DIAPH3", "DLGAP5", "ECT2", "ESCO2", "FAM83D", "HJURP", "KIF11", "KIF14", "KIF15", "KIF18A",
"KIF18B", "KIF23", "KIF2C", "KIF4A", "KIFC1", "KNL1", "MAD2L1", "MKI67", "NCAPG", "NCAPH", "NDC80", "NEK2", "NUF2", "NUSAP1", "OIP5", "PLK1", "PRC1", "PSRC1",
"PTTG1", "RACGAP1", "SGO1", "SGO2", "SKA1", "SKA3", "SPAG5", "SPC24", "SPC25", "TACC3", "TOP2A", "TPX2", "TRIP13", "TTK", "UBE2C", "UHRF1", "ZWILCH", "ZWINT"};
// The length of the list varies from 4 to 125 items, depending on the specific report
rep_w = New Window ("REPORT TEST",
mainframe = HList Box("DATA",
text_data = TableBox (Col Span Box ("MEMBERS", String Col Box ("Genes", datastring)))
)
);
謝謝。
此致,
TS
自動化和腳本分享和交流成果視窗回覆:JMP 17.2 > 自訂報告 > 字串列框 > 如何將長列表分成多列?這是實現您想要的一種方法。我將程式碼分解成單獨的硬編碼語句,假設您希望在最終程式碼中建立一些循環邏輯。

theList=rep_w[stringcolbox(1)]<
<GET></GET>
回覆:JMP 17.2 > 自訂報告 > 字串列框 > 如何將長列表分成多列?你好,txnelson,
感謝您的回饋,但這提供了一種將字串列框的輸入解析到表中的解決方案。我實際上在尋找其他方法:如何在字串列框結構中將列表解析為多列?
最好的,
TS
回覆:JMP 17.2 > 自訂報告 > 字串列框 > 如何將長列表分成多列?這是你想要的嗎

Names Default to Here (1);
datastring = { "ASPM", "AURKA", "AURKB", "BIRC5", "BUB1", "BUB1B", "CCNB1", "CCNB2", "CCNE2", "CDC20", "CDC6", "CDCA2", "CDCA5", "CDCA8", "CDK1", "CDT1",
"CENPE", "CENPF", "CENPK", "CENPN", "CENPS", "CENPW", "DIAPH3", "DLGAP5", "ECT2", "ESCO2", "FAM83D", "HJURP", "KIF11", "KIF14", "KIF15", "KIF18A",
"KIF18B", "KIF23", "KIF2C", "KIF4A", "KIFC1", "KNL1", "MAD2L1", "MKI67", "NCAPG", "NCAPH", "NDC80", "NEK2", "NUF2", "NUSAP1", "OIP5", "PLK1", "PRC1", "PSRC1",
"PTTG1", "RACGAP1", "SGO1", "SGO2", "SKA1", "SKA3", "SPAG5", "SPC24", "SPC25", "TACC3", "TOP2A", "TPX2", "TRIP13", "TTK", "UBE2C", "UHRF1", "ZWILCH", "ZWINT"};
// The length of the list varies from 4 to 125 items, depending on the specific report
rep_w = New Window ("REPORT TEST",
mainframe = HList Box("DATA",
text_data = TableBox (Col Span Box ("MEMBERS"))
)
);
text_data<
<APPEND></APPEND>
回覆:JMP 17.2 > 自訂報告 > 字串列框 > 如何將長列表分成多列?@Thierry_S
以下是用 JSL 實作此操作的通用方法。我創建了一個函數,它需要一個原始列表和一個整數。函數將原始列表拆分為 n 個較小的列表,並傳回列表列表。如果原始清單中的項目數不能被 n 整除,則第 n 列將包含平衡的項目數。這樣,函數就具有通用性,方便您在處理列數較多或較少的表格時使用。
然後透過將每個清單作為字串列框附加到表格框來建立表格:
Names Default to Here (1);
splitList_fxn = function( {list, n},
// split a list into into n evenly divided lists and return a list of lists
// if list items/n is not an integer, place the extra items in the nth column
{i,j,k,n,lists,thisList,listSize,items},
lists = {};
items = n items( list );
listSize = round( items/n );
k = 0; // counter
for( i = 1, i <= n, i++,
thisList = {};
if( i != n,
// all but the last list
for( j = (k*listSize)+1, j <= listSize*i, j++,
insert into( thisList, list[j] )
),
// last list will be the remaining items in case there is a remainder
for( j = (k*listSize)+1, j <= items, j++,
insert into( thisList, list[j] )
)
);
k++;
insert into( lists, eval list( list( thisList ) ) )
);
return( lists )
);
// number of columns
n = 4;
// original list
datastring = { "ASPM", "AURKA", "AURKB", "BIRC5", "BUB1", "BUB1B", "CCNB1", "CCNB2", "CCNE2", "CDC20", "CDC6", "CDCA2", "CDCA5", "CDCA8", "CDK1", "CDT1",
"CENPE", "CENPF", "CENPK", "CENPN", "CENPS", "CENPW", "DIAPH3", "DLGAP5", "ECT2", "ESCO2", "FAM83D", "HJURP", "KIF11", "KIF14", "KIF15", "KIF18A",
"KIF18B", "KIF23", "KIF2C", "KIF4A", "KIFC1", "KNL1", "MAD2L1", "MKI67", "NCAPG", "NCAPH", "NDC80", "NEK2", "NUF2", "NUSAP1", "OIP5", "PLK1", "PRC1", "PSRC1",
"PTTG1", "RACGAP1", "SGO1", "SGO2", "SKA1", "SKA3", "SPAG5", "SPC24", "SPC25", "TACC3", "TOP2A", "TPX2", "TRIP13", "TTK", "UBE2C", "UHRF1", "ZWILCH", "ZWINT"};
// The length of the list varies from 4 to 125 items, depending on the specific report
// split the original list into n lists of equal size
col_lists = splitList_fxn( datastring, n );
// create table box and append string col boxes with each list
table = tablebox();
for each( {list,index}, col_lists,
table << append( string col box( "Col " || char(index), list ) )
);
// create report window
rep_w = new window( "REPORT TEST",
mainframe = HList Box("DATA",
table
)
);
n = 4

n = 8

回覆:JMP 17.2 > 自訂報告 > 字串列框 > 如何將長列表分成多列?splitList_fxn = function( {list, n},
{default local},
lists = {};
Nparts =ceiling(nitems(list)/n);
i=0;
while(nitems(list),
i++;
chunk = remove from (list, 1,Nparts);
Insert Into(lists, eval list({chunk}));
);
if(i
<N></N>
<P><BR /><CODE class=" language-jsl">Insert Into(lists, eval list({chunk})); ?
It's need till:
插入:Flatten(0|1)