Publicado el :
DATA Step CREATION_INTERNE

Crear una variable VARCHAR con la instrucción LENGTH

Este código también está disponible en: Deutsch English Français
En espera de validación
El análisis funcional detalla la creación y gestión de variables VARCHAR en el entorno SAS© Viya. A diferencia del tipo CHAR, que usa una longitud fija en bytes, el tipo VARCHAR se adapta a la longitud real de la cadena de caracteres, evitando así las truncaciones, especialmente con caracteres multibyte. El uso del motor CAS es imperativo para la creación de variables VARCHAR, ya que el motor SAS© 9 no las soporta. Se aconseja priorizar las VARCHAR para cadenas de longitud variable y considerar las implicaciones en términos de uso de memoria para cadenas muy pequeñas.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos usan datos generados (datalines) o SASHELP para crear tablas temporales o en memoria.

1 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo ilustra la creación de una variable VARCHAR (X) y una variable CHAR (Y) con una longitud máxima de 30 caracteres/bytes. La variable X almacena la cadena sin desperdiciar espacio para los caracteres no utilizados, mientras que Y siempre asigna 30 bytes.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo demuestra la diferencia en la gestión de caracteres multibyte (como 'ã' en UTF-8) entre VARCHAR y CHAR. La variable 'ville_char' de longitud 10 bytes podría ser truncada si los caracteres multibyte exceden el límite de bytes, mientras que 'ville_varchar' de longitud 10 caracteres se adaptará correctamente, almacenando la cadena completa si su longitud de caracteres es respetada, independientemente del tamaño en bytes.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo muestra cómo manipular variables VARCHAR. Utiliza la función `SUBSTR` para extraer una subcadena de una variable VARCHAR y la función `CATX` para concatenar varios elementos (incluida otra variable VARCHAR) en una nueva variable VARCHAR. Esto ilustra la flexibilidad del tipo VARCHAR en las operaciones de manipulación de cadenas de caracteres.
¡Copiado!
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 Bloque de código
DATA STEP / PROC CASUTIL Data
Explicación :
Este ejemplo avanzado ilustra la creación de una tabla directamente en el entorno CAS ('mycas' es una libname CAS) con variables VARCHAR. Muestra cómo se respetan las longitudes de las VARCHAR incluso con cadenas potencialmente muy largas, sin causar truncamiento visible en la visualización, siempre que el límite de caracteres declarado sea suficiente. El uso de `proc contents` confirma los tipos y longitudes efectivas en CAS. Destaca la integración natural de las VARCHAR en las operaciones de memoria distribuida de Viya.
¡Copiado!
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; */
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved.