El objetivo es mostrar cómo la acción `table.view` del conjunto de acciones 'table' se puede utilizar para crear una vista lógica a partir de dos tablas en memoria CAS. El ejemplo carga un conjunto de datos 'cars.csv', crea una tabla de resumen 'cars_summary' a través de FedSQL, y luego combina estas dos tablas en una vista llamada 'cars_view'. También se ilustran opciones como `replace=True` y el uso de prefijos para las columnas unidas (`f1_`, `d1_`). Finalmente, la información de la vista se muestra a través de `table.tableInfo` y las primeras filas se extraen con `table.fetch`, incluyendo variables calculadas. Los ejemplos adicionales exploran la creación de vistas básicas, la aplicación de filtros y columnas calculadas, la integración de datos categorizados y la gestión de errores durante la creación de vistas.
Análisis de datos
Type : CREATION_INTERNE
Los ejemplos utilizan datos CSV cargados desde una URL support.sas.com, luego agregados o usados directamente para la creación de tablas temporales en memoria CAS, así como datos generados a través de `datalines`.
1 Bloque de código
DATA STEP / table.view Data
Explicación : Este ejemplo crea dos pequeñas tablas en memoria CAS utilizando pasos DATA y `datalines`. Luego, utiliza la acción `table.view` para crear una vista llamada `simple_view` uniendo `table1` y `table2` por la columna `ID`. Los alias `t1` y `t2` se utilizan para prefijar las columnas en la vista. Finalmente, muestra la información y las primeras filas de la vista.
¡Copiado!
/* 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 Bloque de código
DATA STEP / table.view Data
Explicación : Este ejemplo extiende el caso básico añadiendo un filtro (`where='t2_Score > 80'`) para incluir solo las filas donde la puntuación es superior a 80. También introduce una columna calculada `FullInfo` utilizando `computedVarsProgram` que concatena la información del nombre y la puntuación. El comando `table.fetch` selecciona luego variables específicas, incluida la variable calculada.
¡Copiado!
/* 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 */
Explicación : Este ejemplo carga el conjunto de datos 'cars.csv'. Luego crea una tabla agregada `cars_summary_with_category` utilizando `fedSql.execDirect`. Esta tabla agrega los datos por `drivetrain` y por una `Weight_Category` derivada dinámicamente a través de una instrucción `CASE` SQL. La vista `advanced_cars_view` se crea luego uniendo `cars_raw` y esta nueva tabla agregada por la columna `Drivetrain`. Se añade una columna calculada `FullCarInfo` para combinar varias informaciones textuales.
¡Copiado!
/* 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 */
Explicación : Este ejemplo crea una `existing_table` simple. Luego, intenta deliberadamente crear una vista (`error_view`) uniendo `existing_table` con una `non_existent_table`. Dado que `non_existent_table` no existe, la acción `table.view` fallará, demostrando así un escenario de error. Los errores se registrarán en el log de SAS/CAS. El intento posterior de acceder a `error_view` con `table.tableInfo` también resultará en un error, confirmando que la vista no ha sido creada. La tabla `existing_table` se elimina a continuación.
¡Copiado!
/* 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 */
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.