{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solution"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Importez les données les données se trouvant dans le répertoire `data/hr/`. Ensuite vous pouvez répondre aux questions ci-dessous."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"filename mesDos 'data/hr/departments.csv';\n",
"proc import datafile=mesDos\n",
" DBMS=csv\n",
" out=departments\n",
" replace\n",
" ;\n",
"run;\n",
"\n",
"filename mesDos 'data/hr/employees.csv';\n",
"proc import datafile=mesDos\n",
" DBMS=csv\n",
" out=employees\n",
" replace\n",
" ;\n",
"run;\n",
"\n",
"filename mesDos 'data/hr/jobs.csv';\n",
"proc import datafile=mesDos\n",
" DBMS=csv\n",
" out=jobs\n",
" replace\n",
" ;\n",
"run;\n",
"\n",
"filename mesDos 'data/hr/job_history.csv';\n",
"proc import datafile=mesDos\n",
" DBMS=csv\n",
" out=job_history\n",
" replace\n",
" ;\n",
"run;\n",
"\n",
"filename mesDos 'data/hr/locations.csv';\n",
"proc import datafile=mesDos\n",
" DBMS=csv\n",
" out=locations\n",
" replace\n",
" ;\n",
"run;\n",
"\n",
"filename mesDos 'data/hr/regions.csv';\n",
"proc import datafile=mesDos\n",
" DBMS=csv\n",
" out=regions\n",
" replace\n",
" ;\n",
"run;\n",
"title \"Importation des données\";\n",
"title;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Écrivez une procédure `proc sql` qui permet d'obtenir un tableau contenant les informations suivantes;\n",
"* first_name\n",
"* last_name\n",
"* department_name,\n",
"* city, \n",
"* state_province"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"FIRST_NAME | \n",
"LAST_NAME | \n",
"DEPARTMENT_NAME | \n",
"CITY | \n",
"STATE_PROVINCE | \n",
"
\n",
"\n",
"\n",
"\n",
"Kimberely | \n",
"Grant | \n",
" | \n",
" | \n",
" | \n",
"
\n",
"\n",
"Bruce | \n",
"Ernst | \n",
"IT | \n",
"Southlake | \n",
"Texas | \n",
"
\n",
"\n",
"Alexander | \n",
"Hunold | \n",
"IT | \n",
"Southlake | \n",
"Texas | \n",
"
\n",
"\n",
"David | \n",
"Austin | \n",
"IT | \n",
"Southlake | \n",
"Texas | \n",
"
\n",
"\n",
"Diana | \n",
"Lorentz | \n",
"IT | \n",
"Southlake | \n",
"Texas | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql outobs=5;\n",
"\tselect \tE.first_name, \n",
"\t\t\tE.last_name,\n",
"\t\t\tD.department_name,\n",
"\t\t\tL.city, \n",
"\t\t\tL.state_province\n",
"\tfrom work.employees as E\n",
"\tleft join departments D \n",
" ON E.department_id = D.department_id\n",
" \tleft join locations L\n",
" ON D.location_id = L.location_id;\n",
"\t;\n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ecrire une procédure `proc sql` pour afficher le prénom, le nom, le numéro de département et le nom du département, pour tous les employés des départements 80 ou 40"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"FIRST_NAME | \n",
"LAST_NAME | \n",
"DEPARTMENT_ID | \n",
"DEPARTMENT_NAME | \n",
"
\n",
"\n",
"\n",
"\n",
"Ellen | \n",
"Abel | \n",
"80 | \n",
"Sales | \n",
"
\n",
"\n",
"Sundar | \n",
"Ande | \n",
"80 | \n",
"Sales | \n",
"
\n",
"\n",
"Mozhe | \n",
"Atkinson | \n",
"50 | \n",
" | \n",
"
\n",
"\n",
"David | \n",
"Austin | \n",
"60 | \n",
" | \n",
"
\n",
"\n",
"Hermann | \n",
"Baer | \n",
"70 | \n",
" | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql outobs=5;\n",
"SELECT E.first_name , E.last_name , \n",
" E.department_id , D.department_name \n",
" FROM employees E \n",
" left JOIN departments D \n",
" ON E.department_id = D.department_id \n",
" AND E.department_id IN (80 , 40)\n",
" ORDER BY E.last_name;\n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Écrire une procédure `proc sql` pour afficher les prénoms des employés qui contiennent une lettre z et leur nom de famille, département, ville et état."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"FIRST_NAME | \n",
"LAST_NAME | \n",
"DEPARTMENT_NAME | \n",
"CITY | \n",
"STATE_PROVINCE | \n",
"
\n",
"\n",
"\n",
"\n",
"Mozhe | \n",
"Atkinson | \n",
"Shipping | \n",
"South San Francisco | \n",
"California | \n",
"
\n",
"\n",
"Hazel | \n",
"Philtanke | \n",
"Shipping | \n",
"South San Francisco | \n",
"California | \n",
"
\n",
"\n",
"Elizabeth | \n",
"Bates | \n",
"Sales | \n",
"OX9 9ZB | \n",
"Oxford | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql;\n",
"SELECT E.first_name,E.last_name,\n",
" D.department_name, L.city, L.state_province\n",
" FROM employees E \n",
" left JOIN departments D \n",
" ON E.department_id = D.department_id \n",
" left JOIN locations L \n",
" ON D.location_id = L.location_id \n",
" WHERE E.first_name LIKE '%z%';\n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Écrire une procédure `proc sql` pour afficher le prénom et le nom et le salaire pour les employés qui gagnent moins que l'employé gagnent 182."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"FIRST_NAME | \n",
"LAST_NAME | \n",
"SALARY | \n",
"
\n",
"\n",
"\n",
"\n",
"James | \n",
"Landry | \n",
"2400 | \n",
"
\n",
"\n",
"Steven | \n",
"Markle | \n",
"2200 | \n",
"
\n",
"\n",
"TJ | \n",
"Olson | \n",
"2100 | \n",
"
\n",
"\n",
"Ki | \n",
"Gee | \n",
"2400 | \n",
"
\n",
"\n",
"Hazel | \n",
"Philtanke | \n",
"2200 | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql outobs=5;\n",
"SELECT E.first_name, E.last_name, E.salary \n",
" FROM employees E \n",
" left JOIN employees S\n",
" ON E.salary < S.salary \n",
" where E.DEPARTMENT_ID between 40 and 80\n",
"/* AND S.employee_id = 182; */ \n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Trouvez les employés qui gagnent moins que le salaire moyen de tous les employés"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"EMPLOYEE_ID | \n",
"FIRST_NAME | \n",
"LAST_NAME | \n",
"EMAIL | \n",
"PHONE_NUMBER | \n",
"HIRE_DATE | \n",
"JOB_ID | \n",
"SALARY | \n",
"COMMISSION_PCT | \n",
"MANAGER_ID | \n",
"DEPARTMENT_ID | \n",
"
\n",
"\n",
"\n",
"\n",
"104 | \n",
"Bruce | \n",
"Ernst | \n",
"BERNST | \n",
"590.423.4568 | \n",
"1987-06-21 | \n",
"IT_PROG | \n",
"6000 | \n",
"0 | \n",
"103 | \n",
"60 | \n",
"
\n",
"\n",
"105 | \n",
"David | \n",
"Austin | \n",
"DAUSTIN | \n",
"590.423.4569 | \n",
"1987-06-22 | \n",
"IT_PROG | \n",
"4800 | \n",
"0 | \n",
"103 | \n",
"60 | \n",
"
\n",
"\n",
"106 | \n",
"Valli | \n",
"Pataballa | \n",
"VPATABAL | \n",
"590.423.4560 | \n",
"1987-06-23 | \n",
"IT_PROG | \n",
"4800 | \n",
"0 | \n",
"103 | \n",
"60 | \n",
"
\n",
"\n",
"107 | \n",
"Diana | \n",
"Lorentz | \n",
"DLORENTZ | \n",
"590.423.5567 | \n",
"1987-06-24 | \n",
"IT_PROG | \n",
"4200 | \n",
"0 | \n",
"103 | \n",
"60 | \n",
"
\n",
"\n",
"115 | \n",
"Alexander | \n",
"Khoo | \n",
"AKHOO | \n",
"515.127.4562 | \n",
"1987-07-02 | \n",
"PU_CLERK | \n",
"3100 | \n",
"0 | \n",
"114 | \n",
"30 | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql outobs=5;\n",
"select * from employees where salary < (select avg(salary) from employees);\n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Écrire une procédure `proc sql` pour afficher le titre du poste, le nom complet (prénom et nom) de l'employé, et la différence entre le salaire maximum pour l'emploi et le salaire de l'employé. Assurez-vous que les salaire sont sous format `$1,234,456.00`"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"JOB_TITLE | \n",
"Employee_name | \n",
"salary_difference | \n",
"
\n",
"\n",
"\n",
"\n",
"President | \n",
"Steven King | \n",
"$16,000.00 | \n",
"
\n",
"\n",
"Administration Vice President | \n",
"Neena Kochhar | \n",
"$13,000.00 | \n",
"
\n",
"\n",
"Administration Vice President | \n",
"Lex De Haan | \n",
"$13,000.00 | \n",
"
\n",
"\n",
"Programmer | \n",
"Alexander Hunold | \n",
"$1,000.00 | \n",
"
\n",
"\n",
"Programmer | \n",
"Bruce Ernst | \n",
"$4,000.00 | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql outobs=5;\n",
"SELECT job_title, first_name || ' ' || last_name AS Employee_name, \n",
"\tmax_salary-salary AS salary_difference format=dollar15.2 \n",
"\tFROM employees \n",
"\t\tNATURAL JOIN jobs;\n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Écrire une procédure `proc sql` pour afficher le nom du département, le salaire moyen et le nombre d'employés travaillant dans ce département qui ont reçu une commission."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"DEPARTMENT_NAME | \n",
"SalaireMoyen | \n",
"nombre | \n",
"
\n",
"\n",
"\n",
"\n",
"Shipping | \n",
"$3,475.56 | \n",
"45 | \n",
"
\n",
"\n",
"Sales | \n",
"$8,955.88 | \n",
"34 | \n",
"
\n",
"\n",
"Finance | \n",
"$8,600.00 | \n",
"6 | \n",
"
\n",
"\n",
"Purchasing | \n",
"$4,150.00 | \n",
"6 | \n",
"
\n",
"\n",
"IT | \n",
"$5,760.00 | \n",
"5 | \n",
"
\n",
"\n",
"Executive | \n",
"$19,333.33 | \n",
"3 | \n",
"
\n",
"\n",
"Accounting | \n",
"$10,150.00 | \n",
"2 | \n",
"
\n",
"\n",
"Marketing | \n",
"$9,500.00 | \n",
"2 | \n",
"
\n",
"\n",
"Human Resources | \n",
"$6,500.00 | \n",
"1 | \n",
"
\n",
"\n",
"Public Relations | \n",
"$10,000.00 | \n",
"1 | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql outobs=10;\n",
"SELECT \tdepartment_name, \n",
"\t\tAVG(salary) as SalaireMoyen format=dollar15.2, \n",
"\t\tCOUNT(commission_pct) as nombre\n",
"\tFROM departments D\n",
"\t\tleft JOIN employees E\n",
"\t\ton E.department_id=D.department_id\n",
"GROUP BY department_name\n",
"order by nombre desc\n",
";\n",
"quit;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Écrire une procédure `proc sql` pour afficher le titre du poste et le salaire moyen des employés."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"SAS Output\n",
"\n",
"\n",
"\n",
"\n",
"
\n",
"
\n",
"\n",
"\n",
"\n",
"\n",
"JOB_TITLE | \n",
" | \n",
"
\n",
"\n",
"\n",
"\n",
"Accountant | \n",
"$7,920.00 | \n",
"
\n",
"\n",
"Accounting Manager | \n",
"$12,000.00 | \n",
"
\n",
"\n",
"Administration Assistant | \n",
"$4,400.00 | \n",
"
\n",
"\n",
"Administration Vice President | \n",
"$17,000.00 | \n",
"
\n",
"\n",
"Finance Manager | \n",
"$12,000.00 | \n",
"
\n",
"\n",
"Human Resources Representative | \n",
"$6,500.00 | \n",
"
\n",
"\n",
"Marketing Manager | \n",
"$13,000.00 | \n",
"
\n",
"\n",
"Marketing Representative | \n",
"$6,000.00 | \n",
"
\n",
"\n",
"President | \n",
"$24,000.00 | \n",
"
\n",
"\n",
"Programmer | \n",
"$5,760.00 | \n",
"
\n",
"\n",
"Public Accountant | \n",
"$8,300.00 | \n",
"
\n",
"\n",
"Public Relations Representative | \n",
"$10,000.00 | \n",
"
\n",
"\n",
"Purchasing Clerk | \n",
"$2,780.00 | \n",
"
\n",
"\n",
"Purchasing Manager | \n",
"$11,000.00 | \n",
"
\n",
"\n",
"Sales Manager | \n",
"$12,200.00 | \n",
"
\n",
"\n",
"Sales Representative | \n",
"$8,350.00 | \n",
"
\n",
"\n",
"Shipping Clerk | \n",
"$3,215.00 | \n",
"
\n",
"\n",
"Stock Clerk | \n",
"$2,785.00 | \n",
"
\n",
"\n",
"Stock Manager | \n",
"$7,280.00 | \n",
"
\n",
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"proc sql;\n",
"SELECT job_title, AVG(salary) format=dollar15.2 \n",
"\tFROM employees as E, jobs as J\n",
"\twhere E.job_id=J.job_id\n",
"\t\t\tGROUP BY job_title;\n",
"quit;"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}