Joindre des ensembles de données jmp égaux par boucle (script)J'ai 100 ensembles de données structurellement identiques. Tous contiennent un ID et une constante/champ, qui contient un nom de cet ensemble de données.
Les concaténer (format "long") est un jeu d'enfant.
Maintenant, je dois les fusionner au format "large", est-ce tout aussi simple ?
Je pense utiliser cette constante comme préfixe pour chaque ensemble de données JMP, mais comment pourrais-je faire fonctionner cela en boucle.
Vous avez des suggestions ?
Merci beaucoup et cordialement
Débutant
Re : Joindre des ensembles de données jmp égaux par boucle (script)Je ne peux pas imaginer ce que représentent les ensembles de données ou à quoi sert l'ensemble de données combiné résultant. Ces informations pourraient nous aider à mieux résoudre votre problème. Si les ensembles de données ont une structure identique et ne contiennent que des constantes répétitives, il me semble qu'il existe des structures de données et des méthodes de données plus efficaces pour votre problème.
Alors, qu'allez-vous faire dans JMP avec l'ensemble de données combiné ?
Re : Joindre des ensembles de données jmp égaux par boucle (script)Voici une refonte de mon script original, en tenant compte des nouvelles informations que vous avez fournies.
Vous voudrez peut-être également envisager d'utiliser votre table de données contenue et d'utiliser
Tableaux==>Fractionner
Cela peut vous rapprocher de ce que vous voulez
Names Default To Here( 1 );
// Create example data tables to be used in the merging
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
constants = "ABCDEFGHIJKLMNOP";
dt << delete columns( {"Subject", "Dose"} );
dt << New Column( "ID", character, formula( Char( Row() ) ) );
dt << Go To( :ID );
dt << Move Selected Columns( To First );
For( i = 2, i <= N Cols( dt ), i++,
Current Data Table( dt );
dt2 = dt << subset( selected rows( 0 ), columns( :ID, Column( i ) ) );
Column( dt2, 2 ) << set name( "Value1" );
dt2 << New Column( "Value2", formula( Floor( :Name( "Value1" ) + Random Integer( 5 ) ) ) );
dt2 << New Column( "Constant", character, set each value( Substr( constants, i - 1, 1 ) ) );
);
Wait( 0 );
Close( dt, nosave );
// Merge the tables together
// Get the table Names
tableList = {};
For( i = 1, i <= N Table(), i++,
Insert Into( tableList, Data Table( i ) << get name )
);
theConstant = Column( Data Table( tableList[N Items( tableList )] ), "Constant" )[1];
Data Table( tableList[N Items( tableList )] ) << New Column( theConstant || "_ID", character, formula( :ID ) );
Column( Data Table( tableList[N Items( tableList )] ), "Value1" ) << set name( theConstant || "_Value1" );
Column( Data Table( tableList[N Items( tableList )] ), "Value2" ) << set name( theConstant || "_Value2" );
// Loop across the tables and using Update put them back together
For( i = N Items( tableList ) - 1, i >= 1, i--,
theConstant = Column( Data Table( tableList[i] ), "Constant" )[1];
Data Table( tableList[i] ) << New Column( theConstant || "_ID", character, formula( :ID ) );
Column( Data Table( tableList[i] ), "Value1" ) << set name( theConstant || "_Value1" );
Column( Data Table( tableList[i] ), "Value2" ) << set name( theConstant || "_Value2" );
Data Table( tableList[N Items( tableList )] ) << Update( With( Data Table( tableList[i] ) ), Match Columns( :ID = :ID ) );
);
Re : Joindre des ensembles de données jmp égaux par boucle (script)Pour une raison quelconque, mon message de vendredi après-midi a semblé se perdre...
C'est le prix que vous payez lorsque vous travaillez dans un train, semble-t-il.
J'ai 100 jeux de données, chacun contient une constante différente :
par exemple
Jeu de données1
ID CONSTANTE VALEUR1 VALEUR2
1 A 123 123
2 A 123 123
Jeu de données2
1 B 456 456
2 B 456 456
Jeu de données3
1 C 789 789
2 C 789 789
tout ce que je veux, c'est les intégrer dans un seul ensemble de données avec la structure suivante :
A_ID A_CONSTANTE A_VALUE1 A_VALUE2 B_ID B_CONSTANTE B_VALUE1 B_VALUE2
1 A 123 123 1 B 456 456
2 A 123 123 2 B 456 456 etc.,
Je vois deux façons d'y arriver :
(1) ajoutez d'abord un préfixe à chaque colonne de chaque ensemble de données, puis fusionnez-les par ID, ou
(2) contatente d'abord tous les ensembles de données, puis les transpose/retourne/boucle en utilisant les niveaux constants comme préfixe (cependant, j'ai trouvé que JMP n'aime pas les types de données mixtes)
Une idée de comment s'y rendre... ?
Toute aide grandement appréciée
Débutant
Re : Joindre des ensembles de données jmp égaux par boucle (script)Salut Tx,
Je n'ai pas accès à JMP pour le moment (je voyage) mais le résultat devrait ressembler à ceci.
Maintenant, en regardant moi-même la structure, je pense que la concaténation, puis le retournement/le bouclage de la table concaténée peut être une approche simple (les identifiants ne sont pas si importants). Cependant, j'aimerais toujours savoir si cela pourrait être résolu par une boucle (macro) la plus simple.
Fichier1 :
ID Constante Valeur
1 AB 123
2AB 456
Fichier2 :
ID Constante Valeur
1 DÉF 123
2 DÉF 456
...
Fichier100 :
ID Constante Valeur
1 Z 123
2 Z 456
"Boucle" Par CONSTANT
Résultat désiré
AB_ID AB_Constant AB_Value DEF_ID DEF_ Constante DEF_Value ... Z_ID Z_ Constante Z_Value
1 AB 123 1 DEF 123 ... 1 Z 123
2 AB 456 2 DEF 456 ... 2 Z 123
Re : Joindre des ensembles de données jmp égaux par boucle (script)Je ne sais pas exactement à quoi vous voulez que votre table de données de sortie ressemble, cependant, voici un exemple simple qui fusionnera des tables de données, similaires à la structure de votre description
Names Default To Here( 1 );
// Create example data tables to be used in the merging
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
dt << delete columns( {"Subject", "Dose"} );
dt << New Column( "ID", character, formula( "A" || Char( Row() ) ) );
dt << Go To( :ID );
dt << Move Selected Columns( To First );
For( i = 2, i <= N Cols( dt ), i++,
current data table(dt);
dt2 = dt << subset( selected rows( 0 ), columns( :ID, Column( i ) ) );
dt2 << New Column("Table Name", character, set each value(dt2<<GET name=""></GET>