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 tous les fichiers. Je veux faire ce qui suit:
- Importez les 95 fichiers CSV dans JMP (à l'aide de JMP Pro 16)
- Mettez à jour une valeur basée sur une condition dans les 95 fichiers : if (id1 = 'a001' then id2='b001')
- Enregistrez les fichiers CSV mis à jour sous différents noms dans les dossiers respectifs
La première ligne correspond au titre du fichier et ne peut pas être supprimée. Les noms de colonnes/variables 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 indiquant où commencent les noms de colonnes et les 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 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/conseils est grandement appréciée.
Merci
Merci encore. C'est génial.
Hélal
Merci, j'ai publié un message à ce sujet car cela semble généralement utile et certaines d'entre elles ne sont pas vraiment évidentes.
CSV de mise à jour de l'IMF
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 seul CSV, mais ne fonctionnait pas lorsque j'importais plusieurs CSV. De plus, pourriez-vous s'il vous plaît me guider pour accomplir également la dernière étape consistant à réécrire le fichier CSV dans leurs dossiers respectifs avec des noms de fichiers différents ?
Merci,
Hélal
Je ne suis pas sûr de 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 dans laquelle vous ajoutez la formule doit être celle de gauche. Ensuite, dans l'instruction if, il doit 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 vise à créer une nouvelle colonne de formules de chats ou de chiens en fonction de la valeur du 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 meilleure 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 les secrets pourrait 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é à la colonne de 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 met uniquement à jour les lignes et les colonnes qu’il choisit.
Puisque vous envisagez d'écrire un fichier CSV (et non 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.