h1

Les 2 visages de la fonction SUBSTR

février 26, 2008

2_visages.jpg 

Définir une nouvelle variable à partir de x caractères d’une autre variable. Substituer, dans une variable texte, les x caractères à partir du zème. Ces deux thématiques fortes différentes sont traitées avec la même fonction SUBSTR. Selon qu’elle soit placée à gauche ou à droite de l’égalité, la fonction répond à un besoin différent.  

1. Créer une nouvelle variable à partir d’un sous-ensemble d’une autre : l’application la plus courante de la fonction SUBSTR consiste à conserver un sous-ensemble d’une chaîne de caractères, en se référant à sa position de départ et à sa longueur, pour définir une nouvelle variable.

Notation : la fonction est composée de trois paramètres

  • le nom de la variable d’origine, 
  • la position du premier caractère qui nous intéresse,
  • le nombre total de caractères à partir du point de départ.

Exemple : dans l’exemple suivant, imaginez une variable ‘testcase’. Les tests tc0101, tc0102 appartiennent au même groupe, tandis que tc0201 appartient à un groupe différent. Les deux premiers chiffres font référence au groupe. Pour sauvegarder ces chiffres dans une variable ‘grp’, on utilise la fonction SUBSTR.

grp=substr(testcase,3,2);

2. Remplacer une partie d’une chaîne de caractères : pour actualiser une variable dans un data step, la démarche sous SAS est fastidieuse. Dans un cas particulier, cependant, on peut l’éviter : changer un sous-ensemble d’une variable texte défini par sa position dans la chaîne et sa longueur.

Rappel, actualiser une variable dans un data step : dans un premier, la variable est renommée. Cette variable contient les valeurs d’origine, celle qui nous intéressent. On peut ainsi définir une nouvelle variable portant le nom d’origine puisque ce nom n’existe plus. Cette nouvelle variable prendra nos valeurs d’origine, plus les nouveautés voulues via une addition, une concaténation ou autre.

Exemple : on reprend l’exemple de la première section avec notre variable ‘testcase’. On remplace la chaîne  ’tc’ commençant en position 1 et longues de 2 caractères par ‘AB’.

substr(testcase,1,2)=‘AB’;

Notez que la valeur de substitution doit être de la même longueur. Si elle est plus grande, les caractères seront ignorés. Si elle est plus petite, des blancs remplaceront les espaces manquants.  De plus, on ne peut substituer que parmi les caractères existants, blancs de début et fin de chaîne compris.

2 comments

  1. Bravo pour ton Blog il est vraiment clair, synthétique, utile, en français…
    Je le consulte souvent.
    Bravo et continue!
    Yann


  2. Ce site est une aubaine pour moi, je débute SAS 9 cette semaine …
    La rédaction est claire, les explications limpides, le graphisme parfait et les photos pleines d’humour.
    Bref “Que du bonheur !”

    Longue vie à “thesasreference” et Grand Merci.


Apporter un Commentaire