L'objectif est de montrer comment l'action `table.view` de l'action set 'table' peut être utilisée pour créer une vue logique à partir de deux tables en mémoire CAS. L'exemple charge un jeu de données 'cars.csv', crée une table de résumé 'cars_summary' via FedSQL, puis combine ces deux tables en une vue nommée 'cars_view'. Des options telles que `replace=True` et l'utilisation de préfixes pour les colonnes jointes (`f1_`, `d1_`) sont également illustrées. Enfin, les informations de la vue sont affichées via `table.tableInfo` et les premières lignes sont extraites avec `table.fetch`, incluant des variables calculées. Les exemples supplémentaires explorent la création de vues basiques, l'application de filtres et de colonnes calculées, l'intégration de données catégorisées, et la gestion des erreurs lors de la création de vues.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données CSV chargées à partir d'une URL support.sas.com, puis agrégées ou directement utilisées pour la création de tables temporaires en mémoire CAS, ainsi que des données générées via `datalines`.
1 Bloc de code
DATA STEP / table.view Data
Explication : Cet exemple crée deux petites tables en mémoire CAS à l'aide de DATA steps et de `datalines`. Ensuite, il utilise l'action `table.view` pour créer une vue nommée `simple_view` en joignant `table1` et `table2` sur la colonne `ID`. Les alias `t1` et `t2` sont utilisés pour préfixer les colonnes dans la vue. Enfin, il affiche les informations et les premières lignes de la vue.
Copié !
/* Exemple 1 : Utilisation Basique */
/* Crée deux tables CAS simples et une vue qui les joint. */
/* Assurez-vous d'avoir une session CAS active */
options cashost="cloud.example.com" casport=5570;
cas casauto;
/* Création de la première table (fictif) */
data casuser.table1(promote=yes);
input ID $ Name $;
datalines;
101 Alice
102 Bob
103 Charlie
;
run;
/* Création de la deuxième table (fictif) */
data casuser.table2(promote=yes);
input ID $ Score;
datalines;
101 85
102 92
104 78
;
run;
/* Création de la vue en joignant les deux tables */
proc cas;
table.view /
name="simple_view",
replace=True,
tables={
{name="table1", as="t1"},
{name="table2", as="t2", keys="t1_ID=t2_ID"}
};
run;
/* Affichage des informations de la vue */
proc cas;
table.tableInfo / table="simple_view";
run;
/* Affichage des premières lignes de la vue */
proc cas;
table.fetch /
table="simple_view",
to=5;
run;
1
/* Exemple 1 : Utilisation Basique */
2
/* Crée deux tables CAS simples et une vue qui les joint. */
3
4
/* Assurez-vous d'avoir une session CAS active */
5
options cashost="cloud.example.com" casport=5570;
6
cas casauto;
7
8
/* Création de la première table (fictif) */
9
DATA casuser.table1(promote=yes);
10
INPUT ID $ Name $;
11
DATALINES;
12
101 Alice
13
102 Bob
14
103 Charlie
15
;
16
RUN;
17
18
/* Création de la deuxième table (fictif) */
19
DATA casuser.table2(promote=yes);
20
INPUT ID $ Score;
21
DATALINES;
22
10185
23
10292
24
10478
25
;
26
RUN;
27
28
/* Création de la vue en joignant les deux tables */
29
PROC CAS;
30
TABLE.view /
31
name="simple_view",
32
replace=True,
33
tables={
34
{name="table1", as="t1"},
35
{name="table2", as="t2", keys="t1_ID=t2_ID"}
36
};
37
RUN;
38
39
/* Affichage des informations de la vue */
40
PROC CAS;
41
TABLE.tableInfo / TABLE="simple_view";
42
RUN;
43
44
/* Affichage des premières lignes de la vue */
45
PROC CAS;
46
TABLE.fetch /
47
TABLE="simple_view",
48
to=5;
49
RUN;
50
2 Bloc de code
DATA STEP / table.view Data
Explication : Cet exemple étend le cas basique en ajoutant un filtrage (`where='t2_Score > 80'`) pour inclure uniquement les lignes où le score est supérieur à 80. Il introduit également une colonne calculée `FullInfo` en utilisant `computedVarsProgram` qui concatène les informations du nom et du score. La commande `table.fetch` sélectionne ensuite des variables spécifiques, y compris la variable calculée.
Copié !
/* Exemple 2 : Options Courantes (Filtrage et sélection de colonnes) */
/* Utilise les tables de l'exemple 1 et crée une vue filtrée avec des colonnes spécifiques. */
/* Assurez-vous d'avoir une session CAS active */
options cashost="cloud.example.com" casport=5570;
cas casauto;
/* Création de la première table (fictif) */
data casuser.table1(promote=yes);
input ID $ Name $;
datalines;
101 Alice
102 Bob
103 Charlie
104 David
;
run;
/* Création de la deuxième table (fictif) */
data casuser.table2(promote=yes);
input ID $ Score;
datalines;
101 85
102 92
103 78
104 65
;
run;
/* Création de la vue avec un filtre et sélection de colonnes */
proc cas;
table.view /
name="filtered_view",
replace=True,
tables={
{name="table1", as="t1"},
{name="table2", as="t2", keys="t1_ID=t2_ID"}
},
where="t2_Score > 80",
computedVarsProgram="FullInfo = t1_Name || ' (Score: ' || strip(put(t2_Score, 3.)) || ')'",
computedVars={"FullInfo"}
;
run;
/* Affichage des informations de la vue */
proc cas;
table.tableInfo / table="filtered_view";
run;
/* Affichage des premières lignes de la vue avec les colonnes sélectionnées */
proc cas;
table.fetch /
table="filtered_view",
fetchVars={"t1_ID", "t1_Name", "t2_Score", "FullInfo"},
to=5;
run;
1
/* Exemple 2 : Options Courantes (Filtrage et sélection de colonnes) */
2
/* Utilise les tables de l'exemple 1 et crée une vue filtrée avec des colonnes spécifiques. */
3
4
/* Assurez-vous d'avoir une session CAS active */
5
options cashost="cloud.example.com" casport=5570;
6
cas casauto;
7
8
/* Création de la première table (fictif) */
9
DATA casuser.table1(promote=yes);
10
INPUT ID $ Name $;
11
DATALINES;
12
101 Alice
13
102 Bob
14
103 Charlie
15
104 David
16
;
17
RUN;
18
19
/* Création de la deuxième table (fictif) */
20
DATA casuser.table2(promote=yes);
21
INPUT ID $ Score;
22
DATALINES;
23
10185
24
10292
25
10378
26
10465
27
;
28
RUN;
29
30
/* Création de la vue avec un filtre et sélection de colonnes */
Explication : Cet exemple charge le jeu de données 'cars.csv'. Il crée ensuite une table agrégée `cars_summary_with_category` en utilisant `fedSql.execDirect`. Cette table agrège les données par `drivetrain` et par une `Weight_Category` dérivée dynamiquement via une instruction `CASE` SQL. La vue `advanced_cars_view` est ensuite créée en joignant `cars_raw` et cette nouvelle table agrégée sur la colonne `Drivetrain`. Une colonne calculée `FullCarInfo` est ajoutée pour combiner plusieurs informations textuelles.
Copié !
/* Exemple 3 : Cas Avancé (Table dérivée avec catégorie de poids et jointure) */
/* Charge le jeu de données Cars, crée une table agrégée avec une catégorie de poids, puis une vue. */
/* Assurez-vous d'avoir une session CAS active */
options cashost="cloud.example.com" casport=5570;
cas casauto;
/* Téléchargement et chargement du fichier CSV cars.csv */
%let data='http://support.sas.com/documentation/onlinedoc/viya/exampledatasets/cars.csv';
filename t temp;
proc http method="get" url=&data. out=t;
run;
%let temppath = %sysfunc(quote(%sysfunc(pathname(t))));
proc cas;
upload path=&temppath.
importoptions={
fileType="csv",
getNames=True
},
casout={
name="cars_raw",
replace=True
};
run;
/* Création d'une table agrégée avec une catégorie de poids dérivée */
proc cas;
fedSql.execDirect /
query="create table cars_summary_with_category{options replace=True} as
select
drivetrain,
(case
when weight <= 1500 then 'Light'
when weight > 1500 and weight <= 3000 then 'Medium'
else 'Heavy'
end) as Weight_Category,
avg(mpg_city) as Avg_MPG_City
from cars_raw
group by drivetrain, Weight_Category;";
run;
/* Création de la vue en joignant cars_raw et cars_summary_with_category */
proc cas;
table.view /
name="advanced_cars_view",
replace=True,
tables={
{name="cars_raw", as="r1"},
{name="cars_summary_with_category", as="s1", keys="r1_Drivetrain=s1_Drivetrain"}
},
computedVarsProgram="FullCarInfo = r1_Make || ' - ' || r1_Model || ' (' || s1_Weight_Category || ')';"
;
run;
/* Affichage des informations de la vue */
proc cas;
table.tableInfo / table="advanced_cars_view";
run;
/* Affichage des premières lignes de la vue */
proc cas;
table.fetch /
table="advanced_cars_view",
fetchVars={"FullCarInfo", "r1_Drivetrain", "r1_Weight", "s1_Weight_Category", "s1_Avg_MPG_City"},
to=5;
run;
1
/* Exemple 3 : Cas Avancé (Table dérivée avec catégorie de poids et jointure) */
2
/* Charge le jeu de données Cars, crée une table agrégée avec une catégorie de poids, puis une vue. */
3
4
/* Assurez-vous d'avoir une session CAS active */
5
options cashost="cloud.example.com" casport=5570;
6
cas casauto;
7
8
/* Téléchargement et chargement du fichier CSV cars.csv */
Explication : Cet exemple crée une `existing_table` simple. Ensuite, il tente délibérément de créer une vue (`error_view`) en joignant `existing_table` avec une `non_existent_table`. Étant donné que `non_existent_table` n'existe pas, l'action `table.view` échouera, démontrant ainsi un scénario d'erreur. Les erreurs seront enregistrées dans le log SAS/CAS. La tentative subséquente d'accéder à `error_view` avec `table.tableInfo` entraînera également une erreur, confirmant que la vue n'a pas été créée. La table `existing_table` est ensuite supprimée.
Copié !
/* Exemple 4 : Intégration Viya (Gestion d'erreur lors de la création de vue) */
/* Tente de créer une vue avec une table inexistante et capture l'erreur. */
/* Assurez-vous d'avoir une session CAS active */
options cashost="cloud.example.com" casport=5570;
cas casauto;
/* Création d'une table valide pour la démonstration */
data casuser.existing_table(promote=yes);
input ID $ Value;
datalines;
A 10
B 20
C 30
;
run;
/* Tentative de création d'une vue avec une table inexistante */
/* La vue ne sera pas créée, et une erreur sera loguée. */
proc cas;
/* La commande 'table.view' générera une erreur si 'non_existent_table' n'existe pas. */
/* Dans un programme CASL plus robuste, un bloc try/catch serait utilisé. */
/* Pour cet exemple, l'erreur sera visible dans le log SAS/CAS. */
table.view /
name="error_view",
replace=True,
tables={
{name="existing_table", as="e1"},
{name="non_existent_table", as="n1", keys="e1_ID=n1_ID"} /* Cette table n'existe pas */
};
run; quit; /* La vue ne sera pas créée. */
/* Tenter d'afficher des informations sur la vue inexistante (cela générera aussi une erreur) */
proc cas;
table.tableInfo / table="error_view";
run; quit;
/* Nettoyage: suppression de la table existante */
proc cas;
table.dropTable / caslib="casuser" name="existing_table";
run;
1
/* Exemple 4 : Intégration Viya (Gestion d'erreur lors de la création de vue) */
2
/* Tente de créer une vue avec une table inexistante et capture l'erreur. */
3
4
/* Assurez-vous d'avoir une session CAS active */
5
options cashost="cloud.example.com" casport=5570;
6
cas casauto;
7
8
/* Création d'une table valide pour la démonstration */
9
DATA casuser.existing_table(promote=yes);
10
INPUT ID $ Value;
11
DATALINES;
12
A 10
13
B 20
14
C 30
15
;
16
RUN;
17
18
/* Tentative de création d'une vue avec une table inexistante */
19
/* La vue ne sera pas créée, et une erreur sera loguée. */
20
PROC CAS;
21
/* La commande 'table.view' générera une erreur si 'non_existent_table' n'existe pas. */
22
/* Dans un programme CASL plus robuste, un bloc try/catch serait utilisé. */
23
/* Pour cet exemple, l'erreur sera visible dans le log SAS/CAS. */
24
TABLE.view /
25
name="error_view",
26
replace=True,
27
tables={
28
{name="existing_table", as="e1"},
29
{name="non_existent_table", as="n1", keys="e1_ID=n1_ID"} /* Cette table n'existe pas */
30
};
31
RUN; QUIT; /* La vue ne sera pas créée. */
32
33
/* Tenter d'afficher des informations sur la vue inexistante (cela générera aussi une erreur) */
34
PROC CAS;
35
TABLE.tableInfo / TABLE="error_view";
36
RUN; QUIT;
37
38
/* Nettoyage: suppression de la table existante */
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.
« "Multiplier les tables physiques en mémoire pour chaque étape de transformation est une pratique qui mène rapidement à l'encombrement des caslibs et à des erreurs de versioning. La vue CAS est la réponse à ce défi.
En utilisant l'option replace=True et en gérant proprement les erreurs de tables inexistantes, vous construisez des applications plus robustes. Les vues permettent de masquer la complexité des jointures aux outils de visualisation comme SAS Visual Analytics. L'utilisateur ne voit qu'une seule table propre, tandis que le moteur CAS gère en coulisse la complexité des relations et des agrégations en temps réel, garantissant ainsi une expérience fluide et sécurisée »
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.