/****************************************************************************** * Programme : Betrieb eines FedSQL-Resultatsets mit nativer Sprache * Reference : BETRIE6DCA * Source : https://www.wearecas.eu/en/sampleCode/BETRIE6DCA ******************************************************************************/ /* --- BLOC 1 --- */ * Création d'une table CAS temporaire pour l'exemple ; data casuser.employees; input EmpID Name $ Pos $ Salary; datalines; 1 John Manager 60000 2 Jane Developer 70000 3 Mike Sales_Associate 50000 4 Sarah Manager 65000 5 David Developer 72000 6 Emily Sales_Associate 52000 7 Chris Manager 62000 8 Laura Developer 68000 ; run; proc cas; /* Exécuter une requête FedSQL simple pour compter les postes */ fedSql.execDirect result=r query=' select Pos, count(Pos) as Count_Pos from casuser.employees group by Pos order by Count_Pos desc '; print r; quit; /* --- BLOC 2 --- */ /* La table casuser.employees est créée dans l'exemple 1 */ proc cas; /* Sélectionner les développeurs gagnant plus de 70000 et trier par salaire */ fedSql.execDirect result=developers_high_salary query=' select EmpID, Name, Salary from casuser.employees where Pos = ''Developer'' and Salary > 70000 order by Salary desc '; print developers_high_salary; quit; /* --- BLOC 3 --- */ /* La table casuser.employees est créée dans l'exemple 1 */ proc cas; /* Étape 1: Obtenir les postes distincts */ fedSql.execDirect result=distinct_pos query=' select distinct Pos from casuser.employees '; /* Itérer sur les postes pour créer des tables spécifiques */ t = findtable(distinct_pos); do i = 1 to t.nrows; row = t[i]; jobTitle = trim(row['Pos']); jobTitleNoSpaces = compress(jobTitle, ' '); tableName = jobTitleNoSpaces; createTableString = 'create table ' || tableName || ' {options replace=true} as ' || 'select * from casuser.employees where Pos = ''' || jobTitle || ''''; print 'Création de la table ' || tableName || '...'; fedSql.execDirect query=createTableString; end; /* Afficher le contenu des tables créées dynamiquement (exemple pour 'Manager') */ title 'Contenu de la table Manager'; fedSql.execDirect query='select * from Manager'; run; title 'Contenu de la table Developer'; fedSql.execDirect query='select * from Developer'; run; title 'Contenu de la table SalesAssociate'; fedSql.execDirect query='select * from SalesAssociate'; run; quit; /* --- BLOC 4 --- */ * Création de deux tables CAS temporaires pour la jointure ; data casuser.employees_details; input EmpID Name $ Age; datalines; 1 John 30 2 Jane 28 3 Mike 35 4 Sarah 40 5 David 32 6 Emily 29 7 Chris 45 8 Laura 31 ; run; data casuser.employees_salary; input EmpID Salary; datalines; 1 60000 2 70000 3 50000 4 65000 5 72000 6 52000 7 62000 8 68000 ; run; proc cas; /* Charger les tables en mémoire CAS si elles ne le sont pas déjà */ table.loadtable caslib='casuser' path='employees_details' replace=TRUE; table.loadtable caslib='casuser' path='employees_salary' replace=TRUE; /* Joindre les deux tables en mémoire CAS */ fedSql.execDirect result=employees_full_info query=' select T1.EmpID, T1.Name, T1.Age, T2.Salary from casuser.employees_details as T1 inner join casuser.employees_salary as T2 on T1.EmpID = T2.EmpID order by T1.Name '; print employees_full_info; quit;