Solution#

Importez les données les données se trouvant dans le répertoire data/hr/. Ensuite vous pouvez répondre aux questions ci-dessous.

filename mesDos 'data/hr/departments.csv';
proc import datafile=mesDos
    DBMS=csv
    out=departments
    replace
    ;
run;

filename mesDos 'data/hr/employees.csv';
proc import datafile=mesDos
    DBMS=csv
    out=employees
    replace
    ;
run;

filename mesDos 'data/hr/jobs.csv';
proc import datafile=mesDos
    DBMS=csv
    out=jobs
    replace
    ;
run;

filename mesDos 'data/hr/job_history.csv';
proc import datafile=mesDos
    DBMS=csv
    out=job_history
    replace
    ;
run;

filename mesDos 'data/hr/locations.csv';
proc import datafile=mesDos
    DBMS=csv
    out=locations
    replace
    ;
run;

filename mesDos 'data/hr/regions.csv';
proc import datafile=mesDos
    DBMS=csv
    out=regions
    replace
    ;
run;
title "Importation des données";
title;

Écrivez une procédure proc sql qui permet d’obtenir un tableau contenant les informations suivantes;

  • first_name

  • last_name

  • department_name,

  • city,

  • state_province

proc sql outobs=5;
	select 	E.first_name, 
			E.last_name,
			D.department_name,
			L.city, 
			L.state_province
	from work.employees as E
	left join departments D  
       ON E.department_id = D.department_id
       	left join locations L
           ON D.location_id = L.location_id;
	;
quit;
SAS Output
FIRST_NAME LAST_NAME DEPARTMENT_NAME CITY STATE_PROVINCE
Kimberely Grant      
Bruce Ernst IT Southlake Texas
Alexander Hunold IT Southlake Texas
David Austin IT Southlake Texas
Diana Lorentz IT Southlake Texas

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

proc sql outobs=5;
SELECT E.first_name , E.last_name , 
       E.department_id ,  D.department_name 
         FROM employees E 
         left JOIN departments D 
          ON E.department_id = D.department_id 
          AND E.department_id IN (80 , 40)
           ORDER BY E.last_name;
quit;
SAS Output
FIRST_NAME LAST_NAME DEPARTMENT_ID DEPARTMENT_NAME
Ellen Abel 80 Sales
Sundar Ande 80 Sales
Mozhe Atkinson 50  
David Austin 60  
Hermann Baer 70  

É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.

proc sql;
SELECT E.first_name,E.last_name,
   D.department_name, L.city, L.state_province
     FROM employees E 
      left JOIN departments D  
       ON E.department_id = D.department_id 
        left JOIN locations L 
         ON D.location_id = L.location_id 
           WHERE E.first_name LIKE  '%z%';
quit;
SAS Output
FIRST_NAME LAST_NAME DEPARTMENT_NAME CITY STATE_PROVINCE
Mozhe Atkinson Shipping South San Francisco California
Hazel Philtanke Shipping South San Francisco California
Elizabeth Bates Sales OX9 9ZB Oxford

É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.

proc sql outobs=5;
SELECT E.first_name, E.last_name, E.salary 
  FROM employees E 
   left JOIN employees S
     ON E.salary < S.salary 
     where E.DEPARTMENT_ID between 40 and 80
/*       AND S.employee_id = 182; */ 
quit;
SAS Output
FIRST_NAME LAST_NAME SALARY
James Landry 2400
Steven Markle 2200
TJ Olson 2100
Ki Gee 2400
Hazel Philtanke 2200

Trouvez les employés qui gagnent moins que le salaire moyen de tous les employés

proc sql outobs=5;
select * from employees where salary < (select avg(salary) from employees);
quit;
SAS Output
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
104 Bruce Ernst BERNST 590.423.4568 1987-06-21 IT_PROG 6000 0 103 60
105 David Austin DAUSTIN 590.423.4569 1987-06-22 IT_PROG 4800 0 103 60
106 Valli Pataballa VPATABAL 590.423.4560 1987-06-23 IT_PROG 4800 0 103 60
107 Diana Lorentz DLORENTZ 590.423.5567 1987-06-24 IT_PROG 4200 0 103 60
115 Alexander Khoo AKHOO 515.127.4562 1987-07-02 PU_CLERK 3100 0 114 30

É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

proc sql outobs=5;
SELECT job_title, first_name || ' ' || last_name AS Employee_name, 
	max_salary-salary AS salary_difference format=dollar15.2 
	FROM employees 
		NATURAL JOIN jobs;
quit;
SAS Output
JOB_TITLE Employee_name salary_difference
President Steven King $16,000.00
Administration Vice President Neena Kochhar $13,000.00
Administration Vice President Lex De Haan $13,000.00
Programmer Alexander Hunold $1,000.00
Programmer Bruce Ernst $4,000.00

É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.

proc sql outobs=10;
SELECT 	department_name, 
		AVG(salary) as SalaireMoyen format=dollar15.2, 
		COUNT(commission_pct) as nombre
	FROM departments D
		left JOIN employees E
		on E.department_id=D.department_id
GROUP BY department_name
order by nombre desc
;
quit;
SAS Output
DEPARTMENT_NAME SalaireMoyen nombre
Shipping $3,475.56 45
Sales $8,955.88 34
Finance $8,600.00 6
Purchasing $4,150.00 6
IT $5,760.00 5
Executive $19,333.33 3
Accounting $10,150.00 2
Marketing $9,500.00 2
Human Resources $6,500.00 1
Public Relations $10,000.00 1

Écrire une procédure proc sql pour afficher le titre du poste et le salaire moyen des employés.

proc sql;
SELECT job_title, AVG(salary) format=dollar15.2 
	FROM employees as E, jobs as J
	where E.job_id=J.job_id
			GROUP BY job_title;
quit;
SAS Output
JOB_TITLE  
Accountant $7,920.00
Accounting Manager $12,000.00
Administration Assistant $4,400.00
Administration Vice President $17,000.00
Finance Manager $12,000.00
Human Resources Representative $6,500.00
Marketing Manager $13,000.00
Marketing Representative $6,000.00
President $24,000.00
Programmer $5,760.00
Public Accountant $8,300.00
Public Relations Representative $10,000.00
Purchasing Clerk $2,780.00
Purchasing Manager $11,000.00
Sales Manager $12,200.00
Sales Representative $8,350.00
Shipping Clerk $3,215.00
Stock Clerk $2,785.00
Stock Manager $7,280.00