这项计划到底在做什么? (SAS)

时间:2015-11-19 00:47:50

标签: sas

我对以下SAS代码感到困惑。因此,这里,名为WORK.SALARY的SAS数据集包含每个部门的10个观察结果,目前由Department订购。提交了以下SAS程序:

data WORK.TOTAL; 
     set WORK.SALARY(keep=Department MonthlyWageRate);
     by Department;
     if First.Department=1 then Payroll=0; 
     Payroll+(MonthlyWageRate*12); 
     if Last.Department=1; 
  run;

那么,First.Department和Last.Department究竟是什么?非常感谢您的时间和关注。

2 个答案:

答案 0 :(得分:3)

您的数据步骤计算每个部门的总PAYROLL。

使用FIRST.语句时会自动生成LAST.BY变量。当前观察是BY组中的第一次(或最后一次)观察时,它们是正确的。 How the DATA Step Identifies BY Groups

var+expression;的sum语句(语法:PAYROLL)表示PAYROLL的值保留(或转移)到下一个观察点。

IF / THEN语句会在新组开始时将值初始化为零。

子集化IF语句将确保仅输出每个部门的最终观察结果。

答案 1 :(得分:0)

正如所解释的,它正在计算每个部门的工资单。

当遇到特定的部门ID时,First.department会指定value = 1。当读取部门的最后一条记录时,last.department指定一个值= 1。 所以如果你有:

Department  Wage
1            100
1            200
1            300
2            1000
2            2000
2            3000

第一个。最后。已分配,它将如下所示:

Department  Wage         first.deaprtment     last.department
1            100             1                        0
1            200             0                        0
1            300             0                        1
2            1000            1                        0
2            2000            0                        0
2            3000            0                        1

现在,您可以按照逻辑来了解first.department = 1时会发生什么。

顺便说一句,在你的代码中,我没有看到他们正在做任何事情if Last.Department=1;