L'action 'table.copyTable' du jeu d'actions 'table' est utilisée pour dupliquer une table CAS en mémoire. Elle prend en paramètre la table source ('table') et les options de la table de sortie ('casOut'). Les options de 'casOut' permettent de définir le nom de la nouvelle table ('name'), de spécifier si elle doit remplacer une table existante ('replace'), d'indiquer la caslib cible ('caslib'), et de contrôler la visibilité globale de la table ('promote'). Cette action est essentielle pour les opérations de préparation des données, la création de sauvegardes ou la duplication de tables pour des analyses différentes sans affecter l'originale.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données générées directement via des blocs DATA STEP avec des 'datalines' ou la table 'CARS' fournie par SASHELP, chargées en mémoire CAS.
1 Bloc de code
DATA STEP / PROC CAS Data
Explication : Cet exemple montre l'utilisation la plus simple de 'table.copyTable'. Il crée une petite table SAS locale, la charge dans la session CAS par défaut ('casauto'), puis la copie sous un nouveau nom ('produits_copie_basique') dans la même caslib ('CASUSER'). La clause 'replace=TRUE' permet de remplacer la table si elle existe déjà.
Copié !
/* Création d'une table SAS WORK locale */
DATA work.produits;
INPUT ID $ NomProduit $ Prix;
DATALINES;
P001 Pomme 1.50
P002 Orange 2.00
P003 Banane 0.75
P004 Fraise 3.20
;
RUN;
/* Démarrage d'une session CAS et chargement de la table locale en mémoire CAS */
PROC CAS; quit;
CAS casauto;
PROC CAS;
session casauto;
upload path="work.produits" casOut={name="produits_cas", replace=TRUE};
RUN;
/* Copie de la table 'produits_cas' vers 'produits_copie_basique' */
PROC CAS;
session casauto;
table.copyTable /
table={name="produits_cas"},
casOut={name="produits_copie_basique", replace=TRUE};
RUN;
/* Vérification de la nouvelle table */
PROC CAS;
session casauto;
table.tableInfo /
caslib="CASUSER",
name="produits_copie_basique";
RUN;
QUIT;
1
/* Création d'une table SAS WORK locale */
2
DATA work.produits;
3
INPUT ID $ NomProduit $ Prix;
4
DATALINES;
5
P001 Pomme 1.50
6
P002 Orange 2.00
7
P003 Banane 0.75
8
P004 Fraise 3.20
9
;
10
RUN;
11
12
/* Démarrage d'une session CAS et chargement de la table locale en mémoire CAS */
Explication : Cet exemple démontre la copie d'une table vers une autre caslib et l'utilisation de l'option 'promote'. Une table locale est créée et chargée dans 'CASUSER'. Ensuite, une nouvelle caslib nommée 'reports' est ajoutée. La table 'ventes_cas' est copiée dans cette nouvelle caslib sous le nom 'ventes_rapport' avec 'promote=TRUE', la rendant accessible à d'autres utilisateurs ou sessions CAS. Cela illustre une gestion plus avancée des tables entre différentes caslibs.
Copié !
/* Création d'une table SAS WORK locale */
DATA work.ventes_region;
INPUT Region $ Produit $ Quantite;
DATALINES;
Nord A 100
Sud B 150
Est C 80
Ouest A 200
;
RUN;
/* Démarrage d'une session CAS (si non déjà active) */
PROC CAS; quit;
CAS casauto;
/* Création d'une nouvelle caslib pour la destination */
PROC CAS;
session casauto;
table.addCaslib /
name="reports",
path="/tmp/cas_reports", /* Chemin physique sur le serveur CAS */
dataSource={srcType="path"},
subdirectories=TRUE,
replace=TRUE;
RUN;
/* Chargement de la table locale en mémoire CAS dans CASUSER */
PROC CAS;
session casauto;
upload path="work.ventes_region" casOut={name="ventes_cas", replace=TRUE};
RUN;
/* Copie de 'ventes_cas' vers la caslib 'reports' et promotion de la table */
PROC CAS;
session casauto;
table.copyTable /
table={name="ventes_cas", caslib="CASUSER"},
casOut={name="ventes_rapport", caslib="reports", promote=TRUE, replace=TRUE};
RUN;
/* Vérification de la nouvelle table dans la caslib 'reports' */
PROC CAS;
session casauto;
table.tableInfo /
caslib="reports",
name="ventes_rapport";
RUN;
/* Nettoyage de la caslib temporaire */
PROC CAS;
session casauto;
table.dropCaslib / caslib="reports", terminate=TRUE;
RUN;
QUIT;
1
/* Création d'une table SAS WORK locale */
2
DATA work.ventes_region;
3
INPUT Region $ Produit $ Quantite;
4
DATALINES;
5
Nord A 100
6
Sud B 150
7
Est C 80
8
Ouest A 200
9
;
10
RUN;
11
12
/* Démarrage d'une session CAS (si non déjà active) */
13
PROC CAS; QUIT;
14
CAS casauto;
15
16
/* Création d'une nouvelle caslib pour la destination */
17
PROC CAS;
18
SESSION casauto;
19
TABLE.addCaslib /
20
name="reports",
21
path="/tmp/cas_reports", /* Chemin physique sur le serveur CAS */
22
dataSource={srcType="path"},
23
subdirectories=TRUE,
24
replace=TRUE;
25
RUN;
26
27
/* Chargement de la table locale en mémoire CAS dans CASUSER */
Explication : Cet exemple illustre une copie plus avancée où des colonnes de la table sont renommées pendant l'opération de copie. La nouvelle table ('clients_processed') reçoit également un 'label' descriptif. Ceci est utile pour adapter les noms de colonnes à des conventions spécifiques ou pour clarifier le contenu des données dans la table copiée.
Copié !
/* Création d'une table SAS WORK locale plus complexe */
DATA work.clients_info;
LENGTH ClientID $8 NomClient $20 Age 8 Revenu 8;
INPUT ClientID NomClient $ Age Revenu;
FORMAT Revenu DOLLAR10.2;
DATALINES;
C001 Dupont 35 50000
C002 Martin 28 45000
C003 Dubois 42 60000
C004 Petit 55 75000
;
RUN;
/* Démarrage d'une session CAS (si non déjà active) */
PROC CAS; quit;
CAS casauto;
/* Chargement de la table locale en mémoire CAS */
PROC CAS;
session casauto;
upload path="work.clients_info" casOut={name="clients_original", replace=TRUE};
RUN;
/* Copie de la table avec renommage de colonnes et ajout d'un label à la nouvelle table */
PROC CAS;
session casauto;
table.copyTable /
table={name="clients_original"},
casOut={name="clients_processed", replace=TRUE,
label="Clients avec Informations Détaillées"},
rename={{name="ClientID", newname="ID_Unique"},
{name="Revenu", newname="RevenuAnnuel"}};
RUN;
/* Vérification de la nouvelle table et de ses colonnes */
PROC CAS;
session casauto;
table.columnInfo /
caslib="CASUSER",
name="clients_processed";
RUN;
PROC CAS;
session casauto;
table.fetch /
caslib="CASUSER",
table={name="clients_processed"};
RUN;
QUIT;
1
/* Création d'une table SAS WORK locale plus complexe */
2
DATA work.clients_info;
3
LENGTH ClientID $8 NomClient $20 Age 8 Revenu 8;
4
INPUT ClientID NomClient $ Age Revenu;
5
FORMAT Revenu DOLLAR10.2;
6
DATALINES;
7
C001 Dupont 3550000
8
C002 Martin 2845000
9
C003 Dubois 4260000
10
C004 Petit 5575000
11
;
12
RUN;
13
14
/* Démarrage d'une session CAS (si non déjà active) */
15
PROC CAS; QUIT;
16
CAS casauto;
17
18
/* Chargement de la table locale en mémoire CAS */
/* Copie de la table avec renommage de colonnes et ajout d'un label à la nouvelle table */
25
PROC CAS;
26
SESSION casauto;
27
TABLE.copyTable /
28
TABLE={name="clients_original"},
29
casOut={name="clients_processed", replace=TRUE,
30
label="Clients avec Informations Détaillées"},
31
rename={{name="ClientID", newname="ID_Unique"},
32
{name="Revenu", newname="RevenuAnnuel"}};
33
RUN;
34
35
/* Vérification de la nouvelle table et de ses colonnes */
36
PROC CAS;
37
SESSION casauto;
38
TABLE.columnInfo /
39
caslib="CASUSER",
40
name="clients_processed";
41
RUN;
42
43
PROC CAS;
44
SESSION casauto;
45
TABLE.fetch /
46
caslib="CASUSER",
47
TABLE={name="clients_processed"};
48
RUN;
49
QUIT;
4 Bloc de code
DATA STEP / PROC CAS Data
Explication : Cet exemple met en évidence l'intégration Viya/CAS pour la gestion de grandes tables et la performance. Il crée une table SAS locale volumineuse, puis deux caslibs distinctes ('source_data' et 'destination_data'). La table est chargée dans la caslib source, puis copiée vers la caslib destination. L'utilisation de l'option 'nthreads' dans 'copyTable' est une illustration d'optimisation des performances pour les opérations sur de grandes quantités de données en mémoire distribuée CAS. Un nettoyage des caslibs temporaires est également inclus.
Copié !
/* Création d'une table SAS WORK locale de grande taille */
DATA work.donnees_simulees;
DO i = 1 TO 10000;
ID = i;
Valeur1 = RANUNI(0) * 100;
Valeur2 = RANNORM(0) * 10;
OUTPUT;
END;
RUN;
/* Démarrage d'une session CAS (si non déjà active) */
PROC CAS; quit;
CAS casauto;
/* Création de deux caslibs pour la source et la destination */
PROC CAS;
session casauto;
table.addCaslib /
name="source_data",
path="/tmp/cas_source", /* Chemin physique sur le serveur CAS */
dataSource={srcType="path"},
subdirectories=TRUE,
replace=TRUE;
table.addCaslib /
name="destination_data",
path="/tmp/cas_destination", /* Chemin physique sur le serveur CAS */
dataSource={srcType="path"},
subdirectories=TRUE,
replace=TRUE;
RUN;
/* Chargement de la table locale dans la caslib 'source_data' */
PROC CAS;
session casauto;
upload path="work.donnees_simulees" casOut={name="grande_table_source", caslib="source_data", replace=TRUE};
RUN;
/* Copie de la table de 'source_data' vers 'destination_data' */
/* L'option 'nthreads' peut être utilisée pour optimiser la performance sur de grandes tables */
PROC CAS;
session casauto;
table.copyTable /
table={name="grande_table_source", caslib="source_data"},
casOut={name="grande_table_dest", caslib="destination_data", replace=TRUE},
nthreads=8; /* Utilise 8 threads pour la copie (nombre à ajuster selon le système) */
RUN;
/* Vérification de la table copiée dans la caslib de destination */
PROC CAS;
session casauto;
table.tableInfo /
caslib="destination_data",
name="grande_table_dest";
RUN;
/* Nettoyage des caslibs temporaires (optionnel) */
PROC CAS;
session casauto;
table.dropCaslib /
caslib="source_data",
terminate=TRUE;
table.dropCaslib /
caslib="destination_data",
terminate=TRUE;
RUN;
QUIT;
1
/* Création d'une table SAS WORK locale de grande taille */
2
DATA work.donnees_simulees;
3
DO i = 1 TO 10000;
4
ID = i;
5
Valeur1 = RANUNI(0) * 100;
6
Valeur2 = RANNORM(0) * 10;
7
OUTPUT;
8
END;
9
RUN;
10
11
/* Démarrage d'une session CAS (si non déjà active) */
12
PROC CAS; QUIT;
13
CAS casauto;
14
15
/* Création de deux caslibs pour la source et la destination */
16
PROC CAS;
17
SESSION casauto;
18
TABLE.addCaslib /
19
name="source_data",
20
path="/tmp/cas_source", /* Chemin physique sur le serveur CAS */
21
dataSource={srcType="path"},
22
subdirectories=TRUE,
23
replace=TRUE;
24
TABLE.addCaslib /
25
name="destination_data",
26
path="/tmp/cas_destination", /* Chemin physique sur le serveur CAS */
27
dataSource={srcType="path"},
28
subdirectories=TRUE,
29
replace=TRUE;
30
RUN;
31
32
/* Chargement de la table locale dans la caslib 'source_data' */
nthreads=8; /* Utilise 8 threads pour la copie (nombre à ajuster selon le système) */
46
RUN;
47
48
/* Vérification de la table copiée dans la caslib de destination */
49
PROC CAS;
50
SESSION casauto;
51
TABLE.tableInfo /
52
caslib="destination_data",
53
name="grande_table_dest";
54
RUN;
55
56
/* Nettoyage des caslibs temporaires (optionnel) */
57
PROC CAS;
58
SESSION casauto;
59
TABLE.dropCaslib /
60
caslib="source_data",
61
terminate=TRUE;
62
TABLE.dropCaslib /
63
caslib="destination_data",
64
terminate=TRUE;
65
RUN;
66
QUIT;
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.
« Utilisez systématiquement table.copyTable avec l'option replace=TRUE dans vos scripts d'automatisation. Cela garantit que vos processus ne s'arrêtent pas en cas de présence d'une ancienne version de la table, tout en vous assurant que vous travaillez toujours sur la donnée la plus fraîche disponible en mémoire »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.