SAS系统和数据分析SAS数据集的编辑
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十一课SAS数据集的编辑
通常从外部数据源转换得到SAS数据集后,并不是所有的数据集都满足统计数据要求,可立即调用统计过程进行统计分析。需要对数据集进行满足统计数据要求的编辑或生成新的数据集。
一、增加数据集一个新变量
SAS系统可通过赋值语句把包含操作符的表达式赋值给数据集所要创建的新变量。SAS 的表达式中还可以包含SAS函数,如一些常用的SAS函数见下表:
函数分类常用函数功能
数学运算函数ABS( ) 取绝对值
SQRT( ) 求平方根
INT( ) 取整数部分
EXP( ) 计数e的次幂
LOG( ) 求e为底的自然对数SIN( ) 计算正弦
LAGn( ) 求给定变量滞后为n的值
统计计算函数MAX( ) 求最大值
MIN( ) 求最小值
MEAN( ) 求平均值
SUM( ) 求和
DIFn( ) 求给定变量X的第n阶差STD( ) 求标准差
PROBNORM( ) 标准正态分布函数
日期时间处理函数DA TE( )/TODAY()取当日的日期值DAY( ) 计算某月的那一日HOUR( ) 计算小时
TIME( ) 取当日的时间YEAR( ) 取年值
字符函数INDEX( ) 搜寻字符串的位置LEFT( ) 字符串表达式左对齐SUBSTR( ) 抽取子字符串TRIM( ) 移走尾部空格LENGTH( ) 给出字符变量的长度UPCASE( ) 转换为大写
财政金融函数COMPOUND( ) 计算复利
IRR( ) 计算内部赢利率
NPV( ) 计算净现值
SA VING( ) 计算定期储蓄的本金和利息
例如,有一个学生成绩数据集中的数据来源写在CARDS语句后,但我们还需产生新的变量平均分和总分,数据步的程序如下:
Data class2 ;
Input id test1-test5 ;
average=mean(test1,test2,test3,test4,test5);
total=test1+test2+test3+test4+test5;
Cards ;
980801 100 100 100 100 100
980802 90 100 90 100 90
980803 81 82 83 84 85
Proc print data=class2 ;
Run ;
在OUTPUT窗口中显示的运行结果见图11.1所示。
图11.1 用赋值表达式创建数据集的新变量
二、选择数据集的变量和观测
数据库的三种基本操作是选择、投影和连接,如果我们把数据库看成是一张表格,选择和投影操作相当于从一张大的数据库表格中挑选所需的行和列形成一张小的数据库表格。连接操作相当于把两张或两张以上的数据库表格按某种规则合并成一张数据库表格。原始数据库表格可以是外部数据文件(用INFILE语句输入),或在作业流中(用CARDS语句输入),或来自其他SAS数据集(用SET语句输入)。
1.选择变量(即选择列)
使用DATA语句的DROP=和KEEP=选项可以控制从原始数据库中读出的变量是否被写入将要创建的数据集。
例如,假设我们要从CLASS2数据集中产生只包含ID、A VERAGE和TOTAL变量,而不包含TEST1、TEST2、TEST3、TEST4、TEST5变量的新数据集CLASS3。有两种程序编法都能达到相同的目的,一是使用DATA语句的DROP=选项,表示从原有变量中去掉DROP=中指明的变量;二是使用DA TA语句的KEEP=选项,表示从原有变量中只保留KEEP=中指明的变量。程序如下:
程序一:
Data class3 (drop=test1 test2 test3 test4 test5 ) ;
Set class2;
Proc print data=class3 ;
Run;
程序二:
Data class3 ( keep=id average total ) ;
Set class2 ;
Proc print data=class3 ;
Run ;
程序一和程序二的运行结果相同。在OUTPUT窗口中显示的运行结果如图11.2所示。
图11.2 对数据集用DROP或KEEP进行变量选择
2.选择观测(即选择行)
选择满足条件的记录行来形成新的数据集,可使用DATA步的IF语句,IF语句的作用就像一个过滤网,IF语句中的条件表达式就像过滤网的形状,只允许符合条件表达式的记录行通过,如果条件表达式恒为真,意味着过滤网是空的,让所有的记录行通过。对于不符合条件的记录行不作任何处理,直接回到数据步的顶部再将下一条记录来通过过滤网。
如果在条件语句IF中使用了DELETE语句,则可以控制哪些记录行不被写入将要创建的新数据集。
在条件表达式中要使用到比较操作符和逻辑操作符,SAS系统的比较操作符如下表所示:
操作符符号意义
LT < 小于(Less Than)
GT > 大于(Greater Than)
EQ = 等于(Equal)
LE <= 小于等于(Less Equal)
GE >= 大于等于(Greater Equal)
NE ^= 不等于(Not Equal)
IN 等于列举中一个
SAS系统的逻辑操作符如下表所示:
操作符符号意义
AND & 与
OR | 或
NOT ^ 非
请注意在条件表达示中使用上面两个表中的操作符或符号是等价的,特别要注意的是在一个复杂的条件表达式中可能同时包含算数运算符(+ - * / **)、比较操作符和逻辑操作符,此时运算的优先次序为括号、算数运算符、比较操作符和逻辑操作符。
下面的三个DATA步程序是从同一个数据集CLASS2中,按不同的条件表达式选择记录
行形成新的数据集CLASS4,结果相同。
程序一:
Data class4 ;
Set class2 ;
if total ge 450 ;
Proc print data=class4 ;
Run ;
程序二:
Data class4 ;
Set class2 ;
if total lt 450 then delete;
Proc print data=class4 ;
Run ;
程序三:
Data class4 ;
Set class2;
if average>=80 and 100 in (test1,test2,test3,test4,test5) ;
Proc print data=class4 ;
Run ;