Publié le :
DATA Step CREATION_INTERNE

Créer une variable VARCHAR avec l'instruction LENGTH

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'analyse fonctionnelle détaille la création et la gestion des variables VARCHAR dans l'environnement SAS© Viya. Contrairement au type CHAR, qui utilise une longueur fixe en octets, le type VARCHAR s'adapte à la longueur réelle de la chaîne de caractères, évitant ainsi les troncations, notamment avec les caractères multi-octets. L'utilisation du moteur CAS est impérative pour la création de variables VARCHAR, car le moteur SAS© 9 ne les prend pas en charge. Il est conseillé de privilégier les VARCHAR pour les chaînes de longueur variable et de considérer les implications en termes d'utilisation de la mémoire pour les très petites chaînes.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou SASHELP pour créer des tables temporaires ou en mémoire.

1 Bloc de code
DATA STEP Data
Explication :
Cet exemple illustre la création d'une variable VARCHAR (X) et d'une variable CHAR (Y) avec une longueur maximale de 30 caractères/octets. La variable X stocke la chaîne sans gaspiller d'espace pour les caractères non utilisés, tandis que Y alloue toujours 30 octets.
Copié !
1DATA mycas.ex_base_string;
2 LENGTH x varchar(30);
3 LENGTH y $30;
4 x = 'Bonjour le monde';
5 y = 'Bonjour le monde';
6RUN;
7 
8PROC CONTENTS DATA=mycas.ex_base_string;
9RUN;
2 Bloc de code
DATA STEP Data
Explication :
Cet exemple démontre la différence de gestion des caractères multi-octets (comme 'ã' en UTF-8) entre VARCHAR et CHAR. La variable 'ville_char' de longueur 10 octets pourrait être tronquée si les caractères multi-octets dépassent la limite d'octets, alors que 'ville_varchar' de longueur 10 caractères s'adaptera correctement, stockant la chaîne complète si sa longueur de caractères est respectée, indépendamment de la taille en octets.
Copié !
1options encoding='utf-8';
2 
3DATA mycas.ex_troncature;
4 LENGTH ville_varchar varchar(10);
5 LENGTH ville_char $10;
6
7 ville_varchar = 'São Paulo'; /* 9 caractères, mais 'ã' est multi-octets en UTF-8 */
8 ville_char = 'São Paulo';
9
10 OUTPUT;
11RUN;
12 
13PROC PRINT DATA=mycas.ex_troncature;
14 title 'Comparaison VARCHAR et CHAR avec caractères multi-octets';
15RUN;
16 
17PROC CONTENTS DATA=mycas.ex_troncature;
18RUN;
3 Bloc de code
DATA STEP Data
Explication :
Cet exemple montre comment manipuler des variables VARCHAR. Il utilise la fonction `SUBSTR` pour extraire une sous-chaîne d'une variable VARCHAR et la fonction `CATX` pour concaténer plusieurs éléments (y compris une autre variable VARCHAR) en une nouvelle variable VARCHAR. Cela illustre la flexibilité du type VARCHAR dans les opérations de manipulation de chaînes de caractères.
Copié !
1DATA mycas.ex_manip_varchar;
2 LENGTH nom_produit varchar(50);
3 LENGTH description_courte varchar(20);
4
5 nom_produit = 'Ordinateur Portable Ultra-Fin XPS 15';
6 description_courte = substr(nom_produit, 1, 20);
7
8 nouvelle_chaine = catx(' - ', 'Nouveau', description_courte, 'Édition');
9 OUTPUT;
10RUN;
11 
12PROC PRINT DATA=mycas.ex_manip_varchar;
13 title 'Manipulation de variables VARCHAR';
14RUN;
15 
16PROC CONTENTS DATA=mycas.ex_manip_varchar;
17RUN;
4 Bloc de code
DATA STEP / PROC CASUTIL Data
Explication :
Cet exemple avancé illustre la création d'une table directement dans l'environnement CAS ('mycas' est une libname CAS) avec des variables VARCHAR. Il montre comment les longueurs des VARCHAR sont respectées même avec des chaînes potentiellement très longues, sans provoquer de troncature visible dans l'affichage, tant que la limite de caractères déclarée est suffisante. L'utilisation de `proc contents` confirme les types et longueurs effectives en CAS. Il souligne l'intégration naturelle des VARCHAR dans les opérations en mémoire distribuée de Viya.
Copié !
1/* Assurez-vous d'avoir une session CAS active */
2cas mycas;
3 
4/* Crée une table CAS avec une variable VARCHAR */
5DATA mycas.clients;
6 LENGTH client_id varchar(15) client_nom varchar(100);
7 client_id = 'C001';
8 client_nom = 'Dupont Martin';
9 OUTPUT;
10 
11 client_id = 'C002';
12 client_nom = 'Marie Dubois avec un nom très très long qui dépasse 100 caractères si on ne fait pas attention';
13 OUTPUT;
14RUN;
15 
16/* Affiche le contenu de la table CAS */
17PROC PRINT DATA=mycas.clients;
18 title 'Clients avec VARCHAR en CAS';
19RUN;
20 
21/* Vérifie la structure de la table CAS avec PROC CONTENTS */
22PROC CONTENTS DATA=mycas.clients;
23 title 'Contenu de la table CAS avec VARCHAR';
24RUN;
25 
26/* Utilise PROC CASUTIL pour télécharger la table CAS vers une libname SAS */
27/* Cela n'est pas nécessaire pour l'utilisation directe en CAS, mais montre l'interopérabilité */
28/* proc casutil;
29 load casdata='clients' incaslib='mycas' outcaslib='casuser' replace;
30 run; */
31 
32/* Fin de la session CAS (facultatif, selon la gestion de la session) */
33/* cas mycas terminate; */
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved.