cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
hcarr01
Level VI

colonnes

 

Bonjour à tous,
 
Je dispose de plusieurs colonnes :
1- des colonnes « Moyenne nombre »
2- des colonnes « nombre »
 
avec nombre allant de 1 à 10 000.
 
Normalement chaque colonne appartenant au groupe (2) devrait appartenir aussi au groupe (1) et vice-versa. Donc on devrait avoir le même nombre de colonnes dans les deux groupes. 
Cependant, des colonnes appartenant au groupe 1 n’appartiennent pas au groupe 2 et vice-versa.
 
Exemple : « Moyenne 730 » mais la colonne « 730 » n’existe pas.
 
L’objectif est d’avoir l’intersection de ces 2 groupes pour qu’il y ait les mêmes colonnes dans les 2 groupes.
1 ACCEPTED SOLUTION

Accepted Solutions
jthi
Super User

Re: colonnes

One option using associative arrays

Names Default To Here(1);

dt = Open("$DOWNLOADS/AA.jmp");

// build 
aa_duree = Associative Array();
aa_nonduree = Associative Array();

For Each({col_name}, dt << Get Column Names("String"),
	If(Word(1, col_name) == "durée",
		aa_duree[Word(-1, col_name)] = col_name;
	, !IsMissing(Regex(col_name, "\d+")),
		aa_nonduree[col_name] = 1;
	,
		continue()
	);
);
aa_duree_copy = aa_duree;
aa_duree_copy << Intersect(aa_nonduree);
cols_to_keep = Insert(aa_duree_copy << get keys, aa_duree_copy << get values);

aa_duree_copy2 = aa_duree;
aa_nonduree_copy = aa_nonduree;
aa_duree_copy2 << remove(aa_nonduree);
aa_nonduree_copy << remove(aa_duree);
cols_to_remove = Insert(aa_nonduree_copy << get keys, aa_duree_copy2 << get values);

show(cols_to_keep, cols_to_remove);

There are also other options, like joining stacked table(s) or using just lists

-Jarmo

View solution in original post

5 REPLIES 5
jthi
Super User

Re: colonnes

Associative array can help when making the intersection Associative Arrays in Set Operations (jmp.com) if you can make the keys look same. Or you could stack the tables, make them look similar and then perform a join. I think the most difficult part might be how you can get those lists of columns you are interested in and this depends on your data.

-Jarmo
hcarr01
Level VI

Re: colonnes

Les colonnes sont dans la même table de données.
 
Ici un exemple extrait de ma base :
hcarr01_0-1684235679938.png

 

J’ai pour but d’enlever les colonnes « durée 721 », « 730 » et « 750 »

jthi
Super User

Re: colonnes

One option using associative arrays

Names Default To Here(1);

dt = Open("$DOWNLOADS/AA.jmp");

// build 
aa_duree = Associative Array();
aa_nonduree = Associative Array();

For Each({col_name}, dt << Get Column Names("String"),
	If(Word(1, col_name) == "durée",
		aa_duree[Word(-1, col_name)] = col_name;
	, !IsMissing(Regex(col_name, "\d+")),
		aa_nonduree[col_name] = 1;
	,
		continue()
	);
);
aa_duree_copy = aa_duree;
aa_duree_copy << Intersect(aa_nonduree);
cols_to_keep = Insert(aa_duree_copy << get keys, aa_duree_copy << get values);

aa_duree_copy2 = aa_duree;
aa_nonduree_copy = aa_nonduree;
aa_duree_copy2 << remove(aa_nonduree);
aa_nonduree_copy << remove(aa_duree);
cols_to_remove = Insert(aa_nonduree_copy << get keys, aa_duree_copy2 << get values);

show(cols_to_keep, cols_to_remove);

There are also other options, like joining stacked table(s) or using just lists

-Jarmo
hcarr01
Level VI

Re: colonnes

Super merci cela fonctionne !
Cependant les colonnes sont dans la liste « cols_to_remove », comment je peux supprimer ces colonnes directement dans la table de données ?
jthi
Super User

Re: colonnes