嗨JMP社区,
我有一个列标题列表(17个捕获探针),根据数据,特定数据集可能包含任意数量的17个捕获探针。
我需要创建一个脚本,其中堆栈函数将堆叠数据集中存在的列,并忽略任何其他缺少的列。
我为一个特定的数据集提取了源代码,并试图在循环中放置一个if()语句以尝试完成此操作,但由于找不到某些列,它仍然无法正常工作。
我已经包含了我现在的脚本。
</CODE></PRE><PRE><CODE class=" language-jsl">dt = Current Data Table();
text_col_list =
{"SP1_A","SP12_B","SP35_A","SP37_A","SP5_A","SP7_A","SP2_A","SP39_A","SP38_A","SP41_A","SP40_A","SP42_A","SP3_A","SP4_A","SP6_A","SP10_A","SP11_A"};
jmp_col_list =
{"cSCR1","CP 34","CP 24 v.6.3","CP 34 v.1","CP 24 v.1","CP 44 v.1","CP 24","CP24 v.14
","CP24 v.13","CP24 v.16","CP24 v.15","CP24 v.17","CP 26","CP 44","CP 24 v.10","CP 32","CP 33"};
col_name_list = dt << get column names(string);
for (i = 1, i <= nitems(text_col_list), i++,
if (contains(col_name_list, text_col_list[i]),
column(dt, text_col_list[i]) << set name(jmp_col_list[i]);
);
);
dt = Current Data Table();
jmp_col_list =
{"cSCR1","CP 34","CP 24 v.6.3","CP 34 v.1","CP 24 v.1","CP 44 v.1","CP 24","CP24 v.14
","CP24 v.13","CP24 v.16","CP24 v.15","CP24 v.17","CP 26","CP 44","CP 24 v.10","CP 32","CP 33"};
col_name_list = dt << get column names(string);
for (i = 1, i <= nitems(jmp_col_list), i++,
if (contains(col_name_list, jmp_col_list[i]),
<< Stack(columns(jmp_col_list),
<<IGNORE errors=""></IGNORE>
如果我对您脚本中的各个列表的解释是正确的,以及我认为您尝试做的事情,我相信以下脚本将执行您想要的操作
Names Default To Here( 1 );
dt = Current Data Table();
// List of possible columns to be stacked
jmp_col_list = {"cSCR1", "CP 34", "CP 24 v.6.3", "CP 34 v.1", "CP 24 v.1", "CP 44 v.1",
"CP 24", "CP24 v.14", "CP24 v.13", "CP24 v.16", "CP24 v.15", "CP24 v.17", "CP 26",
"CP 44", "CP 24 v.10", "CP 32", "CP 33"};
// List name of the list of columns found in the current data table
found_List = {};
// Columns in the data table
col_name_list = dt << get column names( string );
// Loop through the columns in the data table, and if found in the
// jmp_col_list, then place them into the found_List
For( i = 1, i <= N Items( col_name_list ), i++,
If( Contains( jmp_col_list, col_name_list[i] ),
Insert Into( found_List, col_name_list[i] )
)
);
// Stack the columns found
dtStacked = dt << Stack(
columns( Eval( found_list ) ),
Source Label Column( "Capture Probes" ),
Stacked Data Column( "Intensity" ),
Name( "Non-stacked columns" )(Keep(
:Filename,
:Condition,
:Rep #,
:Name( "Time (s)" ),
:Name( "Date/Time" ),
:Cartridge #
))
);