Posts Tagged ‘exemple’

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

Aller-Retour entre dataset et catalogue de formats avec CNTLIN en CNTLOUT

décembre 29, 2012

Dans un précédent article, je parlais des deux méthodes pour créer des formats avec une procédure proc format, la première étant de taper toutes les values dans une instruction value, la seconde étant de stocker ces valeurs dans un data set et de les convertir en format avec l’option cntlin. Aujourd’hui, je souhaite revenir sur l’option CNTLIN et son pendant CNTLOUT pour passer d’un dataset à un format et pour passer d’un format à un dataset.

1. Créer une table SAS (dataset) type

Pour débuter créons un data set (table SAS) appelée POP avec 4 colonnes START, LABEL, TYPE et FMTNAME. Cette table contient les données pour deux formats : un format numérique et un format alphanumérique. Ces deux formats sont appelés GRP.

data pop;
length start $40 label $200 type $1 fmtname $32;
retain fmtane 'GRP' type 'N';
start='10';
label='Per Protocol';
output;
start='11';
label='Modified Per Protocol';
output;
start='20';
label='Intent-to-Treat';
output;
start='21';
label='Modified Intent-to-Treat';
output;
type='C';
start='PP';
label='Per Protocol';
output;
start='mPP';
label='Modified Per Protocol';
output;
start='ITT';
label='Intent-to-Treat';
output;
start='mITT';
label='Modified Intent-to-Treat';
output;
run;

S’il est possible de convertir de convertir le nombre 100 stocker dans une variable alphanumérique en numérique, il est impossible de convertir le mot ABC en numérique. Dans cet exemple on comprend mieux pour quoi START est toujours alphanumérique qu’il s’agisse dun format numérique ou alphanumérique.

2. Passer d’un dataset à un format catalog

A présent la procédure proc format convertit le data set en format catalogue. Le data set est situé dans la bibliothèque (library) WORK. Il n’y a pas besoin de préciser la bibliothèque de la table POP. Par défaut le format catalog s’appellera FORMATS et sera stocké dans la bibliothèque WORK. L’option LIB n’est pas utilisé.

proc format cntlin=pop;
run;

Ainsi le code au dessus est équivalent à :

proc format cntlin=work.pop lib=work.formats;
run;

Le code proposé ci-dessus est uniquement là pour faciliter la compréhension. Sauf besoin particulier, la version simplifiée doit suffire.

3. Passer d’un format catalog à un dataset

Dans un second temps, je vous propose de convertir ce format dans un autre dataset.

proc format cntlout=pop2; 
run;

Ainsi le code au dessus est équivalent à :

proc format cntout=work.pop2 lib=work.formats; 
run;

A vous de jouez avec les proc print et librairies pour voir la résultat.

4. Rappel sur le nom du format

Notez ici que le nom du format est au maximum long de 32 caractères en  SAS 9.1.3 / SAS 9.2  et limité à 8 caractères pour la version SAS 8.2. Pour être plus précis, on a 32 caractères pour un format numérique et 31 caractères pour un format alphanumérique en SAS 9.1.3 et SAS 9.2, SAS gardant un caractère pour le symbole dollar $. SAS 8.2 fonctionnait sur le même principe : 8 caractères pour un format numérique et 7 caractères pour un format alphanumérique. Si le nom du format était trop long en SAS 8.2, SAS le coupe à la longueur maximum. Ainsi les nom  ALPHABETA et ALPHABETI sont interprétés pas SAS 8.2 en FMTNAME=ALPHABET pour un format numérique.

Aller plus loin

h1

Combien de nouveaux cas par an ? Une mesure d’incidence

juillet 25, 2010

L’incidence est une mesure statistique utilisée couramment dans les études cliniques, en cancérologie notamment. Vous trouverez sur Wikipédia une explication en termes simples de ce concept. Voici quelques extraits: définition et exemple de base.

1. Le principe de base

Wikipedia, définition : « En général, l’incidence (ou le taux d’incidence) est le nombre de nouveaux cas d’une pathologie observés pendant une période et pour une population déterminée. »

Taux d’incidence=nombre de nouveaux cas/durée totale du suivi

Wikipedia, exemple : « Par exemple, si 100 personnes à risque ont été étudiées pendant 2 ans, la durée totale de suivi est de 200 personnes-années.Dans ce même exemple, s’il a eu 5 nouveaux cas de la maladie à l’étude, le taux d’incidence sera de 5 cas par 200 personnes-années, ou plus simplement de 2,5 cas par 100 personnes-années (ou encore 0,025 cas par personne-année). »

Taux d’incidence=5/200

2. Le vrai taux d’incidence

Wikipedia, définition : « En général, on s’intéresse à la première occurrence d’une maladie donnée chez une personne (au premier cancer et pas à ses récidives chez un même patient par exemple). »

Wikipedia, l’exemple: « Dans l’exemple précédent, les cinq cas diagnostiqués pendant l’étude ne sont plus à risque à partir du moment où ils sont diagnostiqués. S’ils ont contracté la maladie après six mois d’observation, ils n’ont été à risque que pendant six mois. La durée totale de suivi pour cette étude est donc

  • de 190 personnes-années pour les personnes qui n’ont pas la maladie (95 personnes fois 2 ans) et
  • de 2,5 personnes-années pour les cas (6 mois fois 5 cas).

Le vrai taux d’incidence est donc de 5 cas sur 192,5 personnes-années (ou 2,6 cas par 100 personnes-années). »

Taux d’incidence=5/192.5

L’éventail d’application de cette mesure s’étant au delà de la pharmaceutique. Nombre de personnes ayant retrouvé un emploi, nombre de clients ayant effectué un nouvel achat dans l’année après être passé au statuts de client perdu, etc.

Complétez cet article

N’hésitez pas à ajouter des précisions tant sur le calcul avec SAS, que sur la gestion des valeurs manquantes, identifier une différence significative entre deux taux d’incidence ou la représentation graphique de ce type de données.

h1

Emploi/Formation : Le journal Le Parisien vous offre des exemples de CVs, lettre de motivation

juin 26, 2010

Dans ce samedi emploi, je vous propose de découvrir les multiples articles proposé par le journal le parisien sur le CV, la lettre de motivation, l’entretien d’embauche et le stage (rapport, soutenance, etc.) tels qu’ils sont couramment attendus en France.

1. Pour quel métier êtes vous fait ?

  • Test qui requiert une inscription

2. Votre CV

3. La lettre de motivation

4. Entretien d’embauche

5. Le stage

Lectures complémentaires :

  • Une lettre de motivation avec une typographie bien française : Après avoir vu ces dernières années de nombreux CVs et lettres de motivation, il me semble important de rappeler quelques règles de typographie qui s’avèreront essentielle pour avoir une chance de décrocher un emploi. Voici donc un document .pdf de l’IRISA (Institut de Recherche en Informatique et Systèmes Aléatoires) de Rennes en France.
  • 3 raisons pour créer un site Internet pour son CV : Vous recherchez un stage, un emploi utilisant le logiciel sAS et on vous conseille de créer un site Internet pour votre CV. Mais quels sont les avantages de cette approche ?
  • Beaucoup d’entre vous font ou vont faire dans les mois à venir un stage sous SAS. Suite à un article du magazine Management de septembre « Vos obligations vis-à-vis des stagiaires », je vous propose de retrouver tous les détails en termes de législation française sur le site http://www.travail-solidarite.gouv.fr et plus particulièrement vers la page très bien rédigée : Les stages étudiants en entreprise.
  • 8 compétences pour un CV grâce aux loisirs : Faites de vos loisirs un argument pour montrer vos qualités humaines. En plus de vos jobs d’été et vos stages, vos loisirs parlent pour vous. Avant de rechercher une compétence, l’employeur veut un collaborateur qui s’intègre bien à l’équipe en place, qui défend la même philosophie, les mêmes valeurs. C’est une très bonne chose. Cela réduit les chances de passez 5 jours par semaine au boulot avec des personnes qui vont sont antagonistes à défendre des projets que vous désapprouvez. Voici quelques pistes. A vous d’adaptez et de compléter selon votre parcours.
  • 6 conseils pour un CV SAS débutant : Vous commencez vos études et vous voulez mettre toutes vos chances de votre côté pour votre entrée dans la vie activité ? Les études se terminent et vous voudriez devenir consultant SAS ? Comment construire votre expérience et créer un CV débutant béton. Car oui, l’expérience ne fait pas tout. Les recruteurs savent que vous ne connaissez pas le SAS base sur le bout des doigts. Ce qu’il recherche est un peu plus subtil. Voici 8 conseils pour construire un CV attractif.
  • 6 conseils pour un CV bilingue anglais : Aujourd’hui parler l’anglais, ce n’est pas un plus, c’est un pré-requis, comme savoir écrire et savoir allumer un ordinateur. Dans le monde SAS, l’anglais aussi un besoin pour lire et rédiger des supports en anglais, pour dialoguer avec des collègues de différents pays. Comme parvenir à progresser en anglais et à enrichir votre CV ?
  • Ce stage est-il fait pour moi ? 6 questions à se poser. : Dans votre parcours universitaire, vous serez amenés à faire des stages. Ceci est plus qu’une obligation pour obtenir un diplôme. C’est le moyen d’argumenter vos motivations lors de votre future recherche d’emploi. Votre CV en sera grandement enrichi. Voici une série de questions à se poser pour faire un choix stratégique. Ce stage argumenta t-il en ma faveur lorsqu’il s’agira … ?
  • Le SAS vous captive ? 8 astuces pour le montrer dans un CV : Pour construire un CV SAS débutant, il faut savoir montrer son intérêt pour le logiciel … sans avoir à disposition la carte « Expérience ». Il existe quelques astuces pour contourner le problème lorsqu’on a eu que quelques cours obligatoires dans son parcours.
  • Le monde du programmeur SAS en pharma : L’environnement professionnel du programmeur SAS dans le secteur pharmaceutique et plus précisément dans la partie essais cliniques peut ressembler à une boîte noire. Hors SAS est un standard dans ce secteur et les besoins en programmeurs y sont récurrents. Il est donc fort enrichissant d’avoir une connaissance de ce milieu. Pour une immersion dans l’univers des essais cliniques, je vous propose l’article sur le sujet a été écrit par Sy Truong, Meta-Xceed : Clinical Trials Terminology for SAS Programmers. Voici une traduction du résumé et de l’introduction pour vous donner un avant goût de cet article.
h1

Un premier exemple d’array : changer toutes les variables 1/2 en variable 0/1

mai 11, 2009

Imaginez que vous avez dans une table des variables oui/non où 1 représente non et 2 représente oui. Changement de standard oblige, vous devez symboliser les non par un 0 et les oui par un 1.

Si mavariable=1 alors mavariable=0.
Sinon mavariable=1.

Bien sûr, vous pouvez traiter séparément chaque variable. Ce chantier laborieux est remplaçable par une boucle où seul le nom de la variable change à chaque fois. Vous voulez donc effectuer une même opération sur un grand nombre de variables. La syntaxe de l’array est faite pour vous.

1. Un data set pour l’exemple

Voici la table (SAS data set) utilisée pour l’exemple. Elle s’appelle FINAL. Elle est composée d’une variable caractère et de trois variables numériques, toutes des variables binaires de type oui (2)/ non (1).

data final;
input subject $ pregny validny aeny;
datalines;
A 1 2 1
B 1 1 2
C 2 1 2
D 1 2 2
;
run;

Le but sera d’obtenir un data set avec des variables binaires de type oui (1)/ non (0).

subject pregny validny aeny;
A      0       1      0
B      0       0      1
C      1       0      1
D      0       1      1

2. C’est quoi un array ?

Un array est un nom qui désigne une liste de variables. Il est propre à l’étape data.

  • Définir un nouvel array : Dans un premier temps, l’array est à créer: Sous un nom de son choix, sont sauvegardés sauvegarde des noms de variables (les éléments de l’array) dont l’ordre est indexé pour pouvoir les désigner de manière individuelle par la suite.
  • Appler les variables contenues dans l’array : Dans un second temps, chaque élément de l’array (chaque variable) est appelé/désigné, non pas par son nom, mais par sa position dans l’array.

3. Définir un array

Pour définir un array, il existe l’instruction ARRAY. Elle est composée de trois parties principales et d’un quatrième optionnel.

  • le nom de l’array
  • le nombre de variables  listées (le nombre d’éléments dans l’array)
  • le nom des variables
  • la valeur des variables (optionel)

Dans l’exemple, j’ai un array nommé NY composé de trois éléments : les variables PREGNY (prenant no/yes), VALIDNY (valid no/yes) et AENY (adverse event no/yes).

data final;
set final;
*array ny {1998:2000} pregny validny aeny;
*array ny {1:3} pregny validny aeny;
array ny {*} pregny validny aeny;
run;

Je vous propose trois alternatives pour la notation. Ma préférence, pour des raisons de simplicité dans ce cas, va au cas numéro trois.

  • {1998:2000} Dans le premier cas, la variable PREGNY a pour référence la position 1998, VALIDNY a pour référence la position 1999 et la variable AENY est en position 2000.
  • {1:3} Dans le second cas, la numérotation commence à 1 avec la variable PREGNY et se termine à 3 avec la variable AENY.
  • {*} Dans le troisième et dernier cas, la numérotation est implicite. Comme précédemment. Elle ira de 1 à 3. SAS se charge de compter le nombre de variables pour savoir la dimension de l’array. Si SAS fait le travail pour nous, pourquoi se priver de ce luxe !

Note : La première syntaxe peut apporter dans certains cas un plus en terme de compréhension. C’est le cas quand le numéro a un lien avec le sens de la variable. Par exemple, les variables RESULT98, RESULT99 et RESULT00 peuvent avoir les positions 1998, 1999 et 2000 et donc avoir un caractère informatif.

4. Appeler un array

Pour appeler un élément d’un array (une variable), il faut donner le nom de l’array suivi de la position de la variable dans l’array. Ainsi :

  • ny{1} désigne la variable PREGNY
  • ny{2} fait référence à la variable VALIDNY
  • ny{3} concerne la variable AENY

data final;
set final;
array ny {*} pregny validny aeny;
*variable PREGNY;
if ny{1}=1 then ny{1}=0;
else ny{1}=1;
*variable VALIDNY;
if ny{2}=1 then ny{2}=0;
else ny{2}=1;

*variable AENY;
if ny{3}=1 then ny{3}=0;
else ny{3}=1;

run;

L’intérêt de cette notation vient dans l’usage d’une boucle où la position de la variable sera automatiquement changé.

data final;
set final;
array ny {*} pregny validny aeny;
do i=1 to dim(ny)
;*do i=1 to 3;
if ny{i}=1 then ny{i}=0;
else ny{i}=1;
end;
run;

Pour les plus paresseux comme moi, on demandera à SAS de calculer le nombre d’éléments contenus dans l’array (la dimension) au moyen de la fonction SAS propre à l’array DIM().

Je vous proposerai dans les semaines à venir un autre article sur les subtilités de l’array.