/****************************************************************************** * Programme : Create a View with Two Tables * Reference : CREATEF364 * Source : https://www.wearecas.eu/fr/sampleCode/CREATEF364 ******************************************************************************/ /* --- BLOC 1 --- */ /* 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; /* --- BLOC 2 --- */ /* 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; /* --- BLOC 3 --- */ /* 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; /* --- BLOC 4 --- */ /* 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;