您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 绩效管理 > SAS学习系列05.-数据步创建数据集的过程
05.数据步创建数据集的过程数据步创建数据集的过程分为两个阶段:1.编译阶段:扫描语法错误,生成数据集的“描述信息”;2.执行阶段:逐条记录地读入并处理输入数据(循环执行若干次数据步)。(一)编译阶段将数据从外部文件读入“程序数据向量”(ProgramDataVector)。一、在输入缓冲区(内存)创建“程序数据向量”注意:是读入外部数据时创建,而不是读入SAS数据集时创建。例1下面的数据步代码:datainvents;infile'D:\我的文档\MySASFiles\9.3\invent.dat';inputItem$1-13IDnum$15-19InStock21-22BackOrd24-25;Total=instock+backord;run;将创建如下的“程序数据向量”:包括_N_:记录数据步执行的次数,读入一条记录则+1;_ERROR_:用来指示错误,默认是0,遇到错误则变为1;注意:_N_和_ERROR_是该处理过程自动生成的,将来也不会出现在数据集的观测值中。Item、IDnum、InStock、BackOrd:数据集自身的变量,其变量属性(长度、类型等)在第一次读到数据时确定;Total:数据步中赋值语句生成的变量。二、检查语法错误(1)关键词缺少或拼写错误;(2)无效的变量名;(3)标点符号缺失或拼写错误;(4)无效的可选参数。三、生成数据集的“描述信息”遇到数据步的run;语句时生成,包括:(1)数据集的名称;(2)数据集包含变量的个数;(3)数据集各变量的变量名和属性。注意:此时,“程序数据向量”中还没有内容,数据集中也还没有观测值,观测值将在执行阶段从“程序数据向量”中逐条读取。(二)执行阶段逐条记录地从“程序数据向量”读入并处理输入数据(循环执行若干次数据步)。例如,例1中的invent.dat文件共有9条记录:数据步读入它将循环执行9次。执行阶段具体步骤:第1次循环:一、初始化“程序数据向量”_N_=1_ERROR_=0其它变量=缺省值(数值型是.字符型是空格)二、执行input语句前例中,代码inputItem$1-13IDnum$15-19InStock21-22BackOrd24-25;Total=instock+backord;依次将外部数据文件的第一行的1-13列读入数据存入Item变量,……,赋值语句将instock和backord值相加赋给Total.三、数据步收尾工作1.将当前“程序数据向量”中的条目,作为第1条观测值写入输出数据集。2.回到数据步起始位置(循环),_N_+1=2,_ERROR=0(若必要)进入第2次循环…………直到读取到外部数据文件的“文件尾标识”,完成数据步。注意:(1)若不想读入全部数据,可以在infile语句中加上可选参数,控制读入观测值数目:例如infile'C:\invent.dat'obs=10;也可以在input语句中加上if语句做选择读入,例如datafinance.newcalc;infilenewloans;inputLoanID$1-4Rate5-8Amount9-19;ifrate0thenInterest=amount*(rate/12);elseput'DATAERROR'rate=_n_=;run;(2)数据步中若另有指示语句,将按指示语句执行;(3)SAS日志文件信息,将确保外部数据正确地读入数据集:(三)修改错误数据数据集创建完成后,需要检查数据的正确性(检查日志文件、输出数据报表、输出数据的均值或频率等)。发现某个数据值错误,可以用“if语句”对错误数值进行修改,当然也可以在可视化窗口操作修改数据。例2路径“D:\我的文档\MySASFiles\9.3”下,有数据集patients.sas7bdat:发现:性别G应修改为F;年龄242明显是错误(删除该条观测值)。代码:libnamemylib'D:\我的文档\MySASFiles\9.3';datanewpatients;setmylib.patients;Sex=upcase(Sex);ifSex='G'thenSex='F';ifAge110thendelete;run;procprintdata=newpatients;run;运行结果:(四)RETAIN和SUM语句从前面(二)中知道,迭代(循环)执行从“程序数据向量”读入数据(观测值)时,SAS会先将所有变量值设为缺省值,再通过input或赋值语句改变它。RETAIN和SUM语句可以改变这种方式。1.RETAIN语句retain语句可以让SAS保存前一次变量的值。它可以出现在数据步的任何位置,基本形式为:retain变量1变量2…;也可以指定一个初始值,而不是用缺失值或前一次的值代替初始值:retain变量初始值;2.SUM语句SUM语句用于你想将一个表达式的值累加到一个变量上去时,基本形式为:变量+表达式;该语句将表达式的值赋给变量,同时将变量的值保留到下一次迭代。这个变量必须是数值型,且初始值为0。因此,语句等价于如下形式:retain变量0;变量=sum(变量,表达式);例3某赛季棒球比赛的数据(C:\MyRawData\Games.dat),包含比赛日期、参赛队伍、hit数据、runs数据:要求增加两个变量,一个反应本赛季的总runs数,一个反应一场比赛中最大的runs数。代码:datagamestats;infile'c:\MyRawData\Games.dat';inputMonth1Day3-4Team$6-25Hits27-28Runs30-31;retainMaxRuns;MaxRuns=MAX(MaxRuns,Runs);RunsToDate+Runs;run;procprintdata=gamestats;titleSeason'sRecordtoDate;run;运行结果:程序说明:变量maxruns取前面迭代的maxruns和runs中最大值;变量runstodate将每一场比赛的runs都加到自己身上。
本文标题:SAS学习系列05.-数据步创建数据集的过程
链接地址:https://www.777doc.com/doc-4081904 .html