Je ne suis pas sûr que cela soit possible ...J'ai une table de données qui a une colonne qui est un 1 ou 2 (son canal appelé). Dans une autre colonne, il y a une désignation d'un «test». C'est numérique comme 10 ou 20 ou 30.
Ce que je voudrais, c'est créer une autre colonne qui résume tout le «test» pour le canal 1 puis pour le canal 2. Ainsi, chaque ligne de données aura une colonne qui contient le concat du test basé sur le canal. Cela peut donc ressembler à 10 | 30 | 80 pour le canal 1 mais 20 | 40 | 30 pour le canal 2.
La table de données peut contenir des lignes de 1000 lignes de résultats de différents tests. Je suis intéressé de voir quel canal utilise quel test par machine. Étant donné que différentes machines peuvent avoir différents tests sur différents canaux.
Je pourrais aussi avoir besoin d'ajouter un autre qualificatif. De sorte que le «test» est concat non seulement par canal de canal mais aussi par machine (qui est désigné par un numéro de série).
Ce serait dans le script à inclure dans une requête post-script.
Toutes les suggestions sont appréciées!
ScriptingRe: Je ne sais pas si c'est possible ...Faire ce que vous voulez ne sera pas très difficile. Cependant, votre description est un peu déroutante. Serait-il possible pour vous de fournir un petit exemple du tableau de données, et ce que vous voulez comme nouvelle colonne que vous proposez?Re: Je ne sais pas si c'est possible ...Bien sûr, ci-joint est un exemple de tableau. Une seule machine est répertoriée, mais plus d'une pourrait figurer dans le tableau. De plus, avec le temps, le numéro de test par canal peut changer.
Je peux tabuler les données pour obtenir quel canal a quel numéro de test par date, mais existe-t-il un moyen de l'indiquer dans une colonne pour chaque ligne de données. Le testinitiationdatelocal peut être utilisé comme date courte pour obtenir le jour.
Re: Je ne sais pas si c'est possible ...Bien sûr, ci-joint est un exemple de tableau. Une seule machine est répertoriée, mais plus d'une pourrait figurer dans le tableau. De plus, avec le temps, le numéro de test par canal peut changer.
Je peux tabuler les données pour obtenir quel canal a quel numéro de test par date, mais existe-t-il un moyen de l'indiquer dans une colonne pour chaque ligne de données. Le testinitiationdatelocal peut être utilisé comme date courte pour obtenir la 'date'
Re: Je ne sais pas si c'est possible ...Voici un script qui calcule les tests dans une seule colonne. Faites simplement de votre table avec les données de testnumber la table de données active, en cliquant dessus, puis exécutez ce script.
names default to here(1);
// Set up a handle to point to the example data table
dt=current data table();
// Find the testnumbers for each machine/channel combination
dtSumm = dt << summary(
Group( :Machine, :Channel,:testnumber),
N,
Link to original data table(0)
);
// Create a new table to accumulate the testnumbers into a single value
dtFinal = New Table("Concat Test Number",
New Column("Machine", character),
New Column("Channel"),
New Column("Tests", character)
);
For(i=1,i<=N Rows(dtSumm), i++,
If(i==1,
dtFinal << add Rows(1);
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtSumm:Machine[i] != dtSumm:Machine[i-1] |
dtSumm:Channel[i] != dtSumm:Channel[i-1]
,
dtFinal << add Rows(1);
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtFinal:Tests[N Rows(dtFinal)] = dtFinal:Tests[N Rows(dtFinal)] || "/" || char( dtSumm:testnumber[i])
)
);
// Merge the new column back to the origianl table
dt = dt << Update(
With( dtFinal ),
Match Columns( :Machine = :Machine, :channel = :Channel )
);
close( dtSumm, nosave );
close( dtFinal, nosave );
Re: Je ne sais pas si c'est possible ...Hou la la! incroyable! Je vous remercie!
Re: Je ne sais pas si c'est possible ...Alors, comment pourrais-je inclure un élément de date? Dans l'exemplev2, il y a une colonne avec la date. 1 Le point de données du canal 2 utilise le test 40, il doit donc apparaître pour les données à partir de cette date (7/4). Il ne doit pas apparaître pour les autres lignes pour les autres dates du canal 2 car ces dates test 40 n'ont pas été utilisées.
Re: Je ne sais pas si c'est possible ...Tout ce que je pense qu'il faut être
names default to here(1);
// Set up a handle to point to the example data table
dt=current data table();
// Find the testnumbers for each machine/channel combination
dtSumm = dt << summary(
Group( :Date, :Machine, :Channel,:testnumber),
N,
Link to original data table(0)
);
// Create a new table to accumulate the testnumbers into a single value
dtFinal = New Table("Concat Test Number",
New Column("Date"),
New Column("Machine", character),
New Column("Channel"),
New Column("Tests", character)
);
For(i=1,i<=N Rows(dtSumm), i++,
If(i==1,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtSumm:Machine[i] != dtSumm:Machine[i-1] |
dtSumm:Channel[i] != dtSumm:Channel[i-1]
,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtFinal:Tests[N Rows(dtFinal)] = dtFinal:Tests[N Rows(dtFinal)] || "/" || char( dtSumm:testnumber[i])
)
);
// Merge the new column back to the origianl table
dt = dt << Update(
With( dtFinal ),
Match Columns( :Date = :Date, :Machine = :Machine, :channel = :Channel )
);
close( dtSumm, nosave );
close( dtFinal, nosave );
fait, consiste à ajouter Date en tant que colonne de classification supplémentaire, comme "Machine" et "Channel".
Re: Je ne sais pas si c'est possible ...Je vois.
Quand je l'ai appliqué, le certificat fonctionnait. Sauf que j'ai remarqué dans les données qu'il manquait certaines lignes. Je n'arrive pas à comprendre ce qui se passe avec ces lignes et pourquoi cela ne fonctionnera pas.
Re: Je ne sais pas si c'est possible ...Je n'ai pas ajouté la date [i] vs. Date [i-1]. J'ai ajouté cela à la ligne 29, et le script semble fonctionner ... Veuillez le vérifier
names default to here(1);
// Set up a handle to point to the example data table
dt=current data table();
// Find the testnumbers for each machine/channel combination
dtSumm = dt << summary(
Group( :Date, :Machine, :Channel,:testnumber),
N,
Link to original data table(0)
);
// Create a new table to accumulate the testnumbers into a single value
dtFinal = New Table("Concat Test Number",
New Column("Date"),
New Column("Machine", character),
New Column("Channel"),
New Column("Tests", character)
);
For(i=1,i<=N Rows(dtSumm), i++,
If(i==1,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtSumm:Date[i] != dtSumm:Date[i-1] | dtSumm:Machine[i] != dtSumm:Machine[i-1] |
dtSumm:Channel[i] != dtSumm:Channel[i-1]
,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtFinal:Tests[N Rows(dtFinal)] = dtFinal:Tests[N Rows(dtFinal)] || "/" || char( dtSumm:testnumber[i])
)
);
// Merge the new column back to the origianl table
dt = dt << Update(
With( dtFinal ),
Match Columns( :Date = :Date, :Machine = :Machine, :channel = :Channel )
);
close( dtSumm, nosave );
close( dtFinal, nosave );Re: Je ne sais pas si c'est possible ...- Vous devez lire le guide de script dans la bibliothèque de documentation JMP
- Oui, la syntaxe est différente, c'est ce que vous apprendrez en lisant la documentation. Le JSL que vous suggérez et que j'ai modifié ci-dessous fonctionnera pour une formule de colonne. S'il s'agissait d'un code JSL ouvert, les références à sampletype et sampleid nécessiteraient un indice pointant vers la ligne en question.
If( :sampletype == "Control" & contains(:sampleid,"Neg"), Col Max( :results))
Re: Je ne sais pas si c'est possible ...Je l'avais bien pour le contient ... mais j'ai fait des erreurs car c'était une formule plus compliquée ...
Re: Je ne sais pas si c'est possible ...Je vais lire le guide plus!Re: Je ne sais pas si c'est possible ...Je vous remercie!
Fonctionne très bien!
Dans une instruction If peut-on avoir quelque chose
If (:sampletype =="Conrol" & :sampleid contains "Neg", Col Max(:results), .)