Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

Uniformisation syntaxe variable texte

2 participants

Aller en bas

Uniformisation syntaxe variable texte Empty Uniformisation syntaxe variable texte

Message par Mac_Leod Jeu 28 Jan 2016 - 11:16

Bonjour,

Je dispose d'un fichier texte dans lequel une variable peut prendre deux observations (disons "truc" et "machin"). Sachant que de nombreux traitements sont réalisés sur ce fichier, il faudrait impérativement que ces deux observations respectent une syntaxe unique.

L'idée est ici de procéder ainsi :
Code:
if upcase(substr(var,1,1)) = "T" then var = "TRUC"; else
if upcase(substr(var,1,1)) = "M" then var = "MACHIN";
else var = "ERROR";

Maintenant, je me demande s'il y aurait une possibilité d'optimiser la chose en procédant d'une autre façon ou en ajoutant des conditions.
Ici par exemple, dans le cas d'une erreur de frappe "tmachin", la variable prendra la forme "TRUC" et ce serait assez embêtant.


Merci,
Halpness.

Mac_Leod

Nombre de messages : 28
Date d'inscription : 25/06/2015

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par niaboc Jeu 28 Jan 2016 - 14:03

Bonjour,

peut-être que tu pourrais utiliser un truc, un machin, dans ce genre là. L'idée est de comparer le nombre de lettres en commun relativement au nombre de lettres dans chacune des deux comparaisons. J'ai mis quelques tests pour te montrer ce que ça donne.

Code:
data a;
 length var $ 10;
 input var $;
 cards;
 truc
 machin
 tmachin
 mtruc
 Niaboc
 Truk
 Mac_Leod
 Duncan
 test
 matric
 machintruc
 ;
run;

data a;
 set a;
 if countc(var,"MACHIN",'I T')/length("MACHIN")>countc(var,"TRUC",'I T')/length("TRUC") then do;
 resultat="MACHIN";
 end;
 else do;
 resultat="TRUC";
 end;
run;

proc print data=a noobs;
 var var resultat;
run;

Dis-moi si ça te va

Niaboc
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par Mac_Leod Jeu 28 Jan 2016 - 15:38

Hello,

Merci pour cette solution qui me convient totalement !
Evidemment, elle reste un peu aléatoire sur certaines chaînes de caractères mais mes observations ne devraient pas prendre de valeurs aussi extrêmes Smile

Maintenant, je me pose une question, comme pourrait - on gérer le soucis dans le cas de noms de variables quasi identique (nomvar1, nomvar2) par exemple, une faute de frappe, l'oubli d'un caractère, etc ... ou simplement le fait d'avoir une égalité au niveau des tailles des 2 côtés qui renverrait tout dans le else de fin ^^

Mac_Leod

Nombre de messages : 28
Date d'inscription : 25/06/2015

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par niaboc Jeu 28 Jan 2016 - 15:52

Mac_Leod a écrit:
Maintenant, je me pose une question, comme pourrait - on gérer le soucis dans le cas de noms de variables quasi identique (nomvar1, nomvar2) par exemple, une faute de frappe, l'oubli d'un caractère, etc ... ou simplement le fait d'avoir une égalité au niveau des tailles des 2 côtés qui renverrait tout dans le else de fin ^^

Il faudrait avoir des exemples concrets pour se rendre compte vraiment de ce qu'il faut faire. Si tu peux en faire?
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par Mac_Leod Jeu 28 Jan 2016 - 16:38

Dans le cas d'anagrammes par exemple (romain, marion).

Voilà ce que renverrait le code :
Code:
Obs     var      resultat

 1     marion     MARION
 2     romain     MARION
 3     marino     MARION
 4     romian     MARION
 5     ormain     MARION
 6     maron      MARION
 7     marron     MARION
 8     romin      MARION

Mac_Leod

Nombre de messages : 28
Date d'inscription : 25/06/2015

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par niaboc Ven 29 Jan 2016 - 15:36

Ouais dans ce cas ça peut-être très chiant.
Il faudrait calculer une probabilité que le mot soit identique. Ca se complique beaucoup... en cherchant un peu je n'ai pas trouvé de fonction qui permette de faire ça directement.

Tu peux rajouter des conditions, si le mot apparaît dans la chaîne de caractère etc. pour l'instant si tu veux un truc plus complet (même si le cas d'anagramme va rester un cas très rare j'imagine?). Sinon il faudrait faire des recherches pour faire un beau code...

Niaboc
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par Mac_Leod Ven 29 Jan 2016 - 23:18

Pas de soucis, j'imagine bien qu'il faudrait un code plus poussée dans ce genre de cas.

Il s'agissait d'un simple exemple me permettant aussi à moi de pouvoir remettre en question l'utilisation de cette fonction dans certains cas.

Merci en tout cas pour cette aide Smile

Mac_Leod

Nombre de messages : 28
Date d'inscription : 25/06/2015

Revenir en haut Aller en bas

Uniformisation syntaxe variable texte Empty Re: Uniformisation syntaxe variable texte

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum