- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 分支与循环
在程序中常常会根据某种条件满足与否执行不同的语句。这种程序的流程叫分支。
第一节 IF语句
在SAS语言处理中,有两种IF语句:
条件IF语句,带有一个THEN子句。只对满足IF语句中所指定条件的观测值才执行SAS语句。如果THEN分句不被执行,那么可选择的ELSE子句给出另一种替换作用。
子集IF语句,无THEN子句。用来使SAS系统继续处理那些满足IF子句中说明的条件的观测值
4.1.1 IF-THEN 语句
对于正在建立的SAS数据集,如果只想对部分观测值执行一个语句,可使用IF THEN语句。SAS系统首先对跟在IF后的表达式求值,如果表达式值为假,则SAS系统不处理跟在THEN后的语句,而去执行下一个语句。
IF-THEN语句的格式是:
IF 表达式 THEN 语句;
这里,表达式是任意有效的SAS表达式。SAS系统对IF语句中的表达式求值,并产生一个非零、零或是缺项的结果。如果结果非零则表达式是真;否则为假。
例如,对三科成绩大于280的学生打印出学号和总成绩。程序如下:
DATA A;
INPUT NUM S1-S3 @@;
TOTAL=SUM(OF S1-S3);
IF TOTAL280 THEN PUT NUM TOTAL;
CARDS;
1001 79 96 87 1002 89 96 98 1003 87 69 81
;
4.1.2 IF-THEN/ELSE 语句
当条件表达式的值为真时,执行一个语句,反之执行另一个语句。
例如,在整理口腔病普查数据时,对于牙齿状态YCZT有如下情况: 1.良好 2.龋齿 3.龋齿已填充 4.因龋失牙 5.其他原因失牙。如想据此统计分析龋病和失牙的情况,我们可另设两变量:1)HQ患龋 2)SY失牙。如果2=YCZT=4,则HQ=1,否则HQ=0如果4=YCZT=5,则SY=1否则SY=0
程序如下:
DATA KQB;
INFILE KQB.TXT;
INPUT NUM YCZT;
IF YCZT=2 AND YCZT=4 THEN HQ=l;
ELSE HQ=0;
IF 4=YCZT=5 THEN SY=1;
ELSE SY=0;
注意 在THEN之后只允许使用一个语句,如果当条件成立时要执行几个语句,则应该用DO语句。把要同时执行的几个语句用DO-END括起来。
例如:如果x的值为0,那么将X的值改为1,同时将该观测值的编号输出来。
IF X=0 THEN DO;
X=1;
PUT NUM ;
END;
IF-THEN/ELSE语句可以嵌套,如下面的例子:
IF X=0 THEN
IF Y^=O THEN PUT X ZERO,Y NONZERO;
ELSE PUT X ZERO,Y ZERO;
ELSE PUT X NONZERO;
第一个ELSE语句与第二个IF语句配对。最后一个ELSE语句与第一个IF语句配对。
第二节 GO TO语句
GO TO(或者GOTO)语句告诉SAS系统立即跳向在GOTO语句中指出的语句,并从那一点开始接着执行。GO TO语句和跳向的目标都必须在一个DATA步中,跳向的目标语句由GO TO语句和目标语句中的标号来标明。
语句的形式是:
GOTO label;
GO TO label;
label:标识GOTO目标的语句标号。
GO TO语句常作为IF-THEN语句的THEN子句出现。在下面的例子中,当x值介于1和5之间时,SAS系统跳过赋值语句而转向标号为OK的语句去执行。
DATA INFO;
INPUT X Y @@;
IF 1=X=5 THEN GO TO OK;
X=3;
COUNT+1;
OK:SUMX+X;
CARDS;
3 5 7 9 2.7 3.8 59 10
;
PROC PRINT;
第三节 RETURN 语句
在上面的例子中,被标识为OK的语句对每个观测值都执行。有时,你想在一定条件下才执行所标识的语句,就应该使用RETURN语句。例如:
DATA RECORD;
INPUT X Y Z @@;
文档评论(0)