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 17-10-2018 11:29:49

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

ce maudit signe euro...

Bonjour,

Vous savez bien entendu que si vous avez une somme présentée en euros, alors vous utiliserez (si vous en avez la possibilité… les utilisateurs de SAS University Edition ne le peuvent pas (voir ici…) soit l'INFORMAT EUROw.d (si le séparateur décimal est le .), soit l'INFORMAT EUROXw.d (séparateur décimal virgule).

EUROw.d gèrera ainsi parfaitement le champ suivant : €123.45

certes…

mais les sommes en euros ne sont pas souvent présentées en France de cette façon… on voit plus souvent 123.45€ que €123.45 et là, l'INFORMAT EUROw.d ne fonctionnera pas… (essayez pour voir…).

Voici des données de l'exercice d'aujourd'hui :

Code:

1.25€ 1234 abcd €1.25
12€ 4567 efgh €12
123€ 56 ijkl €123
1233.85€ 887 mnop €1233.85

L'exercice est simple : complétez le programme, sans ajouter une seule instruction et créez ainsi une table contenant trois variables numériques (construites au moyen des deux premiers champs et du dernier) et une variable caractère, construite  au moyen du troisième champ :

Code:

DATA test;
   INFILE CARDS;
   INPUT …;
CARDS;
1.25€ 1234 abcd €1.25
12€ 4567 efgh €12
123€ 56 ijkl €123
1233.85€ 887 mnop €1233.85
;

Vous devez bien entendu obtenir la table suivante :

Code:

Obs.         x1     x2      x3          x4

  1        1.25    1234    abcd       1.25
  2       12.00    4567    efgh      12.00
  3      123.00      56    ijkl     123.00
  4     1233.85     887    mnop    1233.85

Amusez vous bien…

Hors ligne

 

#2 13-11-2018 12:44:08

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

Re: ce maudit signe euro...

je sais, nous ne sommes pas le mercredi... mais les vacances ont durées suffisamment longtemps... "plions" ce (très gentil) sujet des beaux mercredis avant d'en proposer un nouveau sans doute demain...

alors...

le problème, c'est le premier champ et le fait que l'INFORMAT EUROw.d (ou EUROXw.d) ne gère pas les sommes où le signe euro apparait à droite.

deux solutions sont possibles.

le signe € gène ? il suffit de "l'oublier"...

Code:

DATA test;
   INFILE CARDS DLM=" €";
   INPUT x1 x2 x3$ x4 ;
CARDS;
1.25€ 1234 abcd €1.25
12€ 4567 efgh €12
123€ 56 ijkl €123
1233.85€ 887 mnop €1233.85
;

et voilà !

cette première solution était celle que j'avais en tête... mais mes étudiants, eux, ont eu le réflexe qu'il fallait (et que je n'ai pas eu...).

seconde solution : trouver un autre INFORMAT capable de gérer les sommes en Euros.

et oui... c'était évident mais que voulez vous... avec l'âge, on s'enferme dans les certitudes et on n'a plus les bons réflexes...

et mes étudiants sont venus me voir avec, dans leur manche, l'INFORMAT NLMNYw.d

et bien il est extraordinaire cet INFORMAT... si si si... je vais revenir dessus ensuite...

la solution de mes étudiants :

Code:

DATA test;
   INFILE CARDS;
   INPUT x1 :nlmny. x2 x3 $ x4 :nlmny.;
CARDS;
1.25€ 1234 abcd €1.25
12€ 4567 efgh €12
123€ 56 ijkl €123
1233.85€ 887 mnop €1233.85
;

et ça marche !

Cet INFORMAT NLMNY., c'est un INFORMAT NLS et comme tous les INFORMAT NLS, il est TRES peu documenté...

voici la page de l'aide SAS consacrée à cet INFORMAT :

http://documentation.sas.com/?docsetId= … ;locale=en

on n'y apprend pas grand chose...

Cet INFORMAT fonctionne différemment en fonction de la valeur de l'option globale LOCALE=
l'INFORMAT équivalent qui ne dépend pas de la valeur de LOCALE= est l'INFORMAT NLMNLEURw.d :
http://documentation.sas.com/?docsetId= … ;locale=en

et on n'apprend rien non plus....

il ne nous reste plus qu'à tester les capacités de cet INFORMAT... et c'est là où on découvre des trucs tout à fait sympathiques...

Code:

data test ;
input somme nlmny10.;
cards;
1 234.56
1 234,56
€1 234,56
€1 234.56
1234.56€
1234,56€
1 234.56€
1 234,56€
;

tous ces champs ont été traités correctement par cet INFORMAT : signe euro avant ou après, séparateur décimal virgule ou point, séparateur millier espace (mais pas autre chose) : ça marche !

en fait, ça marche tellement bien qu'on se dit que plus jamais on utilisera EUROw.d e EUROXw.d !

et ce n'est pas tout !

la cerise sur le gâteau

j'ai très souvent râlé ici sur le fait qu'avec SAS University Edition, EUROw.d et EUROXw.d ne permettaient pas de traiter les champs contenant des sommes en euros.

devinez quoi ?

NLMNYw.d, lui fonctionne parfaitement et les champs contenant des sommes en euros sont parfaitement transformés en modalité de variables SAS !

J'aime bien ces sujets de beaux mercredis.... je me dis certes qu'ils doivent vous permettre de progresser dans votre usage de SAS mais ce qui est bien aussi, c'est qu'ils me permettent, de temps en temps, de découvrir encore de nouvelles choses (après plus de 25 ans passées avec SAS...)

à bientôt pour un nouveau sujet des beaux mercredis

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS