Hola comunidad JMP,
Tengo una lista de encabezados de columna (17 sondas de captura) y, según los datos, un conjunto de datos en particular puede tener cualquier número de esas 17 sondas de captura.
Necesito crear un script donde la función de pila apilará las columnas que existen en el conjunto de datos e ignorará cualquier otra columna que falte.
Saqué el script fuente para un conjunto de datos en particular e intenté colocar una declaración if() con un bucle para intentar lograr esto, pero todavía no funciona porque no se encontraron ciertas columnas.
He incluido el guión que tengo ahora.
</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>
Si mi interpretación de las distintas listas en su guión es correcta y lo que creo que está intentando hacer, creo que el siguiente guión hará lo que desea.
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 #
))
);