第五部分sas数据步循环与转移控制ppt课件_第1页
第五部分sas数据步循环与转移控制ppt课件_第2页
第五部分sas数据步循环与转移控制ppt课件_第3页
第五部分sas数据步循环与转移控制ppt课件_第4页
第五部分sas数据步循环与转移控制ppt课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

数据步循环与转移控制,江西财经大学,DO语句,DO语句必须由一个END语句来结束。DO和END语句之间的这些语句称为一个DO组。DO组可以嵌套任意次。DO语句有5类:简单DO语句;循环DO语句;DOOVER语句;DOWHILE语句;DOUNTIL语句。,简单DO语句,语句格式DO;一些SAS语句END;,应用举例,例8.1IF/THEN语句用中DO.dataa;setdst.bclass;ifage14thendo;Height+20putname=sex=age=;end;run;,循环DO语句,DO组中的语句需要被重复执行时要用到循环DO语句。循环DO语句根据下标变量重复执行DO和END语句之间的语句语句格式DOindex_variable=specification-1;一些SAS语句END;其中:index-variable选项定义下标变量,用于控制DO组的执行方式和重复次数。下标变量包含在创建的数据集中,可以用DROP语句删除。,SPECIFICATION选项格式,Start;Specification选项说明:,例8.2缺省的步长为1。doI=1to1000;doI=1toy+3;doI=1toexit;,例8.3起始值例句。doi=5;doi=1ton;doi=nto1by1;doi=k+1ton-1;doi=1tok-1,k+1ton;doi=2,3,5,7,11,13,17;doi=0.1to0.9by0.1,1to10by1,20to100by10;doi=saturday,sunday;doi=01jan99d,25feb99d;doi=01jan99dto01jan2000dby1;例句子中,起始值必须全部是数值或全部是字符常数,也可以是变量。字符常数必须用引号括起来。,例8.4使用表达式选项。doi=1to10while(xy);doi=10to0by1while(month=jan);,应用举例,例8.5用GOTO语句跳出循环体。dataa;inputxy;ifxythengotoskip;/*skip是循环体外的语句标号*/y=log(y-x);yy=y-20;skip:ify=5时停止。dataa;n=0;dountil(n=5);putn=;n+1;end;run;,END语句,END语句是组成DO组或SELECT组的最后一个语句。语句格式END;,应用举例,DO;若干个SAS语句END;SELECT(expression);When(expression)SAS语句;OtherwiseSAS语句;END;,SELECT语句,SELECT语句选择执行SAS语句。语句格式SELECT;WHEN(when-expression-1)statement;)statement;END;选项说明:,应用举例,例8.13有SELECT表达式的SELECT语句。dataa;setdst.bclass;obs=_n_;x=uniform(0);select(obs);when(1)x=x*10;when(2,4,6);when(3,5,7,13,15,17)x=x*100;otherwisex=1;end;run;例中,根据OBS来计算新变量X的值。当OBS为1时,执行x=x*10。当OBS为2,4,6时,X值不变。当OBS为3,5,7,13,15,17时,执行X=X*100。OBS为其它值时,执行x=1。,例8.14没有SELECT表达式的SELECT语句。data_null_;domon=jan,feb,mar,apr,may,jun,jul,aug,sep;select;when(monin(jun,jul,aug)putsummermon=;when(monin(mar,apr,may)putspringmon=;otherwiseputfallorwintermon=;end;end;run;,361data_null_;362domon=jan,feb,mar,apr,may,jun,jul,aug,sep;363select;364when(monin(jun,jul,aug)putsummermon=;365when(monin(mar,apr,may)putspringmon=;366otherwiseputfallorwintermon=;367end;368end;369run;fallorwintermon=janfallorwintermon=febspringmon=marspringmon=aprspringmon=maysummermon=junsummermon=julsummermon=augfallorwintermon=sepNOTE:“DATA语句”所用时间(总处理时间):实际时间0.03秒CPU时间0.01秒,例8.15SELECT组的正确及错误用法举例。select(x);when(x=2)puttwo;/*错误用法*/end;select(x);when(2)puttwo;/*正确用法*/end;select;when(x=2)puttwo;/*正确用法*/end;run;例中,后两个程序的效果相同。,IF语句,IF语句的两种类型:条件IF语句,含有一个THEN子句或ELSE子句;子集IF语句,没有子句。IF-THEN与IF-THEN/ELSE语句表达式为真时执行THEN后面的语句,表达式为假执行ELSE后面的语句。语句格式:IFexpressionTHENexpression;,子集IF语句,语句格式:IFexpression;其中:expression是任意有效的表达式。如果表达式真的,SAS语句对正被创建的观测继续执行DATA步的语句。如果表达式是假的,SAS立即返回到DATA步的开始对其他观测执行。,例8.17应用举例。dataa;setResDat.Idx000001;if_n_100;run;例中,选择前99条观测值。,GOTO语句与语句标号,GOTO语句使SAS跳到本程序步带有标号的语句继续往下执行。GOTO语句和指定的目标语句必须在同一DATA步。GOTO语句语句格式:GOTOlabel;GOTOlabel;Label选项规定语句标号来指示GOTO的目标。,例8.18应用举例。dataa;inputx;if1=x=5thengotook;putx;count+1;ok:sumx+x;cards;1272122422;run;例中,COUNT仅对大于5的数计数,SUMX+X对每个观测都执行。,dataa;inputx;if1=x=5thengotook;putx;count+1;return;ok:sumx+x;cards;1272122422;run;例中,COUNT仅对大于5的数计数,SUMX+X仅对X在1和5之间的那些观测执行。,例8.19上面两例中用DO-END语句替代GOTO语句。dataa;inputx;ifx5thendo;putx;count+1;end;sum+x;cards;1272122422;dataa;inputx;ifx5thendo;putx;count+1;end;elsesumx+x;cards;1272122422;,语句标号,语句标号给出GOTO,LINK,FILE语句中的选项HEADER=,或在INFILE语句中选项EOF=的位置。语句格式:LABEL:statement;,LINK语句,LINK语句告诉SAS系统立即转到由LINK语句指示的语句标号,并从那里继续执行直到一个RETURN语句。RETURN语句让SAS立即返回到LINK语句后面的那个语句并从那里继续执行。LINK语句和语句标号所在的目标语句必须在同一个DATA步。语句格式LINKlabel;,例8.20执行一组语句。databydro;inputtype$wdstation$;labeltype=stationtypewd=depthtowater;elev=.;iftype=aluythenlinkcalcu;year=1985;return;calcu:ifstation=site_1thenelev=6650-wd;ifstation=site_2thenelev=5500-wd;return;/*返回到link语句下面的year=1985;语句*/cards;aluv523site_1uppa234site_2aluy666site_2;,RETURN语句,RETURN语句告诉SAS系统在DATA步当前位置上停止执行语句,返回到一个预定位置上继续执行。语句格式RETURN;RETURN语句的作用:在LINK语句后面,RETURN语句让SAS系统立即返回到LINK后面的语句,并继续往下执行;在FILE语句的选项HEADER=中,RETURN语句让SAS系统立即返回到开始新页之前执行的最后一个语句后面的语句,并继续执行;在DATA步的其它地方,RETURN语句让SAS系统返回到DATA步开头。,例8.23让SAS系统返回到DATA步开头。datasurvey;inputxyz;ifx=ythenreturn;x=y+z;a=x*2;cards;123334567889;例中,当X=Y时,RETURN语句被执行。SAS系统添加这个观测到数据集SURVEY,并返回到DATA步的开头。IF语句后面的二个赋值语句没有被执行。,CONTINUE语句,CONTINUE语句停止当前的这次循环过程,继续进行下一次循环。语句格式:CONTINUE;,例8.25CONTINUE语句停止当前的循环过程,继续进行下一次循环。dataa;doi=1to5;inputname$idnostatus$;ifstatus=PTthencontinue;/*返回到下次循环的开头*/inputbenefits$10.;output;end;cards;,/*接上页*/Jones9011PTThomas876PTRichards1002FTEye/DentalKelly85111PTSmith433FTHMOKelly85111PTSmith433FTHMOJones9011PTThomas876PTRichards1002FTEye/Dental;Run;,LEAVE语句,LEAVE语句停止当前DO组循环或SELECT组的处理过程,并继续执行DO组或SELECT组后面的语句。语句格式:LEAVE;,例8.26给定条件下停止DO循环的处理过程,dataweek;inputname$idnostartstatus$dept$;bonus=0;doyear=startto1991;ifbonusge50

温馨提示

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

评论

0/150

提交评论