《SAS软件应用基础第四章.ppt》由会员分享,可在线阅读,更多相关《SAS软件应用基础第四章.ppt(25页珍藏版)》请在三一办公上搜索。
1、第四章 数据步的程序设计 Program Design of Data Step,生物医学工程研究所 Add:教学八楼三层东 Tel:82035 Lecturer:张玉华Email:,Contents,4.1 IF 语句 4.2 GO TO(GOTO)语句4.3 RETURN语句 4.4 循环语句DO END 4.5 其它程序设计中常用语句 Delete 求子集的if语句,数据步的程序代码一般都是顺序执行,数据步中有一些控制语句,如分支、循环语句,可控制程序的执行流程。,4.1 IF语句,分支:根据某种条件的满足与否来执行不同的操作,称为分支,常用IF 语句完成。Branched progra
2、m两种IF语句:条件IF语句,带有一个THEN子句和ELSE子句(ELSE子句可选)。求子集IF语句,无THEN和ELSE子句。用来使SAS系统继续处理那些满足IF子句中条件的观测值。,格式:IF expression THEN statement;说明:SAS系统先对expression求值,如结果为真(非零),则执行THEN后的语句如结果为假,则执行ELSE后面的语句,如果没有ELSE子句,则执行下一个语句在THEN之后只允许使用一个语句,如果要执行几个语句,则应用DO-END把要同时执行的几个语句括起来。IF-THEN/ELSE语句可以嵌套,IF-THEN/ELSE语句,例1:在程序执行
3、时显示总成绩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 981003 87 69 81run;,例2:口腔科体检,记录检查值为:0-正常,1-龋齿,2-龋齿已填充,3-因龋齿失牙,4-其他原因失牙。通过牙齿状态调查判断患龋齿与失牙病情。Data a;Input x;If 1=1,例3:Do-End 语句组:对考试成绩不及格的学生指明需要补考,并在日志窗口显示。Data a;Input num x;If x60 then
4、 do;bk=1;put num x bk=;End;Else bk=0;Cards;101 80 102 90 103 85 104 50 105 100Run;,例4:if 嵌套data;input X Y;IF X=0 THEN IF Y=0 THEN PUT X ZERO,Y NONZERO;ELSE PUT X ZERO,Y ZERO;ELSE PUT X NONZERO;cards;0 1 0 0 1 0 0 3run;,4.2 GO TO(GOTO)语句,格式:GOTO label;或 GO TO label;说明:告诉SAS系统,立即跳向在GOTO语句中指出的语句,并从那一点开
5、始接着执行。GOTO语句和跳向的目标都必须在同一个DATA步中跳向的目标语句由GOTO语句和目标语句中的标号来标明。label:标识GOTO目标的语句标号。,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;Run;,OBS X Y COUNT SUMX 1 3 5 0 3 2 3 9 1 6 3 2.7 3.8 1 8.7 4 3 10 2 11.7,4.3 RETURN语句,格式:RETURN;说明:RETURN语句的功能是将当前观测
6、值输出到数据集,然后立即将程序流程返回DATA步的开始处,而不执行其后的语句。GOTO和RETURN语句经常被DO-END语句代替。,DATA RECORD;INPUT X Y;IF 1=X=5 THEN GOTO OK;X=3;COUNT+1;RETURN;OK:SUMX+X;CARDS;3 5 7 9 2.7 3.8 59 10PROC PRINT;,OBS X Y COUNT SUMX 1 3 5 0 3 2 3 9 1 3 3 2.7 3.8 1 5.7 4 3 10 2 5.7,DATA RECORD;INPUT X Y;IF X5 THEN DO;X=3;COUNT+1;END;E
7、LSE SUMX+X;CARDS;3 5 7 9 2.7 3.8 59 10PROC PRINT;,DATA RECORD;INPUT X Y;IF X5 THEN DO;X=3;COUNT+1;END;SUMX+X;CARDS;3 5 7 9 2.7 3.8 59 10PROC PRINT;,4.4 循环(Cycling program)设计,在数据步的一次执行中反复地执行某一部分语句,这种程序的反复执行称为循环。例:DATA _NULL_;I=1;K:PUT I;I=I+1;IF I=10 THEN GOTO K;RUN;,DATA _NULL_;DO I=1 TO 10;PUT I=;E
8、ND;RUN;,命名输出,格式:DO 指针变量=初值 TO 终值 BY 增量;END;说明:DO语句组第一次执行时,指针变量等于初值。每执行到END语句时,指针变量+增量作为新的指针变量,并与终值作比较,直到指针变量的值变化超过终值时才停止。最后一次执行完后,指针变量值超过终值。如果仅有初值,则直到一个语句指示跳出循环体才停止循环。如果初值终值均未规定,语句组执行一次。如果未规定增量,增量的缺省值为1。,例:打印乘法九九表DATA _NULL_;DO I=1 TO 9;DO J=1 TO I;X=I*J;PUT(J*5)X;END;PUT;END;RUN;,绝对列指针控制,续行符,在一个数据步
9、有多个input(put)时用,换行,例:打印乘法九九表DATA _NULL_;DO I=1 TO 9;DO J=1 TO I;X=I*J;PUT I*J=X;END;PUT;END;RUN;,利用双重循环组织分类数据:例:研究某降糖药不同剂量的疗效,测量II型糖尿病患者治疗4周后餐后2小时血糖下降值(mmol/L),如表:,Data a;Do i=1 to 16;Do j=1 to 3;Input x;Output;*Output:直接将变量当前值写入数据集;End;End;Cards;5.6-0.6 12.4 9.5 5.7 0.9 6.0 12.8 7.08.7 4.1 3.9 9.2-
10、1.8 1.6 5.0-0.1 6.4 3.5 6.3 3.0 5.8 12.7 3.9 8.0 9.8 2.215.5 12.6 1.1 11.8 2.0 2.7 16.3 5.6 7.811.8 7.0 6.9 14.6 7.9 1.5 4.9 4.3 9.48.1 6.4 3.8;Proc anova;Class j;Model x=j;Run;,4.5 其它程序设计中常用语句,4.5.1 DELETE 语句 格式:DELETE;说明:告诉SAS系统停止处理当前的观测值,且该观测值不被写入正在建立的数据集中,SAS系统返回DATA步的开始处进行下一次执行。,DATA STUDENTS;I
11、NPUT ID 1-5 ENGLISH 6-8 TEST1 14-16 TEST2 18-20;IF ENGLISH60 THEN DELETE;TOTAL=SUM(OF TEST1 TEST2 ENGLISH);CARDS;88011100 78 9088012 97 86 10088013 59 68 88;RUN;,求子集的IF语句格式:IF expression;说明:使用求子集IF语句,使SAS系统仅继续处理符合IF语句条件规定的观测值,所得到的数据集是原数据集的子集。如果表达式为真(非零且不缺项),SAS系统继续为正在建立的观测值执行DATA步中的语句。如果表达式的值是假(0或缺项
12、),SAS系统马上返回到DATA步的开始,去进行另一次执行而不输出上一个观测值。如:IF SEX=F;,例:建立Children的子集Baby和Girls。DATA CHILDREN;INPUT NUM$SEX$MONTH;CARDS;1001 F 8 1002 M 9 1003 F 17 1004 M 14DATA BABY;SET CHILDREN;IF MONTH=12;DATA GIRLS;SET CHILDREN;IF SEX=F;RUN;,或用 Delete 语句实现:Data Children;Input num$sex$month;Cards;1001 F 8 1002 M 9 1003 F 17 1004 M 14Data Baby;Set Children;If month=12 then delete;Data Girls;Set Children;If sex=F then delete;Run;,