文库发布:sas应用基础2n_第1页
文库发布:sas应用基础2n_第2页
文库发布:sas应用基础2n_第3页
文库发布:sas应用基础2n_第4页
文库发布:sas应用基础2n_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

SAS软件应用基础之二SAS的数据获取2数据获取

(将实际数据转录为SAS数据文件)SAS可以从以各种形式存储的数据中获取有用的信息,建立专门格式的SAS数据文件。数据来源可以是长度不定的记录、二进制文件、自由格式数据、甚至包括残缺数据的文件。通过SAS系统中各种工具以及相应方法,可方便地访问这些数据,并可转换为SAS数据文件。SAS系统只能对由SAS建立的数据文件直接进行统计分析。3

图形界面交互式录入数据 SAS系统有多种图形界面能交互式的将数据录入为SAS专用的数据文件。这里介绍其中几种:利用VIEWTABLE新建数据集利用SASASSIST创建数据集利用SASINSIGHT创建数据集利用SASANALYST创建数据集利用SASLAB创建数据集4利用VIEWTABLE录入数据VIEWTABLE是SAS系统中一种通过可视的方式管理数据的工具。用VIEWTABLE建立SAS数据文件的方法:一.在SAS资源管理器窗口中,打开某数据库,然后在此窗栏内单击鼠标右键,在菜单中选New按钮(或单击SAS主菜单上的File->New…,也可在命令窗口条内键入SAS命令vt)。二.在随后出现的窗口、对话框内据提示选择。5利用SASASSIST录入数据SASASSIST是SAS系统的一个重要的模块.它的作用是使得用户不需要编程就可以完成一些常用的数据管理、统计分析、输出图表。单击Solution菜单下的ASSIST选项,启动SASASSIST。在系统弹出的窗口中,SASASSIST进行一些初始设置;如果不希望在下次使用SASASSIST的时候仍然出现这个窗口,可以将Showthiswindowatstartup前面的叉号取消。不作修改,单击Continue按钮,就自动弹出了SASASSIST的工作区域。可根据提示进行操作。数据输入时先按Insert键,结束时可用end命令!6★用Insight与Analyst录入数据用SAS主菜单上的Solutions->Anayisis->Analyst选项可打开Analyst界面进行数据录入和分析。(也可用命令窗条内键入analyst实现)用SAS主菜单上的Solutions->Anayisis->InteractiveDataAnalysis选项可打开Insight界面进行数据录入和分析。(也可用命令窗条内键入insight实现)7SAS基本概念SAS数据集与SAS数据库变量与观测常用统计量及记号8SAS数据集

(SAS数据文件)SAS数据集通常是SAS系统操作的对象,也是数据在SAS系统中的存储形式。SAS数据集可以看成是由若干行和若干列组成的表格(矩阵,关系型数据结构),各列可以取不同类型的值。SAS数据集是由SAS系统建立的特有的数据存储格式,只能被SAS系统调用。SAS数据集以.sas7bdat为扩展名。数据集的名字由英文字母、数字、下划线组成,第一个字母必须是字母或下划线,名字最多只能有8个字符;另外在命名时不区分大小写。9常见SAS文件的后缀名.sas7bdat——SAS系统数据集文件的扩展名.sas7bvew——SAS系统数据集视图的扩展名.sas7bcat——SAS系统目录文件的扩展名.sas7bndx——SAS系统数据集索引的扩展名.sas7bitm——SAS系统项目储存文件的扩展名10观测与变量数据集的每一行叫做一个观测(observation)。数据集的一列叫做一个变量(variable)。SAS变量只有两种基本类型:数值型(N)和字符型($或C);逻辑、时间型数据都通过数值型来表示。如将日期折算成与1960.1.1的间隔天数值存放,0表示FALSE,非零数表示TURE。SAS数据集类似于关系数据库中的一个表,因此,观测=记录、变量=属性(列)。11日期、时间型数据的存贮为了使日期、时间型数据能参与合理的运算(如计算两日期的间隔时间等),应该将其保存为数值型数据最为恰当。采用正确的输入方式后,SAS系统在贮存数据时,会自动将日期数据折算成与1960.1.1的间隔天数;将时间型数据折算成与午夜0时0分0秒的间隔秒数;将日期时间型数据折算成与1960年1月1日0时0分0秒的间隔秒数。12变量的属性说明Name:输入变量的名称,最长不能超过32个字符。这项内容只在新建表格的时才可以修改。Label:变量的标签,最长不能超过256个字符。在VIEWTABLE中,它代替Name作为这一列的题目。Length:用来规定变量的数据的长度,默认为8字节。这项内容也只在新建表格时才可修改。Format:修改数据的输出格式。例如我们希望显示1288.12美元,那么可在这里将格式修改为$10.2,则在表格中这个数据将显示为$1288.12。Informat:修改数据的输入格式。Type:选择变量是数值型(Numeric)还是字符型(Character)的。13SAS数据库

(Windows的目录、文件夹)SAS数据库的概念与通常所讲的数据库的概念有所不同,它也是SAS系统中一个特有的概念。在SAS系统中使用的各种数据文件(包括dbf/db2等外部数据文件)可以分类组织起来,冠以不同的逻辑别名—数据库名。也就是说,数据库其实是比数据集高一级的目录文件夹。在Windows操作系统中,一个数据库通常对应为一个或多个文件夹中的若干数据文件。目的:在各种操作系统下,SAS对数据文件操作的环境相对统一,都可通过数据库方便地访问数据文件。14SAS预定义的数据库WORK数据库:

用来存放临时数据集。SASUSER数据库:

用来存放用户自己的数据集,保存在其中的数据集是永久的。SASHELP数据库:

用来存放SAS系统帮助、例子文件,保存在其中的数据集也是永久的。15临时数据集与永久数据集按照数据集的生命周期可以将其分为临时数据集和永久数据集。临时数据集就是数据集被建立后只在SAS进程没有关闭的情况下存在,一旦退出SAS进程,那么这个数据集也就随之消失了。存储在work库下的数据集都是临时数据集,其它库中的数据集都是永久数据集。永久数据集当SAS进程结束的时候仍然存在,下次启动SAS的时候(包括重启计算机),仍然可以使用它,除非用delete命令强行将它删除。16SAS数据集的两水平名SAS数据集用两水平命名(两级名)方式进行命名。两水平名中前一部分是数据库名,后一部分是数据集名,中间用点号连接。

若数据库名省略,则表示库名为WORK。例如:数据集test表示WORK库中的临时数据集test;SASUSER.test表示SASUSER库中的数据集test。

(Windows下的实际文件名为test.sas7bdat。)在SAS中访问数据集必须使用这样的办法。17用户自建数据库用LIBNAME语句可以将SAS数据库(逻辑的)与一个实际的目录(文件夹)联系起来,形成用户自建的SAS数据库。LIBNAME语句的一般用法为:

libname

数据库名[引擎]库位置;

libname

数据库名(库位置1库位置2…);库位置通常是‘目录的全路径文件名’表示;引擎为读写数据的格式说明,如v8,v6,xport等。另外,也可用“创建新的数据集”工具图标来实现SAS数据库的创建。18建立SAS数据库的例子希望把F:\MySASFiles\V8\new这个目录与一个名叫libtest

的数据库联系起来,并且将test数据集放置在其中。可以在编辑窗口输入如下的程序:libname

libtest'f:\mysasfiles\v8\new';datalibtest.test;inputcodeprice;cards;6003811860026216600252860000910600036;run;19常用统计量的表示20常用统计量的表示(续)21分位数表Max是最大值,Min是最小值。

Med是中位数,反映数据的中心位置。Q1是四分之一分位数,Q3是四分之三分位数。Range是最大值减最小值,Q3-Q1为四分位间距,可以反映数据取值分散程度。Mode是众数,即出现次数最多的值。22图形界面批量式录入关系数据SAS系统提供了将SAS数据集与标准格式文件和用户自定义格式文件之间的互相转换功能。SAS的导入向导可以帮助我们完成这项工作。SAS系统可以转换的标准格式的数据文件包括:MicrosoftExcel97or2000 Lotus1spreadsheetMicrosoftExcel5or7Lotus3spreadsheetMicrosoftExcel4spreadsheet Lotus4spreadsheetMicrosoftAccess2000table DelimitedFileMicrosoftAccess97table (分隔的数据文件没有特定扩展名)DBaseFile CommaSeparatedValuesTabdelimitedFile(逗号分隔数据文件扩展名为csv)(制表符分隔数据文件扩展名为txt)23标准格式的数据文件的转换首先选择File菜单中的Importdata按钮,就启动了导入向导。若文件是标准数据格式,则选择Standarddatasource,然后在下拉菜单选具体格式。24编程方式录入数据采用SAS编程方式录入实际数据是一种灵活而有效的手段。尽管用图形界面进行各种操作已经成为Windows时代的一种主流模式,但在一些较复杂的、庞大的问题上,还是需要用编程模式才能方便的给予解决。在SAS系统中,我们可以用其两类基本过程之一的数据步过程来完成对批量数据的录入与管理。25DataStep用于将原始数据文件转换成SAS数据集并可进行多种数据变换。DataStep的一般形式:dataSAS-data-set;infile

'filename'option;input变量输入设定;其他SAS语句;run;dataSAS-data-set;input变量输入设定;其他SAS语句;cards;原始数据;run;26源数据的基本输入模式在SAS数据步中,对输入数据起核心作用的是input语句;根据数据源的格式,input语句可以采用四种基本输入模式:按列输入(Column)格式化输入(Format)自由列表输入(List)命名输入模式(Name)当然,对一些形式较复杂的源数据还可采用混合模式输入。引例1在回收调查问卷数据时,为了快速录入,常把数据如下组织在文本文件中:27110011160310150110021165422180110302270230130。。。。。。

其中每行是一张问卷的数据,1-2列是区号,1-5列是问卷号,6列是等级码,7列是性别,8-9列是年龄,10列是教育程度,11列是职业代码,12-15列是收入。应如何录进SAS?DATAdiaoch;/*存入diaoch数据集,文件名长度为1~8个字符。*/INPUTid1-5area1-2level6sex7age8-9edc10ocu11sal12-15;LIST;/*显示每行的数据,以便核对。可省之*/CARDS;/*告诉SAS,数据行从下一行开始读之*/110011160310950110021165421980110302270232130run;

/*本段程序是典型的按列输入模式录入数据。*/特点:数据字段位置固定

28①按列输入模式对数据字段位置固定的源数据,用input语句读入时,可按列模式输入,其一般形式为:

input变量名1[$]开始列数-结束列数[变量名2…];例:

dataindt01;

infile'd:\zxd\imptdt01.dat'; inputid$1-4age6-7actlevel$9-12sex$14; run; procprintdata=indt01;run;29按列输入模式示例例:imptdt02.dat中1-9列为日期,10-12列为航班目的地,13-15列为登机人数。试建立SAS数据集。

filenamedst'd:\zxd\sas';/*给文件夹起别名dst*/ datawork.indt02;

infiledst(imptdt02.dat); inputdata$1-7dest$8-10boarded11-13; run; datatmp;

iinfiledst(imptdt02.dat); inputdata$1-7dest$8-10boarded11-13year6-7; run; procprint;run;引例2数据字段位置固定的数据,有时带有定格式,为顺利读取数据,就要正确解读特殊格式。下面就是一批有格式的原始数据:30张三丰77/12/231.68$1,234李斯80/05/162.01$2,200吴留意82/05/161901,800其中每行是一条记录的数据,1-6列是姓名,7-14列是生日,15-18列是身高(米),19列后是薪水。应如何录进SAS?DATAtmp;INPUTname$6.birthdayyymmdd8.height4.2salcomma8.;CARDS;张三丰77/12/231.68$1,234李斯80/05/162.01$2,200吴留意82/05/161901,800run;/*本段程序是典型的格式化输入模式录入数据。*/31②格式化模式输入对数据字段位置固定的源数据,也可以采用格式化的输入模式更灵活地建立SAS数据集。一般形式:input

指针控制

变量名

输入格式

[…];

常见的指针控制有:

@n——将列指针移到第n列(指示输入的绝对位置) +n——将列指针位置增加n列(指示输入的相对位置)

输入格式是指SAS系统预定义或用户自定义的数据格式,如:4.2、$4.、comma12.2、yymmdd8.适用范围:源文件中各变量所在位置必须是规则的(字段宽度固定);可用指针控制变量读入的始点,终点由输入格式确定;每个变量按输入格式读入指定的长度;该模式特点与列模式基本类似,但可读入多种格式的数值字段。32输入/输出格式类型SAS数据输入/输出的格式主要有四类:字符型、数值型、日期时间型和用户自定义型。输入输出格式的一般形式为

[$][格式名]w.[d] $ 表明为字符型变量的输入输出格式;

w. 指明格式的宽度为w(字符数).对输入格式就是读入的最大字符数,对输出格式就是变量显示时占据的最大列数;

d 在数值型输出时指明显示小数位数,在数值型变量输入时只指明输入整数值中隐含的小数位数。33常见的输入/输出格式(一)字符型格式 $w.或$charw.数值输入格式 w.d(若数据中含小数则d无用)数值输出格式 bestw.(w确省值为12,超过宽度w则用科学计数法显示)数值输入格式 commaw.d(可自动除去数据串中的逗号、空格、美圆号、横线,保留数字、小数点)数值输出格式 commaw.d

dollarw.d(整数部分每3位加入逗号,后一格式还要再加$于数值前)34常见的输入/输出格式(二)日期输入格式 yymmddw.mmddyyw.ddmmyyw.日期输出格式 yymmdd[x]w.

其中x指定年、月、日间的分隔符,它是下列字符之一:b(空格)、c(冒号)、d(横线,此为缺省值)、n(无分隔)、p(点号)、s(斜杠)。日期输入输出格式datew.(可转换30MAY2000形式日期)时间输入格式timew.时间输出格式timew.d

实现hh:mm:ss.ss形式时间值与SAS数值的转换。日期时间输入格式datetimew.输出格式datetimew.d

实现ddmmmyy

hh:mm:ss.ss形式日期时间值与SAS数值的转换。35格式化输入示例例:imptdt03.dat中有某科室员工信息,有姓、名、工种、年薪(有逗号的数据)四个字段。dataindt03;infile'd:\zxd\sas\imptdt03.dat';inputLastName$7.@9FistName$5.@15Job3.@19Salarycomma9.;run;procprint;run;36示例:计算日期间隔datatmp; /*建立数据集tmp*/informatd1d2YYMMDD10.;/*设置变量d1、d2的日期输入格式*/inputd1d2; /*读入变量d1、d2的值*/intd=INTCK("day",d1,d2);/*计算d1、d2日期之间的天数intd*/d3=INTNX("week",d1,10); /*计算d1日期后10个星期时的日期d3*/formatd1-d3YYMMDD8.; /*设置变量d1、d2、d3的日期输出格式*/cards;2001/06/302002/06/30

结果:2001:08:012001-10-01 OBSD1D2INTDD3procprint; 101-06-3002-06-3036501-09-02run; 201-08-0101-10-016101-10-0737获取系统的日期、时间利用date()、time()等函数获取系统日期和时间。例如:dt=date();te=time();利用sysdate、systime系统宏变量获取SAS启动时的日期时间。例如:dd="&sysdate"d;tt="&systime"t;例:

data_null_; a=date();b="&sysdate"d; puta'='b; formatabyymmdds10.; put'a='a'andb='b; put"todayis&sysdate"; run;引例3有时数据字段位置虽不固定,但字段间的分隔符却是统一的,而数据主要是不带格式的字符型和数值型。下面就是一批这样的原始数据:38张三丰男26

1.68

2234李斯女28

1.71

900诸葛留意男33

1.91800其中每行是一条记录的数据,依次是姓名、性别、年龄、身高(米)、薪水各字段,字段间空格分开。应如何录进SAS?DATAtmp;INPUTname$sex$ageheightsal;CARDS;张三丰男261.682234李斯女281.71900诸葛留意男331.91800run;/*本段程序是典型的列表输入模式录入数据。*/特点:字段间的分隔符固定

39③列表模式输入对分隔符(通常为空格)固定的数据源,可以采用自由列表模式输入数据。一般形式为:

input变量名[$][…];/*变量长度默认8,超过会截断*/

其中,变量名指明数据集中要建立的变量,它们出现的顺序必须与数据源中的数据字段顺序匹配。例: datascores;

infilecardsdelimiter=','; inputtest1test2test3; cards; 91,87,95 97,.,92 ,1,1 run;

适用范围:源文件中字段间至少有一个空格或特定字符分隔(分隔符固定);

字段只能按序输入;

缺失值必须用句点表示;

字符变量的值不能含有空格,长度一般不超过8;40Infile语句的选项Infile

语句是为INPUT语句指定数据源的配套语句,它的一般形式为:INFILE‘数据源’[选项];(数据源为逻辑文件CARDS或DATALINES时,该语句可省略。)常用选项有:

DLM=‘符号’选项:指示数据间的分隔符。

DSD选项:可将数据行中带引号的字符串(包括分隔符)作为一般字符串对待,并且读入该段时会自动除去最外层引号;使用DSD后,缺省的分隔符为逗号;不用DSD,多个相连的分隔符作一个处理;用了DSD后,两个相邻的分隔符就意味中间有个缺失值。

MISSOVER选项:当数据源中的一条记录的数据不够被INPUT语句中的变量读取时,尚未写入的变量都置为缺失值;该选项缺省时自动为FLOWOVER选项,即从数据源的下一记录中取数据填补上。

FIRSTOBS=n1OBS=n2

选项:指示在数据源中读哪些数据行。41列表模式输入示例源数据文件imptdt04中含性别、年龄、银行卡数、银行卡使用次数、公司卡数、公司卡使用次数6字段数据,均以空格分隔,试建数据集。dataint04;infile'd:\zxd\sas\imptdt04.dat';inputsex$agebankcardfrebank

depcard

fredep;run;42用Length语句设置变量长度一般情况下,变量的长度默认为8个字节,这对字符型变量而言,只能存放8个字符(4个汉字)。length语句可改变变量的长度属性,一般形式为: length变量名表[$]长度.;例: datatmp; lengthname$12.; inputname$age; cards;

zhangsanfeng56

lierwa66

wangwujing45 ;43带格式修饰的列表输入为突破变量的默认长度限制以及解释特殊格式的数据,在列表输入模式中还可以加入输入格式修饰说明,一般形式为:

input变量名:[$]输入格式.[…];例如:imptdt06.dat中城市名超过8字符,两数值字段中有逗号。dataindt06;infile'd:\zxd\sas\imptdt06.dat';inputcity:$12.pop70:comma9.pop80:comma9.;run;procprint;run;引例4早期留下的数据往往不规则,有时字段前还带有字段名,就像下面这批原始数据:44name=张三丰sex=男age=26sal=223.4name=李斯sex=女age=28sal=523.6name=诸葛留意sex=男age=33sal=1260.5应如何录进SAS?DATAtmp;INPUTname=$sex=$age=sal=;CARDS;name=张三丰sex=男age=26sal=223.4name=李斯sex=女age=28sal=523.6name=诸葛留意sex=男age=33sal=1260.5run;特点:字段前有“字段名=”标记

45④命名模式输入*

当源数据文件中的数据字段里包含字段名时,往往需要采用命名模式输入较为方便。一般形式为:

INPUT[指针]变量名=[$][...][@|@@];

INPUT变量名=[$]始列[-终列][.小数位][@|@@];

INPUT[指针]变量名=informat.[@|@@];例:datatem;

infilecards; inputname=$10.sex=$1.birthday=height=3.;

informatbirthdaydate7.;/*此例中birthday=date7.就不行!?*/ formatbirthdayyymmdd10.; cards; name=AlexBrucesex=Mbirthday=13Jun67height=174 birthday=08Aug54sex=Fname=CathyLee ; run; /*注意:命名模式后面不能再跟其它输入模式*/46INFORMAT/FORMAT语句一般形式:INFORMAT变量

格式

[…];FORMAT变量

格式

[…];功能:该语句用于设置变量的缺省输入/输出格式。若语句中变量后没指定格式,则表示移去原有的格式。输入格式的具体种类见前面章节。注意:INFORMAT语句不会影响数值变量输入值的实际长度*,但可能会截断字符型变量的输入值长度(见下例)。47混合模式输入

对一些复杂的非标准的源数据文件,各数据字段需要不同的读入模式才能正确匹配,这时可在input语句中混合使用各种读入模式。例:imptdt07.dat中前11列是社保号,接着7列是开始雇佣日期,20-25列是逗号分隔的年薪,27列开始的字段是部门,最后是电话分机号。Datamixdimpt;Infile'd:\zxd\sas\imptdt07';InputSSN$1-11@12HireDatedate7.@20Salarycomma6.Department:$9.Phone_No;FormatHireDateyymmdd10.SalaryDollar7.;Run;你知道这里用了几种输入模式吗?程序可以改动吗?48处理数据步的全过程SAS系统执行数据步的过程主要分为两个阶段:•编译数据步

语法检查,代码转换(机器码) 创建输入缓冲区(存放数据源中的一行记录)

创建一个程序数据向量PDV(可暂存数据集的当前一条观测)

创建SAS数据集的描述部分(数据集名称、观测变量个数和变量属性等)•执行数据步49程序向量数据缓冲器PDVPDV(ProgramDataVector)来存放当前的一个观测;观测数据经处理后存入数据集。这是数据步的主要工作场所。 PDV中包括两个自动生成的临时变量:_N_(记录数据步执行的次数)和_ERROR_(错误标志:0为无错误,1为发生错误)数据步中出现的变量(包括数据集内的变量)50数据步执行阶段在执行期间,SAS系统执行以下步骤:(除非另有指向)1)PDV中所有的变量值被初始化为缺失值;2)输入缓冲器据input语句的数据需求,读入源数据文件的相应记录行,并写相应的数据字段到PDV;3)每个语句被顺序执行,并可修改PDV形成当前观测;4)数据步语句一遍执行后,PDV中的值写入数据集;*5)PDV中外部变量初始化为确失值,程序流程回到2);6)对数据源文件的每条记录都按上面步骤执行一次;7)重复以上步骤直到外部文件中数据结束。51input语句后的单尾符@一个数据步内可以有多条input语句。但是当执行完一条input语句后,一般将放弃缓冲区内现有源数据行,而从源文件中再取一条记录更新缓冲区。若要保持现有源数据行供下一条input使用其数据,则应在input语句的最后加入@跟踪符。例:datatmp1;inputx;inputy;cards;112233445566;run;datatmp2;inputx@;inputy;cards;112233445566;run;datatmp3;inputx@;inputy@;cards;112233445566;run;52input语句后的双尾符@@一般情况下,当程序执行到数据步底部后,也会从源数据文件中另取一行记录来更新缓冲区内原有数据。若要缓冲区内原有数据不放弃,使其在数据步的下一循环中仍可用,则应在input语句最后加上@@跟踪符。例:datatmp5;inputxy@@;cards;112233445566;run;datatmp6;inputxy;cards;112233445566;run;datatmp7;inputa@;inputxy@@;cards;112233445566;run;datatmp8;inputa@;inputx1-2y@@;if_n_=10thenstop;cards;112233445566;run;53源数据的指针控制当SAS从数据行中读取数据时,它用指针来跟踪当前数据的位置;指针控制符可为input语句指示数据源中当前数据所在的行、列位置。列指针控制符“+n”表示指针右移n列(n为负则左移n列);列指针控制符“@n”表示指针移到第n列(绝对位置);列指针控制符“@‘character-string’”表示把指针移到数据行中字符串character-string后第一个非空格列。行指针控制符“#n”表示指针移到第n行;(当一条观测有几行源数据时,起作用)行指针控制符“#(expression)”表示指针移到表达式的值(必须为整数)所指的行。行指针控制符“/”表示指针移到下一行的第一列。54指针控制符用法示例行指针用法示例:datatmp1;inputname:$10.age/score1-score3;cards;zhangsan12889867lisi13779886;run;列指针用法示例1:datatmp2;m=-1;/*左移一列*/inputx1-4+my@2id$2.;/*dropm;*/cards;123452468013579;run;列指针用法示例2:datatmp3;inputid$2.age3-4@'size='x;list;cards;0116size=54.230215size=45.661318size=61.01;run;55由计算生成变量在数据步中,可以用赋值语句来生成新变量。一般形式为: 变量=表达式;功能:将表达式的计算值赋给变量,若该变量不在数据集中,则新增之。例:输入工号、生日、工资、奖金,计算年龄和总收入。datatmp;inputid$2.@4birthdayyymmdd8.m1m2;age=intck('year',birthday,date());total=(m1+m2)*(1-0.05);cards;0166/07/03598.5012001070/01/23504.671100;run;56数据步内同时建多个数据集利用条件控制语句if与输出语句output配合,可在一个数据步内同时建立多个数据集。例如:利用同一数据源建立两个数据集

datatmp1tmp2; inputname$agescore@@; ifage<=30thenoutputtmp1; elseoutputtmp2; cards;JingJG2889LiM3265WangJ2198LiuB6056procprint;run;57IF语句及功能一般形式:IF表达式

[THEN语句1;[ELSE语句2]];功能:当表达式为真时,执行语句1,当表达式为假时执行语句2(若无ELSE子句,则执行IF语句之后的其它语句);当任何子句均无,仅剩“IF表达式;”,则表示‘表达式’为‘假’的观测不再处理,也不进入数据集。注意:如果THEN或ELSE后需要一组语句时,可放在“DO;”和“END;”语句之间。IFexpressionTHENDO;

statements;...

END;ELSEDO;

statements;...

END;58OUTPUT语句及功能(1)功能将PDV中当前的处理观测值(记录)输出到OUTPUT指定的数据集中,该数据集必须已在DATA语句中定义过。注意:一旦在DATA步中出现了OUTPUT语句,则原来在数据步末尾隐含的OUTPUT功能便不再起作用了。(2)用法格式:OUTPUT[数据集名];若省略数据集名,则当前观测值写到本数据步正在建立的数据集。

59示例生成有4条记录的数据集:datatmp;inputx1-x3@@; y=x1;output; y=x2;output; cards; 123456 procprint; run;求和并统计大于8的输入数据个数:datainfo;inputx@@;retainn0sumx0;ifx<8thengotook;putx;n=n+1;ok:sumx=sumx+x;cards;6313844112procprint;run;60RETAIN语句和累加语句RETAIN语句功能及用法:RETAIN语句使其中的变量在数据步的每次循环时,不被重新初始化。(有点类似C中的静态变量。)

格式:RETAIN变量名1[初值1][变量2[初值2]…];

或:RETAIN变量名表[(初值表)];累加语句功能及用法:累加语句可对某一数值型变量求累加值。 一般格式:变量+表达式;在第一个观测值未读入前,该变量的初值为零,在数据步的每次循环中重复加入表达式值,若表达式计算结果为缺失值时,将作零处理。61示例求和与平方和:datatotal;inputx@@;retainsx0sx20;sx=sx+x;sx2=sx2+x*x;cards;254367run;求薪水总数:datatmp; inputname$salary@@; total+salary; cards; Xu800Zhou600procprint;run;62读层次数据文件用数据步读入的文本数据文件中,有一类称为层次文件,它的记录根据其某个字符段可区分为是记录头或是详细记录。例如,有一数据文件census.dat中,以H开头的行是头记录,其后包含一个地址;以P开始的行是详细记录,记录居住在该地址人员的姓名,年龄和性别。dataPeople(drop=type);infile'H:\sas&matlab讲义\census.dat'truncover;retainAddress;inputtype$1.@;iftype='H'theninput@3Address$15.;input@3Name$9.AgeSex$;run;TRUNCOVER选项:如果末端的数据不够列宽则从这里截断,读取的部分数据被保留下来,当前变量之后的变量就会置为缺失值。63SAS函数SAS函数是一个程序,它可以对一个或多个参数进行计算后返回一个值。每个SAS函数有一个关键字名。调用函数应写出函数名和括号内的参数:

函数名(参数,...)(注意:函数的参数可以是常数、变量、函数或表示式)当参数多于一个时,参数之间应该用逗号分隔,也可写成如下形式:

函数名(OF变量1—变量n)

函数名(OF变量1变量2变量3)例如: SUM(OFX1—X100Y1—Y100) SUM(OFXYZ) SUM(X1,X2,X3,X4)64SAS函数功能测试的小程序测试函数功能的一个简单的程序示例:data_null_;y=sqrt(3);put‘y=‘,y;run;上述程序意图了解sqrt(根式)函数的功能、用法。65常用函数(一)

函数名功能简介函数名功能简介ABS(X)返回X的绝对值ARCOS(x)反余弦MAX(X,Y,...)返回X,Y,...中的最大值ARSIN(x)反正弦MIN(X,Y,...)返回X,Y,...中的最小值COSH(x)双曲余弦MOD(x,y)计算x/y的余数SINH(x)双曲正弦SIGN(x)返回参数x的符号或0PROBBNML(p,n,r)二项式概率分布函数SQRT(x)计算x的平方根PROBCHI(x,df)卡方概率分布函数DIM(array)返回数组中元素个数PROBF(x,ndf,ddf)F分布函数EXP(x)e的x次幂PROBNORM(x)标准正态分布函数LOG(x)计算x的自然对数PROBT(p)T分布函数LOG10(x)计算x的常用对数CINV(p,df,nc

温馨提示

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

评论

0/150

提交评论