Sas 首先使用分组处理。最后
我刚开始学习sas,希望得到一些帮助来理解下面的代码块。以下程序按部门计算年度工资Sas 首先使用分组处理。最后,sas,Sas,我刚开始学习sas,希望得到一些帮助来理解下面的代码块。以下程序按部门计算年度工资 proc sort data = company.usa out=work.temp; by dept; run; data company.budget(keep=dept payroll); set work.temp; by dept; if wagecat ='S' then yearly = wagrate *12; else if wagecat = 'H
proc sort data = company.usa out=work.temp;
by dept;
run;
data company.budget(keep=dept payroll);
set work.temp;
by dept;
if wagecat ='S' then yearly = wagrate *12;
else if wagecat = 'H' then yearly = wagerate *2000;
if first.dept then payroll=0;
payroll+yearly;
if last.dept;
run;
问题:
此代码获取工资数据,并计算每个部门一年的工资总额,假设所有12个月的工资相同,且小时工工作2000小时
if last.dept
这意味着只输出每个部门的最后一条记录。这段代码不是直观的-它是一种手动方式来计算每个部门员工的工资总额。常用的方法是使用摘要过程,例如MEANS/summary,但我假设他们试图避免两次传递数据。不过,如果你不排序,它也可能同样快data temp;
set company.usa;
if wagecat='S' then factor=12; *salary in months;
else if wagecat='H' then factor=2000; *salary in hours;
run;
proc means data=temp noprint NWAY;
class dept;
var wagerate;
weight factor;
output out=company.budget sum(wagerate)=payroll;
run;
运行数据步骤,但将last.dept和first.dept存储到特定变量中,以便查看其运行方式。我还会添加显式输出或PUT语句来查看处理过程,如果您有冒险精神,也可以使用调试工具。最好避免在堆栈溢出问题上同时问多个问题。前两个问题可以通过阅读SAS文档来回答。第三个问题是一个更好的问题——正如Reeza在下面解释的那样,这是一个总结。