Ouvrez 25 tables, récapitulatif pour chacune et concaténez toutes les tables récapitulatives.Salut,
Je suis un nouvel utilisateur de JMP et j'essaie de manipuler automatiquement les données avec JSL. Comme le titre le décrit, je dois
Pour (i = 1, i <= Nitems ("répertoire"), i ++,
1) Ouvrez l’une des 25 tables;
2) générer un tableau récapitulatif de la table ouverte;
)
3) Après avoir parcouru les 25 tableaux, générez un tableau concaténé de 25 tableaux récapitulatifs.
J'ai fait les 1ère et 2ème parties et les ai mises en boucle. Mais vous ne savez pas comment concaténer automatiquement les 25 tableaux récapitulatifs obtenus. Maintenant, je les concatène manuellement après avoir généré toutes les tables.
Le manque de connaissances est de savoir comment nommer chaque tableau récapitulatif et s'y référer lorsqu'il est nécessaire de les concaténer.
En outre, il serait bon que le script puisse fermer toutes les tables ouvertes (de la partie 1)) et les tables de synthèse (de la partie 2)), renvoyer uniquement la table concaténée. (Avec mon script, il sortirait 50 tables au total, et je dois les fermer manuellement.)
Ci-joint mes scripts:
Définir le répertoire par défaut ("E: \ Test");
fichiers = fichiers dans le répertoire ("E: \ Test");
Pour (i = 1, i <= N éléments (fichiers), i ++,
Ouvrir(
fichiers [i],
Feuilles de travail ("feuille de travail1"),
Utilisez pour toutes les feuilles (1),
Concaténer des feuilles de travail (0),
Créer une colonne de concaténation (0),
Paramètres de la feuille de calcul (
1,
A des en-têtes de colonne (1),
Nombre de lignes dans les en-têtes (1),
Les en-têtes commencent en rangée (1),
Les données commencent sur la ligne (2),
Les données commencent sur la colonne (1),
Données se terminant sur la ligne (0),
Les données se terminent sur la colonne (0),
Lignes étendues répliquées (1),
En-têtes étendus répliqués (0),
Supprimer les lignes cachées (1),
Supprimer les colonnes cachées (1),
Supprimer les colonnes vides (1),
Traiter comme une hiérarchie (0),
Pile de séries multiples (0),
Importer des couleurs de cellules (0),
Détection de colonne limite (0),
Chaîne de séparation de colonnes ("-")
)
)
Nouvelle colonne ("Xindex", formule (Ceiling (: Nom ("X") / Nom "(X)) /: Nom (" dimensionX "))));
Nouvelle colonne ("Yindex", Formule (Étage (: Nom ("Y") / : Nom ("dimensionY") )));
Résumé(
Groupe(
: Nom ("X"),
: Nom ("Y"),
: Xindex,
: Yindex),
Std Dev (: Nom ("Data1")),
Freq ("Aucun"),
Poids ("Aucun")
)
)
Re: Ouvrez 25 tables, récapitulatif pour chacune et concaténez toutes les tables récapitulatives.Dans le code, vous spécifiez
dtConcat = dtSum;
Ce que je crois que votre processus de pensée est, est que vous faites une copie du tableau de données lorsque vous utilisez cette déclaration. Mais infact, dtConcat et dtSum ne sont que des variables, qui contiennent un pointeur sur une table de données. En spécifiant que dtConcat est égal à dtSum, les deux variables pointent sur la même table de données.
Et puis vous spécifiez
close (dtSum,nosave);
Ceci ferme la table de données sur laquelle pointe la variable dtSum. Ce qui signifie que dtSum et dtConcat ne disposent désormais plus d'une table de données ouverte vers laquelle ils pointent.
Re: Ouvrez 25 tables, récapitulatif pour chacune et concaténez toutes les tables récapitulatives.Salut uday
Merci beaucoup! Je pense que votre script me dit comment utiliser le point-virgule et la virgule dans if (): la virgule est utilisée pour séparer test et expr, le point-virgule est utilisé pour joindre plusieurs arguments en un seul expr. Est-ce correct?
@txnelson
Salut Jim,
Si je comprends bien l'utilisation des virgules et des points-virgules, je m'attends à ce que le script suivant fonctionne en ajoutant la ligne en surbrillance.
Cependant, avec ce nouveau script, je n'ai eu que dt et dtSum quand i = 2 (j'ai ajouté une autre colonne dans toutes les tables pour suivre ce que "i" c'est dans la table actuelle).
Sans la ligne en surbrillance, j’ai dt et dtSum quand i = 1 et dtConcat quand la boucle for () est terminée, comme je l’ai décrit dans ma dernière réponse.
if(i == 1,
dtConcat = dtSum<FONT color="#FF6600"><STRONG>; close(dtSum,nosave);close(dt,nosave);</STRONG></FONT>,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave);
);
Re: Ouvrez 25 tables, récapitulatif pour chacune et concaténez toutes les tables récapitulatives.Salut Jim,
Merci beaucoup! Maintenant, j'ai eu le sentiment d'utiliser des références dans JMP.
Encore une question pour la fonction if (). Dans la fonction if () suivante que j'ai ajoutée dans mon script, i == 1 est le test 1, dtConcat = dtSum est expr1 et le reste "dtConcat = dtConcat << ......." est "else expr".
Ma question est comment puis-je ajouter plusieurs expressions pour le test 1 dans if ()? Dans le premier script, j'ai maintenant trois tables sorties,
1) dt quand i == 1;
2) dtSum quand i == 1;
3) dtConcat lorsque la boucle for () est terminée, ce qui est exactement ce dont j'ai besoin.
Maintenant, je veux juste ne pas signaler 1) et 2) après avoir exécuté le script, ne signaler que 3).
J'ai essayé le second script mais ça ne marche pas. En outre, les deux scripts donnent des alertes "Impossible d'ajouter à une table de données verrouillée ou dérivée".
if(i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
Dans le second script, j'ai essayé de 1) quand i == 1, attribuer dtSum à dtConcat et fermer dtSum et dt; 2) lorsque i n’est pas égal à 1, concat dtSum à dtConcat et fermez dtSum et dt. Cependant, cela ne fonctionne pas comme prévu. Je suppose que c'est parce que j'utilise les virgules et les points-virgules de manière incorrecte?
if(i == 1,
dtConcat = dtSum; close (dtSum,nosave); close (dt, nosave),
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
Re: Ouvrez 25 tables, récapitulatif pour chacune et concaténez toutes les tables récapitulatives.Vous avez juste besoin d'ajouter une étape de concaténation à votre code ...... quelque chose comme ça
Set Default Directory( "E:\Test" );
files = Files In Directory( "E:\Test" );
For( i = 1, i <= N Items( files ), i++,
dt = Open(
files[i],
Worksheets( "worksheet1" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
New Column( "Xindex", Formula( Ceiling( :Name( "X" ) / :Name( "dimensionX" ) ) ) );
New Column( "Yindex", Formula( Floor( :Name( "Y" ) / :Name( "dimensionY" ) ) ) );
dtSum = dt << Summary(
Group( :Name( "X" ), :Name( "Y" ), :Xindex, :Yindex ),
Std Dev( :Name( "Data1" ) ),
Freq( "None" ),
Weight( "None" );
If( i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << concatenate( dtSum, append to first table );
Close( dtSum, nosave );
);
);
);
Re: Ouvrez 25 tables, récapitulatif pour chacune et concaténez toutes les tables récapitulatives. @Zihao ,
Lorsque vous ouvrez une table de données dans JMP, vous pouvez capturer une référence en procédant comme suit:
dt = Open(<YOUR custom="" path="">);</YOUR>
Maintenant, dt contient la référence à la table de données à laquelle vous pouvez transmettre des messages et émettre des commandes. Maintenant, un autre moyen de transmettre des messages à une table de données consiste à connaître le nom de la table de données.
Data Table("Big Class") // This is an example AS pour votre question sur la façon de concaténer les tables de données, vous pouvez utiliser le modèle suivant:
for(i = 1, i <= N Items(files), i++,
dt = Open(<CUSTOM script="" here="">);
If(i == 1,
dt_Results = New Table("Results");
dt_Results = dt;
,
dt_Results << Concatenate(dt,"Append To First Table");
);
);</CUSTOM>