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

下载本文档

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

文档简介

1、 数据步循环与转移控制数据步循环与转移控制江西财经大学江西财经大学DO语句语句 DO语句必须由一个END语句来结束。 DO和END语句之间的这些语句称为一个DO组。 DO组可以嵌套任意次。 DO语句有5类: 简单DO语句; 循环DO语句; DO OVER语句; DO WHILE语句; DO UNTIL语句。简单简单DO语句语句 语句格式DO; 一些SAS语句END;应用举例应用举例 例8.1 IF/THEN语句用中DO.data a;set dst.bclass;if age14 then do;Height+20put name= sex= age=;end;run;循环循环DO语句语句 D

2、O组中的语句需要被重复执行时要用到循环DO语句。循环DO语句根据下标变量重复执行DO和END语句之间的语句 语句格式DO index_variable=specification-1;一些SAS语句END;其中:index-variable选项定义下标变量,用于控制DO组的执行方式和重复次数。下标变量包含在创建的数据集中,可以用DROP语句删除。 SPECIFICATION选项格式选项格式 Start ; Specification选项说明: Start规定下标变量的起始值To Stop规定下标变量的终止值Increment规定步长While Expression表达式在每次循环执行前计算Un

3、til Expression表达式在每次循环执行以后计算例8.2 缺省的步长为1。do I=1 to 1000;do I=1 to y+3;do I=1 to exit;例8.3 起始值例句。do i=5;do i=1 to n ;do i=n to 1 by 1;do i=k+1 to n-1;do i=1 to k-1, k+1 to n;do i=2, 3, 5, 7, 11, 13, 17;do i=0.1 to 0.9 by 0.1, 1 to 10 by 1, 20 to 100 by 10;do i=saturday, sunday;do i=01jan99d, 25feb99d

4、;do i=01jan99d to 01jan2000d by 1;例句子中,起始值必须全部是数值或全部是字符常数,也可以是变量。字符常数必须用引号括起来。 例8.4 使用表达式选项。do i=1 to 10 while(xy);do i=10 to 0 by 1 while(month=jan);应用举例应用举例 例8.5 用GO TO语句跳出循环体。data a;input x y; if xy then goto skip; /*skip是循环体外的语句标号*/y=log(y-x);yy=y-20;skip: if y=5时停止。data a;n=0;do until(n=5);put

5、n=;n+1;end;run; END语句语句 END语句是组成DO组或SELECT组的最后一个语句。 语句格式语句格式END; 应用举例应用举例 DO;若干个SAS语句END; SELECT (expression); When (expression) SAS语句; Otherwise SAS语句; END; SELECT语句语句 SELECT语句选择执行SAS语句。 语句格式SELECT; WHEN (when-expression-1) statement; WHEN(when-expression-1) statement; END; 选项说明: select-expression选

6、择表达式when-expression规定任意有效的一个SAS表达式。Statement任意可执行的SAS语句应用举例应用举例 例8.13 有SELECT表达式的SELECT语句。data a;set dst.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;otherwise x=1;end;run;例中,根据OBS来计算新变量X的值。当OBS为1时,执行x=x*10。当OBS为2,4,6时,X值不变。当OBS为3,5,7,13,15,17时,

7、执行X=X*100。OBS为其它值时,执行x=1。 例8.14 没有SELECT表达式的SELECT语句。data _null_;do mon=jan,feb,mar,apr,may,jun,jul,aug,sep;select; when (mon in (jun,jul,aug) put summer mon=;when (mon in (mar,apr,may) put spring mon=;otherwise put fall or winter mon=;end;end;run; 361 data _null_;362 do mon=jan,feb,mar,apr,may,jun,

8、jul,aug,sep;363 select;364 when (mon in (jun,jul,aug) put summer mon=;365 when (mon in (mar,apr,may) put spring mon=;366 otherwise put fall or winter mon=;367 end;368 end;369 run;fall or wintermon=janfall or wintermon=febspring mon=marspring mon=aprspring mon=maysummer mon=junsummer mon=julsummer mo

9、n=augfall or wintermon=sepNOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.03 秒 CPU 时间 0.01 秒例8.15 SELECT组的正确及错误用法举例。select(x);when (x=2) put two; /*错误用法*/end;select(x);when(2) put two; /*正确用法*/end;select;when (x=2) put two; /*正确用法*/end;run;例中,后两个程序的效果相同。 IF语句语句IF语句的两种类型:条件IF语句,含有一个THEN子句或ELSE子句;子集IF语句,没有子句。IF-TH

10、EN与与IF-THEN/ELSE语句语句表达式为真时执行THEN后面的语句, 表达式为假执行ELSE后面的语句。 语句格式:IF expression THEN expression;子集子集IF语句语句 语句格式:IF expression;其中:expression是任意有效的表达式。如果表达式真的,SAS语句对正被创建的观测继续执行DATA步的语句。如果表达式是假的,SAS立即返回到DATA步的开始对其他观测执行。 例8.17 应用举例。data a;set ResDat.Idx000001;if _n_100;run;例中,选择前99条观测值。GO TO语句与语句标号语句与语句标号 G

11、OTO语句使SAS跳到本程序步带有标号的语句继续往下执行。GOTO语句和指定的目标语句必须在同一DATA步。 GOTO语句语句语句格式:GOTO label; GOTO label;Label选项规定语句标号来指示GO TO的目标。 例8.18 应用举例。data a;input x ;if 1=x=5 then goto ok;put x; count+1; ok: sumx+x;cards;1 2 7 2 12 24 22;run;例中,COUNT仅对大于5的数计数,SUMX+X对每个观测都执行。 xcountsumx110122033711042112512224624348722470

12、data a;input x ;if 1=x=5 then goto ok;put x; count+1;return;ok: sumx+x;cards;1 2 7 2 12 24 22;run;例中,COUNT仅对大于5的数计数,SUMX+X仅对X在1和5之间的那些观测执行。 xcountsumx1101220337134215512256243572245例8.19 上面两例中用DO-END语句替代GOTO语句。data a;input x ;if x5 then do;put x; count+1;end;sum+x;cards;1 2 7 2 12 24 22;data a;input

13、 x ;if x5 then do;put x; count+1;end;else sumx+x;cards;1 2 7 2 12 24 22;语句标号语句标号 语句标号给出GOTO,LINK, FILE语句中的选项HEADER=,或在INFILE语句中选项EOF=的位置。 语句格式:LABEL: statement; LINK语句语句 LINK语句告诉SAS系统立即转到由LINK语句指示的语句标号,并从那里继续执行直到一个RETURN语句。RETURN语句让SAS立即返回到LINK语句后面的那个语句并从那里继续执行。LINK语句和语句标号所在的目标语句必须在同一个DATA步。 语句格式语句格

14、式LINK label; 例8.20 执行一组语句。 data bydro;input type $ wd station $;label type=station type wd=depth to water;elev=.;if type=aluy then link calcu;year=1985;return;calcu: if station=site_1 then elev=6650-wd; if station=site_2 then elev=5500-wd;return; /*返回到link语句下面的year=1985;语句*/cards;aluv 523 site_1uppa

15、 234 site_2aluy 666 site_2;typewdstationelevyear1aluv523site_1.19852uppa234site_2.19853aluy666site_248341985RETURN语句语句RETURN语句告诉SAS系统在DATA步当前位置上停止执行语句,返回到一个预定位置上继续执行。语句格式语句格式RETURN;RETURN语句的作用:语句的作用:在LINK语句后面,RETURN语句让SAS系统立即返回到LINK后面的语句,并继续往下执行;在FILE语句的选项HEADER=中,RETURN语句让SAS系统立即返回到开始新页之前执行的最后一个语句后

16、面的语句,并继续执行;在在DATA步的其它地方,步的其它地方,RETURN语句让语句让SAS系统返回到系统返回到DATA步开头。步开头。例8.23 让SAS系统返回到DATA步开头。data survey;input x y z;if x=y then return;x=y+z; a=x*2;cards;1 2 3 3 3 45 6 78 8 9;例中,当X=Y时,RETURN语句被执行。SAS系统添加这个观测到数据集SURVEY,并返回到DATA步的开头。IF语句后面的二个赋值语句没有被执行。 xyza1523252334 .313671694889 .CONTINUE语句语句 CONTIN

17、UE语句停止当前的这次循环过程,继续进行下一次循环。 语句格式:CONTINUE; 例例8.25 CONTINUE语句停止当前的循环过程,继续进行下语句停止当前的循环过程,继续进行下一次循环一次循环。data a;do i=1 to 5;input name $ idno status $;if status=PT then continue; /*返回到下次循环的开头*/input benefits $10.;output;end;cards;/*接上页 */Jones 9011 PTThomas 876 PTRichards 1002 FTEye/DentalKelly 85111 PTS

18、mith 433 FTHMOKelly 85111 PTSmith 433 FTHMOJones 9011 PTThomas 876 PTRichards 1002 FTEye/Dental;Run; inameidnostatusbenefits13Richards1002FTEye/Dental25Smith433FTHMO32Smith433FTHMO45Richards1002FTEye/DentalLEAVE 语句语句 LEAVE 语句停止当前DO组循环或SELECT组的处理过程,并继续执行DO组或SELECT组后面的语句。 语句格式:LEAVE; 例例8.26 给定条件下停止给定条件下停止DO循环的处理过程循环的处理过程data week;input name $ idno start status $ dept $;bonus=0;do year=start to 1991;if bonus ge 500 then leave;bonus+50;end;cards;/*接上页 */Jones 9011 1990 PT PUBThomas 876 1976 PT HRBarnes 7899 1991 ft techHarrell 1250 1975 ft hrRichards 1002 1990 ft devKelly 85 1981 pt pubSton

温馨提示

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

评论

0/150

提交评论