h1

Plusieurs formats pour une variable numériques – passer à une variable caractère avec la fonction PUTN

octobre 14, 2010

Découvrez le cours de novembre 2022 : Les fonctions put et input – un sujet épineux

Dans cet article que vous propose une illustration de la fonction PUTN. En effet une variable numérique peut contenir des groupes de valeurs. Chaque groupe de valeurs se réfère à un format donnée. Le nom de ces formats est disponible dans une autre variable. La question est alors comment puis-je créer une variable caractère équivalent simplement, sans boucle, sans if-then, etc. La solution : la fonction PUTN. Voici un exemple pour illustrer le propos.

1. Le problème en exemple

Dans cet exemple, deux formats numériques AGE et SEX exitent.

proc format;
value age 11-13=’11-13′
14-16=’14-16′;
value sex 1=‘Male’
2=‘Female’;
run;

Dans un data set, ONE, trois variables existent :

  • CRITERIA : les critères sont AGE et SEX dans l’exemple.
  • CODLST : le nom des formats qui expliquent les valeurs numériques sont enregistrés dans la variable CODLST.
  • VALN: les valeurs numériques associées aux critères sont disponibles dans la variable VALN.

data one;
length criteria $8 codlst $8;
input criteria $ codlst $ valn;
age age 12
sex sex 1
;
run;

L’objectif est de créer une variable VALC qui contienne l’équivalent alphanumérique de VALN (la valeur donnée dans le label du format).

2. La solution proposée : PUTN

data two;
set one;
length valc $20;
VALC=putn(valn,codlst);
run;

3. Le résultat attendu

criteria codlst valn valc

age      age    12   11-13
sex      sex    1    Male

Ici les formats sont tous numériques. La fonction PUTN est utilisée.
Pour des formats alphanumériques, il faudra se servir de la fonction PUTC.

Allez plus loin

Découvrez le cours de novembre 2022 : Les fonctions put et input – un sujet épineux

h1

Répéter la valeur d’une variable sur chaque page avec ODS RTF

septembre 26, 2010

Il y a un peu plus d’un mois, je vous parlais de l’option SPANROWS de PROC REPORT pour pouvoir répéter une valeur groupée sur chaque page du listing.

Mais si vous devez créer un fichier .RTF et non un fichier .PDF ou si vous n’avez pas SAS 9.2, vous pouvez vous rabattre sur cette solution.

Elle présente le seul inconvénient de séparer la table en table distincte à chaque nouvelle valeur du la variable groupée.

Voici donc un exemple à tester par vous même.

1. Le setting

Par simple soucis de présentation, quelques instructions de paramétrage sont données.

  • Enlever le titre par défaut avec l’instruction TITLE.
  • Enlever la date et le numéro de page par défaut et alignez le résultat à gauche.
  • Créer un format caractère SEX où M réfère à Garçon et F à Fille.


*——————————————–;
* Setting;
*——————————————–;

title;
options nodate nonumber nocenter;

proc format;
value $ sex ‘M’=‘Garçon’
‘F’=‘Fille’;
run;

2. Préparation des données

Afin d’avoir assez de données le fichier CLASS est multiplié par 5. Les noms sauvegardés dans la variable NAME sont incrémentés d’un nombre.

*——————————————–;
* 2. Data Preparation;
*——————————————–;

data class;
set sashelp.class;
output;
name=cats(name,’1′);
output;
name=cats(name,’2′);
output;
name=cats(name,’3′);
output;
name=cats(name,’4′);
output;
name=cats(name,’5′);
output;
run;

3. Reporting;

Vos données doivent être triées afin d’utiliser l’instruction BY dans PROC REPORT.

L’option d’ODS RTF STARTPAGE=NEVER empêchera le passage à une nouvelle feuille à chaque nouvelle valeur de la variable SEX.

Au moyen des options COMPUTE/ENDCOMP, il est possible de personnaliser le texte en début de chaque page. Un texte aligné à gauche est ajouté. Une ligne avant et une ligne après sont ajoutées pour faciliter la lisibilité du rapport. Ce texte est composé de « SEXE :  » suivi de la valeur formatée de la variable SEX.

*——————————————–;
* 3. Reporting;
*——————————————–;

proc sort data=class;
by sex;
run;

*options nobyline;

ods rtf file=’C:/…/test1.rtf’ startpage=never;
proc report data=class;
by sex;
column sex name;
define sex  / /*id*/ group noprint ;
define name / display  ‘Nom’;

compute before _page_ /style=[just=left] ;
line ‘ ‘;
line @1 ‘Sexe:’ @6 sex $sex. ;
line ‘ ‘;
endcomp;

run;

ods rtf close;

h1

Avec ODS, comment ajouter des caractères spéciaux ≤ et ≥

septembre 19, 2010

Comment inclure dans un rapport généré par ODS les symboles ≤ et ≥ ? En effet, ils ne font pas parti des caractères spéciaux ASCII classiques, il s’agit de caractères dépendants d’une police de caractères en particulier : la police « symbol ».

SAS propose un article sur le sujet. Je vous propose de détailler l’exemple utilisé qui a été utilisé avec SAS 8.2 sous environnement DBCS.

1. Setting

Dans cette instruction ODS ESCAPECHAR, est précisé que l’accent circonflexe sera utilisé, non pas comme simple caractère, mais comme caractère introduisant une notation particulière pour le style.

ods escapechar= »^ »;

Un format appelé TEMP est créé. La valeur 11 aura un label composé du symbole « inférieur ou égal ».

  • Le symbole « inférieur ou égal » en lui même est introduit par le code hexadécimal A3.
  • Pour que ce que code corresponde à « inférieur ou égal », il faut utiliser la police de caractère, d’où le code font_face=symbol.
  • Avant A3, on change le style et en particulier la police de caractère. Notez ici l’accent circonflexe introduit précédemment pour entrer la police.
  • Après A3, on arrête d’utiliser cette police.

proc format;
value temp 11=‘The value is ^S={font_face=symbol}’ « A3″x ‘^S={} the value’;
run;

2. Reporting

A présent SAS va écrire tout ce qui suite dans un fichier temp.rtf. Vous avez ici seulement besoin de préciser le chemin d’accès au fichier dans les guillemets.

Le résultat s’affichera correctement dans votre fichier .RTF mais pas dans votre sortie listing classique. Autant fermer cette destination avec ODS LISTING CLOSE.

ods listing close;

ods rtf file=‘temp.rtf’;

Les deux tableaux imprimé se basent sur la table CLASS dans la bibliothèque SASHELP.

Dans le premier cas, le format créé précédemment est appliqué à la variable AGE. On aura dont le label de format défini précédemment quand AGE=11.

title ‘This uses the special characters in the value’;
proc print data=sashelp.class;
format age temp.;
run;

Dans ce second exemple, le symbole « supérieur ou égal » est introduit avec le code hexadécimal B3 d’où « B3″x.

Comme précédemment, il est entouré de ^S={font_face=symbol} avant et ^S={} après.

Cette fois ci pas contre le symbole est ajouté dans le label d’une variable. Chacun des groupes de mot est donc mis entre guillemets.

title ‘This uses the special characters in the label’;
proc print data=sashelp.class label;
label age=« Age » « ^S={font_face=symbol} » « B3″x « ^S={} » « 10 »;
run;

Enfin, on précise de former le fichier .rtf et donc de ne plus ajouter d’info dedans à partir de maintenant.

ods rtf close;

ods listing;

Source : Usage Note 24054: In ODS, how can I add special characters such as GE or LE to my output?

Lecture complémentaire

h1

Avez-vous pensé à lire votre log de manière automatique

septembre 12, 2010

Vous savez comment lire un fichier .txt avec SAS mais avez-vous déjà envisager lire votre programme ou encore votre log et d’en faire un data set pour pouvoir fouiner un peu dedans ? Voici donc un exemple très basique côté programmation mais qui peut se révéler très utilise si vous faites preuve d’un peu d’imagination.

1. Commentaires sur l’exemple

Dans l’exemple qui suite la log sauvegardée de manière permanente sur le disque dur est importée dans SAS. Une ligne est égale à une observation. Le délimiteur est le caractère hexadécimal 09. Le nombre maximum de caractères par observation est ici de 1000. A vous de trouver la valeur qui vous semble la mieux appropriée pour éviter que le texte soit coupé sans pour autant sur-consommer votre capacité de stockage.

2. L’exemple

data mylog;
infile ‘c:/sasref/test.log’ dlm=’09’x;
length x $1000;
input x $;
run;

3. Aller plus loin

Ensuite pour vous entraîner, sortez les lignes où il y a le mot NOTE, les lignes avec le mot REAL TIME ou encore les lignes contenant un mot-clé qui vous est propre à l’aide de fonctions caractères.

Dans ce dernier cas, vous pouvez inclure dans votre programme les titres des grandes rubriques de votre programme et ensuite les extraire avec cette méthode. Pratique pour retrouver rapidement la structure d’ensemble de son programme, mettre à jour son en-tête, etc.

Lectures complémentaires

h1

Présentations : quelle télécommande acquérir ?

septembre 2, 2010

Il est aujourd’hui de plus en plus courant d’avoir une télécommande multimédia pour faire défiler les transparents (slides) d’une présentation. Mais ce luxe est-il abordable ? Et quels critères prendre en compte lors de votre achat ?

1. Pourquoi acquérir une télécommande multimédia ?

Vous n’avez plus à rester coller à votre ordinateur pour changer de transparent.

Si votre entreprise ne vous fourni pas le matériel, sachez que c’est un investissement tout à fait abordable : un trentaine d’euros.

Les fonctionnalités les plus courantes : passage au transparent suivant, retour sur le transparent précédent et pointeur rouge sur l’écran. Pourtant d’un modèle à l’autre la position des boutons est différents et vous pouvez vous trouver avec plusieurs boutons faisant le même travail. En ayant votre propre matériel vous savez exactement vous en servir.

2. Quels critères prendre en compte dans votre achat ?

Les piles : regardez quelles piles servent pour votre télécommande et ayez toujours un jeu d’avance. Si vous avez des piles courantes comme des piles AAA cela sera plus facile de trouver des piles de rechanges dans le commerce du coin.

Le bouton interrupteur : Ayez un interrupteur pour éviter de vider la pile. Cela se révèlera très pratique quand la télécommande doit servir une journée complète.

La distance : si vous êtes dans une pièce de 10 mètres de long, il vous faudra toujours que votre télécommande fonctionne.

3. Quelques modèles

J’ai pour ma part une télécommande Targus achetée il y a deux ans. Vous avez un morceau à fixer sur un port USB. Ensuite vous vous devez de synchroniser les deux. J’ai déjà pu la tester dans une pièce très grande où l’ordinateur était à l’autre bout de la pièce. Les piles sont des AAA.

  • En dessous vous avez un bouton pour le pointeur rouge
  • Sur le côté, vous avez un interrupteur.
  • Dessus vous avez un bouton central qui par défaut vous permet de passer au transparent suivant.
  • Sous ce bouton central vous avez deux boutons : à gauche pour revenir sur le transparent précédent et à droite pour passer au transparent suivant.
  • Et encore plus bas, vous avez un bouton pour passer d’un mode plein écran à un mode travail
  • Enfin tout en haut vous avez deux autres  boutons pour accéder au menu contextuel sans souris.

Voici les trois modèles de cette marque actuellement en vente sur Amazon. Ils ont l’air d’être encore plus simple d’utilisation. Ayant été satisfaite par le produit et n’ayant pas d’expérience avec les autres marques, je me limite à celle-ci mais libre à vous de faire une recherche plus poussée sur le net et proposer d’autres produits.

26 euros 31 euros 38 euros
Targus – Télécommande Presentation pour PC portable – Noir/Gris Targus – Télécommande Laser pour PC portable – Noir/Gris Targus – Télécommande MultiMedia pour PC portable – Noir/Gris
h1

Des options pour se débarrasser de WARNING de SAS 9.2

août 18, 2010

Avec SAS 9.1.3 et SAS9.2 de nouveaux warning apparaissent. En voici deux que vous pouvez faire disparaître dans le cas où ils ne reflètent pas un problème dans votre programme.

  1. Avec PROC SQL, je crée une nouvelle table du même nom que la table source.
  2. Dans un data set je réduis la longueur d’une variable

1. Utiliser le même nom de data set en entré et en sortie avec PROC SQL

Pour illustrer le sujet, je vais d’abord créer un data set appelé ONE avec deux variables X et Y.

data one;
x=‘A’;
y=‘B’;
run;

Ensuite je vais créer avec PROC SQL un nouveau data set du même nom ONE qui ne contiendra que la variable X.

proc sql;
create table one as
select x
from one;
quit;

Le message dans la log ressemble à ceci:
WARNING: This CREATE TABLE statement recursively reference the target table. A consequence of this is a possible data integrity problem.

Pour ne plus avoir ce message dans la log, ajouter l’option UNDO_POLICY=NONE

proc sql undo_policy=none;
create table one as
select x
from one;
quit;

Ce cas existe depuis SAS 9.1.3.

2. Réduire la longueur d’une variable dans une étape data

Une solution pour changer la longueur d’une variable est de définir sa longueur dans une instruction LENGTH avant de lire les données avec un SET par exemple.

Depuis SAS 9.2, si la nouvelle longueur est plus petite que l’ancienne un WARNING apparaît dans la log. Ceci est une bonne chose car cela vous permet de repérer d’éventuelles coupures (truncations) de vos données.

Dans certains cas cependant, vous savez pertinemment que le nombre de caractères dans données est au plus X et que dès lors elles ne seront pas coupées en réduisant la longueur.

Vous pouvez vous épargner le warning en encadrant votre étape data des options globales VARLENCHK=nowarn et VALENCHK=warm.

Je vous conseille d’appliquer cette option localement afin de pouvoir continuer à repérer d’autres coupures potentielles non prévues.

data two;
length x $32;
x=‘A’;
run;

data two_a;
length x $1;
set two;
run;

WARNING : Multiple lengths were specified for the variable x by input data set(s). This may cause truncation of data.

options varlenchk=nowarn;
data two_b
length x $1;
set two;
run;
options varlenchk=warn;

Notez cependant, qu’avec SAS 9.1.3 ou SAS 9.2, un warning apparaît dès lors que la variable est donnée dans une instruction BY. L’option VARLENCHK de SAS 9.2 ne vous enlèvera pas le warning. Je vous conseille donc de changer votre longueur au préalable si vous ne voulez pas ce WARNING.

data two_b;
length x $1;
set two;
by x;
run;

WARNING: Multiple lengths were specified for the BY variable x by input data sets and LENGTH, FORMAT, INFORMAT statements. This may cause unexpected results.

Lectures complémentaires :

h1

Une option SAS 9.2 pour ODS PDF : répéter une valeur groupée sur plusieurs pages

août 3, 2010

Lorsque vous construisez un listing avec ODS PDF et PROC REPORT l’option GROUP de l’instruction DEFINE sert à n’afficher chaque valeur de la variable concernée qu’une seule fois.

Hors, si cette valeur s’applique aux observations de plusieurs pages, elle ne sera pas répétée à moins d’ajouter l’option SPANROWS nouvelle avec SAS 9.2.

Cette options ne fonctionne pas actuellement avec ODS RTF.

Voici un exemple pour tester par vous même.

1. Le setting

Par simple soucis de présentation, quelques instructions de paramétrage sont données.

  • Enlever le titre par défaut avec l’instruction TITLE.
  • Enlever la date et le numéro de page par défaut et alignez le résultat à gauche.
  • Créer un format caractère SEX où M réfère à Garçon et F à Fille.


*——————————————–;
* Setting;
*——————————————–;

title;
options nodate nonumber nocenter;

proc format;
value $ sex ‘M’=‘Garçon’
‘F’=‘Fille’;
run;

2. Préparation des données

Afin d’avoir assez de données le fichier CLASS est multiplié par 5. Les noms sauvegardés dans la variable NAME sont incrémentés d’un nombre.

*——————————————–;
* 2. Data Preparation;
*——————————————–;

data class;
set sashelp.class;
output;
name=cats(name,’1′);
output;
name=cats(name,’2′);
output;
name=cats(name,’3′);
output;
name=cats(name,’4′);
output;
name=cats(name,’5′);
output;
run;

3. Reporting

Enfin la section qui nous intéresse vraiment : générer un fichier .RTF et un fichier .PDF avec l’option SPANROWS et voir que que seul ODS RTF tient compte de cette option pour répéter l’observation en début de chaque nouvelle page.


*——————————————–;
* 3. Reporting;
*——————————————–;

ods listing close;
ods rtf file=‘C:\sasref\test1.rtf’;
ods pdf file=‘C:\sasref\test1.pdf’;


proc report data=class spanrows nowd;
column sex name;
define sex / group ‘Sexe’;
define name / display ‘Nom’ ;
run;


ods pdf close;
ods rtf close;
ods listing;

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

Protégé : Newsletter Exercice – n°1 : Enoncé

juillet 6, 2010

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

h1

Macro : mini-programmes/routines pour tester la validité d’un nom de variable

juin 27, 2010

Après avoir appris les bases de la programmation, vous allez vous rendre compte que certaines tâches se répètent de programme à programme. Une partie d’entre eux peut se résumer à quelques lignes. Il est alors tentant d’écrire un programme de manière « officielle » et de le valider au lieux d’avoir à écrire le code à chaque fois.

Voici un petit exemple. Il s’agit du descriptif d’une macro qui va indiquer si le nom de variable donné est conforme aux règles requises par SAS. Ici vous avez la spécification et les tests de validation.

1. Spécification : Quelles sont les règles ?

Le nom d’une variable ne peut pas avoir plus de 32 caractères.

Le premier caractère est une des 26 lettres de l’alphabet ou un chiffre.

Les autres caractères  peuvent être des lettres de l’alphabet, un chiffre ou un tiret bas (underscore).

2. Spécification : Quelques contraintes ?

Vous développez une macro disons VARNAME_VALID ayant un paramètre VARNAME où vous pourrez entrer le nom d’une variable à tester. Si ce nom entre dans les critères de définition de SAS, alors une macro variable varname_ok=1 sinon la macro variable varname_ok=o.

3. Test Cases : Quand tout va bien: un nom de variable avec une seule lettre, deux lettre, commençant par un tiret bas, écrit en majuscule, avec un chiffre au milieu, avec un chiffre à la fin

Qu’est ce qui est testé : un nom de variable suivant les règles requises par SAS.

Quel est le code à soumettre :

%varname_valid(varname=a);
%varname_valid(varname=ab);
%varname_valid(varname=_ab);
%varname_valid(varname=AB);
%varname_valid(varname=ab1a);
%varname_valid(varname=ab1);

Quel est le résultat attendu :

La macro variable garde la valeur un

&varname_ok.=1

Un message dans la log est affiché :

NOTE: (VARNAME_VALID) Nom de variable correct.
NOTE: (VARNAME_VALID) Valeur actuelle :  ab

D’autres programmes peuvent être appelés après.

4. Test Cases : Violation des pré-requis de la macro

4.1 Violation pré-requis : le paramètre est manquant

Qu’est ce qui est testé : Un nom de variable doit être donné dans le paramètre de la macro

Quel est le code à soumettre : %varname_valid(varname=);

Quel est le résultat attendu :

La macro variable VARNAME_OK prend la valeur zéro

&varname_ok.=0

Un message dans la log est affiché :

WARNING: (VARNAME_VALID) Nom de variable incorrect.
WARNING: (VARNAME_VALID) Valeur actuelle:
EARNING: (VARNAME_VALID) Valeur attendue: un nom de variable.

D’autres programmes peuvent être appelés après.

4.2 Violation pré-requis : plus d’un nom de variable est entré

Qu’est ce qui est testé : Plus d’une variable est entrée dans le paramètre de macro

Quel est le code à soumettre : %varname_valid(varname= ab cd );

Quel est le résultat attendu :

La macro variable prend la valeur zéro

&varname_ok.=0

Un message dans la log est affiché :

WARNING: (VARNAME_VALID) Nom de variable incorrect.
WARNING: (VARNAME_VALID) Valeur actuelle : ab cd
WARNING: (VARNAME_VALID) Valeur attendue : un seul nom de variable.

D’autres programmes peuvent être appelés après.

5. Test Cases : Les règles définies par SAS pour nommer une variable

5.1  Un nom de variable : Au maximum 32 caractères

Qu’est ce qui est testé : un variable avec plus de 32 caractères

Quel est le code à soumettre : %varname_valid(varname=abcdefghijklmnopqrstuvwxyz1234567890);

Quel est le résultat attendu :

La macro variable prend la valeur z éro

&varname_ok.=0

Un message dans la log est affiché :

WARNING: (VARNAME_VALID) Nom de variable incorrect.
WARNING: (VARNAME_VALID) Valeur actuelle : abcdefghijklmnopqrstuvwxyz1234567890
WARNING: (VARNAME_VALID) Valeur attendue : 32 caractères au maximum.

D’autres programmes peuvent être appelés après.

5.2 Un nom de variable : commence par une lettre de l’alphabet (a-z) ou un tiret bas

Qu’est ce qui est testés : Un premier caractère différent d’une lettre de l’alphabet ou d’un tiret bas

Quel est le code à soumettre : %varname_valid(varname=é);

Quel est le résultat attendu :

La macro variable prend la valeur zéro

&varname_ok.=0

Un message dans la log est affiché :

WARNING: (VARNAME_VALID) Nom de variable incorrect.
WARNING: (VARNAME_VALID) Valeur actuelle : é
WARNING: (VARNAME_VALID) Valeur attendue : La première lettre est une des 26 lettres ou un tiret bas.

D’autres programmes peuvent être appelés après.

5.3 Un nom de variable : Après le premier caractère on peut avoir des lettres (a-z), des chiffres (0-9) et des tirets bas.

Qu’est ce qui est testé : un caractère différent d’une lettre de l’alphabet, d’un chiffre ou d’un tiret bas parmi les autres caractères de l’alphabet

Quel est le code à soumettre : %varname_valid(varname=1é);

Quel est le résultat attendu :

La macro variable prend la valeur zéro

&varname_ok.=0

Un message dans la log est affiché :

WARNING: (VARNAME_VALID) Nom de variable incorrect.
WARNING: (VARNAME_VALID) Valeur actuelle : 1é
WARNING: (VARNAME_VALID) Valeur attendue : La première lettre est une des 26 lettres ou un tiret bas.

WARNING: (VARNAME_VALID) Nom de variable incorrect.
WARNING: (VARNAME_VALID) Valeur actuelle : 1é
WARNING: (VARNAME_VALID) Valeur attendue : A partir du deuxième caractères, seuls des lettres,
WARNING: (VARNAME_VALID) des chiffres et un tiret bas sont autorisés.

Lecture complémentaire

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

Comparer deux chaînes de caractères : A quel endroit se situe la première différence ? (la fonction COMPARE)

juin 20, 2010

Occasionnellement il peut s’avérer utilise de comparer deux chaînes de caractères et de savoir plus précisément où se situent les différences. La fonction COMPARE peut vous aider dans cette tâche.

En effet, la fonction COMPARE indique à quel endroit se situe la première différence entre les deux chaînes. Voici un exemple.

1. Le code

data one;
comp1=compare(‘abc’,‘abc’);
comp2=compare(‘ABc’,‘ABC’);
comp3=compare(‘A1C’,‘ABC’);
comp4=compare(‘ABC’,‘A1C’);
run;

proc print data=one;
run;

2. Interprétation des différents cas

Dans le premier cas (comparer abc à abc), la fonction retourne une valeur 0 car il n’y a aucune différence. Comme la plupart des fonctions SAS, la valeur zéro indique qu’aucune différence entre les deux chaînes n’a été identifiée.

Dans le second cas (comparer ABc à ABC), la fonction retourne une valeur 3 car la lettre c située en troisième position est dans un cas écrite en minuscule et dans un cas écrite en majuscule. La fonction est sensible à la case à moins d’ajouter des options dans le troisième paramètre de la fonction.

Dans le troisième cas (comparer A1C à ABC), la fonction retourne une valeur 2 car la première différence se trouve au niveau du second caractère.

Dans le quatrième et dernier cas (compare ABC à A1C), le premier et le second texte ont seulement été inversé. La fonction retourne une valeur négative -2 car si on trie les données le chiffre 1 apparaît avant la littre B. Si comme moi, ce qui vous intéresse est uniquement l’endroit où se situe la différence, vous pouvez prendre la valeur absolue en encadrant la réponse dans une fonction ABS().

Lectures complémentaires :

h1

Entrer une date avec l’informat ANYDTDTE

juin 6, 2010

Découvrez le cours de novembre 2022 : Les fonctions put et input – un sujet épineux

Aujourd’hui j’aimerais vous présenter un informat destiné aux dates qui est apparu avec la version 9 de SAS : ANYDTDTE.

La manière dont est écrite une date est très variable et le nombre d’informat pour pourvoir entrer ces dates dans une table SAS est aussi large que le nombre de manière d’écrire une date. Du coup, difficile de se souvenir du nom de chacun des informats lorsqu’on rencontre une structure différente de son habitude de manière occasionnelle. Le passage par la documentation de SAS est quasiment obligé.

L’informat ANYDTDTE regroupe plusieurs informats sous sa coupole pour vous faciliter ce travail de mémorisation. Illustration.

1. Présentation de trois informats : DATE9., DDMMYY10. et ANYDTDTE.

De manière classique un informat reconnait une structure particulière.

  • L’informat DATE9 reconnait une date écrite sous la forme DDMMMYYYY (15APR2007).
  • L’informat DDMMYY10. reconnait les dates de la forme DD/MM/YYYY (15/04/2007).

L’informat ANYDTDTE vous permettra de retrouver les deux structures et plus encore.

2. Un exemple

Dans cet exemple la date est écrite de deux manières différentes. Deux choix s’offrent à vous :

  • informat date1 ddmmyy10. date2 date9.;
  • informat date1 date2 anydtdte.;

Dans le premier cas, vous identifiez de manière précise la structure de chacune des dates et appliquez l’informat de votre choix.

Dans le second cas, vous laissez SAS identifiez la structure des deux dates parmi une liste de 8 informats : DATE, DATETIME, DDMMYY, JULIAN, MMDDYY, MONYY, TIME, YYMMDD ou YYQ.

data event;
informat date1 date2 anydtdte.;
*informat date1 ddmmyy10. date2 date9.;
format date1 date2 date9.;
input event date1 date2;
datalines;
1 15/04/2007 15APR2007
1 20/10/2007 20OCT2007
3 11/02/2007 11FEB2007
4 14/11/2007 14NOV2007
8 15/02/2007 15FEB2007
9 28/01/2007 28JAN2007
17 15/01/2007 15JAN2007
17 30/04/2007 30APR2007
19 12/08/2007 12AUG2007
19 25/08/2007 25AUG2007
20 21/02/2007 21FEB2007
;
run;

proc print data=event;
run;

Lecture complémentaire

Lecture complémentaire sur la documentation en ligne de SAS

SAS Online Doc >Base SAS > SAS Language Reference : Dictionary > Dictionary of Language Elements > Informats

  • ANYDTDTEw. Informat
  • DDMMYYw. Informat
  • DATEw. Informat

Aller plus loin

Découvrez le cours de novembre 2022 : Les fonctions put et input – un sujet épineux

h1

Mettre des données côte-à-côte pour votre reporting

mai 24, 2010

Lorsque vous devez présenter vos données (faire du reporting), vous pouvez vous trouver dans la situation suivante : mettre côte-à-côte des données qui n’ont rien à voir entre elles. La situation peut se résoudre très rapidement avec un merge sans instruction BY. Mais que faire dans le cas où vous devez quand même grouper vos données par une clé (exemple l’identifiant du client) mais dans chaque source plus d’une observation par clé ? C’est ce que je vous propose de découvrir dans cet article.

1. Les données pour l’exemple

Deborah a deux lignes d’observation et Patrick aussi.

data demography;
length cl_name $10 criteria $10 ;
input cl_name $ criteria $ crit_value ;
datalines;
deborah age 15
deborah height 1.66
patrick age 14
patrick height 1.75
;
run;

Deborah a acheté 4 articles (DVD, téléphone portable, une radio et des écouteurs (4 lignes d’observations pour Deborah) tandis que Patrick a acheté deux articles.

data sell;
length cl_name $10 achat $10;
input cl_name $ achat $;
datalines;
deborah dvd
deborah mobile
deborah radio
deborah headset
patrick mobile
patrick tv
;
run;

2. Le résultat sans instruction BY

data mix_demo_sell;
merge demography
sell;
by cl_name;
run;

Vous vous retrouvez avec un merge MANY-to-MANY qui ne résous par votre problème. Pensez toujours à vérifer votre log après un MERGE. Ce type de note est souvent signe d’une erreur de raisonnement dans votre programme.

proc print data=mix_demo_sell;
run;

On observe ici un RETAIN implicite propre au merge.

3. Ajouter un compteur pour chaque client

Pour contourner le problème, on ajouter un identifiant supplémentaire dans les deux tables.

Dans la table DEMOGRAPHY, le client DEBORAH a deux observations. On aura donc CNT=1 et CNT=2.

data demography;
set demography;
by cl_name;
if first.cl_name then cnt=1;
else cnt+1;
run;

Dans la table SELL, le client DEBORAH a quatre observations. On aura donc CNT=1, CNT=2, CNT=3 et CNT=4.

data sell;
set sell;
by cl_name;
if first.cl_name then cnt=1;
else cnt+1;
run;

Il ne reste plus qu’à combiner les deux tables à partir de la variable client (CL_NAME) et de la variable CNT.

data mix_demo_sell;
merge demography
sell;
by cl_name cnt;
run;

proc print data=mix_demo_sell;
run;

Le résultat désiré se présente ainsi :

Lecture complémentaire

h1

Régler sa chaise de bureau, 6 conseils retenus

mai 16, 2010

Après une petite heure d’explication pour régler sa chaise de bureau, voici quelques conseils que j’ai retenu.

1. Si un seul conseil était à retenir

Le plus important est de faire usage du dossier de la chaise. Il faut s’assurer que le bas du dos touche le dossier de la chaise. En effet, il est difficile de se tenir droit plus de quelques minutes. Cette position empêche de se courber une fois qu’on se relâche. Ce conseil s’applique quelque soit le siège.

En essayant vous vous rendrez vite compte que cela devient très vite laborieux quand la profondeur du siège est trop importante pour vous. Sur le site canadien CCHST, il est conseillé d’acheter une chaise où on peut voir quelques centimètres entre le siège et le genou.

2. Rigidité de l’inclinaison du dossier

Dans le même ordre d’idée, il faut empêcher que le dossier du siège ne bascule vers l’arrière trop facilement. Sur certaines chaises il est possible de régler cette rigidité.

3. Travailler à angle droit

La règle des trois 90° :  Comme l’illustre l’image, il faudrait que l’angle des genoux soit à angle droit, de même que celui des jambes/dos et que celui des coudes.

Si votre bureau est à hauteur modulable, vous arriverez probablement à avoir le siège à la hauteur des genoux. Une demi solution sinon est le rehausse pied.

Pour une meilleure circulation sanguine préférez une légère inclinaison vers l’arrière et des jambes tendues (une fausse position allongée) plutôt que le tronc vers l’avant et les pieds sous la chaise.

4. La hauteur des accoudoirs

Les accoudoirs doivent être un prolongement du bras. Ils devraient être à hauteur du bureau.

5. La largeur entre les accoudoirs

Sur certaines chaises vous pouvez aussi régler l’écartement des accoudoirs.

6. Variez les positions

Le dernier conseil concerne la hauteur du dossier du siège. Il faudrait changer régulièrement vos réglages pour la hauteur du dossier et ainsi faire travailler différentes muscles de votre dos.

h1

Apprendre à tapez avec ses 10 doigts en trois points

mai 10, 2010

Tapez avec ses 10 doigts me semble une évidence. En fait je n’y réfléchis plus. Cela fait partie pour moi des acquis. Mais je n’ai aucun mérite. Encore gamine, ma grand-mère qui fut un temps sténo-dactylo, avait sortie la machine à écrire et m’avait mis au travail. On travaillait avec un clavier AZERTY commun en France.

Du coup, j’ai replongé dans mes souvenirs pour me remémorer la méthode de l’époque. Simple, elle s’explique en trois points.

Juste avant une précision : c’est quoi un clavier AZERTY ? C’est un clavier où les premières lettres de la ligne supérieurs comment par A, Z, E, R, T, Y.

1. Positionnez ses doigts sur le clavier : posez  vos pouces sur la barre espace, l’index de la main gauche sur le F, l’index de la main droite sur le J.   Les autres doigts se pausent quasiment automatiquement au bon endroit (QZEF pour la main gauche, JIOM pour la main droite.

La moitié gauche est pour la main gauche. La moitié droite pour la main droite. Logique non. Vous avez de chaque côté 5 touches. Mais le problème est que vous ne devez pas utilisez votre pouce pour ces touches, le pouce étant réservé à la barre espace. Alors comment faut-il se répartir les doigts ? L’index s’occupe de deux touches par lignes alors que les trois autres doigts d’une seule.

Par exemple sur la ligne supérieure, la main gauche se répartie ainsi : A-auriculaire, Z annulaire, E majeur, R et Z avec l’index.

2. Faites des lignes de mots en ne regardant seulement l’écran. A chaque fois que vous faites une erreur essayez de corriger sans regarder votre clavier.

3. Faites des phrases sur le même principe. Pourquoi ne pas commencer par un petit email ?

Une fois que vous aurez acquis l’automatisme avec un clavier, vous pourrez très simplement basculer vers un autre type de clavier. Il y a toujours un petit temps d’adaptation à chaque changement mais cela dure le temps d’un email en général.

Dqns un qrcle du 24 mars 2011 de Micro Hebdo sont conseillés les sites suivants :

Apprendre à dactylographier
lecturel.com avec une rubrique doigté pour clavier alphanumérique
sense-lang.org (cliquer sur le drapeau pour changer la langue en français) avec clavier français, belge et suisse

Amériorer sa vitesse par le jeu
sense-lang.org (cliquer sur le drapeau pour changer la langue en français) avec clavier français, belge et suissehttp://sense-lang.com en français

Tester sa vitesse
http://keybr.com: cliquer sur Paused. Au dessus du texte à taper la langue peut être changée.

Lecture complémentaire

Mes raccourcis claviers préférés

h1

Protégé : Newsletter Mai-Juin : Solution

mai 4, 2010

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

h1

Protégé : Newsletter : Exercice

mai 4, 2010

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

h1

Emploi/Formation : Une lettre de motivation avec une typographie bien française

avril 13, 2010

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.

1. Pourquoi porter attention à la typographie

On ne le rappelle jamais assez. Les lettres de motivation sont des documents que vous pouvez faire relire. Si vous les écorchez, cela veut dire que les documents que vous rédigerez au nom de votre entreprise n’auront que très peu de chance d’être corrects. Vous risquez donc abîmer l’image de votre employeur auprès des autres services, auprès de ses clients, etc. Ce risque il ne le prendra probablement pas et s’arrêtera avant même d’avoir évaluer votre potentiel technique.

2. Un document de 8 pages pour aller à l’essentiel

http://www.irisa.fr/dream/Pages_Pros/Thomas.Guyet/enseignements/IAA1/Typographie.pdf

  1. Précision préalable
  2. Alphabet français
  3. Espaces et signes de ponctuation
  4. Quelques cas particuliers pour la ponctuation
  5. Abréviations
  6. Accents
  7. Emphase
  8. Nombres
  9. Majuscules
  10. Bibliographie
  11. Règles de lisibilité
  12. Conclusion
  13. Ressources sur les règles typographiques

Lecture complémentaire

http://jacques-andre.fr/faqtypo/lessons.pdf Petites leçons de typographie (52 pages)

h1

Une petite histoire de macro : compter le nombre de mots dans un paramètre de macro

avril 11, 2010

Il est courant de devoir compter le nombre de mots dans un paramètre de macro. Il est par exemple possible de vouloir créer une boucle pour travailler chacun des termes contenu dans cette macro de manière séparée.

Voici donc l’histoire d’une mini macro qu’on nommera CNT_WRD qui crée une macro variable TOT_WRD renvoyant le nombre de mots contenu dans le paramètre TXT.

Ceci est pour vous l’occasion de voir ou revoir un raisonnement possible dans la construction d’une macro sous SAS.

1. Préciser ses besoins, une rapide « spécification »

La macro CNT_WRD composée d’un seul paramètre retournera dans une macro variable TOT_WRD le nombre de mots contenus dans le texte donné dans le paramètre de macro.

Ici on considérera comme mot, tout terme séparé par au moins un blanc.

Si le paramètre de macro est vide, la macro ne devra pas afficher de message d’erreur et la macro variable TOT_WRD sera égale à 1. Par défaut, aucune valeur ne sera entrée dans le paramètre TXT.

La macro variable doit pouvoir être utilisable à l’extérieur de la macro (macro variable globale).

2. Tester la fonction COUNT dans une étape data

La fonction COUNT permet de comptabiliser certains caractères et donc de répondre à ce type de besoin. En fait, cette fonction ne compte pas le nombre de mots mais compte le nombre de caractères définis par le second élément dans la fonction; dans notre cas, elle comptera le nombre de blancs. Il faut donc ajouter 1 au total.

Voici un exemple dans une étape data.

data _null_;
tot_wrd=1+count(‘mot1 mot2’,‘ ‘);
put tot_wrd=;
run;

Dans la log, vous pouvez voir que cnt_wrd=2.

Mais cela ne suffit pas pour gérer les blancs multiples et les blancs aux extrémités. Car si vous avez plus d’un blanc entre chaque mot, chacun sera compté. Il faut donc les enlever au préalable (avec la fonction COMPBL ici). Les blancs de début et fin peuvent s’enlever au moyen de la fonction STRIP.

data _null_;
tot_wrd=1+count(strip(compbl(‘ mot1 mot2 ‘)),‘ ‘);
put tot_wrd=;
run;

Mais que ce passe t-il si notre texte à compter est vide ? TOT_WRD sera égal à 1. Il faut donc ajouter le 1 au total que si le texte à analyser n’est pas vide.

data _null_;
length txt $200;
txt=;
if txt ne ‘ ‘ then tot_wrd=1+count(strip(compbl(txt)),‘ ‘);
put tot_wrd=;
run;

3. Créer la macro

Comme indiqué dans le dernier point, on travaille ici de manière conditionnelle. Si le paramètre de macro TXT est vide, la macro variable CNT_WRD nouvellement créée prend la valeur zéro. Sinon, On passe par la fonction COUNT.

Comme il n’existe pas d’équivalent aux fonctions COUNT et COMPBL en langage macro, il faut encadrer chacune d’elle dans une fonction macro SYSFUNC.

Ici on notera que la fonction STRIP n’apparaît pas. Les blancs de début et de fin en langage macro n’ont aucun impact.

%macro cnt_wrd(txt=);

%global tot_word;

%if &txt.= %then %let tot_wrd=0;
%else %let tot_wrd=%eval(1+%sysfunc(count(%sysfunc(compbl(&txt.)),%str( ))));

%mend cnt_wrd;

Pour représenter un blanc dans une étape data, il suffit d’utiliser des guillemets. En langage macro, on fait appel à la fonction %STR(). Il faudra ne pas oublier d’ajouter un blanc entre les parenthèses.

Afin d’ajouter 1 au résultat de la fonction COUNT, il faut utiliser la macro fonction %EVAL. Le contenu des macro variables sont sinon tous interprétés comme du texte, qu’il s’agisse de nombres ou pas.

Enfin, pour que cette macro variable TOT_WRD soit utilisable en dehors de la macro, il faut qu’elle soit globale. Hors par défaut, une macro variable créée dans une macro est locale, c’est-à-dire n’existe que le temps de la macro. L’instruction %GLOBAL TOT_WRD; résouds le problème.

4. Tester la macro dans le cadre de sa validation

Que se passe t-il quand on ne change pas la valeur par défaut du paramètre de macro ?

%cnt_wrd;
%put Valeur de TOT_WRD: &tot_wrd;

Que se passe t-il quand le paramètre de macro TXT est vide de texte ?
%put Valeur de TOT_WRD: &tot_wrd;

%cnt_wrd(txt=);
%put Valeur de TOT_WRD: &tot_wrd;

Que se passe t-il lorsqu’il n’y a qu’un mot?

%cnt_wrd(txt=mot1);
%put Valeur de TOT_WRD: &tot_wrd;

Que se passe t-il quand il y a plusieurs mots ?

%cnt_wrd(txt=mot1 mot2 mot3);
%put Valeur de TOT_WRD: &tot_wrd;

Que se passe t-il quand il y a des blancs multiples entre les mots, en début et à la fin ?

%cnt_wrd(txt= mot1 mot2 mot3 );
%put Valeur de TOT_WRD: &tot_wrd;

Que se passe t-il quand il y a des blancs multiples entre les mots, en début et à la fin ?

%cnt_wrd(txt=mot1 mot2);
%put Valeur de TOT_WRD: &tot_wrd;

Que se passe t-il quand la macro est appelée plusieurs fois ?

%cnt_wrd(txt=mot1 mot2);
%put Valeur de TOT_WRD: &tot_wrd;
%cnt_wrd(txt=mot1);
%put Valeur de TOT_WRD: &tot_wrd;

Lecture complémentaire