跟crakman做sas base认证试题http://crackman.net/
1.The following SAS program is submitted:
data WORK.TOTAL;
set WORK.SALARY;
by Department Gender;
if First.<_insert_code_> then Payroll=0;
Payroll+Wagerate;
if Last.<_insert_code_>;
run;
The SAS data set WORK.SALARY is currently ordered by Gender within Department.
Which inserted code will accumulate subtotals for each Gender within Department?
A. Gender
B. Department
C. Gender Department
D. Department Gender
Answer: A
本题考察的是:first.var和last.var这两个知识点。 本题的意思,数据集SALAR已经按照department 和gender排序,
现在计算每一个department下每一个gender的某一个变量值的累积和。
根据本题的意思,写了一个模拟程序:
data crackman;
input department $ gender $ salary@;
datalines;
market f 6000
market m 5000
market f 5500
market m 8000
market f 6000
market m 7000
sales f 6000
seles m 4000
sales f 6000
seles m 4000
sales f 6000
seles m 4000
;
proc sort data=crackman;
by department gender;
run;
data result;
set crackman;/*1*/
by department gender;
if first.gender then subtotal=salary;/*2*/
else subtotal+salary;/*3*/
if last.gender;/*4*/
run;/*5*/
这个DATA RESULT 部分程序执行的过程是这样(不是编译过程):/*我把执行的语句分为标记1 2 3 4 5*/
1.1--2--4--1(先读数据---判断first.gender是否为1,第一个肯定是1------所以直接跳过else到if last.gender,last.gender=0所以---set crackman,继续读数据)
2.1--2--3--4--1
3.1--2--3--4--5--1(因为是第三个了,所以last.gender=1 然后到run,输出到result.
后面都是一样。
这里第三条语句其实===subtotal=subtotal+salary,只是这里简写了,体现程序的简洁性,但是对于入门同学来说增加了可读性的难度。