Numérisation d'une descriptionSalut tout le monde!
Je voudrais écrire une formule pour analyser Column, Description, ramasser diverses chaînes de texte et renvoyer un "OUI" si l’une d’elles est présente et "NON" si non. Les chaînes de texte d'intérêt ne constituent qu'une partie des données de la colonne Description. Je suis intéressé par toutes les formes de la même chose, "40 oz", "40 oz", etc. Je veux retourner OUI si l'un d'entre eux est présent.
J'ai écrit la formule suivante,
If(
N Rows/*###*/(Contains(
{"40 oz" ; "40 ounce" ; "40oz" ; "40 Ounce" ; "40 Oz" ;
"40 OZ"},
Empty()
)) > 0,
"Yes",
"NO"
)
Cependant, JMP renvoie NON pour toutes les lignes, même celles où je peux voir les descriptions que j'ai capturées ci-dessus. Y a-t-il un moyen d'utiliser "LOCATE" qui serait mieux pour cela?
Merci!
Re: Scanner une descriptionJe vous remercie!
Re: Scanner une descriptionJe vous remercie. Je n'ai pas entré la commande ou correctement auparavant.
Re: Scanner une description @llawless
J'ai utilisé le même script sur votre table de données et voici les résultats.

dt = Current Data Table(); // Keep your data table open.
dt << New Column("Test",Character,Continuous,Formula(If( !Is Missing( Regex( Char( :Description ), "oz" ) ) | !Is Missing( Regex( Char( :Description ), "ounce" ) ),:Description,"No Match"))); Re: Scanner une descriptionAutrement:
New Column( "40 oz",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( N Items( Regex Match( :Description, "40.*[oO]([zZ]|unce)" ) ) > 1 ),
Value Labels( {0 = "No", 1 = "Yes"} ),
Use Value Labels( 1 ),
Set Display Width( 57 )
);Re: Scanner une descriptionJe crois avoir eu raison dans mon commentaire précédent. Votre formule doit avoir la fonction "Contains ()" complète après chaque instruction "OU". J'ai joint ce que j'ai suggéré et il semble faire ce que vous voulez.
Re: Scanner une descriptionJ'apprécie vraiment votre aide!
J'ai masqué des données dans le fichier joint. Mon jeu de données réel comporte beaucoup plus de lignes et de descriptions plus longues, mais j'espère que cela suffira pour vous donner une idée.
Re: Scanner une description @llawless ,
J'ai lu et relu votre question plusieurs fois, vous êtes peut-être après cela.
C’est essentiellement la même logique que précédemment, mais je l’ai utilisée dans une formule de colonne. Faites-moi savoir si cela aide.
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
DesNames = List();
dt << New Column("Test",Character,Continuous,Formula(If( !Is Missing( Regex( Char( :name ), "AL" ) ) | !Is Missing( Regex( Char( :name ), "MA" ) ),:name,"No Match"))); Re: Scanner une description @llawless ,
Je peux vous aider davantage si vous publiez un échantillon de données. Une fois, n’est pas disponible, laissez-moi vous expliquer ce que je fais au moyen d’un exemple de jeu de données dans JMP. Veuillez partager les exemples de données si cela ne répond pas à votre question.
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
DesNames = List();
NamesList = dt:name << get Values;
for(i = 1 , i <= N Items(NamesList), i++,
If(!IsMissing(Regex(Char(NamesList[i]),"AL"))|!IsMissing(Regex(Char(NamesList[i]),"MA")),
Insert Into(DesNames,NamesList[i]);
);
);
Show(DesNames);
Re: Scanner une descriptionOui, j'ai essayé et la colonne n'a renvoyé aucune donnée.
Re: Scanner une description @llawless ,
dt = Current Data Table();
Col = Column(dt,1); // Replace 1 with the column number of your data table with the data of interest
Vals = Col << Get Values;
DesList = List();
for(i = 1 , i <= N Items(Vals), i++,
If(!IsMissing(Regex(Char(Vals[i]),"oz")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"Oz")),
Insert Into(DesList,Vals[i]);
);
);
Show(DesList); Cela visait à traiter le cas où vous numérisez des lignes. Avez-vous essayé cela?
Re: Scanner une descriptionHmm, je ne prends pas les descriptions. Le code que vous avez fourni sert-il uniquement à analyser les noms de colonne? Je veux analyser les lignes sous une colonne connue.
Re: Scanner une descriptiondt = Current Data Table();
ColNames = dt << Get Column Names("string");
DesList = List();
for(i = 1 , i <= N Items(ColNames ), i++,
If(!IsMissing(Regex(Char(ColNames [i]),"oz")) | !IsMissing(Regex(Char(ColNames [i]),"ounce")) | !IsMissing(Regex(Char(ColNames [i]),"ounce")) | !IsMissing(Regex(Char(ColNames [i]),"Oz")),
Insert Into(DesList,ColNames [i]);
);
);
Show(DesList); Vous pouvez extraire les noms de colonne à l'aide de la fonction Obtenir les noms de colonne et utiliser le code que j'ai fourni.
Re: Scanner une descriptionJe peux me tromper, mais n'avez-vous pas besoin d'une instruction OR dans la fonction contient? Si j'ai raison, l'absence de OU recherche uniquement la chaîne complète d'entrées et ne les trouve pas toutes en même temps. Mais je peux me tromper.
Re: Scanner une descriptionMerci!
Ce que je voulais dire était le nom de la colonne est La description. Dans cette colonne, je veux sélectionner les lignes qui ont les chaînes de texte d'intérêt (par exemple, 40 oz).
Re: Scanner une description @llawless ,
Bonjour, laissez-moi vous donner un coup de feu. Je suppose que les données sont en lignes:
dt = Current Data Table();
Col = Column(dt,1);
Vals = Col << Get Values;
DesList = List();
for(i = 1 , i <= N Items(Vals), i++,
If(!IsMissing(Regex(Char(Vals[i]),"oz")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"Oz")),
Insert Into(DesList,Vals[i]);
);
);
Show(DesList);
S'il s'agissait de noms de colonnes, vous pouvez simplement les remplacer dans le code ci-dessus et les utiliser à la place.
ColNames = dt << Get Column Names("String");
Ce que je ne comprends pas à propos de votre question est que les données sont dans "Description de la colonne" - voulez-vous dire Nom de colonne?
J'espère que cela vous aidera. Sinon, pouvez-vous clarifier votre question ou fournir des exemples de données?