IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Formalisation de numeros de telephone au format français


Sujet :

SAS Base

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 604
    Points
    4 604
    Par défaut Formalisation de numeros de telephone au format français
    Bonsoir,

    Sur une base SAS de plusieurs milliers de lignes je dois formaliser certains numéros de téléphones. Ici l'analyse porte uniquement sur des chaines <12 strictement. Les chaines >12 sont des numéros étrangers ou d'autres traitement qui sont vues à part. Les chaines de taille 8 et moins sont purgées et mise à vides.

    Au final je chercher à récupérer des numéros au format 01XXYYXXYY.

    J'ai ceci comme conditions , j'ai déjà du code.

    Merci de m'aiguiller pour rendre opérationnel les cas suivants :

    Code sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    proc sql /* taille chaine <9 */
    UPDATE matable
    SET num_tel = 'NR'
    where LENGTH(num_tel)<9 ;
    run ;
     
    proc sql /* taille chaine =9 et commence par 0 */
    UPDATE matable
    SET num_tel = 'NR'
    where LENGTH(num_tel)=9
    and num_tel LIKE0%’ ;
    run ;
     
    proc sql /* taille chaine =9 et commence par 1 à 9 */
    UPDATE matable
    SET num_tel = '0'||num_tel
    where LENGTH(num_tel)=9
    and ( num_tel LIKE1%’ 
    OR num_tel LIKE2%’
    OR num_tel LIKE3%’
    OR num_tel LIKE4%’
    OR num_tel LIKE5%’
    OR num_tel LIKE6%’
    OR num_tel LIKE7%’
    OR num_tel LIKE8%’
    OR num_tel LIKE9%’) ;
    run ;
     
    data matable; /*  taille chaine =10 et commence par 1 à 9 , ici faute de frappe avec chiffre en double*/
    set matable
      if COUNTC(num_tel)=10 
      and char(num_tel,1)<>'0' ;
      num_tel=tranwrd(num_tel,'00','0');
      num_tel=tranwrd(num_tel,'11','1');
      num_tel=tranwrd(num_tel,'22','2');
      num_tel=tranwrd(num_tel,'33','3');
      num_tel=tranwrd(num_tel,'44','4');
      num_tel=tranwrd(num_tel,'55','5');
      num_tel=tranwrd(num_tel,'66','6');
      num_tel=tranwrd(num_tel,'77','7');
      num_tel=tranwrd(num_tel,'88','8');
      num_tel=tranwrd(num_tel,'99','9');
    /* au final si il y a plus de 2 doublons de chiffre la longueur de chaine est reduite et passe à 8 et moins donc on va mettre NR , sinon si la longueur de chaine passe à 9 on concatene un 0 devant la chaine  */
    run;
     
    proc sql /* taille chaine =11 et commence par 1 à 9 */
    UPDATE matable
    SET num_tel = 'NR'
    where LENGTH(num_tel)=11
    and ( num_tel LIKE1%’ 
    OR num_tel LIKE2%’
    OR num_tel LIKE3%’
    OR num_tel LIKE4%’
    OR num_tel LIKE5%’
    OR num_tel LIKE6%’
    OR num_tel LIKE7%’
    OR num_tel LIKE8%’
    OR num_tel LIKE9%’) ;
     
    run ;
     
    data matable; /*  taille chaine =11 et commence par 0 , ici faute de frappe avec chiffre en double*/
    set matable
      if COUNTC(num_tel)=11 
      and char(num_tel,1)='0' ;
      num_tel=tranwrd(num_tel,'00','0');
      num_tel=tranwrd(num_tel,'11','1');
      num_tel=tranwrd(num_tel,'22','2');
      num_tel=tranwrd(num_tel,'33','3');
      num_tel=tranwrd(num_tel,'44','4');
      num_tel=tranwrd(num_tel,'55','5');
      num_tel=tranwrd(num_tel,'66','6');
      num_tel=tranwrd(num_tel,'77','7');
      num_tel=tranwrd(num_tel,'88','8');
      num_tel=tranwrd(num_tel,'99','9');
    /* au final si il y a plus de 2 doublons de chiffre la longueur de chaine est reduite et passe à 9 et moins donc on va mettre NR , sinon si la longueur de chaine passe à 10 garder la chaine a 10  */
    run;
     
     
    proc sql; /*  taille chaine =11 et commence par 00 , ici faute de frappe avec chiffre en double debut*/
    UPDATE matable
    SET num_tel = right(num_tel,10)
    where LENGTH(num_tel)=11
    and  num_tel LIKE00%’ ;
    /* au final les 00 du debut deviennent 0*/
    run;
     
    proc sql; /*  taille chaine 0et commence par 00 , ici faute de frappe avec chiffre en double debut*/
    UPDATE matable
    SET num_tel = 'NR'
    where LENGTH(num_tel)=10
    and  num_tel LIKE00%’ ;
    /* au final on met NR */
    run;

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    Je ne suis pas trop capable de rentrer dans ton code SQL... Après vérification il ne semble pas tourner sur SAS (ouf car j'ai eu comme un coup de "chaud" en voyant ton code ).
    Si tu cherche à reconnaitre des motifs pouvant correspondre à des numéro de téléphone, le plus simple dans cet exercice est d'utiliser des REGEX (regular expression) via PRXPARSE et PRXMATCH par exemple, mais peut-être ai-je mal compris ton problème.

    Quels sont les motifs (de numéro de téléphone) que tu souhaite reconnaitre ?

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 604
    Points
    4 604
    Par défaut
    Bonsoir ,

    Le but étant d'avoir une méthode de traking pour "reformaliser" les numéros . Pour certains saisis de manières "fantaisiste". exemple "00336XXXXXXXX" au lieu de "06XXXXXXXX".

    Il y a d'un côté de la saisie "opérateur" depuis le plateau commercial donc certains numéros sont à retranscrire car vite tapés . Egalement avoir certains formats lors de rootage SMS à destination du client ou du fournisseur.

    PS : dans le code au dessus il y a aussi du "data set" , ce n'est pas tout au format SQL sas

  4. #4
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour, je ne suis personnellement pas convaincu que dans le cas où tu as 9 chiffres dont un répété que la règle "supprimer le chiffre en doublon" te permette au final de retomber sur le bon numéro.
    Si faute de frappe il y a dans un numéro de téléphone, j'aurais plutôt tendance à dire "téléphone mal saisi, numéro de téléphone perdu", car mis à part pour le tout début de chaine, il me semble illusoire d'avoir un quelconque indice de véracité sur le chiffre N+1 en fonction du chiffre N.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 604
    Points
    4 604
    Par défaut
    Bonsoir ,

    J'ai établi des règles de gestion sur la reformalisation d'une BDD téléphonique , malheureusement tous les cas que j'évoque ne sont pas valide.

    Exemple avoir une suite de 11 chiffres commencant par 0 . Je suppose le 2 nombres identiques qui se suivent en faute de frappe exemple 01234556789 au lieu de 0123456789. Mais si j'ai ceci 01234445567 , je ne peux pas identifier le chiffre doublon.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. format numero de telephone
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/10/2008, 18h10
  2. [Struts] validation d'un float au format français
    Par mister_ouille dans le forum Struts 1
    Réponses: 3
    Dernier message: 17/10/2005, 10h56
  3. format du numero de telephone...?
    Par bris dans le forum Débuter
    Réponses: 2
    Dernier message: 20/09/2005, 12h15
  4. Insérer une date au format français dans un champ
    Par EpOnYmE187 dans le forum Installation
    Réponses: 2
    Dernier message: 14/06/2005, 13h09
  5. Date format français
    Par coca dans le forum XMLRAD
    Réponses: 2
    Dernier message: 17/11/2003, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo