文档详情

《SAS应用基础》PPT课件.ppt

大米
实名认证
店铺
PPT
1,016.60KB
约70页
文档ID:576547583
《SAS应用基础》PPT课件.ppt_第1页
1/70

SAS软件应用基础之二SAS的数据获取的数据获取 2数据获取( (将实际数据转录为将实际数据转录为SASSAS数据文件数据文件) )•SAS 可以从以各种形式存可以从以各种形式存储的数据中的数据中获取有用取有用的信息,建立的信息,建立专门格式的格式的SASSAS数据文件数据文件•数据来源可以是数据来源可以是长度不定的度不定的记录、、、、二二进制文件制文件、、、、自由格式数据自由格式数据、、、、甚至包括残缺数据的文件甚至包括残缺数据的文件•通通过SAS 系系统中各种工具以及相中各种工具以及相应方法,可方方法,可方便地便地访问这些数据,并可些数据,并可转换为SASSAS数据文件数据文件•SASSAS系系统只能只能对由由SASSAS建立的数据文件直接建立的数据文件直接进行行统计分析分析 3 图形界面交互式录入数据•SAS系系统有多种有多种图形界面能交互式的形界面能交互式的将数据将数据录入入为SAS专用的数据文件用的数据文件这里介里介绍其中几种:其中几种:•利用利用VIEWTABLE新建数据集新建数据集•利用利用SAS ASSIST 创建数据集建数据集•利用利用SAS INSIGHT 创建数据集建数据集•利用利用SAS ANALYST 创建数据集建数据集•利用利用SAS LAB 创建数据集建数据集 4利用VIEWTABLE录入数据•VIEWTABLE VIEWTABLE 是是是是SAS SAS 系统中一种通过可视的方式管系统中一种通过可视的方式管系统中一种通过可视的方式管系统中一种通过可视的方式管理数据的工具。

理数据的工具理数据的工具理数据的工具•用用用用VIEWTABLE VIEWTABLE 建立建立建立建立SASSAS数据文件的方法:数据文件的方法:数据文件的方法:数据文件的方法:•一一一一. .在在在在SAS SAS 资源管理器窗口中资源管理器窗口中资源管理器窗口中资源管理器窗口中, , , ,打开某数据库打开某数据库打开某数据库打开某数据库, , , ,然后在然后在然后在然后在此窗栏内单击鼠标右键此窗栏内单击鼠标右键此窗栏内单击鼠标右键此窗栏内单击鼠标右键, , , ,在菜单中选在菜单中选在菜单中选在菜单中选New New 按钮按钮按钮按钮( ( ( (或单或单或单或单击击击击SASSASSASSAS主菜单上的主菜单上的主菜单上的主菜单上的File->NewFile->NewFile->NewFile->New……, , , ,也可在命令窗口条内也可在命令窗口条内也可在命令窗口条内也可在命令窗口条内键入键入键入键入SASSASSASSAS命令命令命令命令vt)vt)vt)vt)•二二二二. . . .在随后出现的窗口、对话框内据提示选择在随后出现的窗口、对话框内据提示选择在随后出现的窗口、对话框内据提示选择。

在随后出现的窗口、对话框内据提示选择 5利用SAS ASSIST录入数据•SAS ASSISTSAS ASSIST是是是是SASSAS系统的一个重要的模块系统的一个重要的模块系统的一个重要的模块系统的一个重要的模块. . . .它的作它的作它的作它的作用是使得用户不需要编程就可以完成一些常用的数用是使得用户不需要编程就可以完成一些常用的数用是使得用户不需要编程就可以完成一些常用的数用是使得用户不需要编程就可以完成一些常用的数据管理、统计分析、输出图表据管理、统计分析、输出图表据管理、统计分析、输出图表据管理、统计分析、输出图表•单击单击单击单击Solution Solution 菜单下的菜单下的菜单下的菜单下的ASSIST ASSIST 选项,启动选项,启动选项,启动选项,启动SAS SAS ASSISTASSIST在系统弹出的窗口中,系统弹出的窗口中,系统弹出的窗口中,系统弹出的窗口中,SAS ASSIST SAS ASSIST 进行进行进行进行一些初始设置;如果不希望在下次使用一些初始设置;如果不希望在下次使用一些初始设置;如果不希望在下次使用一些初始设置;如果不希望在下次使用SAS ASSIST SAS ASSIST 的时候仍然出现这个窗口,可以将的时候仍然出现这个窗口,可以将的时候仍然出现这个窗口,可以将的时候仍然出现这个窗口,可以将Show this Show this window at startup window at startup 前面的叉号取消。

不作修改,单前面的叉号取消不作修改,单前面的叉号取消不作修改,单前面的叉号取消不作修改,单击击击击Continue Continue 按钮,就自动弹出了按钮,就自动弹出了按钮,就自动弹出了按钮,就自动弹出了SAS ASSIST SAS ASSIST 的工的工的工的工作区域 可根据提示进行操作可根据提示进行操作可根据提示进行操作可根据提示进行操作数据输入时先按数据输入时先按数据输入时先按数据输入时先按InsertInsertInsertInsert键键键键, , , ,结束时可用结束时可用结束时可用结束时可用endendendend命令!命令!命令!命令! 6★用Insight与Analyst录入数据•用用SAS主菜主菜单上的上的Solutions->Anayisis-> Analyst选项可打开可打开Analyst界面界面进行数据行数据录入入和分析也可用命令窗条内也可用命令窗条内键入入analyst实现)•用用SAS主菜主菜单上的上的Solutions->Anayisis-> Interactive Data Analysis选项可打开可打开Insight界界面面进行数据行数据录入和分析。

入和分析 (也可用命令窗条内也可用命令窗条内键入入insight实现) 7SAS 基本概念•SAS 数据集与数据集与SAS 数据库数据库•变量与观测变量与观测•常用统计量及记号常用统计量及记号 8SAS 数据集((SASSAS数据文件)数据文件)•SASSAS数据集通常是数据集通常是数据集通常是数据集通常是SAS SAS 系系系系统统操作的操作的操作的操作的对对象,也是数据在象,也是数据在象,也是数据在象,也是数据在SAS SAS 系系系系统统中的存中的存中的存中的存储储形式•SAS SAS 数据集可以看成是由若干行和若干列数据集可以看成是由若干行和若干列数据集可以看成是由若干行和若干列数据集可以看成是由若干行和若干列组组成的表成的表成的表成的表格格格格( (矩矩矩矩阵阵, ,关系型数据关系型数据关系型数据关系型数据结结构构构构), ),各列可以取不同各列可以取不同各列可以取不同各列可以取不同类类型的型的型的型的值值•SAS SAS 数据集是由数据集是由数据集是由数据集是由SAS SAS 系系系系统统建立的特有的数据存建立的特有的数据存建立的特有的数据存建立的特有的数据存储储格格格格式,只能被式,只能被式,只能被式,只能被SAS SAS 系系系系统调统调用。

用•SAS SAS 数据集以数据集以数据集以数据集以.sas7bdat .sas7bdat 为扩为扩展名•数据集的名字由英文字母、数字、下划数据集的名字由英文字母、数字、下划数据集的名字由英文字母、数字、下划数据集的名字由英文字母、数字、下划线组线组成,第成,第成,第成,第一个字母必一个字母必一个字母必一个字母必须须是字母或下划是字母或下划是字母或下划是字母或下划线线,名字最多只能有,名字最多只能有,名字最多只能有,名字最多只能有8 8 个个个个字符;另外在命名字符;另外在命名字符;另外在命名字符;另外在命名时时不区分大小写不区分大小写不区分大小写不区分大小写 9常见SAS文件的后缀名•.sas7bdat —— SAS系系统数据集文件的数据集文件的扩展名展名•.sas7bvew —— SAS系系统数据集数据集视图的的扩展名展名•.sas7bcat —— SAS系系统目目录文件的文件的扩展名展名•.sas7bndx —— SAS系系统数据集索引的数据集索引的扩展名展名•.sas7bitm —— SAS系系统项目目储存文件的存文件的扩展展名名 10观测与变量•数据集的每一行叫做一个数据集的每一行叫做一个观测(observation)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变量的属性说明•NameName::::输入变量的名称,最长不能超过输入变量的名称,最长不能超过输入变量的名称,最长不能超过输入变量的名称,最长不能超过32 32 个字符这项内容只在新建表格的时才可以修改这项内容只在新建表格的时才可以修改这项内容只在新建表格的时才可以修改这项内容只在新建表格的时才可以修改•LabelLabel::::变量的标签,最长不能超过变量的标签,最长不能超过变量的标签,最长不能超过变量的标签,最长不能超过256 256 个字符在个字符在个字符在个字符在VIEWTABLE VIEWTABLE 中中中中, , , ,它代替它代替它代替它代替NameName作为这一列的题目作为这一列的题目作为这一列的题目作为这一列的题目•LengthLength::::用来规定变量的数据的长度,默认为用来规定变量的数据的长度,默认为用来规定变量的数据的长度,默认为用来规定变量的数据的长度,默认为8 8字字字字节节 这项内容也只在新建表格时才可修改这项内容也只在新建表格时才可修改这项内容也只在新建表格时才可修改这项内容也只在新建表格时才可修改•FormatFormat::::修改数据的输出格式。

例如我们希望显示修改数据的输出格式例如我们希望显示修改数据的输出格式例如我们希望显示修改数据的输出格式例如我们希望显示1288.12 1288.12 美元,那么可在这里将格式修改为美元,那么可在这里将格式修改为美元,那么可在这里将格式修改为美元,那么可在这里将格式修改为$10.2 $10.2 ,,,,则在表格中这个数据将显示为则在表格中这个数据将显示为则在表格中这个数据将显示为则在表格中这个数据将显示为$1288.12$1288.12•InformatInformat::::修改数据的输入格式修改数据的输入格式修改数据的输入格式修改数据的输入格式•TypeType::::选择变量是数值型选择变量是数值型选择变量是数值型选择变量是数值型( ( ( (Numeric)Numeric)还是字符型还是字符型还是字符型还是字符型( ( ( (Character)Character)的 13SAS数据库(Windows(Windows的目录、文件夹的目录、文件夹) )•SAS SAS 数据数据数据数据库库的概念与通常所的概念与通常所的概念与通常所的概念与通常所讲讲的数据的数据的数据的数据库库的概念有所的概念有所的概念有所的概念有所不同,它也是不同,它也是不同,它也是不同,它也是SAS SAS 系系系系统统中一个特有的概念。

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

数据文件数据文件数据文件 14SAS预定义的数据库•WORK 数据数据库::用来存放用来存放临时数据集•SASUSER 数据数据库::用来存放用用来存放用户自己的数据集,保存在其中的数自己的数据集,保存在其中的数据集是永久的据集是永久的•SASHELP 数据数据库::用来存放用来存放SAS 系系统帮助、例子文件,保存在其帮助、例子文件,保存在其中的数据集也是永久的中的数据集也是永久的 15临时数据集与永久数据集•按照数据集的生命周期可以将其分按照数据集的生命周期可以将其分按照数据集的生命周期可以将其分按照数据集的生命周期可以将其分为临时为临时数据集和数据集和数据集和数据集和永久数据集永久数据集永久数据集永久数据集•临时临时数据集就是数据集被建立后只在数据集就是数据集被建立后只在数据集就是数据集被建立后只在数据集就是数据集被建立后只在SAS SAS 进进程没有程没有程没有程没有关关关关闭闭的情况下存在,一旦退出的情况下存在,一旦退出的情况下存在,一旦退出的情况下存在,一旦退出SAS SAS 进进程,那么程,那么程,那么程,那么这这个个个个数据集也就随之消失了数据集也就随之消失了数据集也就随之消失了。

数据集也就随之消失了•存存存存储储在在在在workwork库库下的数据集都是下的数据集都是下的数据集都是下的数据集都是临时临时数据集,其它数据集,其它数据集,其它数据集,其它库库中的数据集都是永久数据集中的数据集都是永久数据集中的数据集都是永久数据集中的数据集都是永久数据集•永久数据集当永久数据集当永久数据集当永久数据集当SAS SAS 进进程程程程结结束的束的束的束的时时候仍然存在,下次候仍然存在,下次候仍然存在,下次候仍然存在,下次启启启启动动SAS SAS 的的的的时时候候候候( (包括重启包括重启包括重启包括重启计计算机算机算机算机) ) ,仍然可以使用,仍然可以使用,仍然可以使用,仍然可以使用它,除非用它,除非用它,除非用它,除非用delete delete 命令命令命令命令强强行将它行将它行将它行将它删删除 16SAS数据集的两水平名•SASSAS数据集用两水平命名(两数据集用两水平命名(两级级名)方式名)方式进进行命名行命名•两水平名中前一部分是两水平名中前一部分是两水平名中前一部分是两水平名中前一部分是数据数据库库名名,后一部分是,后一部分是,后一部分是,后一部分是数据数据集名集名,中,中,中,中间间用用用用点号点号连连接。

接若数据若数据库库名省略,名省略,则则表示表示库库名名为为WORKWORK•例如:数据集例如:数据集例如:数据集例如:数据集testtest表示表示表示表示WORKWORK库库中的中的中的中的临时临时数据集数据集数据集数据集testtest;;;;SASUSER.testSASUSER.test表示表示表示表示SASUSERSASUSER库库中的数据集中的数据集中的数据集中的数据集testtestWindows(Windows下的下的下的下的实际实际文件名文件名文件名文件名为为test .sas7bdattest .sas7bdat) ) •在在在在SASSAS中中中中访问访问数据集必数据集必数据集必数据集必须须使用使用使用使用这样这样的的的的办办法 17用户自建数据库•用用LIBNAME 语句可以将句可以将SAS数据数据库((逻辑的)的)与一个与一个实际的目的目录(文件(文件夹))联系起来,形成系起来,形成用用户自建的自建的SAS数据数据库•LIBNAME语句的一般用法句的一般用法为::•libname 数据数据库名名￿￿￿￿[引擎引擎] 库位置位置;•libname 数据数据库名名￿￿￿￿(库位置位置1 库位置位置2 …);•库位置通常是位置通常是‘‘目目录的全路径文件名的全路径文件名’’表示表示;引擎引擎为读写数据的格式写数据的格式说明明,如如v8,v6,xport等。

等另外,也可用另外,也可用““创建新的数据集创建新的数据集””工具工具图标图标 来实现来实现SASSAS数据库的创建数据库的创建 18建立SAS数据库的例子•希望把希望把F:\My SAS Files\V8\new F:\My SAS Files\V8\new 这这个目个目录录与一个名叫与一个名叫libtest libtest 的数据的数据库联库联系起来,并且将系起来,并且将test test 数据集放置在数据集放置在其中可以在其中可以在编辑编辑窗口窗口输输入如下的程序:入如下的程序:•libname libtest 'f:\my sas files\v8\new';libname libtest 'f:\my sas files\v8\new';•data libtest.test;data libtest.test;•input code price;input code price;•cards;cards;•600381 18600381 18•600262 16600262 16•600252 8600252 8•600009 10600009 10•600036600036•; ;•run;run; 19常用统计量的表示 20常用统计量的表示(续) 21分位数表•Max 是最大是最大值,, Min 是最小是最小值。

• Med 是中位数,反映数据的中心位置是中位数,反映数据的中心位置•Q1 是四分之一分位数是四分之一分位数, Q3 是四分之三分位数是四分之三分位数•Range 是最大是最大值减最小减最小值,,Q3- -Q1 为四分位四分位间距,可以反映数据取距,可以反映数据取值分散程度分散程度•Mode 是众数,即出是众数,即出现次数最多的次数最多的值 22图形界面批量式录入关系数据SASSAS系系系系统统提供了将提供了将提供了将提供了将SAS SAS 数据集与数据集与数据集与数据集与标标准格式文件和用准格式文件和用准格式文件和用准格式文件和用户户自自自自定定定定义义格式文件之格式文件之格式文件之格式文件之间间的互相的互相的互相的互相转换转换功能SASSAS的的的的导导入向入向入向入向导导可可可可以帮助我以帮助我以帮助我以帮助我们们完成完成完成完成这项这项工作SAS SAS 系系系系统统可以可以可以可以转换转换的的的的标标准准准准格式的数据文件包括:格式的数据文件包括:格式的数据文件包括:格式的数据文件包括:Microsoft Excel 97 or 2000Microsoft Excel 97 or 2000 Lotus 1 spreadsheet Lotus 1 spreadsheetMicrosoft Excel 5 or 7 Lotus 3 spreadsheetMicrosoft Excel 5 or 7 Lotus 3 spreadsheetMicrosoft Excel 4 spreadsheetMicrosoft Excel 4 spreadsheet Lotus 4 spreadsheet Lotus 4 spreadsheetMicrosoft Access 2000 tableMicrosoft Access 2000 table Delimited File Delimited File Microsoft Access 97 table Microsoft Access 97 table ( (分隔的数据文件没有特定扩展名分隔的数据文件没有特定扩展名分隔的数据文件没有特定扩展名分隔的数据文件没有特定扩展名) ) ) )DBase FileDBase File Comma Separated Values Comma Separated Values Tab delimited File Tab delimited File ( ( ( (逗号分隔数据文件扩展名为逗号分隔数据文件扩展名为逗号分隔数据文件扩展名为逗号分隔数据文件扩展名为csv)csv)( (制表符分隔数据文件扩展名为制表符分隔数据文件扩展名为制表符分隔数据文件扩展名为制表符分隔数据文件扩展名为txttxt) ) 23标准格式的数据文件的转换标准格式的数据文件的转换首先首先选择File 菜菜单中的中的Import data 按按钮,就启就启动了了导入向入向导。

若若文件是文件是标准数据格式,准数据格式,则选择Standard data source,Standard data source,然后在下拉菜然后在下拉菜单选具具体格式 24编程方式录入数据采用采用SAS编程方式程方式录入入实际数据是一种灵活而有数据是一种灵活而有效的手段尽管用效的手段尽管用图形界面形界面进行各种操作已行各种操作已经成成为Windows时代的一种主流模式代的一种主流模式,但在一些但在一些较复复杂的、的、庞大的大的问题上上,还是需要用是需要用编程模程模式才能方便的式才能方便的给予解决在在SAS系系统中中,我我们可以用其两可以用其两类基本基本过程之一程之一的数据步的数据步过程来完成程来完成对批量数据的批量数据的录入与管理入与管理 25Data Step•用于将原始数据文件转换成用于将原始数据文件转换成SASSAS数据集并可进数据集并可进行多种数据变换行多种数据变换•Data StepData Step的一般形式:的一般形式:data SAS-data-setSAS-data-set;infile 'filenamefilename' option;option;input 变量输入设定;其他SAS语句;run;data SAS-data-setSAS-data-set;input变量输入设定;其他SAS语句;cards;原始数据;run; 26源数据的基本输入模式在在SAS数据步中,数据步中,对输入数据起核心作用的是入数据起核心作用的是input语句;根据数据源的格式,句;根据数据源的格式,input语句可句可以采用四种基本以采用四种基本输入模式:入模式:•按列按列输入(入(Column))•格式化格式化输入(入(Format))•自由列表自由列表输入(入(List))•命名命名输入模式(入模式(Name))当然当然,对一些形式一些形式较复复杂的源数据的源数据还可采用混合可采用混合模式模式输入。

入 引例1•在回收在回收在回收在回收调查问调查问卷数据卷数据卷数据卷数据时时,,,,为为了快速了快速了快速了快速录录入,常把数据入,常把数据入,常把数据入,常把数据如下如下如下如下组织组织在文本文件中:在文本文件中:在文本文件中:在文本文件中:27110011160310150110011160310150110021165422180110021165422180110302270230130110302270230130 •其中每行是一张问卷的数据,其中每行是一张问卷的数据,其中每行是一张问卷的数据,其中每行是一张问卷的数据,1-21-2列是区号列是区号列是区号列是区号,1-5,1-5列是问卷号列是问卷号列是问卷号列是问卷号, ,6列是等级码列是等级码, 7列是性别列是性别, 8-9列是年龄列是年龄,10列是教育程列是教育程度度,11列是职业代码列是职业代码,12-15列是收入应如何录进列是收入应如何录进SAS?DATA diaoch; /*存入存入diaoch数据集数据集,文件名长度为文件名长度为1~~8个字符/ INPUT id 1-5 area 1-2 level 6 sex 7 age 8-9 edc 10 ocu 11 sal 12-15;LIST; /*显示每行的数据,以便核对。

可省之显示每行的数据,以便核对可省之*/CARDS; /*告诉告诉SAS,,数据行从下一行开始读之数据行从下一行开始读之*/110011160310950110021165421980110302270232130run; /*/* 本段程序是典型的按列输入模式录入数据本段程序是典型的按列输入模式录入数据 */ /特点:特点:数据字段数据字段位置固定位置固定 28①按列输入模式对数据字段位置固定的源数据数据字段位置固定的源数据,用用input语句句读入入时,可按列模式可按列模式输入入,其一般形式其一般形式为::input 变量名量名1[$] 开始列数开始列数-结束列数束列数 [变量名量名2 …];;例:例:data indt01;infile 'd:\zxs\sas\imptdt01.dat';input id$ 1-4 age 6-7 actlevel$ 9-12 sex$ 14;run;proc print data=int01;run; 29按列输入模式示例例:例:例:例:imptdt02.datimptdt02.dat中中中中1-91-9列列列列为为日期日期日期日期,10-12,10-12列列列列为为航班目的地航班目的地航班目的地航班目的地,13-15,13-15列列列列为为登机人数。

登机人数登机人数登机人数试试建立建立建立建立SASSAS数据集filename dst 'd:\zxd\sas'; /*filename dst 'd:\zxd\sas'; /*给给文件文件文件文件夹夹起起起起别别名名名名dst*/dst*/data work.indt02;data work.indt02;infile dst(imptdt02.dat);infile dst(imptdt02.dat);input data$ 1-7 dest$ 8-10 boarded 11-13;input data$ 1-7 dest$ 8-10 boarded 11-13;run;run;data tmp;data tmp;iinfile dst(imptdt02.dat);iinfile dst(imptdt02.dat);input data$ 1-7 dest$ 8-10 boarded 11-13 year 6-input data$ 1-7 dest$ 8-10 boarded 11-13 year 6-7;7;run;run;proc print; run;proc print; run; 引例2•数据字段位置固定的数据,有数据字段位置固定的数据,有数据字段位置固定的数据,有数据字段位置固定的数据,有时带时带有定格式有定格式有定格式有定格式 , ,为顺为顺利利利利读读取数据,就要正确解取数据,就要正确解取数据,就要正确解取数据,就要正确解读读特殊格式。

下面就是一批有特殊格式下面就是一批有特殊格式下面就是一批有特殊格式下面就是一批有格式的原始数据:格式的原始数据:格式的原始数据:格式的原始数据:30张张三丰三丰77/12/231.68$1,23477/12/231.68$1,234李斯李斯 80/05/162.01$2,20080/05/162.01$2,200吴留意吴留意82/05/16190 1,80082/05/16190 1,800•其中每行是一条记录的数据,其中每行是一条记录的数据,其中每行是一条记录的数据,其中每行是一条记录的数据,1-61-6列是姓名列是姓名列是姓名列是姓名,7-14,7-14列是生日列是生日列是生日列是生日, ,15-18列是身高列是身高(米米), 19列后是薪水应如何录进列后是薪水应如何录进SAS?DATA tmp; INPUT name$6. birthday yymmdd8. height 4.2 sal comma8.;CARDS; 张三丰张三丰77/12/231.68$1,234李斯李斯 80/05/162.01$2,200吴留意吴留意82/05/16190 1,800run;/*/* 本段程序是典型的格式化输入模式录入数据。

本段程序是典型的格式化输入模式录入数据 */ / 31②格式化模式输入•对对数据字段位置固定的源数据数据字段位置固定的源数据数据字段位置固定的源数据数据字段位置固定的源数据, ,也可以采用格式化的也可以采用格式化的也可以采用格式化的也可以采用格式化的输输入模式更灵活地建立入模式更灵活地建立入模式更灵活地建立入模式更灵活地建立SASSAS数据集•一般形式:一般形式:一般形式:一般形式:inputinput 指指指指针针控制控制控制控制 变变量名量名量名量名 输输入格式入格式入格式入格式 […];[…];常常常常见见的指的指的指的指针针控制有:控制有:控制有:控制有:@n —— @n —— 将列指将列指将列指将列指针针移到第移到第移到第移到第n n列列列列( (指示指示指示指示输输入的入的入的入的绝对绝对位置位置位置位置) )+n —— +n —— 将列指将列指将列指将列指针针位置增加位置增加位置增加位置增加n n列列列列( (指示指示指示指示输输入的相入的相入的相入的相对对位置位置位置位置) )输输入格式是指入格式是指入格式是指入格式是指SASSAS系系系系统预统预定定定定义义或用或用或用或用户户自定自定自定自定义义的数据格的数据格的数据格的数据格式式式式, ,如:如:如:如:4.2 4.2 、、、、$4. $4. 、、、、comma12.2 comma12.2 、、、、yymmdd8.yymmdd8.•适用范适用范适用范适用范围围::::源文件中各源文件中各源文件中各源文件中各变变量所在位置必量所在位置必量所在位置必量所在位置必须须是是是是规则规则的的的的( ( ( (字段宽度固定字段宽度固定字段宽度固定字段宽度固定) ) ) );;;;可用指可用指可用指可用指针针控制控制控制控制变变量量量量读读入的始点入的始点入的始点入的始点, , , ,终终点由点由点由点由输输入格式确定;入格式确定;入格式确定;入格式确定;每个每个每个每个变变量按量按量按量按输输入格式入格式入格式入格式读读入指定的入指定的入指定的入指定的长长度;度;度;度;该该模式特点与列模式基本模式特点与列模式基本模式特点与列模式基本模式特点与列模式基本类类似似似似, , , ,但可但可但可但可读读入多种格式的数入多种格式的数入多种格式的数入多种格式的数值值字字字字段。

段 32输入/输出格式类型SASSAS数据数据数据数据输输入入入入/ /输输出出出出的格式主要有四的格式主要有四的格式主要有四的格式主要有四类类:字符型、数:字符型、数:字符型、数:字符型、数值值型、日期型、日期型、日期型、日期时间时间型和用型和用型和用型和用户户自定自定自定自定义义型输输入入入入输输出格式的一般形式出格式的一般形式出格式的一般形式出格式的一般形式为为[$] [[$] [格式名格式名格式名格式名] w.[d]] w.[d]$ $表明表明表明表明为为字符型字符型字符型字符型变变量的量的量的量的输输入入入入输输出格式;出格式;出格式;出格式;w.w. 指明格式的指明格式的指明格式的指明格式的宽宽度度度度为为w(w(字符数字符数字符数字符数). ). 对输对输入格式就是入格式就是入格式就是入格式就是读读入的最大字符数入的最大字符数入的最大字符数入的最大字符数, ,对输对输出格式就是出格式就是出格式就是出格式就是变变量量量量显显示示示示时时占据的占据的占据的占据的最大列数;最大列数;最大列数;最大列数;d d在数在数在数在数值值型型型型输输出出出出时时指明指明指明指明显显示小数位数示小数位数示小数位数示小数位数, ,在数在数在数在数值值型型型型变变量量量量输输入入入入时时只指明只指明只指明只指明输输入整数入整数入整数入整数值值中中中中隐隐含的小数位数。

含的小数位数含的小数位数含的小数位数 33常见的输入/输出格式(一)字符型格式字符型格式字符型格式字符型格式$ $w w. . 或或或或 $char$charw.w.数数数数值值输输入入入入格式格式格式格式w w. .d d ( (若数据中含小数若数据中含小数若数据中含小数若数据中含小数则则d d无用无用无用无用) )数数数数值值输输出出出出格式格式格式格式bestbestw w. (. (w w确省确省确省确省值为值为12,12,超超超超过宽过宽度度度度w w则则用用用用科学科学科学科学计计数法数法数法数法显显示示示示) )数数数数值输值输入格式入格式入格式入格式commacommaw w. .d d ( (可自可自可自可自动动除去数据串中的除去数据串中的除去数据串中的除去数据串中的逗号、空格、美逗号、空格、美逗号、空格、美逗号、空格、美圆圆号、横号、横号、横号、横线线, ,保留数字、小数点保留数字、小数点保留数字、小数点保留数字、小数点) )数数数数值输值输出格式出格式出格式出格式commacommaw.dw.d dollar dollarw.dw.d ( (整数部分每整数部分每整数部分每整数部分每3 3位加入逗号位加入逗号位加入逗号位加入逗号, ,后一格式后一格式后一格式后一格式还还要再加要再加要再加要再加$ $于数于数于数于数值值前前前前) ) 34常见的输入/输出格式(二)日期日期日期日期输输入格式入格式入格式入格式yymmddyymmddw w. mmddyy. mmddyyw w. ddmmyy. ddmmyyw w. .日期日期日期日期输输出格式出格式出格式出格式yymmdd[x]yymmdd[x]w w. .其中其中其中其中x x指定年、月、日指定年、月、日指定年、月、日指定年、月、日间间的分隔符的分隔符的分隔符的分隔符, ,它是下列字符之它是下列字符之它是下列字符之它是下列字符之一:一:一:一:b(b(空格空格空格空格) )、、、、c (c (冒号冒号冒号冒号) ) 、、、、d (d (横横横横线线, ,此此此此为为缺省缺省缺省缺省值值) ) 、、、、n (n (无分无分无分无分隔隔隔隔) ) 、、、、p (p (点号点号点号点号) ) 、、、、s (s (斜杠斜杠斜杠斜杠) ) 。

日期日期日期日期输输入入入入输输出格式出格式出格式出格式 datedatew w. (. (可可可可转换转换30MAY200030MAY2000形式日期形式日期形式日期形式日期) )时间输时间输入格式入格式入格式入格式 timetimew w. . 时间输时间输出格式出格式出格式出格式 timew.dtimew.d实现实现hh:mm:ss.sshh:mm:ss.ss形式形式形式形式时间值时间值与与与与SASSAS数数数数值值的的的的转换转换日期日期日期日期时间输时间输入格式入格式入格式入格式 datetimedatetimew w. . 输输出格式出格式出格式出格式 datetimedatetimew.dw.d实现实现ddmmmyy hh:mm:ss.ssddmmmyy hh:mm:ss.ss形式日期形式日期形式日期形式日期时间值时间值与与与与SASSAS数数数数值值的的的的转换转换 35格式化输入示例例:例:例:例:imptdt03.datimptdt03.dat中有某科室中有某科室中有某科室中有某科室员员工信息,有姓、名、工工信息,有姓、名、工工信息,有姓、名、工工信息,有姓、名、工种、年薪种、年薪种、年薪种、年薪( (有逗号的数据有逗号的数据有逗号的数据有逗号的数据) )四个字段。

四个字段四个字段四个字段data indt03;data indt03;infile 'd:\zxd\sas\imptdt03.dat';infile 'd:\zxd\sas\imptdt03.dat';input LastName $7. @9 FistName $5. @15 Job 3. @19 input LastName $7. @9 FistName $5. @15 Job 3. @19 Salary comma9.;Salary comma9.;run;run;proc print;proc print;run;run; 36示例:计算日期间隔 data tmp;data tmp; /* /* 建立数据集建立数据集tmp*/tmp*/informat d1 d2 YYMMDD10.;informat d1 d2 YYMMDD10.;/* /* 设置变量设置变量d1d1、、d2d2的日期输入格式的日期输入格式* */ /input d1 d2;input d1 d2; /* /* 读入变量读入变量d1d1、、d2d2的值的值* */ /intd=INTCK("day",d1,d2); intd=INTCK("day",d1,d2); /* /* 计算计算d1d1、、d2d2日期之间的天数日期之间的天数intd */intd */d3=INTNX("week",d1,10);d3=INTNX("week",d1,10); /* /* 计算计算d1d1日期后日期后1010个星期时的日期个星期时的日期d3 */d3 */format d1-d3 YYMMDD8.;format d1-d3 YYMMDD8.; /* /* 设置变量设置变量d1d1、、d2d2、、d3d3的日期输出格式的日期输出格式* */ /cards;cards;2001/06/30 2002/06/302001/06/30 2002/06/30结果:结果:2001:08:01 2001-10-012001:08:01 2001-10-01OBS D1 D2 INTD D3OBS D1 D2 INTD D3proc print;proc print;1 01-06-30 02-06-30 365 01-09-021 01-06-30 02-06-30 365 01-09-02run;run;2 01-08-01 01-10-01 61 01-10-072 01-08-01 01-10-01 61 01-10-07 37获取系统的日期、时间利用利用利用利用date()date()、、、、time()time()等函数等函数等函数等函数获获取系取系取系取系统统日期和日期和日期和日期和时间时间。

例如:例如:例如:例如:dt=date(); te=time();dt=date(); te=time();利用利用利用利用sysdatesysdate、、、、systimesystime系系系系统统宏宏宏宏变变量量量量获获取取取取SASSAS启启启启动时动时的日期的日期的日期的日期时间时间例如:例如:例如:例如:dd="&sysdate"d; tt="&systime"t;dd="&sysdate"d; tt="&systime"t;例:例:例:例:datadata _null_; _null_;a=date();b=a=date();b="&sysdate"d"&sysdate"d ; ;put a ' = ' b;put a ' = ' b;format a b yymmdds10. ;format a b yymmdds10. ;put 'a= ' a 'and b= ' b;put 'a= ' a 'and b= ' b;put "today is &sysdate";put "today is &sysdate";runrun; ; 引例3•有有有有时时数据字段位置数据字段位置数据字段位置数据字段位置虽虽不固定,但字段不固定,但字段不固定,但字段不固定,但字段间间的分隔符却是的分隔符却是的分隔符却是的分隔符却是统统一的,而数据主要是不一的,而数据主要是不一的,而数据主要是不一的,而数据主要是不带带格式的字符型和数格式的字符型和数格式的字符型和数格式的字符型和数值值型。

型下面就是一批下面就是一批下面就是一批下面就是一批这样这样的原始数据:的原始数据:的原始数据:的原始数据:38张张三丰三丰 男男 2626 1.681.68 22342234李斯李斯 女女 2828 1.711.71 900900诸诸葛留意葛留意 男男 3333 1.9 18001.9 1800•其中每行是一条记录的数据,其中每行是一条记录的数据,其中每行是一条记录的数据,其中每行是一条记录的数据,依次是姓名、性别、年龄、依次是姓名、性别、年龄、依次是姓名、性别、年龄、依次是姓名、性别、年龄、身高身高(米米)、薪水各字段,字段间、薪水各字段,字段间空格分开应如何录进空格分开应如何录进SAS?DATA tmp; INPUT name$ sex$ age height sal;CARDS; 张三丰张三丰 男男 26 1.68 2234李斯李斯 女女 28 1.71 900诸葛留意诸葛留意 男男 33 1.9 1800run;/*/* 本段程序是典型的列表输入模式录入数据本段程序是典型的列表输入模式录入数据 */ /特点:特点:字段间的分隔符固定字段间的分隔符固定 39③列表模式输入•对对分隔符分隔符分隔符分隔符( (通常通常通常通常为为空格空格空格空格) )固定的数据源固定的数据源固定的数据源固定的数据源, ,可以采用自由列可以采用自由列可以采用自由列可以采用自由列表模式表模式表模式表模式输输入数据。

一般形式入数据一般形式入数据一般形式入数据一般形式为为::::input input 变变量名量名量名量名[$] […]; /*[$] […]; /*变变量量量量长长度默度默度默度默认认8, 8,超超超超过过会截断会截断会截断会截断* */ /其中其中其中其中, ,变变量名指明数据集中要建立的量名指明数据集中要建立的量名指明数据集中要建立的量名指明数据集中要建立的变变量量量量, ,它它它它们们出出出出现现的的的的顺顺序必序必序必序必须须与数据源中的数据字段与数据源中的数据字段与数据源中的数据字段与数据源中的数据字段顺顺序匹配例:例:例:例: data scores; data scores; infile cards delimiter=','; infile cards delimiter=','; input test1 test2 test3; input test1 test2 test3; cards; cards; 91,87,95 91,87,95 97,,9297,,92 ,1,1 ,1,1 ; ;• • 适用范围:适用范围:适用范围:适用范围: 源文件中字段间至少有一源文件中字段间至少有一源文件中字段间至少有一源文件中字段间至少有一个空格或特定字符分隔个空格或特定字符分隔个空格或特定字符分隔个空格或特定字符分隔( ( ( (分隔分隔分隔分隔符固定符固定符固定符固定);););); 字段只能按序输入字段只能按序输入字段只能按序输入字段只能按序输入; ; ; ; 缺失值必须用句点表示缺失值必须用句点表示缺失值必须用句点表示缺失值必须用句点表示; ; ; ; 字符变量的值不能含有空字符变量的值不能含有空字符变量的值不能含有空字符变量的值不能含有空格格格格, , , ,长度一般不超过8长度一般不超过8长度一般不超过8长度一般不超过8; ; ; ; 40Infile语句的选项Infile Infile 语语句句句句是是是是为为INPUTINPUT语语句指定数据源的配套句指定数据源的配套句指定数据源的配套句指定数据源的配套语语句,它句,它句,它句,它的一般形式的一般形式的一般形式的一般形式为为:::: INFILE ‘INFILE ‘数据源数据源数据源数据源’ ’ [ [选项选项]; ];( (数据源数据源数据源数据源为逻辑为逻辑文件文件文件文件CARDSCARDS或或或或DATALINESDATALINES时时,,,,该语该语句可省略。

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

MISSOVERMISSOVER选项选项:当数据源中的一条:当数据源中的一条:当数据源中的一条:当数据源中的一条记录记录的数据不的数据不的数据不的数据不够够被被被被INPUTINPUT语语句中的句中的句中的句中的变变量量量量读读取取取取时时,尚未写入的,尚未写入的,尚未写入的,尚未写入的变变量都置量都置量都置量都置为为缺失缺失缺失缺失值值;;;;该选项该选项缺省缺省缺省缺省时时自自自自动为动为FLOWOVERFLOWOVER选项选项,即从数据源的下一,即从数据源的下一,即从数据源的下一,即从数据源的下一记记录录中中中中 取数据填取数据填取数据填取数据填补补上 FIRSTOBS=n1 OBS=n2FIRSTOBS=n1 OBS=n2 选项选项:指示在数据源中:指示在数据源中:指示在数据源中:指示在数据源中读读哪些数据行哪些数据行哪些数据行哪些数据行 41列表模式输入示例源数据文件源数据文件imptdt04中含性中含性别、年、年龄、、银行卡数、行卡数、银行卡使用次数、公司卡数、公司卡使用次数行卡使用次数、公司卡数、公司卡使用次数6字段数据字段数据,均以空格分隔均以空格分隔,试建数据集。

建数据集data int04;infile 'd:\zxd\sas\imptdt04.dat';input sex$ age bankcard frebank depcard fredep;run; 42用Length语句设置变量长度一般情况下一般情况下,变量的量的长度默度默认为8个字个字节,这对字字符型符型变量而言量而言,只能存放只能存放8个字符个字符(4个个汉字字)length语句可改句可改变变量的量的长度属性度属性,一般形式一般形式为:length 变量名表量名表[$] 长度度. ;例例:data tmp;length name $12.;input name$ age;cards;zhangsanfeng 56lierwa 66wangwujing 45 ; 43带格式修饰的列表输入为突破突破变量的默量的默认长度限制度限制,在列表在列表输入模式中入模式中还可以加入可以加入输入格式修入格式修饰说明明,一般形式一般形式为:input 变量名量名:[$] 输入格式入格式. […];例如:例如:imptdt06.dat中城市名超中城市名超过8字符字符,两数两数值字字段中有逗号段中有逗号。

data indt06;infile 'd:\zxd\sas\imptdt06.dat';input city: $12. pop70: comma9. pop80: comma9.;run;proc print;run; 引例4•早期留下的数据往往不早期留下的数据往往不早期留下的数据往往不早期留下的数据往往不规则规则,有,有,有,有时时字段前字段前字段前字段前还带还带有字段有字段有字段有字段名,就像下面名,就像下面名,就像下面名,就像下面这这批原始数据:批原始数据:批原始数据:批原始数据:44name=name=张张三丰三丰 sex=sex=男男 age=26 sal=223.4age=26 sal=223.4name=name=李斯李斯 sex=sex=女女 age=28 sal=523.6age=28 sal=523.6name=name=诸诸葛留意葛留意 sex=sex=男男 age=33 sal=1260.5age=33 sal=1260.5应如何录进应如何录进SAS?DATA tmp; INPUT name=$ sex=$ age= sal=;CARDS; name=张三丰张三丰 sex=男男 age=26 sal=223.4name=李斯李斯 sex=女女 age=28 sal=523.6name=诸葛留意诸葛留意 sex=男男 age=33 sal=1260.5run;特点:特点:字段前有字段前有““字段名字段名=”=”标记标记 45④命名模式输入*当源数据文件中的数据字段里包含字段名当源数据文件中的数据字段里包含字段名当源数据文件中的数据字段里包含字段名当源数据文件中的数据字段里包含字段名时时, ,往往往往往往往往需要采用命名模式需要采用命名模式需要采用命名模式需要采用命名模式输输入入入入较为较为方便。

一般形式方便一般形式方便一般形式方便一般形式为为::::INPUT [INPUT [指针指针指针指针] ] 变量名变量名变量名变量名=[$] [...] [@|@@];=[$] [...] [@|@@];INPUT INPUT 变量名变量名变量名变量名= [$] = [$] 始列始列始列始列 [- [-终列终列终列终列] [.] [.小数位小数位小数位小数位] [@|@@];] [@|@@];INPUT [INPUT [指针指针指针指针] ] 变量名变量名变量名变量名=informat. [@|@@];=informat. [@|@@];例:例:例:例:data tem;data tem;infile cards; infile cards; input name=$10. sex=$1. birthday= height=3.;input name=$10. sex=$1. birthday= height=3.;informat birthday date7.; informat birthday date7.; /*/*此例中此例中此例中此例中birthday=date7. birthday=date7. 就不行就不行就不行就不行!?*/!?*/format birthday yymmdd10.;format birthday yymmdd10.; cards; cards; name=Alex Bruce sex=M birthday=13Jun67 height=174 name=Alex Bruce sex=M birthday=13Jun67 height=174 birthday=08Aug54 sex=F name=Cathy Lee birthday=08Aug54 sex=F name=Cathy Lee ; ; run; run;/*/*注意:命名模式后面不能再跟其它输入模式注意:命名模式后面不能再跟其它输入模式注意:命名模式后面不能再跟其它输入模式注意:命名模式后面不能再跟其它输入模式* */ / 46INFORMAT/FORMAT语句 一般形式一般形式一般形式一般形式:::: INFORMAT INFORMAT INFORMAT INFORMAT 变量变量变量变量 格式格式格式格式 [ [ [ [……] ] ] ];;;;FORMAT FORMAT FORMAT FORMAT 变量变量变量变量 格式格式格式格式 [ [ [ [……] ] ] ];;;;功能功能功能功能::::该该该该语语语语句句句句用用用用于于于于设设设设置置置置变变变变量量量量的的的的缺缺缺缺省省省省输输输输入入入入/ /输输输输出出出出格格格格式式式式。

若若若若语语语语句句句句中中中中变变变变量量量量后后后后没没没没指指指指定定定定格格格格式式式式,,,,则则则则表表表表示示示示移移移移去去去去原原原原有有有有的的的的格格格格式式式式输输输输入入入入格式的具体种类见前面章节格式的具体种类见前面章节格式的具体种类见前面章节格式的具体种类见前面章节注注注注意意意意::::INFORMATINFORMAT语语语语句句句句不不不不会会会会影影影影响响响响数数数数值值值值变变变变量量量量输输输输入入入入值值值值的的的的实实实实际际际际长长长长度度度度* *, ,但但但但可可可可能能能能会会会会截截截截断断断断字字字字符符符符型型型型变变变变量量量量的的的的输输输输入入入入值值值值长长长长度度度度(见下例)见下例)见下例)见下例) 47混合模式输入对一些复一些复杂的非的非标准的源数据文件准的源数据文件,各数据各数据字段需要不同的字段需要不同的读入模式才能正确匹配入模式才能正确匹配,这时可在可在input语句中混合使用各种句中混合使用各种读入模式例:例:例:例:imptdt07.datimptdt07.dat中前中前中前中前1111列是社保号列是社保号列是社保号列是社保号, ,接着接着接着接着7 7列是开始雇列是开始雇列是开始雇列是开始雇佣日期佣日期佣日期佣日期,20-25,20-25列是逗号分隔的年薪列是逗号分隔的年薪列是逗号分隔的年薪列是逗号分隔的年薪,27,27列开始的字段是列开始的字段是列开始的字段是列开始的字段是部部部部门门, ,最后是最后是最后是最后是分机号。

分机号Data mixdimpt;Data mixdimpt;Infile 'd:\zxd\sas\impddt07';Infile 'd:\zxd\sas\impddt07';Input SSN $1-11 @12 HireDate date7. @20 Salary comma6. Input SSN $1-11 @12 HireDate date7. @20 Salary comma6. Department : $9. Phone_No;Department : $9. Phone_No;Format HireDate yymmdd10. Salary Dollar7.;Format HireDate yymmdd10. Salary Dollar7.;Run;Run;你知道你知道你知道你知道这这里用了几种里用了几种里用了几种里用了几种输输入模式入模式入模式入模式吗吗? ?程序可以改程序可以改程序可以改程序可以改动吗动吗? ? 48处理数据步的全过程SAS系系统执行数据步的行数据步的过程主要分程主要分为两个两个阶段:段:• 编译数据步数据步语语法法法法检查检查, ,代代代代码转换码转换(机器(机器(机器(机器码码))))创创建建建建输输入入入入缓缓冲区冲区冲区冲区( (存放数据源中的一行存放数据源中的一行存放数据源中的一行存放数据源中的一行记录记录) )创创建一个程序数据向量建一个程序数据向量建一个程序数据向量建一个程序数据向量PDV (PDV (可可可可暂暂存数据集的当前一条存数据集的当前一条存数据集的当前一条存数据集的当前一条观测观测) )创创建建建建SASSAS数据集的描述部分数据集的描述部分数据集的描述部分数据集的描述部分( (数据集名称、数据集名称、数据集名称、数据集名称、观测变观测变量个数和量个数和量个数和量个数和变变量属性等量属性等量属性等量属性等) )• 执行数据步行数据步 49程序向量数据缓冲器PDVPDV((Program Data Vector)来存放当前的一)来存放当前的一个个观测;;观测数据数据经处理后存入数据集。

理后存入数据集这是是数据步的主要工作数据步的主要工作场所PDVPDVPDVPDV中包括两个自动生成的临时变量:中包括两个自动生成的临时变量:中包括两个自动生成的临时变量:中包括两个自动生成的临时变量:_N_(_N_(_N_(_N_(记记记记录数据步执行的次数录数据步执行的次数录数据步执行的次数录数据步执行的次数) ) ) )和和和和_ERROR_(_ERROR_(_ERROR_(_ERROR_(错误标志:错误标志:错误标志:错误标志:0 0 0 0为无为无为无为无错误错误错误错误,1,1,1,1为发生错误为发生错误为发生错误为发生错误) ) ) )数据步中出数据步中出数据步中出数据步中出现的变量现的变量现的变量现的变量( ( ( (包包包包括数据集内括数据集内括数据集内括数据集内的变量的变量的变量的变量) ) ) ) 50数据步执行阶段在在在在执执行期行期行期行期间间,,,,SASSAS系系系系统执统执行以下步行以下步行以下步行以下步骤骤::::( (除非另有指向除非另有指向除非另有指向除非另有指向) )1 1))))PDVPDV中所有的中所有的中所有的中所有的变变量量量量值值被初始化被初始化被初始化被初始化为为缺失缺失缺失缺失值值;;;;2 2))))输输入入入入缓缓冲器据冲器据冲器据冲器据inputinput语语句的数据需求句的数据需求句的数据需求句的数据需求, ,读读入源数据文入源数据文入源数据文入源数据文件的相件的相件的相件的相应记录应记录行行行行, , 并写相并写相并写相并写相应应的数据字段到的数据字段到的数据字段到的数据字段到PDV;PDV;3 3)每个)每个)每个)每个语语句被句被句被句被顺顺序序序序执执行行行行, ,并可修改并可修改并可修改并可修改PDVPDV形成当前形成当前形成当前形成当前观测观测; ;4 4)数据步)数据步)数据步)数据步语语句一遍句一遍句一遍句一遍执执行后行后行后行后, PDV, PDV中的中的中的中的值值写入数据集写入数据集写入数据集写入数据集;*;*5 5))))PDVPDV中外部中外部中外部中外部变变量初始化量初始化量初始化量初始化为为确失确失确失确失值值, ,程序流程回到程序流程回到程序流程回到程序流程回到2 2)))); ;6 6))))对对数据源文件的每条数据源文件的每条数据源文件的每条数据源文件的每条记录记录都按上面步都按上面步都按上面步都按上面步骤执骤执行一次;行一次;行一次;行一次;7 7)重复以上步)重复以上步)重复以上步)重复以上步骤骤直到外部文件中数据直到外部文件中数据直到外部文件中数据直到外部文件中数据结结束。

束 51input语句后的单尾符@一个数据步内可以有多条一个数据步内可以有多条一个数据步内可以有多条一个数据步内可以有多条inputinput语语句但是当句但是当句但是当句但是当执执行完一行完一行完一行完一条条条条inputinput语语句后句后句后句后, ,一般将放弃一般将放弃一般将放弃一般将放弃缓缓冲区内冲区内冲区内冲区内现现有源数据行有源数据行有源数据行有源数据行, ,而而而而从源文件中再取一条从源文件中再取一条从源文件中再取一条从源文件中再取一条记录记录更新更新更新更新缓缓冲区若要保持冲区若要保持冲区若要保持冲区若要保持现现有源数据行供下一条有源数据行供下一条有源数据行供下一条有源数据行供下一条inputinput使用其数据使用其数据使用其数据使用其数据, ,则应则应在在在在inputinput语语句的最后加入句的最后加入句的最后加入句的最后加入@@跟踪符例:例:例:例:data tmp1;data tmp1;input x;input x;input y;input y;cards;cards;11 22 3311 22 3344 55 6644 55 66; ;run;run;data tmp2;data tmp2;input x@;input x@;input y;input y;cards;cards;11 22 3311 22 3344 55 6644 55 66; ;run;run;data tmp3;data tmp3;input x@;input x@;input y@;input y@;cards;cards;11 22 3311 22 3344 55 6644 55 66; ;run;run; 52input语句后的双尾符@@一般情况下一般情况下一般情况下一般情况下, ,当程序当程序当程序当程序执执行到数据步底部后行到数据步底部后行到数据步底部后行到数据步底部后, ,也会从源数据也会从源数据也会从源数据也会从源数据文件中另取一行文件中另取一行文件中另取一行文件中另取一行记录记录来更新来更新来更新来更新缓缓冲区内原有数据。

若冲区内原有数据若冲区内原有数据若冲区内原有数据若要要要要缓缓冲区内原有数据不放弃冲区内原有数据不放弃冲区内原有数据不放弃冲区内原有数据不放弃, ,使其在数据步的下一循使其在数据步的下一循使其在数据步的下一循使其在数据步的下一循环环中仍可用中仍可用中仍可用中仍可用, ,则应则应在在在在inputinput语语句最后加上句最后加上句最后加上句最后加上@@@@跟踪符例:例:例:例:data tmp5;data tmp5;input x y@@;input x y@@;cards;cards;11 22 3311 22 3344 55 6644 55 66; ;run;run;data tmp6;data tmp6;input x y;input x y;cards;cards;11 22 3311 22 3344 55 6644 55 66; ;run;run;data tmp7;data tmp7;input a@;input a@;input x y@@;input x y@@;cards;cards;11 2211 2233 44 55 6633 44 55 66; ;run;run;data tmp8;data tmp8;input a@;input a@;input x 1-2 y@@;input x 1-2 y@@;if _n_=10 then stop;if _n_=10 then stop;cards;cards;11 2211 2233 44 55 6633 44 55 66; ;run;run; 53源数据的指针控制当当当当SASSAS从数据行中从数据行中从数据行中从数据行中读读取数据取数据取数据取数据时时,它用指,它用指,它用指,它用指针针来跟踪当前数来跟踪当前数来跟踪当前数来跟踪当前数据的位置;指据的位置;指据的位置;指据的位置;指针针控制符可控制符可控制符可控制符可为为inputinput语语句指示数据源中当句指示数据源中当句指示数据源中当句指示数据源中当前数据所在的行、列位置。

前数据所在的行、列位置前数据所在的行、列位置前数据所在的行、列位置列指列指列指列指针针控制符控制符控制符控制符“ “+n”+n”表示指表示指表示指表示指针针右移右移右移右移n n列列列列(n(n为负则为负则左移左移左移左移n n列列列列) );;;;列指列指列指列指针针控制符控制符控制符控制符“ “@n”@n”表示指表示指表示指表示指针针移到第移到第移到第移到第n n列列列列( (绝对绝对位置位置位置位置) );;;;列指列指列指列指针针控制符控制符控制符控制符“ “@‘character-string’”@‘character-string’”表示把指表示把指表示把指表示把指针针移到移到移到移到数据行中字符串数据行中字符串数据行中字符串数据行中字符串character-stringcharacter-string后第一个非空格列后第一个非空格列后第一个非空格列后第一个非空格列行指行指行指行指针针控制符控制符控制符控制符“ “#n”#n”表示指表示指表示指表示指针针移到第移到第移到第移到第n n行行行行;( ;(当一条当一条当一条当一条观测观测有有有有几行源数据几行源数据几行源数据几行源数据时时, ,起作用起作用起作用起作用) ) 行指行指行指行指针针控制符控制符控制符控制符“ “#(expression)”#(expression)”表示指表示指表示指表示指针针移到表达式的移到表达式的移到表达式的移到表达式的值值(必(必(必(必须为须为整数)所指的行。

整数)所指的行整数)所指的行整数)所指的行行指行指行指行指针针控制符控制符控制符控制符“ “/”/”表示指表示指表示指表示指针针移到下一行的第一列移到下一行的第一列移到下一行的第一列移到下一行的第一列 54指针控制符用法示例行指行指行指行指针针用法示例用法示例用法示例用法示例: :data tmp1;data tmp1;input name:$10. age input name:$10. age / score1-score3;/ score1-score3;cards;cards;zhangsan 12zhangsan 1288 98 6788 98 67lisi 13lisi 1377 98 8677 98 86;run;;run;列指针用法示例列指针用法示例列指针用法示例列指针用法示例1:1:data tmp2;data tmp2;m=-1;/*m=-1;/*左移一列左移一列左移一列左移一列* */ /input x 1-4 +m y @2 input x 1-4 +m y @2 id$2.;id$2.;/*drop m;*/ /*drop m;*/ cards;cards;123451234524680246801357913579;run;;run;列指针用法示例列指针用法示例列指针用法示例列指针用法示例2:2:data tmp3;data tmp3;input id $2. age 3-4 input id $2. age 3-4 @'size=' x;@'size=' x;list; list; cards;cards;0116size=54.230116size=54.230215size=45.660215size=45.661318size=61.011318size=61.01;run;;run; 55由计算生成变量在数据步中在数据步中在数据步中在数据步中, ,可以用可以用可以用可以用赋值语赋值语句来生成新句来生成新句来生成新句来生成新变变量。

一般形式量一般形式量一般形式量一般形式为为::::变变量量量量= =表达式表达式表达式表达式; ;功能:将表达式的功能:将表达式的功能:将表达式的功能:将表达式的计计算算算算值赋给变值赋给变量量量量, ,若若若若该变该变量不在数据集量不在数据集量不在数据集量不在数据集中中中中, ,则则新增之例例例例: : 输输入工号、生日、工入工号、生日、工入工号、生日、工入工号、生日、工资资、、、、奖奖金金金金, ,计计算年算年算年算年龄龄和和和和总总收入data tmp;data tmp;input id $2. @4 birthday yymmdd8. m1 m2;input id $2. @4 birthday yymmdd8. m1 m2;age=intck('year',birthday,date());age=intck('year',birthday,date());total=(m1+m2)*(1-0.05);total=(m1+m2)*(1-0.05);cards;cards;01 66/07/03 598.50 120001 66/07/03 598.50 120010 70/01/23 504.67 110010 70/01/23 504.67 1100;run;;run; 56数据步内同时建多个数据集利用条件控制利用条件控制语句句if与与输出出语句句output配合配合,可在可在一个数据步内同一个数据步内同时建立多个数据集。

建立多个数据集例如:利用同一数据源建立两个数据集例如:利用同一数据源建立两个数据集 data tmp1 tmp2;data tmp1 tmp2;input name$ age score@@;input name$ age score@@;if age<=30 then output tmp1;if age<=30 then output tmp1; else output tmp2; else output tmp2;cards; cards; JingJG 28 89 LiM 32 65 WangJ 21 98 LiuB 60 56JingJG 28 89 LiM 32 65 WangJ 21 98 LiuB 60 56proc print;proc print;run;run; 57IF语句及功能一般形式一般形式一般形式一般形式::::IF IF IF IF 表达式表达式表达式表达式 [THEN [THEN [THEN [THEN 语句语句语句语句1 1 1 1; ;[ELSE [ELSE [ELSE [ELSE 语句语句语句语句2]]2]]2]]2]];;;;功能功能功能功能::::当当当当表表表表达达达达式式式式为为为为真真真真时时时时, ,执执执执行行行行语语语语句句句句1 1 1 1, ,当当当当表表表表达达达达式式式式为为为为假假假假时时时时执执执执行行行行语语语语句句句句2 2 2 2( (若若若若无无无无ELSEELSEELSEELSE子子子子句句句句,,,,则则则则执执执执行行行行IFIFIFIF语语语语句句句句之之之之后后后后的的的的其其其其它它它它语语语语句句句句); );当当当当任任任任何何何何子子子子句句句句均均均均无无无无,,,,仅仅仅仅剩剩剩剩“ “IF IF IF IF 表表表表达达达达式式式式;”;”,,,,则则则则表表表表示示示示‘ ‘表表表表达式达式达式达式’ ’为为为为‘ ‘假假假假’ ’的观测不再处理的观测不再处理的观测不再处理的观测不再处理, ,也不进入数据集。

也不进入数据集也不进入数据集也不进入数据集注注注注意意意意::::如如如如果果果果THENTHEN或或或或ELSEELSE后后后后需需需需要要要要一一一一组组组组语语语语句句句句时时时时,,,,可可可可放放放放在在在在“ “DODO;;;;” ”和和和和“ “ENDEND;;;;” ”语句之间语句之间语句之间语句之间IF IF expression expression THENTHEN DO; DO; statementsstatements ; . . . ; . . . END;END;ELSEELSE DO; DO; statementsstatements ; . . . ; . . . END;END; 58OUTPUT语句及功能(1)(1)功能功能将将PDVPDV中中当当前前的的处处理理观观测测值值((记记录录))输输出出到到OUTPUTOUTPUT指指定定的的数数据据集集中中,,该该数数据据集集必必须须已已在在DATADATA语语句句中中定定义过注注意意::一一旦旦在在DATADATA步步中中出出现现了了OUTPUTOUTPUT语语句句,,则则原原来来在数据步末尾隐含的在数据步末尾隐含的OUTPUTOUTPUT功能便不再起作用了。

功能便不再起作用了2)(2)用法用法格式:格式:OUTPUT [OUTPUT [数据集名数据集名] ];;若省略数据集名,则当前观测值写到本数据步正在建若省略数据集名,则当前观测值写到本数据步正在建立的数据集立的数据集 59示例生成有生成有生成有生成有4 4条记录的数据集:条记录的数据集:条记录的数据集:条记录的数据集:data tmp;data tmp;input x1-x3@@;input x1-x3@@;y=x1;output;y=x1;output;y=x2;output;y=x2;output;cards;cards;1 2 3 4 5 61 2 3 4 5 6proc print;proc print;run; run; 求和并统计大于求和并统计大于求和并统计大于求和并统计大于8 8的输入数据的输入数据的输入数据的输入数据个数个数个数个数 ::::data info;data info;input x@@;input x@@;retain n 0 sumx 0;retain n 0 sumx 0;if x<8 then goto ok;if x<8 then goto ok;put x; n=n+1;put x; n=n+1;ok: sumx=sumx+x;ok: sumx=sumx+x;cards;cards;6 3 13 8 44 1 126 3 13 8 44 1 12proc print;proc print;run;run; 60RETAIN语句和累加语句RETAINRETAIN语语句功能及用法:句功能及用法:句功能及用法:句功能及用法:RETAINRETAIN语语句句使使其其中中的的变变量量在在数数据据步步的的每每次次循循环环时时, ,不不被被重新初始化。

重新初始化 (有点类似有点类似C C中的静态变量中的静态变量) ) 格式:格式:RETAIN RETAIN 变量名变量名1 [1 [初值初值1] [1] [变量变量2[2[初值初值2]2]……] ]; ; 或:或:或:或: RETAIN RETAIN 变量名表变量名表 [ [(初值表)(初值表)]; ];累加累加累加累加语语句功能及用法:句功能及用法:句功能及用法:句功能及用法:累加累加累加累加语语句可句可句可句可对对某一数某一数某一数某一数值值型型型型变变量求累加量求累加量求累加量求累加值值一般格式:一般格式:一般格式:一般格式: 变变量量量量+ +表达式;表达式;表达式;表达式;在第一个观测值未读入前,该变量的初值为零,在数据步的每在第一个观测值未读入前,该变量的初值为零,在数据步的每次循环中重复加入表达式值,若表达式计算结果为缺失值时,次循环中重复加入表达式值,若表达式计算结果为缺失值时,将作零处理将作零处理 61示例求和与平方和求和与平方和求和与平方和求和与平方和 ::::data total;data total;input x@@;input x@@;retain sx 0 sx2 0;retain sx 0 sx2 0;sx=sx+x; sx2=sx2+x*x;sx=sx+x; sx2=sx2+x*x;cards;cards;2 5 4 3 6 72 5 4 3 6 7run;run;求薪水总数:求薪水总数:求薪水总数:求薪水总数:data tmp;data tmp;input name$ salary@@;input name$ salary@@;total+salary;total+salary;cards;cards;Xu 800 Zhou 600 Xu 800 Zhou 600 proc print;proc print;run ;run ; 62读层次数据文件用数据步用数据步用数据步用数据步读读入的文本数据文件中入的文本数据文件中入的文本数据文件中入的文本数据文件中, ,有一有一有一有一类类称称称称为层为层次文件次文件次文件次文件, ,它的它的它的它的记录记录根据其某个字符段可区分根据其某个字符段可区分根据其某个字符段可区分根据其某个字符段可区分为为是是是是记录头记录头或是或是或是或是详细记录详细记录。

例如例如例如例如, ,有一数据文件有一数据文件有一数据文件有一数据文件census.datcensus.dat中中中中, ,以以以以HH开开开开头头的行是的行是的行是的行是头记录头记录, ,其后包含一个地址其后包含一个地址其后包含一个地址其后包含一个地址; ;以以以以P P开始的行是开始的行是开始的行是开始的行是详细记录详细记录, ,记录记录居居居居住在住在住在住在该该地址人地址人地址人地址人员员的姓名的姓名的姓名的姓名, ,年年年年龄龄和性和性和性和性别别data People(drop=type);data People(drop=type);infile 'd:\zxd\sas\census.dat';infile 'd:\zxd\sas\census.dat';retain Address;retain Address;input type $1. @;input type $1. @;if type='H' then input @3 Address $15.;if type='H' then input @3 Address $15.;input @3 Name $10. @13 Age 3. @16 Sex $1.;input @3 Name $10. @13 Age 3. @16 Sex $1.;run;run; 63SAS函数•SASSAS函数是一个程序函数是一个程序函数是一个程序函数是一个程序, ,它可以它可以它可以它可以对对一个或多个参数一个或多个参数一个或多个参数一个或多个参数进进行行行行计计算后返回一个算后返回一个算后返回一个算后返回一个值值。

每个每个SASSAS函数有一个关函数有一个关函数有一个关函数有一个关键键字名•调调用函数用函数用函数用函数应应写出函数名和括号内的参数:写出函数名和括号内的参数:写出函数名和括号内的参数:写出函数名和括号内的参数:函数名函数名函数名函数名( (参数,参数,参数,参数,...)...) ( (注意:函数的参数可以是常数、注意:函数的参数可以是常数、注意:函数的参数可以是常数、注意:函数的参数可以是常数、变变量、函数或表示式量、函数或表示式量、函数或表示式量、函数或表示式) )•当参数多于一个当参数多于一个当参数多于一个当参数多于一个时时,参数之,参数之,参数之,参数之间应该间应该用逗号分隔,也用逗号分隔,也用逗号分隔,也用逗号分隔,也可写成如下形式:可写成如下形式:可写成如下形式:可写成如下形式:函数名函数名函数名函数名(OF (OF 变变量量量量1—1—变变量量量量n)n)函数名函数名函数名函数名(OF (OF 变变量量量量1 1 变变量量量量2 2 变变量量量量3)3)例如例如例如例如: : SUM(OF X1—X100 Y1—Y100)SUM(OF X1—X100 Y1—Y100) SUM(OF X Y Z)SUM(OF X Y Z)SUM(X1SUM(X1,,,,X2X2,,,,X3X3,,,,X4)X4) 64SAS函数功能测试的小程序u测试函数功能的一个函数功能的一个简单的程序示例:的程序示例:data _null_; y=sqrt(3); put ‘y=‘,y ;run;u上上述述程程序序意意图了了解解sqrt(根根式式)函函数数的的功功能能、、用用法。

法 65常用函数(一) 函数名函数名功能简介功能简介函数名函数名功能简介功能简介ABS(X)返回返回X X的绝对值的绝对值ARCOS(x)反余弦反余弦MAX(X,Y,...)返返回回X X,Y Y,......中中的的最最大大值值ARSIN(x)反正弦反正弦MIN(X,Y,...)返返回回X X,Y Y,......中中的的最最小小值值COSH(x)双曲余弦双曲余弦MOD(x,y)计算计算x/yx/y的余数的余数SINH(x)双曲正弦双曲正弦SIGN(x)返回参数返回参数x x的符号或的符号或0 0PROBBNML(p,n,r)二项式概率分布函数二项式概率分布函数SQRN(x)计算计算x x的平方根的平方根PROBCHI(x,df) 卡方概率分布函数卡方概率分布函数DIM(array)返回数组中元素个数返回数组中元素个数PROBF(x,ndf,ddf)F分布函数分布函数EXP(x)e的的x x次幂次幂PROBNORM(x) 标准正态分布函数标准正态分布函数LOG(x)计算计算x x的自然对数的自然对数PROBT(p)T分布函数分布函数LOG10(x)计算计算x x的常用对数的常用对数CINV(p,df,nc)卡方分布分位数卡方分布分位数DIGAMMA(x)计算计算Γ函数对数的导数函数对数的导数FINV(p,ndf,ddf,nc)F分布分位数分布分位数COS(x)计算余弦计算余弦TINV(p,df,nc)T分布分位数分布分位数 66常用函数(二)SIN(x)计算正弦计算正弦RANNOR(x)产生一标准正态随机数产生一标准正态随机数TAN(x)计算正切计算正切RANUNI(x)产生一产生一[0,1]均匀随机数均匀随机数MEAN(x,y,...)计算算术平均计算算术平均INDEX(a,b)求字串求字串b b在字符串在字符串s s中位置中位置STD(x,y,...)计算标准差计算标准差LEFT(a)左对齐一个字符串左对齐一个字符串SUM(x,y,...)求和求和LENGTH(a)返回字符串返回字符串a a的长度的长度VAR(x,y,...)计算方差计算方差RIGHT(a)右对齐一字符串右对齐一字符串DATE()返返回回当当前前日日期期作作为为SASSAS日日期值期值TRIM(a)移去字符串尾部空格移去字符串尾部空格DAY(date)从从SASSAS日日期期值值返返回回月月份份中中的日数的日数SUBSTR求子串求子串YEAR(date)从从SASSAS日期值返回年数日期值返回年数 UPCASE大写大写INTCK(int,from,to)返回两日期间的返回两日期间的intint单位数单位数INTNX(int,from,n)返返回回与与起起始始间间隔隔n n单单位位的的终止时间终止时间TRANSLATE(arg,to,fr)编码转换函数编码转换函数MDY(mon,day,yr)将月日年值转换为将月日年值转换为SASSAS值值LAGn(x)返返回回前前面面第第n n个个观观测测的的x x变变量值量值DIFn(x)返返回回当当前前值值与与前前n n个个观观测测值的差距值的差距 67随机数产生示例本例本例本例本例产产生生生生1010个个个个[0,1][0,1]均匀分布随机数和均匀分布随机数和均匀分布随机数和均匀分布随机数和1010个个个个标标准正准正准正准正态态随机随机随机随机数。

数datadata _null_; _null_;input num@@;input num@@;a=ranuni(a=ranuni(0 0);b=rannor();b=rannor(0 0); );put 'n=' num 'a=' a 'b=' b;put 'n=' num 'a=' a 'b=' b;cards;cards;0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9runrun; ; 注:注:注:注: ranuni(ranuni(seedseed)/rannor()/rannor(seedseed) )的参数的参数为为生成生成伪伪随机数算随机数算法的种子数,可在法的种子数,可在1~21~23131之之间间任取一整数,若任取一整数,若seedseed取取0, 0,则则表示以系表示以系统时间值统时间值做种子数做种子数 68编码转换TRANSLATE函数示例本本例例演演示示将将性性别别字字段段值值0 0和和1 1转转换换为为F F和和M;M;将将成成绩绩的的等等级级由由ABCDEABCDE转换为相应的转换为相应的1234512345data tmp; data tmp; data tmp; data tmp; input name$ sex$ score$@@; input name$ sex$ score$@@; input name$ sex$ score$@@; input name$ sex$ score$@@; sex=TRANSLATE(sex,"FM","01");sex=TRANSLATE(sex,"FM","01");sex=TRANSLATE(sex,"FM","01");sex=TRANSLATE(sex,"FM","01");score=TRANSLATE(score"12345","ABCDE"); score=TRANSLATE(score"12345","ABCDE"); score=TRANSLATE(score"12345","ABCDE"); score=TRANSLATE(score"12345","ABCDE"); cards; cards; cards; cards; zyh 1 A tzf 1 B waq 0 C jzh 0 Ezyh 1 A tzf 1 B waq 0 C jzh 0 Ezyh 1 A tzf 1 B waq 0 C jzh 0 Ezyh 1 A tzf 1 B waq 0 C jzh 0 Eproc print;proc print;proc print;proc print;run;run; 结果:结果:OBS NAME SEX SCOREOBS NAME SEX SCORE1 zyh M 11 zyh M 12 tzf M 22 tzf M 23 waq F 33 waq F 34 jzh F 54 jzh F 5 69函数lagn(x)/difn(x)示例((LAGn(x)LAGn(x)返回前面第返回前面第返回前面第返回前面第n n条记录的条记录的条记录的条记录的x x的值;的值;的值;的值;DIFn(x)DIFn(x)返回返回返回返回当前的当前的当前的当前的x x与前与前与前与前n n条记录中条记录中条记录中条记录中x x的差分的差分的差分的差分)) data tmp;data tmp;data tmp;data tmp;input value@@;input value@@;input value@@;input value@@;pv1=LAG1(value);pv1=LAG1(value);pv1=LAG1(value);pv1=LAG1(value);pv2=LAG2(value);pv2=LAG2(value);pv2=LAG2(value);pv2=LAG2(value);dv1=DIF(value);dv1=DIF(value);dv1=DIF(value);dv1=DIF(value);dv2=DIF2(value);dv2=DIF2(value);dv2=DIF2(value);dv2=DIF2(value); Cards;Cards;Cards;Cards; 1 4 9 16 251 4 9 16 251 4 9 16 251 4 9 16 25proc print;proc print;proc print;proc print;run;run;run;run;结果:结果:(pv1(pv1、、pv2pv2是前是前1 1、、2 2条记录条记录的的valuevalue值,而值,而dv1dv1、、dv2dv2是是valuevalue与前与前1 1、、2 2条记录中条记录中valuevalue的差分的差分值值) )OBSOBSVALUEVALUE PV1 PV1 PV2PV2DV1DV1DV2DV2 1 1 1 1 . . . . . . . . 2 2 4 4 1 1 . . 3 3 . . 3 3 9 9 4 4 1 1 5 5 8 8 4 41616 9 9 4 4 7 71212 5 25 16 9 9 16 5 25 16 9 9 16 70数据步流程图*DATADATADATADATA步执行开始步执行开始步执行开始步执行开始, , , ,确定数据集名确定数据集名确定数据集名确定数据集名PDVPDVPDVPDV中所有变量初始化中所有变量初始化中所有变量初始化中所有变量初始化输入缓冲区从输入缓冲区从输入缓冲区从输入缓冲区从Infile(cards)Infile(cards)Infile(cards)Infile(cards)语语语语句指定的数据源中取一条记录句指定的数据源中取一条记录句指定的数据源中取一条记录句指定的数据源中取一条记录按按按按inputinputinputinput等语句涉及的变等语句涉及的变等语句涉及的变等语句涉及的变量读取源数据赋值给量读取源数据赋值给量读取源数据赋值给量读取源数据赋值给PDVPDVPDVPDV依次执行其它语句依次执行其它语句依次执行其它语句依次执行其它语句, , , ,可修改可修改可修改可修改PDVPDVPDVPDV到数据步底部或遇到数据步底部或遇到数据步底部或遇到数据步底部或遇outputoutputoutputoutput语句时将语句时将语句时将语句时将PDVPDVPDVPDV写入数据集写入数据集写入数据集写入数据集PDVPDVPDVPDV中外部变量赋缺失值中外部变量赋缺失值中外部变量赋缺失值中外部变量赋缺失值输入缓冲区中输入缓冲区中输入缓冲区中输入缓冲区中数据是否读完数据是否读完数据是否读完数据是否读完? ? ? ?N NY Y终止终止终止终止, , , ,或或或或下一下一下一下一STEPSTEPSTEPSTEP 。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档