h1

La fonction CATQ pour concaténer tout en ajoutant des guillemets avec SAS 9.3 et plus

février 23, 2019

La fonction catq est disponible depuis SAS 9.3. La particularité de cette fonction est de pouvoir ajouter des guillemets simples (single quotes) ou des guillemets doubles (double quotes) autour des différentes valeurs à concaténer.

Un des avantages de la fonction catq est de pouvoir travailler autant avec les valeurs numériques qu’avec les valeurs caractères. On fera néanmoins attention aux valeurs infinies comme 1/3.

Exemple 1

data catq;
    x=catq('1' ,'ABC ',2," EFG",' ');
    put x=;

    x=catq('2' ,'ABC ',2," EFG",' ');
    put x=;
run;

Dans ce premier exemple, on voit que le 1 permet d’ajouter des guillemets simples alors que le deux permet d’ajouter des guillemets doubles. Dans le cas présent, seules les valeurs caractères ont des guillemets.

x='ABC ' 2 ' EFG' ' '
 x="ABC " 2 " EFG" " "

Exemple 2

data catq;
   x=catq('1'     ,'ABC ',2," EFG",' '); 
   put x=;

   x=catq('1a'    ,'ABC ',2," EFG",' '); 
   put x=;
 
   x=catq('1c'    ,'ABC ',2," EFG",' '); 
   put x=;
   
   x=catq('1ac'    ,'ABC ',2," EFG",' '); 
   put x=;
run;

Dans ce second exemple, on voit que la lettre a pour que toutes les valeurs soient entre guillemets, y compris les valeurs numériques.

Si on souhaite ajouter la virgule (comma) entre les différentes valeurs à concaténer avec la lettre c, il faudra impérativement garder la lettre a.

 x='ABC ' 2 ' EFG' ' '
 x='ABC ' '2' ' EFG' ' '
 x=ABC ,2, EFG,
 x='ABC ','2',' EFG',' '

Exemple 3

Une autre manière d’ajouter la virgule comme séparateur entre les valeurs est d’utiliser la lettre d (delimiter) et de préciser le séparateur dans le second argument de la fonction ; cet argument est optionnel et ne servira qu’avec la lettre d.

data catq;
   x=catq('c','ABC ',2," EFG",' '); 
   put x=;

   x=catq('d',',','ABC ',2," EFG",' '); 
   put x= /;
  
   x=catq('1ac','ABC ',2," EFG",' '); 
   put x=;

   x=catq('1ad',',','ABC ',2," EFG",' '); 
   put x=;
run;

Nous obtenons le même résultat qu’on utilise c ou d avec l’argument optionnel. La lettre d offre juste plus de possibilités.

 x=ABC ,2, EFG,
 x=ABC ,2, EFG,
 x='ABC ','2',' EFG',' '
 x='ABC ','2',' EFG',' '

Exemple 4

Lorsqu’on n’a pas besoin des guillemets autour des différentes valeurs à concaténer, la fonction catq se rapproche de la fonction catx.

data catq;  
   x=catq('d',',','ABC ',2," EFG",' '); 
   put x=/;
   
   x=catq('ds',',','ABC ',2," EFG",' '); 
   put x=;
   
   x=catx(',','ABC ',2," EFG",' ');
   put x=/;
   
   x=catq('dt',',','ABC ',2," EFG",' '); 
   put x=;
run;

Pour enlever les leading et trailing blanks avec la fonction catq, on ajoutera la lettre s (strip).
Pour uniquement enlever les trailing blanks avec la fonction catq, on ajoutera la lettre t (trim).

 x=ABC ,2, EFG,
 x=ABC,2,EFG
 x=ABC,2,EFG
 x=ABC,2, EFG

Aller plus loin

La fonction dispose d’autres arguments pour travailler avec les literals (lettre n), pour afficher les valeurs en hexadecimal (lettre x), pour utiliser une tabulation horizontale comme séparateur (lettre h), etc.
Toutes les informations sont disponibles dans la documentation en ligne : http://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm

 

À lire aussi


	
h1

SAS : obtenez des couleurs sympas dans vos rapports en 5 minutes

août 20, 2018

h1

11 Astuces SAS – PDF à télécharger

mars 6, 2018

J’ai écris pour la conférence KSFE qui se déroule chaque année début mars dans une ville différente d’Allemagne un PDF contenant 11 astuces de programmation SAS. Vous pouvez le télécharger sur cette page : https://xxformat.com/blog/ksfe-2018/

h1

SAS Support : quelle version de SAS utilisez-vous ? combien de bits sur votre ordinateur ?

mars 6, 2018

L’article est disponible sur http://www.programmeur-pro.com/sas-support/

h1

Le duo transtrn-trimn comme alternative à tranwrd

novembre 20, 2015

La fonction transtrn en combinaison avec la fonction trimn vous permettre d’enlever un mot sans laisser un blanc.

J’ai mis à jour l’article 5 fonctions pour enlever les blancs sur programmeur-pro.com. Découvrez la syntaxe dans la section 4 de l’article.

h1

A partir de quelle lettre y a-t-il une différence : la fonction compare

mai 25, 2015

La fonction COMPARE retourne le nombre zéro si aucune différence n’existe entre deux chaînes de caractères. Sinon elle retourne la position la position du premier caractère différent.

Dans l’exemple ci-dessous, deux datasets sont créés. Une fois combinés, on s’intéresse à la différence entre la variable LABEL_ONE du premier dataset et la variable LABEL_TWO du second dataset. La première différence a lieu sur la deuxième lettre. La variable DIFF prend donc la valeur 2.

data one;
   length start $8 label_one $8;
   start='1';
   label_one='ABC';
run;

data two;
   length start $8 label_two $8;
   start='1';
   label_two='AbC';
run;

data diff;
   merge one two;
   by start;
run;

data diff;
   set diff;
   diff=compare(label_one,label_two);
run;

proc print data=diff;
run;

Vous pouvez ajouter un troisième paramètre dans la fonction si vous ne voulez pas tenir compte des différences de majuscule, de blancs de début de chaîne de caractère,…

Dans quel cas utiliser cette fonction ? Si vous réalisez un rapport listant la différence entre deux valeurs pour pouvoir ensuite les corriger, vous pouvez utiliser cette fonction pour préciser à partir de quel moment la couleur devra changer.

Pour en savoir plus : la documentation SAS 9.2

h1

Retrouver la semaine avec la fonction WEEK

septembre 28, 2014

A partir d’une date SAS, le numéro de la semaine est extrait avec la fonction WEEK. Cette fonction est composée de deux paramètres: la date SAS obligatoire et une lettre entre guillemets (‘U’,’V’ ou ‘W’) facultative. Ne pas mettre de lettre revient à choisir l’option ‘U’.

Les questions à se poser

La première question à se poser est : le premier jour de la semaine est-il un dimanche ou un lundi ?

La seconde question à se poser est : si le 1er janvier est en semaine, est-ce en semaine 0 ou la semaine 1 ?

Illustration de la fonction WEEK avec un exemple.

Prenons l’exemple de la première semaine de janvier 2015.

  • Jeudi 1er janvier
  • Vendredi 2 janvier
  • Samedi 3 janvier
  • Dimanche 4 janvier
  • Lundi 5 janvier
  • Mardi 6 janvier

Le premier jour de la semaine est un dimanche avec la lettre U. Le 1er janvier sera en semaine zéro.

Tandis que les options V et W considèrent le lundi comme le premier jour de la semaine.

  • Avec l’option V, le 1er janvier sera en semaine 1
  • Avec l’option W, le 1er janvier sera en semaine 0

Tester avec du code SAS

data one;
   today='01JAN2015'd;
   output;
   today='02JAN2015'd;
   output;
   today='02JAN2015'd;
   output;
   today='02JAN2015'd;
   output;
   today='02JAN2015'd;
   output;
   today='02JAN2015'd;
   output;
   today='02JAN2015'd;
   output;
run;

data one;
   set one;
   week=week(today);
   weeku=week(today,'U');
   weekv=week(today,'V');
   weekw=week(today,'W');
run;

proc print data=one;
   format today date9.;
run;

Avec les fonctions SAS, il est important de garder en mémoire que le premier jour de la semaine par défaut est le dimanche et non le lundi. Ainsi la fonction WEEKDAY est également touchée par cette règle. Elle donnera un 1 pour le dimanche et un 2 pour le lundi.

Autres lectures