/**********************************************************************/ /* ------------------------------------------------*/ /* Example of a user-written format to reduce data */ /* redundancy. A one-character variable represents */ /* up to forty characters of information. */ /* ------------------------------------------------*/ data life; input kingdom $ 1 species $ 3-17; cards; P Pinus Strobus P Pinus Banksiana A Equus Caballus A Canis Lupus ; /* Define a format named $kingatr */ /* for 'kingdom attributes' */ proc format; value $kingatr 'A' = 'Mobile, nonphotosynthetic' 'P' = 'Immobile, photosynthetic' 'O' = 'Other'; proc print; format kingdom $kingatr.; title 'Life-forms with kingdom attributes'; run; /**********************************************************************/ proc print data=sasuser.monolith; title 'Listing of All Employees'; var com_1des div_name dep_name emp_name; run; /**********************************************************************/ /* Unnecessary if already in sorted order. */ proc sort data=employee; by dep_num; /* Unnecessary if already in sorted order. */ proc sort data=dept; by dep_num; data empdep; merge dept(keep=dep_num div_num dep_name) employee (keep=dep_num emp_num emp_name); by dep_num; /* Preceding merge left EMPDEP in sorted order by */ /* DEP_NUM. If DIV_NUM increases monotonically */ /* with DEP_NUM, omit step. Unnecessary if */ /* already in sorted order. */ proc sort data=empdep; by div_num; /* Unnecessary if already in sorted order. */ proc sort data=division; by div_num; data emdpdi; merge division(keep=div_num div_name com_name) empdep (keep=div_num dep_name emp_name); by div_num; data epicom; merge company(keep=com_name com_1des) emdpdi; by com_name; proc print; var com_1des div_name dep_name emp_name; run; /**********************************************************************/ proc sql; select company.com_name, division.div_name, dept.dep_name, employee.emp_name from company, division, dept, employee where company.com_name=division.com_name and division.div_num=dept.div_num and dept.dep_num=employee.dep_num; /**********************************************************************/ proc sql; select division.div_num, avg(dep_dbud) label='Div Avg', freq(dep_dbud) label='Dep cnt' from dept, division where dept.div_num=division.div_num group by division.div_num order by 2; /**********************************************************************/ data divdep; merge division(keep=div_num) dept(keep=div_num dep_num dep_dbud); by div_num; proc means data=divdep noprint nway; var dep_dbud; class div_num; output out=result mean=dep_dbud n=dep_num; proc sort data=result; by dep_dbud; proc print data=result; var div_num dep_dbud dep_num; run; /**********************************************************************/ proc means data=monolith noprint nway; var dep_dbud; class div_num; output out=result mean=dep_dbud n=dep_num; proc sort data=result; by dep_dbud; proc print data=result; var div_num dep_dbud dep_num; run; /**********************************************************************/ proc sql; select dept.dep_num, freq(emp_num) label='Emp cnt' from dept left join employee on dept.dep_num = employee.dep_num group by dept.dep_num order by 2 desc, dep_num; /**********************************************************************/ proc means data=monolith noprint nway; var emp_num; class dep_num; output out=result n=emp_num; proc sort data=result; by descending emp_num dep_num; proc print data=result; var dep_num emp_num; run; /**********************************************************************/ data empdep; merge dept(keep=dep_num) employee(keep=dep_num emp_num); by dep_num; proc means data=empdep noprint nway; var emp_num; class dep_num; output out=result n=emp_num; proc sort data=result; by descending emp_num dep_num; proc print data=result; var dep_num emp_num; run; /**********************************************************************/