Ich habe ungefähr 95 CSV-Dateien mit unterschiedlichen Spaltennamen im Hauptdatenordner und 95 verschiedenen Unterordnern wie \data\dataset1\dataset1.csv, \data\dataset2\dataset2.csv usw. gespeichert. Die Spalten id1 und id2 sind gemeinsame Variablen alle Dateien. Ich möchte Folgendes tun:
- Alle 95 CSV-Dateien in JMP importieren (mit JMP Pro 16)
- Aktualisieren Sie einen Wert basierend auf einer Bedingung in allen 95 Dateien: if (id1 = 'a001' then id2='b001')
- Speichern Sie aktualisierte CSV-Dateien unter verschiedenen Namen in den jeweiligen Ordnern
Die erste Zeile ist der Dateititel und kann nicht entfernt werden. Spalten-/Variablennamen beginnen in Zeile 2 und Daten in Zeile 3.
Ich habe es geschafft, alle Dateien zu importieren:
dt: Mehrere Dateiimport(
< „C:\Daten\“
),
< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < ) << Daten importieren;
In diesem Code gibt es keine Formel dafür, wo Spaltennamen und Daten beginnen.
Dann habe ich versucht, einen Wert zu aktualisieren, indem ich Folgendes verwendet habe:
dt: subjid <<
:id1 << Formel festlegen(
If( :id2 == "a001", :id1 == "b001")
);
Infolgedessen werden Werte vor „a001“ in der Spalte „id1“ gelöscht und der id1-Wert von „a001“ wird nicht aktualisiert.
Ich bin in dieser Phase und kann mir nicht einmal vorstellen, als nächstes Dateien unter verschiedenen Namen in ihren jeweiligen Ordnern zu speichern. Jede Hilfe/Anleitung wird sehr geschätzt.
Danke
Danke nochmal. Das ist fantastisch.
Helal
Vielen Dank, ich habe einen Beitrag dazu verfasst, da es im Allgemeinen nützlich erscheint und einiges davon nicht wirklich offensichtlich ist, wie man es macht.
MFI-Update CSV
Danke, Craige. Wie Sie erwähnt haben, hat das zweite Beispiel gut funktioniert. Allerdings funktionierte es nur, wenn ich eine CSV-Datei öffne oder importiere, aber nicht, wenn ich mehrere CSVs importierte. Könnten Sie mich außerdem bitte anleiten, auch den letzten Schritt des Zurückschreibens der CSV-Dateien in die jeweiligen Ordner mit unterschiedlichen Dateinamen durchzuführen?
Danke schön,
Helal
Ich bin nicht sicher, was Ihr JSL getan hat:
dt: subjid << :id1 << Set Formula( If( :id2 == "a001", :id1 == "b001") )
Der Operator << „senden“ sollte nur einmal vorkommen und die Spalte, zu der Sie die Formel hinzufügen, sollte sich auf der linken Seite befinden. Dann sollte es in der if-Anweisung eine Bedingung geben, gefolgt von einem Wert für den wahren Fall und einem weiteren Wert für den falschen Fall. Etwas wie das
dt << New Column( "likes",
"character",
formula( If(
Is Missing( name ), // first test
"unknown", // if first test is true
name == "KATIE", // second test
"cats", // if second test is true
"dogs" // if second test is false
)
)
);
Dies soll abhängig vom Wert im Spaltennamen eine neue Formelspalte für Katzen oder Hunde erstellen. Wenn der Name leer ist (fehlt), „unbekannt“.
Oder wenn Ihr Ziel darin besteht, eine oder mehrere vorhandene Spalten basierend auf Werten anderer Spalten zu überschreiben, wäre möglicherweise eine explizite Schleife besser als eine Formelspalte:
foreachrow(dt,
if(
name == "DANNY", // a test with ==
name = "Dani"; // an assignment with =
sex = "F";
, /* else if */ name == "ROBERT",
name = "Roberta";
sex = "F";
);
);
( Wenn Geheimnisse könnte helfen, die Kommas und Semikolons zu verstehen. ) Dadurch bleiben die Zeilen unverändert, es sei denn, der Name stimmt überein.
Beachten Sie, wie unterschiedlich die beiden Beispiele sind:
Das erste Beispiel muss eine Antwort in if(...) erzeugen, die der Spalte der Formel zugewiesen wird. Wenn die Spalte für diese Zeile unverändert bleiben soll, muss der Wert der Formel der ursprüngliche Wert für die Zeile sein.Edit: Entschuldigung, das ist falsch. Stellen Sie einfach sicher, dass die Formelspalte für jede Zeile einen Wert erzeugt.
Das zweite Beispiel aktualisiert nur die ausgewählten Zeilen und Spalten.
Da Sie vorhaben, eine CSV-Datei zu schreiben (keine JMP-Datei zu speichern), wird der Formelausdruck, den Sie einer Spalte hinzufügen, nicht gespeichert (die aktualisierten Werte aus der Formel jedoch schon). Ich denke, Sie möchten vielleicht etwas Ähnliches zweites Beispiel.