Posts Tagged ‘structure’

h1

Copier la structure d’un data set et se séparer des données

octobre 16, 2008

Sous SAS, comment récupérer les caractéristiques d’un data set dans un autre data set sans les données et ainsi s’épargner un travail occasionnel mais qui peut vite devenir fastidieux ? Le nom des variables, leur position dans le data set et leurs autres attributs (type, longueur, format, informat) forme la structure d’un data set. Pour les récupérer, deux notations sont offertes : l’option OBS= dans une étape data et le mot LIKE dans une procédure SQL.

1. Créer le data set servant d’exemple

Pour illustrer les deux notations, nous partirons d’un data set nommé CLASS contenant une ligne d’observations et trois variables :

  • le nom de l’élève (NAME),
  • la date de début du cursus (SDT pour starting date) et
  • la date de fin du cursus (EDT pour ending date).

data class;
attrib name length=$15 label=‘Nom’
sdt informat=date9. format=date9. label=‘Starting Date’
edt informat=date9. format=date9. label=‘Ending Date’;
input name $ sdt edt;
datalines;
Charline 06OCT2006 15JUN2007
;
run;

Un PROC CONTENTS résumera les attributs des variables de la manière suivante :

proc contents data=class;
run;

# Variable Type Len Pos Format Informat Label

3 edt Num 8 8 DATE9. DATE9. Ending Date
1 name Char 15 16 Nom
2 sdt Num 8 0 DATE9. DATE9. Starting Date

1. Créer un data set vide

Dans cette première partie, un data set SQL_SOLUTION et ETAPE_DATA sont créés. Les deux ont la même structure

La procédure SQL : Au lieu de désigner toutes les variables à garder après un AS SELECT, on passe directement au data set de référence en l’introduisant avec le mot LIKE.

proc sql;
create table sql_solution like class;
quit;

L’étape data : L’option data set OBS= sur le fichier d’entrée précise qu’aucune observation ne sera lue. Seul le ‘header’ du data set contenant les caractéristiques sont lues par SAS et sauvegardées dans le data set de sortie ETAPE_DATA.

data etape_data;
set class (obs=0);
run;

SAS ira un peu plus vite avec une instruction STOP.

data etape_data;
set class;
stop;
run;

3. Ajouter des observations au data set vide

Une fois le data set copié sans les observations deux lignes sont ajoutées. La première désigne Jean-Pierre qui a début en janvier 2006. Christophe est nommé en second. Il a début le 7 octobre 2005 et terminé le 18 juin 2007.

La procédure SQL : Dans la PROC SQL, je vous propose d’ajouter les observations manuellement grâce à l’instruction INSERT INTO.

proc sql;
create table sql_solution like class;
insert into sql_solution
set name=‘Jean-Pierre’, sdt=’10JAN2006′d
set name=‘Christophe’, sdt=’07OCT2005′d, edt=’18JUN2007′d;
quit;

L’étape data : Dans un data step, les nouvelles observations sont sauvegardées dans un autre data set et sont ajoutées au moyen de l’instruction SET.

data add;
name=‘Jean-Pierre’;
sdt=’10JAN2006′d;
output;
name=‘Christophe’;
sdt=’07OCT2005′d;
edt=’18JUN2007′d;
output;
run;

data etape_data;
set class (obs=0)
add;
run;

Note : Dans ce cas, il faut que le data set contenant la structure apparaissent en premier. SAS sauvegarde toujours la première variable qu’il rencontre avec ses attributs. Proposer une autre variable du même nom avec des attributs différents ensuite n’alternera pas celles sauvegardées en premier.

h1

Structure un programme, un exemple en 5 étapes

janvier 22, 2008

Tel un menu, les commentaires donnent une vue d’ensemble de votre programme SAS. Par la suite, vous devez expliquer les étapes de votre développement. Mais comment agencer votre code ? Voici un exemple extrait de la pharmaceutique. Il s’agit de créer un tableau statistique extrait de données sur les essais cliniques.

1. Des valeurs rapidement accessibles pour la maintenance du programme : dans cette première section figurent les informations utilisables à tout moment dans le programme. Voici quelques exemples de mises à jour :

  • changement de répertoire de vos données ou programmes ;
  • changement des labels apposés sur vos données codifiées ;
  • pour connaître les valeurs prises par vos variables macros.

Suivre cette convention aidera les autres programmeurs à se familiariser avec votre travail.

2. Regrouper les informations : l’information à publier est, le plus souvent, à recueillir parmi plusieurs jeux de données. Il vous faudra donc les combiner. Par exemple, les données démographiques sur les patients seront à ajouter aux résultats de laboratoire. Si seule une sous population vous intéresse, il faudra supprimer les champs inutiles.

3. Extraire les statistiques : cette section peut inclure le calcul de simples fréquences et pourcentages. Elle peut aussi faire l’objet du calcul de tests statistiques.

4. Mettre en forme les résultats : chaque tableau devra suivre une mise en page précise. Les titres devront être adaptés à chaque tableau et ces dérivés. Les données codées se verront remplacées par du texte via des formats. L’ensemble pourra être lu par des éditeurs de texte ou sur des fichiers Internet.

5. Nettoyage : enfin vous pouvez faire du nettoyage en supprimant toutes les données temporaires, qu’il s’agisse de jeux de données, de catalogues, de fichiers .log ou de noms reconnus comme chemin d’accès à une bibliothèque de données. Ce travail vous sera d’autant plus bénéfique que vous exécuterez plusieurs programmes à la suite des uns des autres. Cela vous évitera de mauvaises surprises dues à l’utilisation involontaire de données en mémoire.

Tout au long de ces cinq étapes, vous ponctuerez votre code de commentaires. Un programme s’allonge très rapidement même s’il est bien écrit. Pour un simple tableau statistique en essai clinique il n’est pas rare de voir l’équivalent d’une dizaine d’écrans. Pour naviguer rapidement d’une section à l’autre, rien de tel que de numéroter vos commentaires. Un programme SAS est composé principalement de deux groupes de texte (data step et procedure). Commentez chacun bloque de texte. Par exemple, “extraire pour chaque effet secondaire, le nombre de patient l’ayant vécu”. Si une étape est inhabituelle, fournissez les raisons.