Comment insérer des données dans une liste standard de colonnes?Je souhaite utiliser un ensemble de colonnes standard pour plusieurs tables de données. Le problème est que certaines tables de données peuvent ne pas contenir TOUTES ces colonnes.
Comment puis-je simplement:
1. Créez une table de données avec cette liste de colonnes standard (ex: ES1, ES2, ES3, ES4, ES5)
2 Lire une table de données pouvant contenir une partie des colonnes ci-dessus (ex: ES1, ES3)
| | ES1 | ES3 |
| Comptez la ligne 1 | 2 | 4 |
| Compte Ligne 2 | 2 | dix |
3 Créez la table de données du nombre de tables de données n ° 2 avec la liste complète des colonnes standard:
| | ES1 | ES2 | ES3 | ES4 | ES5 |
| Comptez la ligne 1 | 2 | 0 | 4 | 0 | 0 |
| Compte Ligne 2 | 2 | 0 | dix | 0 | 0 |
Re: Comment insérer des données dans une liste standard de colonnes?Voici quelques manières de le faire
Names Default To Here( 1 );
dt1 = Data Table( "Your first table" );
dt2 = Data Table( "Your second table" );
dt1 << concatenate( dt2 );
Names Default To Here( 1 );
StdNamesList = {"PQrz", "acgh","bddxy","abcd"};
ExistingColNames = dt << get column names;
dt2 = Data Table( "Your second table" );
// If a std name exits in the data table, eliminate it from this working copy of the
// translate data table
For(i=1,i<=ncols(dt),i++,
If(contains(StdNamesList,ExistingColNames[i])
stdNamesList = remove( stdNamesList,contains(StdNamesList,ExistingColNames[i], 1))
)
);
// Add in the missing columns
For(i=1,i<=ncols(dt),i++,
dt2 << New Column(StdNamesList[i],set each value(0));
);Re: Comment insérer des données dans une liste standard de colonnes?Salut Jim,
La concaténation ne semble pas résumer les valeurs des lignes communes. Par exemple, pour NDP1007, la valeur de ES3 devrait être égale à 7 (somme de la feuille 1, feuille 1 2).
Y a-t-il un moyen par lequel je peux faire cela?
Sincères amitiés,
Zach

Re: Comment insérer des données dans une liste standard de colonnes?Avez-vous des idées sur la façon de résumer deux tableaux distincts, comme indiqué ci-dessus?
Sincères amitiés,
ZachRe: Comment insérer des données dans une liste standard de colonnes?Compte tenu de vos nouvelles spécifications, le problème devient un peu plus complexe. Il n’existe pas de fonction de sommation intégrée dans JMP. Il y a tellement d'actions différentes que l'on peut vouloir faire avec la jonction de données, la somme n'est pas définie comme élément par défaut. Le script simple ci-dessous effectue la totalisation souhaitée. La plupart du code affiché est simplement là pour créer les exemples de tables de données. Seul le code des lignes 32 à 59 permet de rassembler les données.
Names Default To Here( 1 );
// Create the sample data tables
dt = New Table( "Primary",
Add Rows( 3 ),
New Column( "Column 1",
Character,
"Nominal",
Set Selected,
Set Values( {"NDP1007", "NDP2024", "NDP3030"} )
),
New Column( "ES1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 2, 1] ) ),
New Column( "ES2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 0, 1] ) ),
New Column( "ES3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [5, 0, 2] ),
Set Display Width( 46 )
),
New Column( "ES4", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [3, 1, 3] ) ),
New Column( "ES5", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 2, 3] ) ),
Set Row States( [0, 1, 0] )
);
dt2 = New Table( "Secondary",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"NDP1007", "NDP2024"} ) ),
New Column( "ES1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 0] ) ),
New Column( "ES3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 3] ) )
);
// Change the names in the Secondary data table so after joining they can be summed together
// and create a list of the new names
newColNameList = {};
For( i = 2, i <= N Cols( dt2 ), i++,
Column( dt2, i ) << set name( (Column( dt2, i ) << get name) || "_X" );
Insert Into( NewColNameList, Column( dt2, i ) << get name );
);
// Update the primary data table with the secondary table
dt << Update( With( dt2 ), Match Columns( :Column 1 = :Column 1 ) );
// Create the code to add the data together that needs to be summed
For( col = 1, col <= N Items( newColNameList ), col++,
// Make sure the standard name is in the data table and if so, add
// the values together
If( Try( Column( dt, Word( -2, newColNameList[col], "_" ) ) << get name ) != "",
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
Column( dt, Word( -2, newColNameList[col], "_" ) )[theRow] = Sum(
Column( dt, Word( -2, newColNameList[col], "_" ) )[theRow],
Column( dt, newColNameList[col] )[theRow]
)
)
)
);
// Delete the Secondary column no longer needed
dt << delete columns( newColNameList );Re: Comment insérer des données dans une liste standard de colonnes? @ zjuv007 ,
Jim, @txnelson , vous a fourni les clés pour combiner vos tables. La dernière étape pour obtenir la somme des enregistrements courants consiste à exécuter un résumé de table.
Le script ci-dessous s'appuie sur la première solution de Jim et suppose que vous voulez la somme () de toutes les colonnes numériques. Vous voudrez peut-être modifier numclist pour qu'il soit une liste de colonnes possibles, comme l'a montré le second script de Jim. Le script et les tables de données, feuille1 et feuille2, sont joints.
Names Default To Here( 1 );
dt1 = Data Table( "sheet1" );
dt2 = Data Table( "sheet2" );
dt3 = dt1 << concatenate( dt2 );
numclist = dt1 << Get Column Names(Numeric, String);
sumXP = Expr(Summary(
Group( :Column 1 ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 ),
Output Table Name ("Summed Table")
) );
for(i=1, i<=nitems(numclist), i++,
Insert Into(sumXP, EvalExpr(Sum(Column(Expr(numclist[i])))))
);
show(NameExpr(sumXP) );
Eval (EvalExpr(dt3 << expr(sumXP) ) );
dt = Data Table( "Summed Table" );
//option
dt << delete column( {"N Rows"});

Re: Comment insérer des données dans une liste standard de colonnes?Si je veux élargir cela à la somme sur N tables, existe-t-il un moyen simple de corriger Sum2Tables.jsl pour effectuer cela? (Dans la plupart des cas, je le limiterais à N = 5).
Cordialement, cela a fonctionné!Re: Comment insérer des données dans une liste standard de colonnes?En outre, SI je voudrais simplement générer une liste standard de ces colonnes, dans les cas où la première table que je récupère ne contient pas toutes les colonnes appropriées ... Puis-je faire ceci en premier, puis simplement remplir et compter comme zéros s'il n'y a pas de comptes dans cette colonne de somme spécifique?Re: Comment insérer des données dans une liste standard de colonnes?Avant de poser de telles questions, vous devez étudier la réponse fournie pour bien comprendre son fonctionnement. Si vous comprenez la déclaration
dt3 = dt1 << concatenate( dt2 );
et recherchez-le dans le Guide de script ou dans l'index de script, vous verrez que vous pouvez concaténer autant de tables de données dans une instruction que vous le souhaitez.
Concernant votre deuxième question, changer de ligne
numclist = dt1 << Get Column Names(Numeric, String);
à
numclist = dt3 << Get Column Names(Numeric, String);
vous donnera une liste complète de toutes les colonnes trouvées dans toutes les tables de données. Utiliser cette liste combinée pourrait être la réponse dont vous avez besoin