J'ai environ 95 fichiers csv avec différents noms de colonnes enregistrés dans le dossier de données principal et 95 sous-dossiers différents comme \data\dataset1\dataset1.csv, \data\dataset2\dataset2.csv, etc. Les colonnes id1 et id2 sont des variables communes à travers tous les fichiers. Je veux faire ce qui suit :
- Importez tous les 95 fichiers csv dans JMP (à l'aide de JMP Pro 16)
- Mettre à jour une valeur en fonction d'une condition sur les 95 fichiers : if (id1 = 'a001' then id2='b001')
- Enregistrez les fichiers csv mis à jour sous des noms différents dans les dossiers respectifs
La première ligne est le titre du fichier et ne peut pas être supprimée. Les noms de colonne/variable commencent à la ligne 2 et les données à la ligne 3.
J'ai réussi à importer tous les fichiers en :
dt : Importation de fichiers multiples (
< "C:\Données\"
),
< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < ) << Importer des données ;
Dans ce code, il n'y a pas de formule pour le début des noms de colonnes et des données.
Ensuite, j'ai essayé de mettre à jour une valeur en utilisant:
dt: subjid <<
:id1 << Définir la formule(
Si( :id2 == "a001", :id1 == "b001")
);
résultat, les valeurs antérieures à "a001" dans la colonne id1 sont supprimées et la valeur id1 de "a001" n'est pas mise à jour.
Je suis en stock dans cette phase et je ne peux même pas penser à la prochaine étape consistant à enregistrer des fichiers sous des noms différents dans leurs dossiers respectifs. Toute aide/orientation est grandement appréciée.
Merci
Je ne sais pas ce que votre JSL a fait :
dt: subjid << :id1 << Set Formula( If( :id2 == "a001", :id1 == "b001") )
L'opérateur << "envoyer" ne doit apparaître qu'une seule fois et la colonne à laquelle vous ajoutez la formule doit être du côté gauche. Ensuite, dans l'instruction if, il devrait y avoir une condition, suivie d'une valeur pour le cas vrai et d'une autre valeur pour le cas faux. Quelque chose comme ça
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
)
)
);
qui est destiné à créer une nouvelle colonne de formules de chats ou de chiens en fonction de la valeur dans le nom de la colonne. Si le nom est vide (manquant), "inconnu".
Ou, si votre objectif est d'écraser une ou plusieurs colonnes existantes en fonction des valeurs d'autres colonnes, une boucle explicite serait peut-être mieux qu'une colonne de formule :
foreachrow(dt,
if(
name == "DANNY", // a test with ==
name = "Dani"; // an assignment with =
sex = "F";
, /* else if */ name == "ROBERT",
name = "Roberta";
sex = "F";
);
);
( Si secrets peut aider à comprendre les virgules et les points-virgules. ) Cela laisse les lignes inchangées, à moins que le nom ne corresponde.
Remarquez à quel point les deux exemples sont différents :
Le premier exemple doit produire une réponse dans le if(...) qui sera affectée à la colonne de la formule. Si la colonne doit rester inchangée pour cette ligne, la valeur de la formule doit être la valeur d'origine de la ligne.Edit : désolé, c'est faux. Assurez-vous simplement que la colonne de formule produit une valeur pour chaque ligne.
Le deuxième exemple ne met à jour que les lignes et les colonnes qu'il choisit.
Étant donné que vous envisagez d'écrire un fichier CSV (pas d'enregistrer un fichier JMP), l'expression de formule que vous ajoutez à une colonne ne sera pas enregistrée (bien que les valeurs mises à jour de la formule le soient.) Je pense que vous voudrez peut-être quelque chose de plus comme le deuxième exemple.
Merci Craige. Comme vous l'avez mentionné, le deuxième exemple a bien fonctionné. Cependant, cela ne fonctionnait que si j'ouvrais ou importais un fichier CSV, mais ne fonctionnait pas lorsque j'importais plusieurs fichiers CSV. De plus, pourriez-vous me guider pour accomplir également la dernière étape d'écriture de csv dans leurs dossiers respectifs avec des noms de fichiers différents ?
Merci,
Helal
Merci, j'ai posté pour cela car cela semble généralement utile et certaines d'entre elles ne sont pas vraiment évidentes à faire.
Mise à jour de l'IMF CSV
Merci encore. C'est génial.
Helal