Créer de manière itérative des colonnes contenant toutes les permutations de soustraction à partir d'une liste initiale de colonnesJ'ai une liste de colonnes et je dois créer une nouvelle série de colonnes avec chaque permutation de la différence entre les colonnes répertoriées. Le nombre de colonnes dans la liste peut varier et l'exemple non itératif ci-dessous couvre 3 colonnes (12 à 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)));
Automatisation et scriptsRe : Créer de manière itérative des colonnes contenant toutes les permutations de soustraction à partir d'une liste initiale de colonnesVous pouvez par exemple utiliser NChooseK Matrix() pour créer les combinaisons (ou 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 : Créer de manière itérative des colonnes contenant toutes les permutations de soustraction à partir d'une liste initiale de colonnesJarmo
Merci, cela semble fonctionner. Je n'ai pas eu le temps d'étudier les détails, mais je me demande s'il existe un exemple de la façon dont cela peut être utilisé ?
Re : Créer de manière itérative des colonnes contenant toutes les permutations de soustraction à partir d'une liste initiale de colonnesFaites une boucle sur la matrice (ou transformez-la en liste de listes) et créez les colonnes au fur et à mesure.
Re : Créer de manière itérative des colonnes contenant toutes les permutations de soustraction à partir d'une liste initiale de colonnesJe ne sais pas si c'est ce que tu voulais dire, mais j'ai trouvé quelque chose ici qui fonctionne. Ce qui est encore mieux, c'est que cela ne dépend pas des numéros de colonnes.
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)));
)
)
)
;
Résolu : Obtenir les valeurs des colonnes à l'aide de Loop - Communauté d'utilisateurs JMP
Re : Créer de manière itérative des colonnes contenant toutes les permutations de soustraction à partir d'une liste initiale de colonnesNames 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();