Öffnen Sie 25 Tabellen, jeweils eine Zusammenfassung, und verketten Sie alle Übersichtstabellen.Hallo,
Ich bin ein neuer JMP-Benutzer und versuche, einige automatische Datenmanipulationen mit JSL vorzunehmen. Wie der Titel beschreibt, muss ich
Für (i = 1, i <= Nitems ("Verzeichnis"), i ++,
1) Öffnen Sie eine der 25 Tabellen.
2) Erstellen Sie eine Übersichtstabelle der geöffneten Tabelle.
);
3) Nachdem Sie alle 25 Tabellen durchlaufen haben, generieren Sie eine verkettete Tabelle mit 25 Übersichtstabellen.
Ich habe den 1. und 2. Teil gemacht und sie geschlungen. Sie sind sich jedoch nicht sicher, wie die resultierenden 25 Übersichtstabellen automatisch verkettet werden sollen. Jetzt verkettete ich sie manuell, nachdem alle Tabellen generiert wurden.
Das fehlende Wissen besteht darin, wie Sie jede Übersichtstabelle benennen und auf sie verweisen, wenn sie verkettet werden müssen.
Es ist auch gut, wenn das Skript alle geöffneten Tabellen (aus Teil 1)) und Übersichtstabellen (aus Teil 2)) schließen kann und nur die verkettete Tabelle zurückgibt. (Bei meinem Skript würden insgesamt 50 Tabellen angezeigt, und ich muss sie manuell schließen.)
Anbei meine Skripte:
Standardverzeichnis festlegen ("E: \ Test");
Dateien = Dateien im Verzeichnis ("E: \ Test");
Für (i = 1, i <= N Elemente (Dateien), i ++,
Öffnen(
Dateien [i],
Arbeitsblätter ("Arbeitsblatt1"),
Verwenden Sie für alle Blätter (1),
Verketten Sie Arbeitsblätter (0),
Verkettungsspalte erstellen (0),
Arbeitsblatteinstellungen (
1
Hat Spaltenüberschriften (1),
Anzahl der Zeilen in Kopfzeilen (1),
Kopfzeilen beginnen in Zeile (1),
Datenbeginn in Zeile (2),
Datenbeginn in Spalte (1),
Daten endet in Zeile (0),
Daten enden in Spalte (0),
Replizierte gespannte Reihen (1),
Replizierte gespannte Header (0),
Verborgene Zeilen unterdrücken (1),
Verborgene Spalten unterdrücken (1),
Leere Spalten unterdrücken (1),
Als Hierarchie behandeln (0),
Stapel mehrerer Serien (0),
Zellenfarben importieren (0),
Begrenzung der Spaltenerkennung (0),
Spaltentrennzeichenfolge ("-")
)
);
Neue Spalte ("Xindex", Formel (Decke (: Name ("X") /: Name ("DimensionX"))));
Neue Spalte ("Yindex", Formel (Etage (: Name ("Y")) / : Name ("dimensionY") )));
Zusammenfassung(
Gruppe(
: Name ("X"),
: Name ("Y"),
: Xindex,
: Yindex),
Std Dev (: Name ("Data1")),
Freq ("Keine"),
Gewicht ("keine")
)
);
Re: Öffnen Sie 25 Tabellen, jeweils eine Zusammenfassung und verketten Sie alle Übersichtstabellen.Im Code geben Sie an
dtConcat = dtSum;
Ich glaube, Ihr Denkprozess ist, dass Sie eine Kopie der Datentabelle erstellen, wenn Sie diese Anweisung verwenden. Infact, dtConcat und dtSum sind jedoch nur Variablen, die einen Zeiger auf eine Datentabelle enthalten. Wenn Sie angeben, dass dtConcat gleich dtSum ist, zeigen beide Variablen auf dieselbe Datentabelle.
Und dann spezifizieren Sie
close (dtSum,nosave);
Dies schließt die Datentabelle, auf die die Variable dtSum zeigt. Dies bedeutet, dass jetzt sowohl dtSum als auch dtConcat keine offene Datentabelle mehr haben, auf die sie zeigen.
Re: Öffnen Sie 25 Tabellen, jeweils eine Zusammenfassung und verketten Sie alle Übersichtstabellen.Hallo Uday,
Danke vielmals! Ich denke, Ihr Skript sagt mir, wie man Semikolon und Komma in if () verwendet: Komma wird verwendet, um Test und Ausdruck zu trennen, Semikolon wird verwendet, um mehrere Argumente in einem Ausdruck zu verknüpfen. Ist das richtig?
@txnelson
Hallo Jim,
Wenn ich mit der Verwendung von Komma und Semikolon zurecht bin, gehe ich davon aus, dass das folgende Skript durch Hinzufügen der hervorgehobenen Zeile funktionieren sollte.
Mit diesem neuen Skript habe ich jedoch nur dt und dtSum erhalten, wenn i = 2 (ich habe in allen Tabellen eine weitere Spalte hinzugefügt, um zu verfolgen, was "i" in der aktuellen Tabelle ist).
Ohne die hervorgehobene Zeile habe ich dt und dtSum, wenn i = 1 ist, und dtConcat, wenn die for () - Schleife ausgeführt wird, genau wie in meiner letzten Antwort an Sie beschrieben.
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: Öffnen Sie 25 Tabellen, jeweils eine Zusammenfassung und verketten Sie alle Übersichtstabellen.Hallo Jim,
Danke vielmals! Jetzt habe ich ein Gefühl dafür, Referenzen in JMP zu verwenden.
Noch eine Frage zur if () - Funktion. In der folgenden if () - Funktion, die ich in meinem Skript hinzugefügt habe, ist i == 1 test 1, dtConcat = dtSum ist expr1 und der Rest "dtConcat = dtConcat << ......." ist "else expr".
Meine Frage ist, wie kann ich in if () mehrere Ausdrücke für Test 1 hinzufügen? Im ersten Skript habe ich jetzt drei Tabellen ausgegeben,
1) dt wenn i = 1;
2) dtSum, wenn i = 1;
3) dtConcat, wenn die for () - Schleife abgeschlossen ist, was genau das ist, was ich brauche.
Jetzt möchte ich nur noch 1) und 2) berichten, nachdem ich das Skript ausgeführt habe, nur Bericht 3).
Ich habe das zweite Skript ausprobiert, aber es funktioniert nicht. Beide Skripts geben außerdem die Warnmeldung "Kann nicht an eine gesperrte oder abgeleitete Datentabelle angehängt werden".
if(i == 1,
dtConcat = dtSum,
dtConcat = dtConcat << Concatenate(dtSum,"Append to first table");close(dtSum,nosave);Close(dt,nosave)
);
Im zweiten Skript habe ich versucht, 1) wenn i == 1, dtSum dtConcat zuzuweisen und dtSum und dt zu schließen; 2) wenn i nicht gleich 1 ist, Concat dtSum bis dtConcat und dtSum und dt schließen. Es funktioniert jedoch nicht wie erwartet. Ich denke, das liegt daran, dass ich Komma und Semikolon falsch benutze?
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: Öffnen Sie 25 Tabellen, jeweils eine Zusammenfassung und verketten Sie alle Übersichtstabellen.Sie müssen lediglich einen Verkettungsschritt zu Ihrem Code hinzufügen ... etwas ähnliches
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: Öffnen Sie 25 Tabellen, jeweils eine Zusammenfassung und verketten Sie alle Übersichtstabellen. @Zihao .
Wenn Sie eine Datentabelle in JMP öffnen, können Sie einen Verweis darauf erfassen, indem Sie wie folgt vorgehen:
dt = Open(<YOUR custom="" path="">);</YOUR>
Jetzt enthält dt den Verweis auf die Datentabelle, an die Sie Nachrichten übergeben und Befehle ausgeben können. Nun können Sie Nachrichten an eine Datentabelle weiterleiten, wenn Sie den Namen der Datentabelle kennen
Data Table("Big Class") // This is an example AS für Ihre Frage nach der Verkettung der Datentabellen können Sie die folgende Vorlage verwenden:
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>