Ich bin mir nicht sicher, ob dies möglich ist ...Ich habe eine Datentabelle mit einer Spalte, die entweder eine 1 oder eine 2 ist (ihr genannter Kanal). In einer anderen Spalte steht die Bezeichnung "Test". Es ist numerisch wie 10 oder 20 oder 30.
Was ich möchte, ist eine weitere Spalte zu erstellen, die den gesamten 'Test' für Kanal 1 und dann für Kanal 2 zusammenfasst. Jede Datenzeile enthält also eine Spalte, in der die Konzentration des Tests basierend auf dem Kanal angegeben ist. So kann es für Kanal 1 wie 10 | 30 | 80 aussehen, für Kanal 2 jedoch wie 20 | 40 | 30.
Die Datentabelle könnte 1000 Zeilen Ergebnisdaten aus verschiedenen Tests enthalten. Ich bin daran interessiert zu sehen, welcher Kanal welchen maschinellen Test verwendet. Da unterschiedliche Maschinen unterschiedliche Tests auf unterschiedlichen Kanälen haben können.
Möglicherweise muss ich auch ein weiteres Qualifikationsmerkmal hinzufügen. Damit ist der 'Test' nicht nur nach Kanal, sondern auch nach Maschine (die durch eine Seriennummer gekennzeichnet ist) präzise.
Dies wäre ein Skript, um es in eine Post-Skript-Abfrage aufzunehmen.
Anregungen sind willkommen!
SkriptingBetreff: Ich bin mir nicht sicher, ob dies möglich ist ...Das zu tun, was Sie wollen, wird nicht sehr schwierig sein. Ihre Beschreibung ist jedoch etwas verwirrend. Wäre es Ihnen möglich, ein kleines Beispiel für die Datentabelle anzugeben, und was möchten Sie als neue Spalte, die Sie vorschlagen?Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Sicher beigefügt ist eine Beispieltabelle. Es ist nur 1 Maschine aufgeführt, aber mehr als 1 könnte in der Tabelle enthalten sein. Im Laufe der Zeit kann sich auch die Testnummer nach Kanal ändern.
Ich kann die Daten tabellieren, um zu ermitteln, welcher Kanal welche Testnummer nach Datum hat, aber es gibt eine Möglichkeit, dies in einer Spalte für jede Datenzeile anzugeben. Das testinitiationdatelocal könnte als Shortdate verwendet werden, um den Tag zu erhalten.
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Sicher beigefügt ist eine Beispieltabelle. Es ist nur 1 Maschine aufgeführt, aber mehr als 1 könnte in der Tabelle enthalten sein. Im Laufe der Zeit kann sich auch die Testnummer nach Kanal ändern.
Ich kann die Daten tabellieren, um zu ermitteln, welcher Kanal welche Testnummer nach Datum hat, aber es gibt eine Möglichkeit, dies in einer Spalte für jede Datenzeile anzugeben. Das testinitiationdatelocal kann als Shortdate verwendet werden, um das 'Datum' zu erhalten.
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Hier ist ein Skript, das die Tests in einer einzelnen Spalte berechnet. Machen Sie einfach Ihre Tabelle mit den Testnummerndaten zur aktiven Datentabelle, indem Sie darauf klicken, und führen Sie dann dieses Skript aus.
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 );
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Beeindruckend! tolle! Danke dir!
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Wie würde ich ein Datumselement einfügen? Im Beispiel v2 gibt es eine Spalte mit Datum. 1 Datenpunkt für Kanal 2 verwendet Test 40, daher sollte dieser für Daten ab diesem Datum (7/4) angezeigt werden. Es sollte nicht für die anderen Zeilen für andere Daten für Kanal 2 angezeigt werden, da dieser Datumstest 40 nicht verwendet wurde.
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Alles was ich denke das muss sein
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 );
Wenn Sie fertig sind, fügen Sie Datum als zusätzliche Klassifizierungsspalte hinzu, z. B. "Maschine" und "Kanal".
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Aha.
Als ich es angewendet habe, hat der Scrip funktioniert. Außer ich habe in den Daten bemerkt, dass es in einigen Zeilen fehlte. Ich kann nicht genau herausfinden, was mit diesen Zeilen los ist und warum es nicht funktionieren wird.
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Ich konnte das Datum [i] vs. Datum [i-1]. Ich habe das zu Zeile 29 hinzugefügt, und das Skript scheint zu funktionieren ....... bitte schau es dir an
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 );Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...- Sie müssen das Scripting-Handbuch in der JMP-Dokumentationsbibliothek lesen
- Ja, die Syntax ist anders. Dies erfahren Sie, wenn Sie die Dokumentation lesen. Die JSL, die Sie vorschlagen und die ich unten geändert habe, funktioniert für eine Spaltenformel. Wenn dies in offenem JSL-Code wäre, würden die Verweise auf sampletype und sampleid einen Index erfordern, der auf die betreffende Zeile verweist.
If( :sampletype == "Control" & contains(:sampleid,"Neg"), Col Max( :results))
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Ich hatte es richtig für die enthält .... aber machte andere Fehler, da es eine kompliziertere Formel war ... dumm mich
Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Ich werde den Leitfaden mehr lesen!Betreff: Ich bin mir nicht sicher, ob dies möglich ist ...Danke dir!
Funktioniert super!
In einer If-Anweisung kann man etwas haben
If (:sampletype =="Conrol" & :sampleid contains "Neg", Col Max(:results), .)