### SAS Base 70题知识点解析 #### 题目一知识点分析 **题目背景:** 此题考察的是SAS程序中的数据处理逻辑,特别是如何在分组内累计子总数的功能。 **题目描述:** 给出以下SAS程序: ```sas data WORK.TOTAL; set WORK.SALARY; by Department Gender; if First.<_insert_code_> then Payroll=0; Payroll+ Wage_rate; if Last.<_insert_code_>; run; ``` 其中,`WORK.SALARY`数据集已经按照`Gender`(性别)在`Department`(部门)内进行了排序。问题是要找出正确的插入代码,以便能够为每个部门内的性别累计子总数。 **选项分析:** A. Gender B. Department C. GenderDepartment D. DepartmentGender **正确答案:** D. `DepartmentGender` **解析:** - **First.** 和 **Last.** 是SAS提供的自动变量,用于指示处理记录时是否处于一个新组的开始或结束。 - 在本例中,我们需要根据部门和性别进行分组,并在每个部门和性别的组合下累积工资总额。 - `First.<_insert_code_> then Payroll=0;` 这行代码表示,在每个新的组开始时将累积值`Payroll`重置为0。 - `if Last.<_insert_code_>;` 这行代码在每个组结束时执行某些操作,但在这个例子中并未给出具体操作,不过我们可以理解为它用于标识当前记录是某个组的最后一个成员。 - 因为数据集已经按照`Department`和`Gender`排序,所以为了确保正确地按部门和性别累积,应使用`DepartmentGender`作为插入代码。 - 正确的代码应该是:`if First.DepartmentGender then Payroll=0;` 和 `if Last.DepartmentGender;`。 #### 题目二知识点分析 **题目背景:** 此题考查SAS程序中读取和格式化数据的方法。 **题目描述:** 假设存在如下原始数据文件`TEXTFILE.TXT`: ``` ----|----10---|----20---|----30 John,FEB,13,25,14,27,Final John,MAR,26,17,29,11,23,Current Tina,FEB,15,18,12,13,Final Tina,MAR,29,14,19,27,20,Current ``` 期望的输出结果为: ``` Obs Name Month Status Week1 Week2 Week3 Week4 Week5 1 John FEB Final $13 $25 $14 $27 . 2 John MAR Current $26 $17 $29 $11 $23 3 Tina FEB Final $15 $18 $12 $13 . 4 Tina MAR Current $29 $14 $19 $27 $20 ``` **选项分析:** A. 使用`dsd`(Delimited by Space Delimited)指定输入格式。 B. 使用`,`作为分隔符,并且使用`missover`选项忽略额外字段。 C. 使用`,`作为分隔符,并且使用`@`指定位置读取。 D. 使用`dsd`(Delimited by Space Delimited)指定输入格式,并且使用`@`指定位置读取。 **正确答案:** C. data WORK.NUMBERS; length Name$4 Month$3 Status$7; infile 'TEXTFILE.TXT' dlm=','; input Name$ Month$ @; if Month='FEB' then input Week1 Week2 Week3 Week4 Status$; elseif Month='MAR' then input Week1 Week2 Week3 Week4 Week5 Status$; format Week1-Week5 dollar6.; run; proc print data=WORK.NUMBERS; run; **解析:** - **选项A**:`dsd`指定使用空格作为字段分隔符,但实际数据是以逗号分隔的,因此不适用。 - **选项B**:使用逗号分隔符,并忽略额外字段,但在`MAR`月份有额外字段,会导致输出错误。 - **选项C**:使用逗号作为分隔符,并使用`@`来控制字段的位置,可以正确处理两种不同格式的月份数据。 - **选项D**:虽然使用了`dsd`,但因为数据实际是逗号分隔的,所以该选项也不正确。 选项C是正确的选择。 #### 题目三知识点分析 **题目背景:** 此题考察SAS中的日期处理函数。 **题目描述:** 给出以下SAS程序: ```sas data WORK.DATE_INFO; Day="01"; Yr=1960; X=mdy(Day,01,Yr); run; ``` **解析:** - `mdy`函数用于创建一个日期值,其参数顺序为月、日、年。 - 在这个例子中,`Day`被赋值为字符串`"01"`,但实际上SAS会将其转换为数值类型。 - `X=mdy(Day,01,Yr);`这行代码实际上创建了一个日期值,表示1960年的1月1日。 - 由于`Day`的值为`"01"`,在SAS中会被解释为1,因此最终的结果是1960年的1月1日。 通过这三个题目,我们可以了解到SAS编程的一些基本概念,包括数据集的排序与分组处理、数据读取与格式化以及日期处理等。这些知识点对于准备SAS Base认证考试的学生来说非常重要。
剩余30页未读,继续阅读
- 粉丝: 1
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助