Si vous avez déjà utilisé un peu SAS, vous connaissez probablement les instructions SET et MERGE. Aujourd’hui, voici un article sur l’instruction UPDATE pour mettre à jour un data set. Cette instruction de l’étape DATA doit être utilisée en gardant en tête deux notions importantes expliquées ici.
Pour réviser ou découvrir les instructions SET et MERGE, reportez-vous aux articles suivants :
- Empiler des data sets
- La base de la jointure de deux data sets avec MERGE
- Savoir interpréter une note liée au MERGE
1. Un data set de base et un autre contenant des informations nouvelles
Dans notre exemple nous avons deux data sets YEAR_2007_FRST et YEAR_2007_EXTRA.
Le premier data set YEAR_2007_FRST est le data set à mettre à jour : il contient
- 4 observations et
- 3 variables numériques : MONTH (month pour mois), CRIT (criteria pour critère), VAL (value pour valeur).
data year_2007_frst; input month crit val; datalines; 1 2 3 4 5 6 9 9 9 10 10 10 ; run;
Le second data set YEAR_2007_EXTRA contient des informations à ajouter au premier data set. Il est composé de :
- 5 observations : certaines lignes d’observations du premier data set sont présentes mais pas toutes. Il y a aussi des lignes d’observations en plus. Parfois la valeur de la variable MONTH est identique mais par forcément celle des autres variables.
- 4 variables numériques : il y a les variables déjà présentes auparavant et une nouvelle variable.
data year_2007_extra; input month crit val val2; datalines; 1 2 3 4 1 4 5 6 7 8 9 10 9 9 . 9 10 10 .A 10 ; run;
2. Choisir une ou plusieurs variable clés
Avec l’instruction UPDATE, il faut définir une liste de variables clés. Lorsque la combinaison est présente dans les deux fichiers, les autres variables sont mises à jour. Sinon, une nouvelle ligne d’observations est ajoutée.
Ici, je choisis de désigner une ligne avec la variable MONTH et seulement la variable MONTH. Lorsque la variable MONTH du premier et du second data sets coïncident, les autres observations sont mises à jour en se servant du deuxième fichier (YEAR_2007_EXTRA).
data year_2007_frst; update year_2007_frst year_2007_extra; by month; run;
Ajouter de nouvelles observations : Avec l’exemple de l’article, la ligne où MONTH = 7 n’est pas présente dans le premier data set. Elle est ajoutée.
Ajouter de nouvelles variables : La variable VAL2 est également nouvelle et ajoutée.
3. Une seule ligne d’observation par clé dans le fichier additionnel
Lorsque le fichier additionnel (WEAR_2007_EXTRA) contient plusieurs observations, seule une est gardée. Il est donc préférable d’avoir un fichier avec une seule ligne d’observation par variable clé.
Dans notre exemple, le fichier servant pour la mise à jour a deux lignes d’observations avec MONTH égales à 1. SAS utilisera, dans un premier temps, la première pour mettre à jour le fichier. Puis réécrira dessus avec la seconde ligne d’observation.
- Avant :MONTH=1, CRIT=2, VAL=3
- Après : MONTH=1, CRIT=4, VAL=5 et VAL2=6.
4. Ignorer les valeurs manquantes du fichier de mise à jour
Si dans votre fichier de mise à jour il y a des valeurs manquantes alors que dans le fichier d’origine ce n’était pas le cas, SAS n’effacera pas la valeur sauf si la nouvelle valeur est une valeur manquante particulière (special missing).
Dans notre exemple,
- quand MONTH=9, VAL=9 avant et après, même si dans le data set additionnel, VAL était manquant (symbole point).
- quand MONTH=10, VAL=10 avant et VAL=.A après, car la nouvelle valeur est une valeur qualifiée par SAS de valeur manquante spéciale.
Au final le nouveau fichier YEAR_2007_FRST, auquel un autre nom aurait pu être donné, se présente ainsi :
month crit val val2 1 4 5 6 4 5 6 . 7 8 9 10 9 9 9 9 10 10 .A 10
5. Avoir une seule ligne par BY variable dans le fichier à mettre à jour
Après avoir noté que SAS ne remplace pas les valeurs existantes par des valeurs manquantes, je tenais à souligner une seconde particularité du UPDATE. SAS estime que la variable clé devrait identifier de manière unique une ligne d’observations dans le fichier à mettre à jour.
Dans notre exemple, SAS que la variable clé est MONTH. Il estime que chaque valeur de MONTH se doit d’être unique dans le fichier à actualiser (YEAR_2007_FRST).
Je vais donc ajouter une ligne pour que MONTH=1 apparaisse deux fois et voir la gestion qu’en fait SAS.
data year_2007_frst; input month crit val; datalines; 1 2 3 1 9 9 4 5 6 9 9 9 10 10 10 ; run;
Si ce n’est pas le cas deux choses se passe :
- D’une part, un WARNING apparaît dans la log.
- D’autre part, parmi les lignes ayant les mêmes valeurs clés, seule la première ligne sera actualisée.
Ici, la log contiendra le WARNING suivant :
-
WARNING: The MASTER data set contains more than one observation for a BY group.
Et notre fichier final, lorsque la variable MONTH =1, seule aura
month crit val val2 1 4 5 6 1 9 9 . 4 5 6 . 7 8 9 10 9 9 9 9 10 10 .A 10
En résumé, avec une instruction UPDATE, il est important de garder à l’esprit trois notions :
- les valeurs manquantes simples n’effacent pas les données d’origine.
- le data set avec les données actualisées contiendra une seule ligne d’observation par variable clé et des conséquences si ce n’est pas le cas.
- le data set à actualiser doit contenir une seule ligne d’observation par variable clé et ainsi respecter la définition de la syntaxe.
Vous trouverez dans la documentation en ligne une page sur UPDATE Statement pour compléter votre lecture.