Creare iterativamente colonne contenenti tutte le permutazioni di sottrazione da un elenco iniziale di colonneHo un elenco di colonne e ho bisogno di creare una nuova serie di colonne con ogni permutazione della differenza tra le colonne elencate. Il numero di colonne nell'elenco può variare e l'esempio non iterativo di seguito copre 3 colonne (da 12 a 14).
Current Data Table() << New Column(Head Name( As Namespace( Column( 12 ) ) )||" - "||Head Name( As Namespace( Column( 13 ) ) )||" HSD Threshold Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Head Name(As Namespace(Column(13))), 1), As Column(12)), :Group, :Size)));
Current Data Table() << New Column(Head Name( As Namespace( Column( 12 ) ) )||" - "||Head Name( As Namespace( Column( 14 ) ) )||" HSD Threshold Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Head Name(As Namespace(Column(14))), 1), As Column(12)), :Group, :Size)));
Current Data Table() << New Column(Head Name( As Namespace( Column( 13 ) ) )||" - "||Head Name( As Namespace( Column( 14 ) ) )||" HSD Threshold Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Head Name(As Namespace(Column(14))), 1), As Column(13)), :Group, :Size)));
Automazione e scriptingRe: Creare iterativamente colonne contenenti tutte le permutazioni di sottrazione da un elenco iniziale di colonneAd esempio, puoi usare NChooseK Matrix() per creare le combinazioni (o DoE)
Names Default To Here(1);
mylist = {12, 13, 14};
possible_group_idx = NChooseK Matrix(3,2);
my_groups = Transform Each({idx}, possible_group_idx,
mylist[idx]
);
[12 13, 12 14, 13 14]
Re: Creare iterativamente colonne contenenti tutte le permutazioni di sottrazione da un elenco iniziale di colonneJarmo
Grazie, sembra che funzionerà. Non ho avuto tempo di studiare i dettagli, ma mi chiedevo se c'è un esempio di come può essere impiegato?
Re: Creare iterativamente colonne contenenti tutte le permutazioni di sottrazione da un elenco iniziale di colonneEsegui un ciclo sulla matrice (o trasformala in un elenco di elenchi) e crea le colonne mentre lo fai.
Re: Creare iterativamente colonne contenenti tutte le permutazioni di sottrazione da un elenco iniziale di colonneNon so se è questo che intendevi, ma ho trovato qualcosa qui che funziona. La cosa ancora migliore è che non si basa sui numeri di colonna.
Names Default to Here(1);
dt = Current Data Table();
//Select X Variable ____________________________________________________________________________________________________________________________________________
cdb = Column Dialog("Add continuous variables you want to plot as X" ,
colxx = ColList( "X", Min Col( 1 ) ),
);
show(cdb);
Eval List(cdb[1::N Items(cdb)-1]);
Summarize(dt, uniqNames = by(colxx[1]));
Show(uniqNames);
Num = NItems(uniqNames);
For( k = 1, k <= N Items( uniqNames ), k++,
// Loop through all columns finding non NA values
For( i = 2, i <= N Items( uniqNames ), i++,
if (i > k, Current Data Table() << New Column(Char(uniqNames[k])||" - "||Char(uniqNames[i])||" Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Char(uniqNames[i]), 1), As Column(uniqNames[k])), :Group, :Size)));
)
)
)
;
Risolto: Ottieni i valori delle colonne usando Loop - JMP User Community
Re: Creare iterativamente colonne contenenti tutte le permutazioni di sottrazione da un elenco iniziale di colonneNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
mycols = {"OZONE", "CO", "SO2", "NO", "PM10"};
possible_group_idx = NChooseK Matrix(N Items(mycols), 2);
my_groups = Transform Each({idx}, As List(possible_group_idx), Output("List"),
mycols[idx]
);
For Each({cols}, my_groups,
Eval(Substitute(
Expr(dt << New Column(cols[1] ||"_"||cols[2], Numeric, Continuous,
Formula(_col1_ + _col2_)
)),
Expr(_col1_), Name Expr(AsColumn(dt, cols[1])),
Expr(_col2_), Name Expr(AsColumn(dt, cols[2]))
));
);
Write();