Ich habe ungefähr 95 CSV-Dateien mit verschiedenen Spaltennamen, die im Hauptdatenordner und 95 verschiedenen Unterordnern wie \data\dataset1\dataset1.csv, \data\dataset2\dataset2.csv usw. gespeichert sind alle Dateien. Ich möchte Folgendes tun:
- Importieren Sie alle 95 CSV-Dateien in JMP (mit JMP Pro 16)
- Aktualisieren Sie einen Wert basierend auf einer Bedingung für alle 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, indem ich:
dt: Import mehrerer Dateien (
< "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 setzen(
If( :id2 == "a001", :id1 == "b001")
);
Im Ergebnis werden Werte vor "a001" in der Spalte id1 gelöscht und der id1-Wert von "a001" wird nicht aktualisiert.
Ich bin in dieser Phase auf Lager und kann nicht einmal an die nächste Stufe des Speicherns von Dateien unter verschiedenen Namen in ihren jeweiligen Ordnern denken. Jede Hilfe/Anleitung wird sehr geschätzt.
Dankeschön
Ich bin mir nicht sicher, was Ihre JSL getan hat:
dt: subjid << :id1 << Set Formula( If( :id2 == "a001", :id1 == "b001") )
Der Operator << "senden" sollte nur einmal vorkommen und die Spalte, der Sie die Formel hinzufügen, sollte sich auf der linken Seite befinden. Dann sollte in der if-Anweisung eine Bedingung stehen, 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
)
)
);
die dazu gedacht ist, eine neue Formelspalte von Katzen oder Hunden abhängig vom Wert in Spaltenname zu erstellen. Wenn Name leer ist (fehlt), "unbekannt".
Oder, wenn Ihr Ziel darin besteht, eine vorhandene(n) Spalte(n) basierend auf Werten anderer Spalten zu überschreiben, wäre eine explizite Schleife vielleicht 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(...) liefern, 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 nur sicher, dass die Formelspalte für jede Zeile einen Wert liefert.
Das zweite Beispiel aktualisiert nur die ausgewählten Zeilen und Spalten.
Da Sie beabsichtigen, eine CSV-Datei zu schreiben (keine JMP-Datei zu speichern), wird der Formelausdruck, den Sie einer Spalte hinzufügen, nicht gespeichert (obwohl die aktualisierten Werte aus der Formel dies sein werden). Ich denke, Sie möchten vielleicht etwas mehr wie das zweites Beispiel.
Danke Craige. Wie Sie bereits erwähnt haben, hat das zweite Beispiel gut funktioniert. Es funktionierte jedoch nur, wenn ich eine CSV-Datei öffne oder importiere, aber nicht, wenn ich mehrere CSV-Dateien importiert habe. Würden Sie mich bitte auch anleiten, die letzte Phase des Schreibens von CSV in ihre jeweiligen Ordner mit unterschiedlichen Dateinamen durchzuführen?
Dankeschön,
Helal
Danke, habe einen Beitrag dafür gemacht, weil es im Allgemeinen nützlich erscheint und einiges davon nicht wirklich offensichtlich ist.
MFI-Update-CSV
Danke nochmal. Das ist fantastisch.
Helal