Utilisation de Update() pour ajouter de nouvelles lignes dans la table principaleJ'essaie de mettre à jour une table qui contient parfois de nouvelles lignes (basées sur un index).
Il semble que je doive utiliser la jointure, car ce qui suit ne semble pas fonctionner (ici, l'index est la colonne de nom).
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = New Table( "Little Class",
Add Rows( 3 ),
New Column( "name",
Character,
Nominal,
Set Values( {"ALICE", "NEW_NAME", "OTHER_NEW_NAME"} )
),
New Column( "height",
Continuous,
Set Values( [999, 999, 999] )
),
New Column( "weight",
Continuous,
Set Values( [999, 999, 999] )
),
New Column( "RANK",
Continuous,
Set Values( [3, 1, 2] )
),
New Column( "CODE",
Continuous,
Set Values( [0, 1, 1] )
)
);
dt1 << Update(
With( Data Table( "Little Class" ) ),
Match Columns( :name = :name ),
Add columns from Update table( {:RANK} )
);
Fusion et nettoyage des donnéesRe : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleLa nouvelle plate-forme de jointure pourrait ressembler à ceci :
https://community.jmp.com/t5/JMP-Wish-List/Tables-join-option-to-update-main-table/idc-p/653857/highlight/true#M4537

Re : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleJ'ai écrit un souhait pour ajouter une option pour mettre à jour la table principale:
Joindre des tables : possibilité de mettre à jour la table principale
n'hésitez pas à le soutenir 
Re : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleLa plupart du temps, je le ferais avec des tables invisibles, car cela donne la possibilité de les ouvrir facilement à partir de la liste des fenêtres JMP (si elles n'ont pas été fermées).
Les tables invisibles sont en gris (transparent) dans la liste des fenêtres et vous les rendez visibles en double-cliquant dessus.

Je suggère également d'ajouter des noms aux tables, car cela facilite le démarrage du débogage lorsque de nombreuses tables sont ouvertes et que, pour une raison quelconque, le code ne s'est pas exécuté correctement. Sans les renommer, ils deviendront un gâchis comme : Sous-ensemble de quelque chose 1, Sous-ensemble de quelque chose 2, Sans titre 1, etc.
Vous trouverez ci-dessous un exemple qui ouvrira dt comme invisible et créera dt_new comme table invisible. Joignez-les ensuite à une nouvelle table appelée JOINED_TABLE qui sera montrée à l'utilisateur et fermez enfin dt et dt_new sans les enregistrer. <BR />
</CODE><CODE class=" language-jsl">Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp", invisible);
dt_new = New Table( "Little Class",
Add Rows( 3 ),
New Column( "name",
Character,
Nominal,
Set Values( {"ALICE", "NEW_NAME", "OTHER_NEW_NAME"} )
),
New Column( "height",
Continuous,
Set Values( [999, 999, 999] )
),
New Column( "weight",
Continuous,
Set Values( [999, 999, 999] )
),
New Column( "RANK",
Continuous,
Set Values( [3, 1, 2] )
),
New Column( "CODE",
Continuous,
Set Values( [0, 1, 1] )
),
invisible
);
dt_joined = dt << Join(
With(dt_new),
Merge Same Name Columns,
By Matching Columns(:name = :name),
Drop multiples(0, 0),
Include Nonmatches(1, 1),
Preserve main table order(1),
Output table("JOINED_TABLE")
);
Close(dt, no save);
Close(dt_new, no save);
Re : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleJe vois. Que recommanderiez-vous pour simplifier cette dernière étape ?
J'ai 'dt' (original) et le 'dt_joined' ('dt' + 'dt_new').
Re : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleJ'ai testé la même option et elle s'est comportée de la même manière, elle a créé une nouvelle table.
Je peux partager la douleur avec la gestion des tables ouvertes dans JMP, mais pendant que le script est assez facile (vous ajouterez du code supplémentaire), ouvrez/créez-les comme invisibles/privés et fermez-les immédiatement sans enregistrer après que vous savez que vous ne le ferez pas n'en aura plus besoin.
Re : Utiliser Update() pour ajouter de nouvelles lignes dans la table principale"Sauf que vous devrez composer avec des tables supplémentaires"
Exactement. Une nouvelle table est générée malgré que je fasse la jointure avec l'option de mise à jour sélectionnée.
dt<< Join(
With( dt_new ),
Update, // this option is selected
By Matching Columns( :index= :index),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )<BR />);<BR /><BR />// Opens new table apart of dt and dt_newRe : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleJ'ai trouvé un message similaire de la communauté ici et il a été suggéré d'utiliser Join au lieu de mettre à jour lorsque de nouvelles lignes sont ajoutées :
Mise à jour des tableaux de données JMP
Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser join au lieu de update (sauf que vous devrez gérer des tables supplémentaires) ?
À partir de l'aide JMP : Mettre à jour les tableaux de données :
Si vous avez deux tables de données et souhaitez mettre à jour votre table d'origine avec les données d'une nouvelle table, sélectionnez Tableaux > Mettre à jour . La commande Mettre à jour est un cas particulier de Join in place. Il s'agit d'une jointure avec l'option Mettre à jour cochée , et cela ne génère pas de nouvelle table.
Re : Utiliser Update() pour ajouter de nouvelles lignes dans la table principaleVotre hypothèse énoncée est correcte, vous devrez utiliser la plateforme Join pour faire ce que vous voulez.