数据管理的学习课件_第1页
数据管理的学习课件_第2页
数据管理的学习课件_第3页
数据管理的学习课件_第4页
数据管理的学习课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据管理的学习课件第1页/共47页Chapter3SAS数据管理

第2页/共47页Chapter3SAS数据管理一、SAS数据集的建立二、SAS数据集的浏览与修改三、SAS数据集的高级管理下一页返回本节首页第3页/共47页一、SAS数据集的建立(一)使用INPUT语句输入数据(二)利用VIEWTABLE新建数据集(三)将其他格式的数据文件导入数据集上一页下一页返回本节首页第4页/共47页(一)使用INPUT语句输入数据⒈程序中直接输入CARDS;

数据行;⒉infile语句读入数据上一页下一页返回本节首页第5页/共47页⒈程序中直接输入⑴自由格式⑵列方式⑶格式输入

上一页下一页返回本节首页第6页/共47页⑴自由格式

按顺序列出每个观测的各个变量名,中间用空格分开。变量如果是字符型的需要在变量名后面加一个$符号,$符与变量名可以直接相连也可以隔一个空格。例如:使用自由格式的优点是:使用简单;输入数据时不必上下对齐;不需要知道每个变量的具体列数而只需知道它的次序。上一页下一页返回本节首页第7页/共47页datasasuser.score1;inputname$sex$mathchinese;cards;李明男9298张红艺女89106王思明男8690张聪男98109刘颍女80110;run;上一页下一页返回本节首页第8页/共47页

使用这种格式需要注意以下几点:⒈数据排列格式必须统一,每行数据代表一个观测,各数据值之间必须用空格或制表符分隔开;⒉缺失的数据用点号表示;⒊字符型数据的长度不能超过8个字符;⒋变量名与数据值要对应。使用这种办法需要在编辑窗口中输入全部数据内容,如果数据量不大的话还可以忍受,但是如果是海量数据,那么使用这种办法几乎是不可能了,这时就需要从其他文件来将数据导入数据集。上一页下一页返回本节首页第9页/共47页⑵列方式

此时需要在每个变量名(及$符)后面列出该变量在数据行中所占据的列起始位置与结束位置,比如上面的例子可以改写成。列方式有如下特点:①要求数据行各项上下对齐②各项之间可以没有任何分隔,连续写在一起③字符型数据长度可以超过8个字符,中间可以有空格,头尾的空格仍将被忽略。④不论字符型变量还是数值型变量如果指定列位置都是空白则输入值为缺失值。小数点仍表示数值型和字符型变量的缺失值。⑤可以只输入数据行中的某些项而忽略其它项。 由于列方式不要求数据项之间分开,所以经常用来输入紧缩格式的数据。比如,我们要输入一批身份证号码,但只输入其中的出生年、月、日信息,就可以用如下程序:上一页下一页返回本节首页第10页/共47页datapids;inputyear7-8mon9-10day11-12;cards;110103751209223110101690215005;run;上一页下一页返回本节首页第11页/共47页datasasuser.score3;inputname$1-10sex$11-13math14-16chinese18-20;cards;李明男9298张红艺女89106王思明男8690张聪男98109刘颍女80110;run;上一页下一页返回本节首页第12页/共47页⑶格式输入

有格式输入就是在变量名后加格式名。其中最常见的是用来输入日期。数据中的日期写法经常是多种多样的,比如1998年10月9日可以写成“1998-10-9”,“19981009”,“9/10/98”等等,为读入这样的日期数据就需要为它指定特殊的日期输入格式。另外,日期数据在SAS中是按数值存储的,所以如果要显示日期值,也需要为它指定特殊的日期输出格式。例如:上一页下一页返回本节首页第13页/共47页dataa;inputdateyymmdd8.sales;

formatdateyymmdd10.;cards;56-6-13110067.12.1512007810213008910011400199601011500200209011600;run;procprint;run;上一页下一页返回本节首页第14页/共47页yymmdd8.

指明日期数据占据8列位置。因此在cards中,如果日期数据不满8列要用空格补充,不能让后面的数据进入这8列。这样可以输入没有世纪数,年、月、日之间用减号或小数点或空格分隔的日期,输入YYMMDD格式的六位数的日期(一位数的月、日前面补0),输入带世纪数的YYYYMMDD格式的日期(一位数的月、日前面补0)。上一页下一页返回本节首页第15页/共47页YYMMDD10.输入格式可以输入带世纪数的中间有分隔符或无分隔的日期,如:datab;inputdateyymmdd10.sales;formatdateyymmdd10.;cards;56-6-13110067.12.1512007810213008910011400199601011500;run;procprint;run;第16页/共47页FORMAT语句规定输出日期变量时使用的显示格式。结果为:1195607-11120031978-10-02130041989-10-01140051996-01-01150062002-09-011600上一页下一页返回本节首页第17页/共47页⒉infile语句读入数据

使用程序中直接输入数据的方法,需要在编辑窗口中输入全部数据内容。如果数据量不大的话还可以忍受,但是如果是海量数据,那么使用这种办法几乎是不可能了,这时就需要从其他文件来将数据导入数据集,使用infile命令来指定数据文件的位置。例如:datasasuser.score2;infile"f:\score.txt";inputname$sex$mathchinese;run;上一页下一页返回本节首页第18页/共47页(二)利用VIEWTABLE新建数据集

除了编辑程序创建数据集以外,还有很多种不需要编程的方法,例如可以直接使用VIEWTABLE方式,VIEWTABLE是SAS系统中一种通过可视的方式管理数据的工具。上一页下一页返回本节首页第19页/共47页(三)将其他格式的数据文件导入数据集SAS系统提供了将SAS数据集与标准格式文件和用户自定义格式文件之间的互相转换功能。SAS的导入向导可以帮助我们完成这项工作。SAS系统可以转换的标准格式的数据文件包括XLS,WK1,TXT等。上一页下一页返回本节首页第20页/共47页二、SAS数据集的浏览与修改(一)利用viewtable方式(二)SASINSIGHT方式上一页下一页返回本节首页第21页/共47页三、SAS数据集的高级管理(一)SAS数据步的运行机制(二)数据集的复制与修改(三)拆分数据集(四)数据集的纵向合并(五)数据集的横向合并(六)数据集的更新上一页下一页返回本节首页第22页/共47页(一)SAS数据步的运行机制SAS语言的编程计算功能主要在数据步实现,一个SAS数据步相当于一个单独运行的程序。但是,SAS语言又是一个专用数据处理语言,所以SAS数据步有其它语言所没有的特点。请看例子:上一页下一页返回本节首页第23页/共47页dataa;putx=y=z=;inputxy;z=x+y;putx=y=z=;cards;1020100200;run;运行后在LOG窗口显示如下记录:……X=.Y=.Z=.X=10Y=20Z=30X=.Y=.Z=.X=100Y=200Z=300X=.Y=.Z=.NOTE:ThedatasetWORK.Ahas2observationsand3variables.……上一页下一页返回本节首页第24页/共47页

从这个例子可以看出SAS数据步程序和普通程序的一个重大区别:

SAS数据步如果有数据输入,比如用INPUT、SET、MERGE、UPDATE、MODIFY等语句读入数据,则数据步中隐含了一个循环,即数据步程序执行到最后一个语句后,会返回到数据步内的第一个可执行语句开始继续执行,直到读入数据语句(INPUT、SET、MERGE、UPDATE、MODIFY等)读入了数据结束标志为止才停止执行数据步,并把读入的各个观测写入在DATA语句中指定的数据集。如果没有数据输入而只是直接计算,则数据步程序没有此隐含循环。数据步因为有这样一个隐含循环,所以也提供了用来查询某一步是第几次循环的特殊变量_N_,它的值为数据步循环计数值。第25页/共47页SAS数据步流程图第26页/共47页(二)数据集的复制与修改

用SET语句把一个已有数据集复制到一个新数据集,同时还可以进行修改。比如要把数据集work.score复制为数据集sasuser.score1,只要用如下程序:datasasuser.score1;setscore;run;

这样的程序流程中也有一个隐含循环,程序在数据步内反复循环,直到输入数据集score最后一个观测读过。上一页下一页返回本节首页第27页/共47页

我们还可以用SAS程序语句对生成的数据集进行修改。比如,我们把超过100分的语文成绩都改为100分,就可以用如下程序:datascorea;setscore;ifchinese>100thenchinese=100;run;第28页/共47页KEEP与DROP语句KEEP语句用来保留指定的变量,如:datascoreb;setscore;keepnamesex;run;生成的数据集scoreb只包含NAME和SEX两个变量。DROP语句用来指定要丢弃的变量,如:datascoreb;setscore;dropnamesex;run;生成的数据集不包含name和sex二个变量的值第29页/共47页子集IF语句

可以通过“子集if”语句指定一个条件取出数据集的某些行组成的子集。datascorec;setscore;IFmath>=90andchinese>=100;run;注意:子集IF语句不同于我们前面所讲的分支语句,它没有THEN部分,只有条件,用于取出满足条件的行子集。上一页下一页返回本节首页第30页/共47页(三)拆分数据集

有时我们需要根据某一分类原则把数据行分别存放到不同的数据集。比如,我们希望把数据集score中的所有男生的记录放到数据集scorem中,把所有女生的记录放到scoref中,可以使用如下程序:上一页下一页返回本节首页第31页/共47页datascoremscoref;setscore;select(sex);when('男')outputscorem;when('女')outputscoref;otherwiseputsex='有错';end;dropsex;run;procprintdata=scorem;run;procprintdata=scoref;run;第32页/共47页

注意:在DATA语句中,我们指定了两个数据集名,这表示要生成两个数据集。程序中用SET语句引入了一个数据集,这个数据集的观测如何分配到两个结果数据集中呢?关键在于OUTPUT语句。OUTPUT语句是一个可执行语句,它使得当前观测被写到语句指定的数据集中。这样,我们根据SELECT的结果把不同性别分别放到了两个不同数据集中。第33页/共47页OUTPUT语句还可以用来强行写入数据集而不必象我们在数据步流程图中说明的那样等到数据步最后一个语句完成。数据步中有了OUTPUT语句后数据步流程中不再有自动写入观测的操作,而只能由OUTPUT语句指定输出。不指定数据集名的OUTPUT语句输出到第一个结果数据集。比如下面的程序生成一个包含1到10的及其平方的有10个观测的数据集:第34页/共47页datatest;doi=1to10;j=i*i;output;end;run;procprint;run;

如果删去上面的OUTPUT语句则结果数据集中只有i=11,j=100的一个观测。上一页下一页返回本节首页第35页/共47页(四)数据集的纵向合并

几个结构相同的数据集可以上下地连接到一起。比如,我们有四个班的学生情况的数据集Class1-Class4,每个数据集包含一个班学生的学号、姓名、性别信息,我们希望把这些数据集合并为一个大数据集,可以用如下代码:dataclasses;setclass1class2class3class4;run;

可见,要把若干个结构相同的数据集合并为一个数据集,只要在DATA语句中指定要生成的大数据集的名字,然后在数据步中使用SET语句并在SET语句中依次列出各小数据集。上一页下一页返回本节首页第36页/共47页

有时我们需要在合并数据集时加入一个变量来指示每一个观测原来来自哪一个小数据集,这可以在SET语句的每一个数据集名后面加一个括号,里面写上in=变量名,变量名所给的变量取1表示观测来自此数据集,取0表示观测非来自此数据集。例如,在前面的例子中我们把score数据集按男、女拆分成了scorem和scoref两个数据集并抛弃了性别变量,就可以用如下程序连接两个数据集并恢复性别信息:datanew;setscorem(in=male)scoref(in=female);ifmale=1thensex='男';iffemale=1thensex='女';run;

在数据步中,如果观测来自scorem,则变量male值为1,如果观测来自scoref则变量female值为1,可以使用这两个变量的值定义新变量sex。用数据集选项的in=指定的变量不能直接进入结果数据集而只能用于数据步程序中。上一页下一页返回本节首页第37页/共47页(五)数据集的横向合并

两个(或多个)数据集如果包含了同样的一些观测的不同属性(变量),比如,数据集scorexs包含学生的姓名、性别,数据集scoresx包含学生的数学成绩,数据集scoreyw包含学生的语文成绩,数据集scoreyy包含学生的英语成绩且各数据集的观测是按顺序一一对应的,就可以用如下带有MERGE语句的数据步把它们左右横向合并到一个数据集NEW:datanew;mergescorexsscoreywscoresx;run;

上一页下一页返回本节首页第38页/共47页

横向合并一般应该采用按关键字合并的办法,即先把每个数据集按照相同的、能唯一区分各观测的一个(或几个)变量排序,然后用BY语句和MERGE语句联合使用,这样即使原来观测顺序不一致也可以保证横向合并的结果没有错。下例先把score数据集横向拆分为包含姓名、性别的数据集scorexs和包含姓名、数学成绩、语文成绩和英语成绩的数据集scoresyy,然后按关键字横向合并:上一页下一页返回本节首页第39页/共47页datascorexs;setscore;keepnamesex;run;datascoresyy;setscore;keepnamemathchineseenglish;run;

procsortdata=scorexs;byname;run;procsortdata=scoresyy;byname;run;datanew;mergescorexsscoresyy;byname;run;procprint;run;上一页下一页返回本节首页第40页/共47页(六)用UPDATE语句更新数据集

如果我们发现数据集中的某些数据值有错误或者现在的值已经改变了,我们可以从更正了的原始数据重新生成数据集,或者使用更有效的方法,即建立一个只包含新数据值的数据集,用此数据集修改原数据集。使用如下的DATA步中可以实现数据集的更新:DATA新数据集名; UPDATE原数据集更新用数据集; BY关键变量;RUN;上一页下一页返回本节首页第41页/共47页

例如,比如我们发现数据集score中王思明的语文成绩实际应该是91分,张红艺性别应为男,可以先生成如下的只包含更正数据值的数据集,不需要改的观测不列入,不需要改的变量不列入或取缺失值:dataupd;inputname$sex$english;cards;王思明男.张红艺.110;run;第42页/共47页

然后,把原数据集score和更新用数据集UPD均按姓名(NAME)排序:procsortdata=score;byname;run;procsortdata=upd;byname;run;第43页/共47页

最后用UPDATE和BY更新得到新数据集NEW,其中王思明的性别改成了男,张

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论