<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Bonjour,
ce problème m'intrigue vraiment.
Je veux faire une concaténation mais dans la table (dt2) j'ai aussi quelques entrées que j'ai déjà dans la première (dt1). Je souhaite conserver ceux de la première table de données (dt1) et les supprimer de la seconde (dt2).
J'ai déjà essayé et j'ai un autre problème en utilisant le select where et en supprimant les doublons dans la deuxième table avant de concaténer. J'ai une liste de tous les doublons, mais je ne peux pas utiliser la liste comme variable dans la clause select where ni le filtre de données
Summarize( a = by(column(dt, "band")),c=count );
La variable ressemble à ceci :
un = {"2_12_000264_0_9", "2_12_000265_0_1", "2_12_000267_0_3", "2_12_000269_1_3", "2_12_000269_2_1", "2_12_000270_1_7", "2_0_000270_2_5", "2_12_000270_2_5", "2_12_000270_2_5", "2_12_000270_2_5", "2_12_000270_2_5", "2_12_000270_2_5", "2_12_000270_2_5", _000272_1_9", "2_12_000272_2_7", "2_12_000273_1_1", "2_12_000273_2_8" , "2_12_000274_0_4", "2_12_000275_1_3", "2_12_000275_2_1", "2_12_000276_1_4", "2_12_000276_2_2"} ;
et le filtre de données complet :
dt2 << Data Filter( Add Filter( columns( :Bandname ), Where( :Bandname == {"2_12_000264_0_9", "2_12_000265_0_1", "2_12_000267_0_3", "2_12_000269_1_3", "2_12_000269_2_1", "2_12_000270_1_7", "2_12_000270_2_5", "2_12_000271_0_1", "2_12_000272_1_9", "2_12_000272_2_7", "2_12_000273_1_1", "2_12_000273_2_8", "2_12_000274_0_4", "2_12_000275_1_3", "2_12_000275_2_1", "2_12_000276_1_4", "2_12_000276_2_2"}), Display( :Bandname, Size( 221, 259 ), List Display ), Mode( Show( 1 ) ) ));
Mais l'utilisation de la variable ne fonctionne pas:
Add Filter( columns( :Bandname ), Where( :Bandname == a ), Display( :Bandname, Size( 221, 259 ), List Display ), Mode( Show( 1 ) ) ));
pourquoi??
Mais le problème principal est celui ci-dessus, la suppression des doublons avant la concaténation.
Merci d'avance
Merci beaucoup, cela fonctionne très bien ... et votre premier code est vraiment bon pour comprendre jsl
Je ne sais pas pourquoi, mais dans certains cas, JSL ne résout tout simplement pas les variables de liste même lorsqu'une liste en texte clair est parfaitement évaluée.
Une façon de contourner ce problème consiste à utiliser une expression et à y substituer une liste analysée avant l'évaluation. Voici un exemple de filtre de données :
dt = Ouvrir ( "$ENGLISH_SAMPLE_DATA/Grande classe.jmp" ) ;
un = { "KATIE" , "HENRI" , "ROBERT" } ;
df_expr = Expr ( dt << filtre de données ( ajouter un filtre ( Colonnes ( : nom ) , où ( : nom == un ) , Afficher ( : nom , Affichage de la liste ) ) ) ) ;
Remplacer ( df_expr , Expr ( un ) , Analyser ( Carboniser ( Éval ( un ) ) ) ) ;
eval ( df_expr ) ;
Cependant, la sélection conditionnelle de lignes en fonction d'une liste peut être scriptée plus efficacement à l'aide de For Each Row(). Le résultat du code ci-dessous doit être identique à celui ci-dessus (sauf pour la fenêtre de filtre de données).
dt = Ouvrir ( "$ENGLISH_SAMPLE_DATA/Grande classe.jmp" ) ;
un = { "KATIE" , "HENRI" , "ROBERT" } ;
Pour chaque ligne ( État de la ligne ( Ligne () ) = État sélectionné ( Contient ( un , : nom [] ) ) )
Une fois les lignes en double sélectionnées, exécutez simplement dt << supprimer des lignes avant de concaténer.