Annonce

Bienvenue sur le site support des ouvrages :
SAS - Introduction au décisionnel : méthode et maîtrise du langage
(1ère édition - épuisée)
SAS - Introduction pratique : du data management au reporting (2ème édition - épuisée)
SAS - Introduction au décisionnel : du data management au reporting (3ème édition - épuisée (hélas...))

la réponse à la question "mais où trouver la 3ème édition ?" est précisée ici


Retrouvez dans ce tiré à part, la préface écrite par Mouloud Dey, Directeur Business solutions et marchés émergents, SAS France,
l’introduction générale ainsi que le plan complet de l’ouvrage

#1 30-11-2016 08:15:41

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archive] Remplacer des lettres par des chiffres

Bonjour

Lundi dernier, je me mis à réfléchir au prochain sujet des beaux mercredis et j'étais en panne d'inspiration... alors je suis allé sur le forum SAS de developpez.net et je suis tombé sur ce post.

Fulgur avait deux problèmes : il ne pouvait pas calculer le reste de la division d'un chiffre par un autre parce que son chiffre était trop grand (et je lui ai proposé une solution devant normalement donner le bon résultat) et il souhaitait pouvoir, dans une chaîne de caractères contenant à la fois des lettres et des chiffres, remplacer les lettres par des chiffres :

J'aimerais remplacer dans un numéro d'IBAN (donc assez longue suite de chiffres et de lettres) les lettres par un nombre (A ==>10, B ==>11, etc).
exemple j'ai : iban= FR2180041026051921183X08642 qui deviendrais : 152721800410260519211833308642

m.brahim, intervenant régulier dans ce forum a proposé une solution :

Code:

data test;
input var1 $50.;
cards;
FR2180041026051921183X08642
;
run;
 
data test1 (drop =i j);
set test;
length var2 $100.;
retain var2;
var2="";
do i =1 to length(var1)+1;
  j=substr(var1,i,1);
        if j IN ('a','A') THEN j=10;
        else if j IN ('b','B') THEN j=11;
    else if j IN ('c','C') THEN j=12;
    else if j IN ('d','D') THEN j=13;
    else if j IN ('e','E') THEN j=14;
    else if j IN ('f','F') THEN j=15;
    else if j IN ('g','G') THEN j=16;
    else if j IN ('h','H') THEN j=17;
    else if j IN ('i','I') THEN j=18;
    else if j IN ('j','J') THEN j=19;
    else if j IN ('k','K') THEN j=20;
    else if j IN ('l','L') THEN j=21;
    else if j IN ('m','M') THEN j=22;
    else if j IN ('n','N') THEN j=23;
    else if j IN ('o','O') THEN j=24;
    else if j IN ('p','P') THEN j=25;
    else if j IN ('q','Q') THEN j=26;
        else if j IN ('r','R') THEN j=27;
    else if j IN ('s','S') THEN j=28;
    else if j IN ('t','T') THEN j=29;
    else if j IN ('u','U') THEN j=30;
    else if j IN ('v','V') THEN j=31;
    else if j IN ('w','W') THEN j=32;
    else if j IN ('x','X') THEN j=33;
    else if j IN ('y','Y') THEN j=34;
    else if j IN ('z','Z') THEN j=35;
var2=compress(catx('',var2,j));
end;
 
run;

hum..... on doit pouvoir faire mieux : moins long et plus efficace...

Amusez vous avec les données de la table créée par le programme suivant :

Code:

data test ;
input x $ ;
cards;
A124B145
B165C144
C478c558
a485z554
12a54A88
AAA12345
;

Vous devez arriver à :

Code:

Obs.         x

  1     1012411145
  2     1116512144
  3     1247812558
  4     1048535554
  5     1210541088
  6     10101012345

Le programme que j'ai rédigé pour obtenir ce résultat contient 13 instructions y compris une instruction DATA TEST2, une instruction SET TEST et une instruction RUN ;-)

Amusez vous bien et à la semaine prochaine !

update : en fait, 6 instructions suffisent...[b]

[b]Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet et les réponses aux questions posées.
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS