6-2.数据修改及程序结构资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Slide1数据修改及程序结构Slide21.赋值语句语句格式:variable=expression;将表达式结果赋予一个变量。说明:variable规定变量名或数组元素expression有效的SAS表达式Slide3Dataa;x=15;grp=“A”;Run;例如,DATAda1;INPUTx1x2x3x4$;y=x1+x2+x3;average=mean(x1,x2,x3);id_num=_n_;total=x3+x4;/*数值+字符*/CARDS;31.20.5522.40.9753.20.89;RUN;表达式的值赋给变量Slide4结果变量类型决定结果变量类型的准则:如果表达式中的变量全为数值型,结果变量为数值型如果表达式中的变量全为字符型,结果变量为字符型如果表达式中的变量既有数值又有字符型,结果变量为数值型如果赋值给已定义变量,则将表达式的值转换成该变量的类型,若无法转换,则给予缺失值,并在Log窗口中给出转换信息Slide5表达式值转换数值转字符dataa;X1=Passed;output;X1=86;output;run;procprint;run;Slide6表达式值转换字符转数值,不能转换时则报错dataa;X1=86;output;X1=92;output;X1=Passed;output;run;procprint;run;Slide7结果变量长度结果变量的长度由第一次赋值的长度决定,除非事先由LENGTH语句规定好变量的长度例如,dataa;Name=“张三”;Output;Name=“欧阳踏歌”;Output;procprint;run;/*第一次赋值时的长度为4,则变量长度定义为4*//*赋值长度为8,但只接受前前4个长度*/输出结果:ObsName1张三2欧阳Slide8解决办法:1.先用LENGTH语句定义长度2.在第一次赋值时添加足够空格dataa;Lengthname$8;Name=“张三”;Output;Name=“欧阳踏歌”;Output;procprint;run;输出结果:ObsName1张三2欧阳踏歌dataa;Name=“张三”;Output;Name=“欧阳踏歌”;Output;procprint;run;Slide92.累加语句语句格式:Variable+expression;将表达式的值累加到变量(Variable)上选项说明:variable规定累加变量expression有效的SAS表达式Slide10应用准则累加变量在第一次执行前的初始值为0;表达式的计算结果为缺失值时,取0代替;表达式可以使用比较算符;语句A+(-B)中的(+)是必须的,不能写成A-B。Slide11dataa;inputidsex$;m=m+1;/*赋值语句不能累加*/ifsex=“F”thenK+1;/*条件累加*/cards;1F2M3F4F5M;run;procprint;run;例如,ObsidsexmK11F.122M.133F.244F.355M.3Slide12赋值语句+RETAIN语句可实现累加Retain语句使得其指定的变量的值在执行下一次DATA步重复时被保留,而不被清空为缺失值。如果没有RETAIN语句,SAS系统在DATA步每次重复执行之前,把用INPUT或赋值语句指定的变量设置为缺失值。retainn0;retainvar1-var3(123);retainvar1-var4(1,2,3,4);retain;n+1;retainn0;n=n+1;等价于Slide13dataa;inputidsex$;Retainm0;/*申明m值保留不清空,初值为0*/m=m+1;/*实现累加*/cards;1F2M3F4F5M;run;procprint;run;赋值语句+RETAIN语句可实现累加Obsidsexm11F122M133F244F355M3Slide14例如,对X平方后再累加dataa;inputidsex$x;total+x**2;/*对X平方后进行累加*/cards;1F802M783F904F855M68;run;procprint;run;Obsidsexxtotal11F80640022M781248433F902058444F852780955M6832433Slide153.DELETE语句作用:DELETE语句停止处理当前观测,该观测值不被读入到创建的数据集,SAS系统返回到DATA步的开头处理其他观测。语句格式:DELETE;通常与if使用,删除满足条件的观测Slide16例如,与if语句联用,删除部份观察例如:datajn;inputssngrapre1pre2;ifgra7thendelete;total=pre1+pre2;cards;129876881331085791256787913179078;run;创建的数据集jn中,不包括变量gra的值小于7的那些观测。即,不输出gra小于7的观察Slide17例如,清空一个数据集datab;seta;delete;run;例中,删除数据集B中的所有观测值,即清空数据集B,只保留数据集A的变量结构。Slide184.DROP语句和KEEP语句作用:DROP语句申明不输出到数据集中的变量KEEP语句申明需要输出到数据集中的变量语句格式:DROP变量名列表;KEEP变量名列表;Slide19例如,指定不输出到数据集中的变量如:dataparts;inputNopartapartb;test=parta+partb;droppartapartb;cards;123417541545;run;DROP语句告诉SAS系统,在新的数据集parts中不包含变量parta和partb。Slide20例如,指定需要输出到数据集中的变量如:dataparts;inputNopartapartb;test=parta+partb;keepnotest;cards;123417541545;run;KEEP语句告诉SAS系统,在新的数据集parts中只包含变量no和test。Slide215.STOP语句STOP语句停止处理DATA步。当遇到STOP语句时,正被处理的那个观测不会添加到SAS数据集中。语句格式:STOP;通常与条件语句联用Slide22数据步循环执行到第4次,即x=4,y=9时,n=6,满足n4的条件,执行STOP语句,则立即停止数据步的执行,正被处理的那条观测不会被添加到数据集A中。A中只有3条观察。dataa;inputxy;ifx=4thenn+2;IFn4THENSTOP;cards;2542484972;run;procprint;run;例如,STOP停止处理DATA步Obsxyn125024223484Slide236.ABORT语句ABORT语句中止执行当前的DATA步,继续执行下一个DATA或PROC步。执行ABORT语句时,当新创建数据集和已存在的SAS数据集同名时,不会覆盖已存在的数据集。语句格式:ABORTABEND|RETURN|n;Slide24数据步循环执行到第4次,即x=4,y=9时,n=6,满足n4的条件,执行ABORT语句,则立即停止数据步的执行,正被处理的那条观测不会被添加到数据集A中。如果数据集A先前已经存在,则不会被替换;如果数据集A先前不存在,则建立数据集A,只有3条观察。dataa;inputxy;ifx=4thenn+2;IFn4THENABORT;cards;2542484972;run;procprint;run;例如,ABORT停止处理DATA步Obsxyn125024223484Slide25dataa;inputxy;ifx=4thenn+2;IFn4THENABORT;cards;2542484972;run;procprint;run;例如,ABORT停止处理DATA步在Log窗口打印错误信息Slide26例如,ABORT语句使程序出现错误时终止执行datab;inputssnpay;if_ERROR_thenABORT;cards;111100aaa200444300;procprint;run;程序中有错误时,自动变量_ERROR_取值为1,否则为0;Slide277.LOSTCARD语句作用:LOSTCARD语句用于重新对准输入数据。当一个观测包含几个数据行,且当前观测缺少其中的一些行时,利用LOSTCARD语句可以防止SAS系统从下一个观测的数据行读数据作为当前观测的一部分。语句格式LOSTCARD;使用LOSTCARD语句时,必须用IF-THEN语句给出丢失数据行的条件。适合使用LOSTCARD语句的条件每个观测有固定的输入数据行;同一个观测的每个数据行都有一个同值的识别变量。Slide28例,每个记录应包含两行数据,第一行为SID和性别,第二行为SID和两门功课的成绩,读取信息完整的记录dataa;inputSIDsex$#2SID1Score1Score2;ifSIDNESID1thenlostcard;cards;101男1018995102女1028598200男211男2117886;procprint;run;#2表示指针移到该条记录的第2行ObsSIDsexSID1Score1Score21101男10189952102女10285983211男2117886Slide29LOSTCARD语句的执行步骤SAS日志上输出一个丢失记录卡信息,一条标尺及创建当前观测所读的数据行;不输出观测到数据集,丢弃开始读入本组的数据行,返回到DATA步开头;试图用该组第二个数据行开始并按INPUT语句规定的行数读数据行来创建观测;当丢失记录行的IF条件仍是真的,SAS重复前三步;对于IF条件不成立的一组数据行,SAS创建一个观测,并增加自动变量_N_的值。Slide30dataa;inputid1x$#2id2y$#3id3z$;ifid1neid2orid2neid3thenlostcard;cards;101A102B102B103C103C103C104D105E105E105E;procprint;run;例,当每条记录包含3个数据行时Obsid1xid2yid3z1103C103C103C2105E105E105ESlide31例中,DATA步读3个数据行作为1个观测。第1个观测有2个丢失记录,第2个观测有1个丢失记录,第4个观测丢失2个记录。只有第3和第5个观测是完整的观测。LOG窗口显示的信息:NOTE:LOSTCARD.RULE:----+----1----+----2----+----3----+----4----+----5----+----6----5101A6102B7102BNOTE:LOSTCARD.8103CNOTE:LOSTCARD.9103CNOTE:LOSTCARD.11104D12105E13105ENOTE:数据集WORK.A有2个观测和6个变量。Slide32语句格式WHERE逻辑表达式;根据表达式选择满足条件的观察算符说明Between-And选择一定数值范围内的观测IsMissing|IsNull选择变量值为缺失值的所有观测Contains|?选择包含在规定字符串的观测In选择变量值在列表中的观测Like匹配选择观测8.WHERE语句表达式中可使用的特殊运算符Slide33WHERE语句的特点WHERE语句的作用是选择满足条件的观测WHERE语句读入数据集之前选择观测WHERE语句是在执行数据集连接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前进行的操作使用WHERE语句时,由于SAS系统只从输入数据集中读入满足条件的观测,所以SAS程序运行效率高能用WHERE语句的地方一定可以用IF语句来代替,反之则不一定WH

1 / 75
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功