SAS系统和数据分析SAS数据集的编辑.docx

上传人:b****5 文档编号:7845856 上传时间:2023-01-26 格式:DOCX 页数:11 大小:199.60KB
下载 相关 举报
SAS系统和数据分析SAS数据集的编辑.docx_第1页
第1页 / 共11页
SAS系统和数据分析SAS数据集的编辑.docx_第2页
第2页 / 共11页
SAS系统和数据分析SAS数据集的编辑.docx_第3页
第3页 / 共11页
SAS系统和数据分析SAS数据集的编辑.docx_第4页
第4页 / 共11页
SAS系统和数据分析SAS数据集的编辑.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

SAS系统和数据分析SAS数据集的编辑.docx

《SAS系统和数据分析SAS数据集的编辑.docx》由会员分享,可在线阅读,更多相关《SAS系统和数据分析SAS数据集的编辑.docx(11页珍藏版)》请在冰豆网上搜索。

SAS系统和数据分析SAS数据集的编辑.docx

SAS系统和数据分析SAS数据集的编辑

第一十一课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()

标准正态分布函数

日期时间处理函数

DATE()/TODAY()

取当日的日期值

DAY()

计算某月的那一日

HOUR()

计算小时

TIME()

取当日的时间

YEAR()

取年值

字符函数

INDEX()

搜寻字符串的位置

LEFT()

字符串表达式左对齐

SUBSTR()

抽取子字符串

TRIM()

移走尾部空格

LENGTH()

给出字符变量的长度

UPCASE()

转换为大写

财政金融函数

COMPOUND()

计算复利

IRR()

计算内部赢利率

NPV()

计算净现值

SAVING()

计算定期储蓄的本金和利息

例如,有一个学生成绩数据集中的数据来源写在CARDS语句后,但我们还需产生新的变量平均分和总分,数据步的程序如下:

Dataclass2;

Inputidtest1-test5;

average=mean(test1,test2,test3,test4,test5);

total=test1+test2+test3+test4+test5;

Cards;

980801100100100100100

980802901009010090

9808038182838485

Procprintdata=class2;

Run;

在OUTPUT窗口中显示的运行结果见图11.1所示。

图11.1用赋值表达式创建数据集的新变量

二、选择数据集的变量和观测

数据库的三种基本操作是选择、投影和连接,如果我们把数据库看成是一张表格,选择和投影操作相当于从一张大的数据库表格中挑选所需的行和列形成一张小的数据库表格。

连接操作相当于把两张或两张以上的数据库表格按某种规则合并成一张数据库表格。

原始数据库表格可以是外部数据文件(用INFILE语句输入),或在作业流中(用CARDS语句输入),或来自其他SAS数据集(用SET语句输入)。

1.选择变量(即选择列)

使用DATA语句的DROP=和KEEP=选项可以控制从原始数据库中读出的变量是否被写入将要创建的数据集。

例如,假设我们要从CLASS2数据集中产生只包含ID、AVERAGE和TOTAL变量,而不包含TEST1、TEST2、TEST3、TEST4、TEST5变量的新数据集CLASS3。

有两种程序编法都能达到相同的目的,一是使用DATA语句的DROP=选项,表示从原有变量中去掉DROP=中指明的变量;二是使用DATA语句的KEEP=选项,表示从原有变量中只保留KEEP=中指明的变量。

程序如下:

程序一:

Dataclass3(drop=test1test2test3test4test5);

Setclass2;

Procprintdata=class3;

Run;

程序二:

Dataclass3(keep=idaveragetotal);

Setclass2;

Procprintdata=class3;

Run;

程序一和程序二的运行结果相同。

在OUTPUT窗口中显示的运行结果如图11.2所示。

图11.2对数据集用DROP或KEEP进行变量选择

2.选择观测(即选择行)

选择满足条件的记录行来形成新的数据集,可使用DATA步的IF语句,IF语句的作用就像一个过滤网,IF语句中的条件表达式就像过滤网的形状,只允许符合条件表达式的记录行通过,如果条件表达式恒为真,意味着过滤网是空的,让所有的记录行通过。

对于不符合条件的记录行不作任何处理,直接回到数据步的顶部再将下一条记录来通过过滤网。

如果在条件语句IF中使用了DELETE语句,则可以控制哪些记录行不被写入将要创建的新数据集。

在条件表达式中要使用到比较操作符和逻辑操作符,SAS系统的比较操作符如下表所示:

操作符

符号

意义

LT

<

小于(LessThan)

GT

>

大于(GreaterThan)

EQ

=

等于(Equal)

LE

<=

小于等于(LessEqual)

GE

>=

大于等于(GreaterEqual)

NE

^=

不等于(NotEqual)

IN

等于列举中一个

SAS系统的逻辑操作符如下表所示:

操作符

符号

意义

AND

&

OR

|

NOT

^

请注意在条件表达示中使用上面两个表中的操作符或符号是等价的,特别要注意的是在一个复杂的条件表达式中可能同时包含算数运算符(+-*/**)、比较操作符和逻辑操作符,此时运算的优先次序为括号、算数运算符、比较操作符和逻辑操作符。

下面的三个DATA步程序是从同一个数据集CLASS2中,按不同的条件表达式选择记录行形成新的数据集CLASS4,结果相同。

程序一:

Dataclass4;

Setclass2;

iftotalge450;

Procprintdata=class4;

Run;

程序二:

Dataclass4;

Setclass2;

iftotallt450thendelete;

Procprintdata=class4;

Run;

程序三:

Dataclass4;

Setclass2;

ifaverage>=80and100in(test1,test2,test3,test4,test5);

Procprintdata=class4;

Run;

运行结果如图11.3所示。

第一十二课

图11.3用IF条件语句选择数据集中的观测

程序三中的IF语句条件表达式等价于IFaverage>=80and(100=test1or100=test2or100=test3or100=test4or100=test5),由于AND的优先级比OR的高,与条件表达式IFaverage>=80and100=test1or100=test2or100=test3or100=test4or100=test5是有区别的。

拼接和合并数据集

数据集的连接是把两个或两个以上的数据集的观测连接成一个新的数据集。

连接的方式有两种:

拼接和合并。

在SAS数据步中用SET语句可以拼接数据集,而用MERGE语句可以合并数据集。

例如,我们有两个数据集A和B,要拼接和合并成新的数据集C,两种不同方法的程序和结果见示意图12.1所示。

图12.1数据集的两种连接方式:

拼接和合并

一、数据集的拼接

数据集的拼接可分成三种主要的拼接情况:

1.相同变量的数据集拼接

这是最简单的情况,在这种情况下,新生成的数据集就含有这些相同的变量,观测的数目是所有这些数据集的观测总和。

例如,数据集A和B都含有两个相同的变量COMMOM和X,且都有三条观测,如图12.2所示。

图12.2含有相同的变量COMMOM和X的两个数据集

用下面程序生成新数据集C有两个相同的变量COMMOM和X,6条观测。

DataA;

Inputcommonx;

Cards;

98011

98022

98033

DataB;

Inputcommonx;

Cards;

98014

98025

98036

DataC;

SetAB;

Procprintdata=C;

Run;

拼接生成的新数据集C的结果如图12.3所示。

图12.3相同变量的数据集拼接结果

2.不相同变量的数据集拼接

如果两个数据集A和B含有的变量不完全相同,如上例中数据集B含有的不是COMMON和X变量而是COMMON和Y变量,如图12.4所示。

用SET语句拼接A和B数据集后,新生成的数据集C就含有三个变量COMMON、X和Y,观测的数目仍然是所有这些数据集的观测总和,但原数据集中没有的变量在拼接后新数据集中为缺失值。

图12.4含有不相同的变量X和Y的两个数据集

生成新数据集C的程序如下:

DataC;

SetAB;

Procprintdata=C;

Run;

拼接生成的新数据集C的结果如图12.5所示。

图12.5不相同变量的数据集拼接结果

3.按关键字排序后拼接数据集

如果要求新生成的数据集C按共同的关键字例如COMMON排序观测,那么预先要数据集A和B也已按COMMON关键字排序好,可通过排序过程PROCSORT和BY指明关键字。

生成新数据集C的程序如下:

Procsortdata=A;

ByCommon;

Procsortdata=B;

ByCommon;

DataC;

SetAB;

ByCommon;

Procprintdata=C;

Run;

拼接生成的新数据集C的结果如图12.6所示。

图12.6按关键字排序后拼接的数据集结果

无论哪一种拼接形式,用SET语句拼接生成的新数据集的观测总数为原各输入数据集观测数之和。

二、数据集的合并

数据集的合并是通过使用MERGE语句把两个或两个以上数据集中的两条观测或两条以上的观测合并为新生数据集中的一条观测。

数据集的合并可分成两种主要的合并情况:

●一对一合并(不带BY语句)

●匹配合并(带有BY语句)

1.一对一合并(不带BY语句)

把一个数据集中的第一条观测同另外一个数据集中第一条观测合并,第二条观测同另外一个数据集中第二条观测合并,以此类推。

新生成的数据集中的观测总数为这些数据集中观测个数的最大值。

如果相对应的某个数据集已没有观测,则相应的变量值为缺省值。

如果在几个数据集中有共同的变量,则在合并后新生成的数据集中只有一个变量,其值为列在MERGE语句中最后一个含有该变量的数据集中的观测值。

例如,我们有两个数据集A和B,如图12.7所示。

图12.7含有不相同的变量和相同变量不同值的两个数据集

生成新数据集C的程序如下:

DataC;

MergeAB;

Procprintdata=C;

Run;

合并的新数据集C的结果如图12.8所示。

图12.8一对一合并(不带BY语句)后的结果

2.匹配合并(带有BY语句)

如果想把两个或两个以上的数据集按照相同的关键字值合并,则在MERGE语句后面要用BY跟关键字语句。

且每一个数据集必须预先按关键字排序好。

如果两个数据集中观测的关键字值不匹配,输出所有这些观测,相应的新增变量的值为缺省值。

如果两个数据集中观测的关键字值是多对多匹配,要注意新生成的数据集中相同关键字值的观测数为各数据集中这个关键字值的观测数的最大值,相同关键字值的观测按顺序一对一合并,无论哪一个数据集中这个相同关键字值的观测没有了,都取这个相同关键字值的最后一条观测继续合并。

例如,我们有一个订单数据集ORDERS和一个产品数据集PRODUCTS,如图12.9所示。

图12.9订单数据集ORDERS和产品数据集PRODUCTS

要合并生成一个新的订单销售数据集SALES的程序如下:

Procsortdata=ORDERS;

ByP_ID;

Procsortdata=PRODUCTS;

ByP_ID;

DataSALES;

MergeORDERSPRODUCTS;

ByP_ID;

Procprintdata=SALES;

Run;

合并的新数据集SALES结果如图12.10所示。

图12.10匹配合并(带有BY语句)后的结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1