资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Slide,*,数据步读入数据,原始数据分类,原始数据一般分为字符和数值两种类型,数值数据又分为标准数值数据和非标准数值数据。,标准数据,是由字符或者数值组成的可以被列表、列、格式化、命名输入方式读入的数据,如,Male,1166.42,。,非标准数据,只能在输入格式的帮助下读入的数据。如非标准的数值数据,可能包含逗号,空格等符号。日期和时间数值。十六进制和二进制数值。,标准数值数据,只包含数字,小数点或负号。,非标准数值数据,则包含其它的特殊字符,如千分号,美元符号等。,读取数值数据的规则,数值前面的括号或者减号符号表示该数值为负。,首位有一个或者多个零不影响对相应变量的赋值。,SAS,不把数值尾部的空格默认为,0,。,数值数据的前后都可以有空格,但是数字中间一般不能有(除非用,COMMA.,、,BZ.,等,格式读入)。,字符数据,字符数据是由一系列字符组成的数据。,下面任一种情况下,,INPUT,语句认定读入变量的值是字符值。,INPUT,语句中变量名后跟一个美元符号,$,;,使用字符输入格式;,要读入数据的变量已经被定义为字符型。,原始数据呈现形式,原始数据的呈现形式一般分为呈现在,SAS,编辑窗口的数据行,和储存在外部文件中的原始数据,例如,,编辑窗口下,数据行形式的原始数据。,储存在外部文件中的原始数据,,TXT,文本格式。,SAS,数据步作用,录入数据并转化为,SAS,数据集,编辑数据,包括检查和修改数据中的错误、计算新变量等,将数据写入磁盘,对已有的数据集进行管理。如取子集、合并及更新数据集等,例,1,:,DATA,da1,;,INPUT,x1 x2 x3,;,y=x1+x2+x3;,CARDS,;,3 1.2 0.5,2 2.4 0.9,5 3.2 0.8,8 4.1 1.1,7 3.3 0.6,;,RUN,;,以上这些语句组成,DATA,步。提交后,,SAS,系统创建一个名为,da1,的,SAS,数据集。它包含,5,个观测、,4,个变量。,DATA,步,是用,DATA,语句开始的一组,SAS,语句。,SAS,数据集,实质上是一张关系型数据表,即通常所见到的二维表格,一行表示一个观察,(Observation),,一列表示一个变量,(Variable),,行列的交叉点就是该观察在该变量上的取值。参见下页示意图。,SAS,数据集的建立,SAS,数据集,(,部分,),Observations,Variables,Value,DATA语句;,INPUT语句;,(用于DATA步的其它SAS语句),CARDS语句,;,数据行,;,RUN;,(一)直接在程序中读取数据,1.,DATA语句,DATA语句表示一个数据步的开始,并给出正被创建的SAS数据集的名字。,语句格式:,DATA 名字1 名字2.,例如:,data a;,data one mydata;,使用,INPUT,语句读入原始数据,INPUT,语句的用途有两方面:,读入外部数据文件中的数据;,读入,CARDS,语句后面的数据。,2.INPUT语句,INPUT,语句的五种输入方式,简单方式(自由方式):,INPUT,;,列方式:,INPUT,variable start-column ;,格式化方式:,INPUT,variable informat.;,INPUT,(variable-list)(informat-list);,INPUT,(variable-list)(informat.);,列表方式:,INPUT,variable ;,INPUT,variable ;,命名方式:,INPUT,variable=;,INPUT,variable=start-column ;,INPUT,variable=informat.;,选项说明,自由格式,INPUT variable-name-list$,|,;,$:此符号前的变量为字符型。默认为数值型。,表输入方式的特点,:,(1)顺序输入;,(2)输入的数据之间至少有一个空格;,(3)使用圆点“.”而不是空格作为缺失值;,(4),变量的顺序和它们的数据值顺序要一致,且个数相符,;,(5)字符型数据的默认宽度为8个字符,但可以使用LENGTH等语句先定义字符变量的长度。,data bc;,input x1 x2 x3 x4$;,cards;,1 2 3 addabc45,5 .3 bsddrg15,2 4 8 cssdrt54,;,run;,行保持符,“,”“,”,的使用,的作用:当程序中有多条,input,语句时,前一条,input,语句末尾使用,,表示数据指针不换行,后一条,input,语句接着上一条,input,语句读数结束地方读取数据。当用在程序最后一条,input,语句中时,不起作用。,的作用:用在程序中的最后一条,input,语句中,表示指针不换行,程序下一轮执行时,,input,语句接着其后读取数据。,Data ex;,Input x;,Cards;,1,2,8,5,;,Run;,Data ex;,Input x,;,Cards;,1 2 8,5,;,Run;,表示指针不换行,下一轮执行时,仍就用当前的,input,语句读取本行的其余数据,每读完一个数据,控制指针就移到下一个数据的开头,继续读入数据。,Data,a,;,Input,x,;,Input y;,Cards;,1 2 8,5,3,6 9 7,;,Run;,请分析上面程序产生的数据集,Data,b,;,Input,x,;,Input y,;,Cards;,1 2 8,5,3,6 9 7,;,Run;,Data,c,;,Input,x,;,Input y,;,Cards;,1 2 8,5,3,6 9 7,;,Run;,Data,d,;,Input,x,;,Input y,;,Cards;,1 2 8,5,3,6 9 7,;,Run;,3.OUTPUT语句,OUTPUT语句把当前的观测输出到正在被创建的SAS数据集中去。,语句格式,OUTPUT data-set-name;,OUTPUT;,语句后不加说明项。这时,把当前这个观测输出到DATA语句命名的数据集中去。下面的例子利用OUTPUT语句从一个数据行生成多个观测:,data repeat;,input sub$mea1-mea3;,drop mea1-mea3;,mea=mea1;,output,;,mea=mea2;,output,;,mea=mea3;,output,;,cards;,a 2 5 4,b 3 6 2,;,proc print;,title 数据集repeat;,run;,数据集,repeat,Obs sub mea,1,a,2,2,a,5,3,a,4,4,b,3,5,b,6,6,b,2,OUTPUT,窗口:,OUTPUT data-set-name;,语句后跟一个数据集名,即将当前观测输出到这个指定的数据集中去。下面的例子是利用OUTPUT语句在一个DATA步中同时产生多个SAS数据集。,DATA,year1 year2,;,INPUT name$sex$yrs;,IF yrs=12 THEN,output year1,;,ELSE,output year2,;,CARDS;,数据行,;,RUN;,(二)数据在外部,文本文件,中,例,2,:在“,c:mydata,”,子目录下存放有一个名为,id.txt,的文件,内容如下:,(,第一列为姓名,第二列为电话,),注意:数据之间以空格分隔,欲用上述数据来建立一个,SAS,数据集,可用下面的,DATA,步来完成:,DATA,da2,;,INFILE,c:mydataid.txt,;,INPUT,name$phone;,RUN,;,Jinhua 48332728,jianghon 47586978,taoxian 23459734,zhaoheng 85743627,shanmei 12395863,xuli 74857362,xinwei 23485748,从外部文本文件中读入数据来建立,SAS,数据集的一般形式为:,DATA,语句;,INFILE,语句;,INPUT,语句;,(,用于,DATA,步的其它,SAS,语句,),RUN,语句;,这里,需要注意两点:,不需要,CARDS,语句。,INFILE,语句的作用是打开一个外部文本文件,其格式为:,INFILE ,文件说明,;,这里,,文件说明,是指所要引用的外部文件所在的磁盘路径和文件全名,,应用单引号将文件说明括起来。,如果数据,不是以空格分隔,的,而是以,制表符分隔,(,常见的情况是:将,excel,数据直接拷贝到文本文件中,),,,则应在,infile,语句中加入选项,:,expandtabs,如:,DATA,da2,;,INFILE,c:mydataid.txt,expandtabs,;,INPUT,name$phone;,RUN,;,(三)数据来自其它,SAS,数据集,从一个或几个已存在的,SAS,数据集产生新的,SAS,数据集的,DATA,步的一般形式为:,DATA,语句;,SET,语句;,(,或者,,MERGE,语句;,),(,用于,DATA,步的其它,SAS,语句,),RUN,;,这里,,SET,、,MERGE,语句用来识别已存在的,SAS,数据集。,例如:,data da3;,Set,da1,;/*da1,是已经存在的,SAS,数据集,*,/,if x1=5;/*,选择,x1,小于或等于的观测*,/,run;,(四)直接从其它数据库导入数据,常见的格式有,:,Excel,格式数据,(*.xls),Access,格式数据(*,.mdb,),DBF,格式数据(*,.dbf,),文本文件格式数据(*,.txt,),导入方法:,File,Import data,然后依次按要求选择,File,Import data,选择需要导入SAS的文件类型,点击Next,点击Browse.,打开需要导入SAS的数据文件,打开数据文件,打击Next,指定导入到SAS后的逻辑库名(Library)及数据集名(Member),配置完成后点击Next(可选)或Finish,上一步点击Next,新建一个SAS程序文件,保存用Proc Import过程,导入数据所需的语句,点击Finish,出现此行信息,显示导入成功。,数据集名为cancer,逻辑库名为work,打开生成的cancer.sas文件,向导中提供的几个信息,xls格式化中数据 SAS数据集中数据,Data,步的内部运行机制,针对,每个观察执行一次所有语句,(跳转除外),相当于一个内部循环,data da1;,input x1 x2 x3;,y=x1+x2+x3;,cards;,3 1.2 0.5,2 2.4 0.9,5 3.2 0.8,8 4.1 1.1,7 3.3 0.6,;,Run;,这些语句要求,SAS,产生一个名为,da1,的数据集,从输入数据行读,3,个数值给相应的,3,个变量,并建立第四个变量,y,。,在读入数据时,,SAS,将变量,x1,x2,x3,视为一个程序数据向量,按,INPUT,语句的指示读当前记录的数据值,然后又执行程序语句,把,y,的值添加到程序程序数据向量中去。因此,对这个,DATA,步而言,程序数据向量包含,4,个变量:,x1,x2,x3,y,。当最后一个程序语句执行后,在程序数据向量中的这些值,(,即一个观测,),自动地输送到正被创建的数据集,da1,中,然后,SAS,返回去再执行,DATA,步。,我们这个例子中共有5行数据,则这个,DATA,步将执行5次,数据集,da1,中包含5个观测,每个观测有,4,个变量。,SAS逻辑库:临时数据集与永久数据集,逻辑库,指与存放SAS文件的,目录,相关联的,代号,(名字),代号,就是,逻辑库名,逻辑库名,定义逻辑库,方法1:通过Libname语句定义逻辑库,例如:,建立与,D:SASdata,目录相关联的逻辑库,逻辑库名为,Mydata。,要求:D:SASdata目录必须已经存在,Libname mydata D:SASdata;,方法,2,:通过窗口定义逻辑库,点击这个按钮(New Library),点击OK,两个逻辑库均与同一目录关联,D:mydata,保存SAS数据集到指定逻辑库中,用法:,data 逻辑库名,.,数据集名;,例如:,data,mydata,.,cancer,;,input id x;,cards;,112 68,113 80,;,run;,使用条件:mydata必须事先定义,即在Libraries中有这个逻辑库,中间用小数点(.)连接,临时数据集、永久数据集,临时数据集,指保存在,WORK逻辑库,的数据集,在日志窗口中显示,WORK.XXX,的数据集为临时数据集,在data语句中不指定逻辑库名时,默认保存到work逻辑库中,eg.data cancer;,退出SAS时,WORK中的文件会被自动删除,永久数据集,指保存在,非WORK逻辑库,的数据集,退出SAS时,文件不会被删除,数据的输出,前面讨论了解,SAS,数据集的建立,即如何将数据转换为,SAS,数据集。下面我们介绍数据的输出。这里的“输出”有三层意义:,将数据输出到,LOG,窗口;,将数据输出到系统内部的另一个,SAS,数据集;,将数据输出到一个外部文件。,用于数据输出的语句有很多,我们主要介绍以下三条语句。,一,.PUT,语句,在,DATA,步中,,PUT,语句可以把内容输出到,LOG,窗口,或者用,FILE,语句定义过的外部文件。,PUT,语句主要有以下表输出、列输出和格式化输出三种格式,我们只介绍表输出格式:,表,输出格式,(,自由输出格式,),:,PUT ;,例如:,data class;,input name$sex$age;,put,name sex age,;,cards;,henry m 13,joe m 14,henriett f 11,;,run;,data class;,87 input name$sex$age;,88 put name sex age;,89 cards;,henry m 13,joe m 14,henriett f 11,NOTE:The data set WORK.CLASS has 3 observations and 3 variables.,NOTE:DATA statement used:,real time 0.05 seconds,93 ;,94 run;,LOG,窗,pointer-control(,指针控制,),n,移动指针到第,n,列,.,(expression),移动指针到表达式所指定的列,.,#n,移动指针到第,n,行,.,#(expression),移动指针到表达式所指定的行,.,|,指针保持在当前行当前位置,.,例如:,Data a;,do i=1 to 4;,sq=i*2;,put,#(i+1)(i*5+2),i sq,;,end;,Run;,输出结果如下,1,1,2,4,3,9,4,16,二,.FILE,语句,FILE,语句用于定义当前的输出文件,这个当前文件一定是一个外部文件,一般要与,PUT,语句配合使用。,FILE,语句的选项可以用来控制文件的输出形式。在一个,DATA,步中可以用一个以上的,FILE,语句。,FILE,语句还可以用在条件,(IF-THEN),过程中。,例子:,data d;,x=12345;,file,c:mydataid.txt,;,put x;,run;,三,.OUTPUT,语句,OUTPUT,语句把当前的观测输出到正在被创建的,SAS,数据集中去。,语句格式,OUTPUT data-set-name;,OUTPUT;,语句后不加说明项。这时,把当前这个观测输出到,DATA,语句命名的数据集中去。下面的例子利用,OUTPUT,语句从一个数据行生成多个观测:,data repeat;,input sub$mea1-mea3;,drop mea1-mea3;,mea=mea1;,output,;,mea=mea2;,output,;,mea=mea3;,output,;,cards;,a 2 5 4,b 3 6 2,;,proc print;,title,数据集,repeat,;,run;,数据集,repeat,Obs sub mea,1,a,2,2,a,5,3,a,4,4,b,3,5,b,6,6,b,2,OUTPUT,窗口:,OUTPUT data-set-name;,语句后跟一个数据集名,即将当前观测输出到这个指定的数据集中去。下面的例子是利用,OUTPUT,语句在一个,DATA,步中同时产生多个,SAS,数据集。,DATA,year1 year2,;,INPUT name$sex$yrs;,IF yrs=12 THEN,output year1,;,ELSE,output year2,;,CARDS;,数据行,;,RUN;,下一内容,,SAS,输入输出格式及格式化输入,
展开阅读全文