第四章数据步程序设计 数据步的程序代码一般都是顺序执行 然而,数据步中有一些控制语句,如分支、 循环语句,可控制程序的执行流程。 IF D0.. END GOTO RETURN
第四章 数据步程序设计 数据步的程序代码一般都是顺序执行, 然而,数据步中有一些控制语句,如分支、 循环语句,可控制程序的执行流程。 IF DO … END GOTO RETURN
4.1R语句 两种IF语句: ●条件IF语句,带有一个TEN子句和 ELSE子句(可选)。只对满足F语句中所 指定条件的观测值才执行SAS语句。如果 THEN子句不被执行,那么可选择的ELSE 子句给出另一种替换作用。 ●子集F语句,无THEN子句。用来使SAS 系统继续处理那些满足F子句中条件的观 测值
4.1 IF 语句 两种IF语句: ●条件IF语句,带有一个THEN子句和 ELSE子句(可选)。只对满足IF语句中所 指定条件的观测值才执行SAS语句。如果 THEN子句不被执行,那么可选择的ELSE 子句给出另一种替换作用。 ●子集IF语句,无THEN子句。用来使SAS 系统继续处理那些满足IF 子句中条件的观 测值
IF-THEN/ELSE语句 格式: IF expression THEN statement; 说明: SAS系统首先对跟在F后的表达式(expression)求值, 如果结果为真(非零),则执行THEN后的语句。如果为假, 则去执行ELSE后面的语句,如果没有ELSE子句,则执行下 一 个语句。 注意: 在THEN之后只允许使用一个语句,如果要执行几个 语句, 则应用DO-END把要同时执行的几个语句用括起来。 F-THEN/ELSE语句可以嵌套
IF-THEN/ELSE语句 格式: IF expression THEN statement; 说明: SAS系统首先对跟在IF后的表达式(expression)求值, 如果结果为真(非零),则执行THEN后的语句。如果为假, 则去执行ELSE后面的语句,如果没有ELSE子句,则执行下 一个语句。 注意: 在THEN之后只允许使用一个语句,如果要执行几个 语句,则应用DO-END把要同时执行的几个语句用括起来。 IF-THEN/ELSE 语句可以嵌套
4.2GOT0(GOTO)语句 格式: GOTO label; 或GO TO label; 说明: GOTO(或者GOTO)语句告诉SAS系统,立即 跳向在G0TO语句中指出的语句,并从那一点开始 接着执行。GOTO语句和跳向的目标都必须在一个 DATA步中,跳向的目标语句由GOTO语句和目标 语句中的标号来标明。 label:标识GOTO目标的语句标号
4.2 GO TO (GOTO)语句 格式: GOTO label; 或 GO TO label; 说明: GO TO (或者GOTO)语句告诉SAS系统,立即 跳向在GOTO语句中指出的语句,并从那一点开始 接着执行。GO TO语句和跳向的目标都必须在一个 DATA步中,跳向的目标语句由GO TO语句和目标 语句中的标号来标明。 label: 标识GOTO目标的语句标号
4.3 RETURN语句 格式:RETURN; RETURN语句的功能是将当前观测值输 出到数据集,然后立即将程序流程返回DATA 步的开始处,而不执行其后的语句 GOTO语句经常被DO-END语句代替
4.3 RETURN语句 格式:RETURN; RETURN语句的功能是将当前观测值输 出到数据集,然后立即将程序流程返回DATA 步的开始处,而不执行其后的语句。 GO TO语句经常被DO-END语句代替
4.4循环 在数据步的一次执行中反复地执行某 部分语句,这种程序的反复执行称为循环。 DATA NULL I=1; D0=1T010: K:PUTI; =I+1; PUT I; IF K=10 THEN GOTO K; END; RUN;
4.4 循环 在数据步的一次执行中反复地执行某一 部分语句,这种程序的反复执行称为循环。 DATA _NULL_; I=1; K: PUT I; I=I+1; IF I<=10 THEN GOTO K; RUN; DO I=1 TO 10; PUT I; END;
4.4循环 ·循环语句的格式 D0指针变量=初值T0 终值BY增量; END •说明: D0语句组第一次执行时,指针变量等于 初值。当终值和增量都存在时,则每执行到 END 语句时,指针变量+增量作为新的指针变量,并 与终值作比较,直到指针变量的值变化超过终值 时才停止执行D0语句组。最后一次执行完后,指 针变量值超过终值
4.4 循环 •循环语句的格式: • DO 指针变量=初值 TO 终值 BY 增量; • END ; •说明: DO语句组第一次执行时,指针变量等于 初值。当终值和增量都存在时,则每执行到 END 语句时, 指针变量+增量作为新的指针变量,并 与终值作比较,直到指针变量的值变化超过终值 时才停止执行DO语句组。最后一次执行完后,指 针变量值超过终值
4.4循环 如果仅有初值,则直到一个语句指示 跳出循环体才停止循环。如果初值终值均 未规定,语句组执行一次。如果未规定增 量,增量的缺省值为1。初值和终值是在第 一次执行循环以前计算的
4.4 循环 如果仅有初值,则直到一个语句指示 跳出循环体才停止循环。如果初值终值均 未规定,语句组执行一次。如果未规定增 量,增量的缺省值为1。初值和终值是在第 一次执行循环以前计算的
4.4循环 DATA NULL; D0I=1T010; PUT I=; END: RUN; PUT语句中变量名后面使用等号,是对 输出值用变量名来标识。称为命名输出。 如:PUTI=
4.4 循环 • PUT语句中变量名后面使用等号,是对 输出值用变量名来标识。称为命名输出。 • 如:PUT I=; DATA _NULL_; DO I=1 TO 10; PUT I=; END; RUN;
4.4循环 ·双重循环(循环嵌套): D0… D0..; ●●●●● 内循环 外循环 ●●●●●● END; END;
4.4 循环 • 双重循环(循环嵌套): DO…; DO…; …… …… END; END; 内 循 环 外 循 环