我对以下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究竟是什么?非常感谢您的时间和关注。
答案 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;