Archive pour novembre 2009

Changer une variable Caractère en Numérique SAS.

Ce problème est un problème très simple, il est souvent rencontré lors des développements en SAS. Les informations nécessaires sont généralement fournies lors des formations SAS AVC1 (avancé I) et bien souvent oubliées par les stagiaires.

Donc voici un rappel de la méthode « propre », du changement d’une variable de type caractère en variable de type numérique.

Utilisation pour la démonstration, d’une table SAS « COMPANY » fournie en standard dans le libname « SASHELP » : sashelp.company.

Nous allons changer ici la variable « DEPTHEAD » de type caractère et de longueur 15 en une variable de type numérique et d’une longueur de 3, sans changement du nom de la variable.

Par défaut une variable numérique en SAS fait 8 de longueur et cela n’est pas toujours nécessaire, aussi si vous avez beaucoup de variable numérique et un nombre d’observation important, il est de bon ton, pour des raisons d’optimisation, de dimensionner correctement les variables numériques.

L’instruction length permet d’effectuer cela.

Théoriquement impossible, nous allons voir que la solution est assez facile à mettre en œuvre.

/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* SAS V9                                     */
/*                                            */
/* Comment convertir une variable caractère   */
/* en numérique.                              */
/*                                            */
/* Procéder en trois étapes :                 */
/* 1 Utilisez l'option dataset RENAME         */
/* 2 Utilisez la fonction de changement de    */
/*   type                                     */
/* 3 Supprimez la variable intermédiaire      */
/*                                            */
/* Auteur : Pascal MAUBERT                    */
/* ****************************************** */

data test_change_type(drop=new_var);
 set sashelp.company(rename=(DEPTHEAD=new_var));
 length DEPTHEAD 3.;
 DEPTHEAD=input(new_var,$15.);
run;

/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* Auteur : Pascal MAUBERT                    */
/* ****************************************** */