Comment calculer une correspondance avec JSL ?Bonjour à tous!
Dans Excel, les fonctions "=offset(,match(,,)-1,match(,,)-1,,)" peuvent être utilisées pour calculer, mais la vitesse est lente lorsque les données sont volumineuses.
Comment faire cela avec JSL ? Merci !
Re : Comment calculer une correspondance avec JSL ?Oui, Excel est pratique pour utiliser les fonctions de feuille de calcul dans 10 000 lignes.
Plus de 10 000 lignes, j'ai l'habitude de le faire avec un dictionnaire VBA. Mais les dictionnaires de plus de 100 000 sont lents.
Maintenant, en utilisant cette méthode de JMP, plus de 10 millions de lignes sont également rapides.Merci !Re : Comment calculer une correspondance avec JSL ?Je ne vois pas l'avantage pour la communauté d'utilisateurs JMP de la déclaration dans votre dernière réponse,
" Il est également rapide d'utiliser un dictionnaire dans Excel……Set d = CreateObject("Scripting.Dictionary") "
Il semble qu'un tel commentaire serait plus approprié sur le forum de discussion Excel
Re : Comment calculer une correspondance avec JSL ?Merci beaucoup pour votre aide.
Il est également rapide d'utiliser un dictionnaire dans Excel……Set d = CreateObject("Scripting.Dictionary")
mais plus d'un million de lignes devront être faites différemment.Re : Comment calculer une correspondance avec JSL ?Voici quelques façons d'empiler avec un nombre variable de colonnes, si vous utilisez la correspondance dans Excel aujourd'hui, l'une des deux premières méthodes fonctionnera probablement :
//If the column positions do not change
d3_1 = d1 << Stack(
columns( Concat( [2 3], 4::10 )),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If you want all columns
d1_clean = ( d1 << Subset( All rows, columns( 1::10 ) ) );
d3_2 = d1_clean << Stack(
columns( 2:: ncol(d1_clean) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If the column names are in a specific format
// - get column names
cn = d1 << Get Column Names( string );
// - Find which columns match a format
// (jmp does have some patter matching tools but I like regex, check out regexr.com)
matches = repeat(0, N Items(cn));
for(c=1, c<= N Items(cn), c++, if(!is missing(Regex(cn[c], "^\d+$")), matches[c] = 1));
// - Stack
d3_3 = d1 << Stack(
columns( loc(matches) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
Re : Comment calculer une correspondance avec JSL ?Si ces colonnes sont nombreuses, comme plus de 1000…… Disons que c'est une date.
comment ces colonnes implémentent-elles la configuration de la table d3 sous la forme d'une boucle variable.Merci !

Re : Comment calculer une correspondance avec JSL ?bon travail ! Merci !Re : Comment calculer une correspondance avec JSL ?Étant donné que vous vous inquiétez de la vitesse avec les grandes tables, vous pouvez créer une "table de recherche" dans un format long afin qu'il y ait une ligne par valeur, puis l'utiliser avec Join ou Update pour effectuer la recherche.Voici à quoi cela pourrait ressembler :
Names default to here( 1 );
d1 = Open( "$SAMPLE_DATA/Presidential Elections.jmp" );
d2 = New Table( "offset",
Add Rows( 8 ),
New Column( "State",
Character,
"Nominal",
Set Values(
{"Wyoming", "Montana", "Montana", "Alaska", "Wisconsin", "Nebraska", "Nevada", "Montana"}
)
),
New Column( "year",
Character,
"Ordinal",
Set Values( {"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"} )
),
New Column( "data",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ))
);
//Move data to a long format
d3 = d1 << Stack(
columns(
:Name( "1980" ),
:Name( "1984" ),
:Name( "1988" ),
:Name( "1992" ),
:Name( "1996" ),
:Name( "2000" ),
:Name( "2004" ),
:Name( "2008" ),
:Name( "2012" )
),
Source Label Column( "year" ),
Stacked Data Column( "data" )
);
d3 << Set Name( "Long format" );
d3:year << Set Modeling Type("Ordinal");
//'Lookup' the values:
d2 << Update( with(d3), Match Columns( :state=:state, :year=:year ), Add Columns from Update table( None ));
d3 << Close window;
Re : Comment calculer une correspondance avec JSL ?Calculez la valeur de "données" dans le tableau "décalage" sur la base des données du tableau "Élections présidentielles".
Merci!Re : Comment calculer une correspondance avec JSL ?d1 = Open( "$SAMPLE_DATA/élections présidentielles.jmp" );
d2 = Nouvelle Table( "décalage",
Ajouter des lignes ( 8 ),
Nouvelle colonne( "Etat",
Personnage,
"Nominal",
Définir les valeurs(
{"Wyoming", "Montana", "Montana", "Alaska", "Wisconsin", "Nebraska", "Nevada", "Montana"}
)
),
Nouvelle colonne( "année",
Personnage,
"Nominal",
Définir les valeurs( {"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"} )
),
Nouvelle Colonne( "données", Caractère, "Nominal", ),
);