Publié le :

Types de Données SAS dans CAS

Ce code est également disponible en : Deutsch English Español
Snippet validé
Les types de données dans SAS© Cloud Analytic Services définissent la nature des informations stockées dans chaque colonne d'une table, influençant directement la quantité de mémoire allouée et la manière dont les valeurs sont traitées.
  • CHAR(n): Pour les chaînes de caractères à longueur fixe, où `n` est le nombre maximal de caractères. Les valeurs plus courtes sont complétées par des espaces. Ce type ne supporte pas les valeurs NULL ANSI SQL.
  • VARCHAR(n): Pour les chaînes de caractères à longueur variable. Les valeurs ne sont pas complétées par des espaces. Idéal pour des données dont la longueur varie. `VARCHAR(*)` peut être utilisé quand la longueur maximale n'est pas connue, mais cela peut entraîner une conversion en `CHAR(32767)` lors de la copie vers des bibliothèques ne supportant pas `VARCHAR`.
  • DOUBLE: Représente un nombre flottant à double précision (64 bits) permettant une grande magnitude et une haute précision, et supporte les valeurs manquantes.
Les exemples suivants illustrent l'utilisation de ces types de données dans l'environnement SAS© Viya 4 avec des interactions CASL.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou SASHELP, garantissant leur autonomie et exécution directe.

1 Bloc de code
DATA STEP Data
Explication :
Cet exemple simple crée une table CAS nommée `fixed_char` avec une colonne `name` de type `CHAR(10)`. Les valeurs assignées sont de longueur inférieure ou égale à 10 caractères et seront complétées par des espaces à droite si nécessaire. `proc print` est utilisé pour afficher la table.
Copié !
1/* Création d'une table CAS avec une colonne CHAR de longueur fixe */
2cas libref=casuser;
3 
4DATA casuser.fixed_char;
5 LENGTH name char(10);
6 name = 'Alice';
7 OUTPUT;
8 name = 'Bob';
9 OUTPUT;
10RUN;
11 
12/* Affichage du contenu de la table pour vérifier */
13PROC PRINT DATA=casuser.fixed_char;
14RUN;
15 
16/* Nettoyage */
17PROC CAS;
18 TABLE.dropTable RESULT=r / name='fixed_char' caslib='casuser';
19 PRINT r;
20RUN;
21QUIT;
2 Bloc de code
DATA STEP Data
Explication :
Cet exemple utilise le type `VARCHAR(50)` pour la colonne `description`. On observe que les valeurs sont stockées avec leur longueur réelle sans padding, même si elles sont plus courtes que la longueur maximale définie. `proc columnInfo` est utilisé pour inspecter les attributs des colonnes, y compris leurs longueurs.
Copié !
1/* Création d'une table CAS avec une colonne VARCHAR de longueur explicite */
2cas libref=casuser;
3 
4DATA casuser.varying_char_example;
5 LENGTH description varchar(50);
6 description = 'Ceci est une description courte.';
7 OUTPUT;
8 description = 'Ceci est une description beaucoup plus longue qui utilise plus de caractères.';
9 OUTPUT;
10 description = 'Court';
11 OUTPUT;
12RUN;
13 
14/* Affichage du contenu et des informations sur les colonnes pour vérifier les longueurs réelles */
15PROC PRINT DATA=casuser.varying_char_example;
16RUN;
17 
18PROC CAS;
19 TABLE.columnInfo RESULT=c / TABLE='varying_char_example' caslib='casuser';
20 PRINT c;
21RUN;
22QUIT;
23 
24/* Nettoyage */
25PROC CAS;
26 TABLE.dropTable RESULT=r / name='varying_char_example' caslib='casuser';
27 PRINT r;
28RUN;
29QUIT;
3 Bloc de code
DATA STEP Data
Explication :
Cet exemple illustre l'utilisation du type `DOUBLE` pour stocker des nombres avec une grande précision, y compris des nombres très petits et très grands, ainsi que des valeurs manquantes. `proc columnInfo` confirme le type de colonne, et `table.fetch` est utilisé pour récupérer et afficher les données, démontrant la gestion des valeurs manquantes et la précision des flottants.
Copié !
1/* Création d'une table CAS avec une colonne DOUBLE incluant des valeurs manquantes et des nombres à haute précision */
2cas libref=casuser;
3 
4DATA casuser.double_advanced;
5 INPUT num_val;
6 DATALINES;
7100.123456789
8.
91.23456789123456789E-10
10-5.6789123456789E+12
11;
12RUN;
13 
14/* Affichage des informations sur les colonnes pour confirmer le type DOUBLE */
15PROC CAS;
16 TABLE.columnInfo RESULT=c / TABLE='double_advanced' caslib='casuser';
17 PRINT c;
18RUN;
19 
20/* Récupération et affichage des données pour montrer la précision et les manquants */
21PROC CAS;
22 TABLE.fetch RESULT=f / TABLE='double_advanced' caslib='casuser';
23 PRINT f;
24RUN;
25QUIT;
26 
27/* Nettoyage */
28PROC CAS;
29 TABLE.dropTable RESULT=r / name='double_advanced' caslib='casuser';
30 PRINT r;
31RUN;
32QUIT;
4 Bloc de code
DATA STEP / PROC CONTENTS Data
Explication :
Cet exemple avancé montre comment les types `VARCHAR(*)` et `CHAR(n)` se comportent lors de la copie d'une table CAS vers une bibliothèque SAS standard (non-CAS). On observe que `VARCHAR(*)` peut se convertir en une colonne `CHAR(32767)` dans un contexte non-CAS, tandis que `CHAR(n)` conservera sa longueur fixe, tronquant les données si elles sont trop longues. `PROC CONTENTS` est utilisé pour vérifier les longueurs des colonnes après la copie.
Copié !
1/* Initialise une session CAS */
2cas libref=casuser;
3 
4/* Crée une table CAS avec une colonne VARCHAR(*) */
5DATA casuser.varchar_star_orig;
6 LENGTH comments varchar(*);
7 comments = 'Un commentaire.'; OUTPUT;
8 comments = 'Un commentaire très long, dont la taille maximale n''est pas prédéfinie, pour observer l''impact lors de la copie.'; OUTPUT;
9RUN;
10 
11/* Crée une table CAS avec une colonne CHAR(10) */
12DATA casuser.char_fixed_orig;
13 LENGTH short_text char(10);
14 short_text = 'Hello'; OUTPUT;
15 short_text = 'WorldLonger'; /* Sera tronqué */
16 OUTPUT;
17RUN;
18 
19/* Copie les tables CAS vers une bibliothèque de travail SAS standard */
20/* Remarque: La bibliothèque WORK est un chemin local non-CAS. */
21/* Pour une exécution hors de SAS Studio/Viya, ajuster le LIBNAME si nécessaire */
22LIBNAME work clear;
23 
24DATA work.varchar_star_copy;
25 SET casuser.varchar_star_orig;
26RUN;
27 
28DATA work.char_fixed_copy;
29 SET casuser.char_fixed_orig;
30RUN;
31 
32/* Vérifie les attributs des colonnes dans la table copiée */
33PROC CONTENTS DATA=work.varchar_star_copy varnum; RUN;
34PROC CONTENTS DATA=work.char_fixed_copy varnum; RUN;
35 
36/* Affiche le contenu de la table CHAR pour voir la troncature */
37PROC PRINT DATA=work.char_fixed_copy;
38RUN;
39 
40/* Nettoyage des tables CAS */
41PROC CAS;
42 TABLE.dropTable RESULT=r / name='varchar_star_orig' caslib='casuser';
43 PRINT r;
44 TABLE.dropTable RESULT=r / name='char_fixed_orig' caslib='casuser';
45 PRINT r;
46RUN;
47QUIT;
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.


Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Le passage à SAS Cloud Analytic Services (CAS) introduit des nuances fondamentales dans la gestion des données. Contrairement au moteur SAS 9 traditionnel, CAS est optimisé pour le traitement en mémoire, ce qui rend le choix du type de colonne déterminant pour la performance et l'intégrité de vos analyses. »