您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > SAS软件应用基础第四章
第四章数据步的程序设计ProgramDesignofDataStep生物医学工程研究所Add:教学八楼三层东Tel:82035Lecturer:张玉华Email:zhangyh@sdu.edu.cnContents4.1IF语句4.2GOTO(GOTO)语句4.3RETURN语句4.4循环语句DO…END4.5其它程序设计中常用语句Delete求子集的if语句数据步的程序代码一般都是顺序执行,数据步中有一些控制语句,如分支、循环语句,可控制程序的执行流程。4.1IF语句分支:根据某种条件的满足与否来执行不同的操作,称为分支,常用IF语句完成。Branchedprogram两种IF语句:条件IF语句,带有一个THEN子句和ELSE子句(ELSE子句可选)。求子集IF语句,无THEN和ELSE子句。用来使SAS系统继续处理那些满足IF子句中条件的观测值。格式:IFexpressionTHENstatement;ELSEstatement;说明:SAS系统先对expression求值,●如结果为真(非零),则执行THEN后的语句●如结果为假,则执行ELSE后面的语句,如果没有ELSE子句,则执行下一个语句在THEN之后只允许使用一个语句,如果要执行几个语句,则应用DO-END把要同时执行的几个语句括起来。IF-THEN/ELSE语句可以嵌套IF-THEN/ELSE语句例1:在程序执行时显示总成绩280的观测DATAA;INPUTNUMS1-S3@@;TOTAL=SUM(OFS1-S3);IFTOTAL280THENPUTNUMTOTAL;CARDS;100179968710028996981003876981run;例2:口腔科体检,记录检查值为:0-正常,1-龋齿,2-龋齿已填充,3-因龋齿失牙,4-其他原因失牙。通过牙齿状态调查判断患龋齿与失牙病情。Dataa;Inputx@@;If1=x=3Thenhq=1;*x=1&x=3;Elsehq=0;If3=x=4Thensy=1;*x=3&x=4;Elsesy=0;Cards;01234;Procprint;Run;例3:Do-End语句组:对考试成绩不及格的学生指明需要补考,并在日志窗口显示。Dataa;Inputnumx@@;Ifx60thendo;bk=1;putnumxbk=;End;Elsebk=0;Cards;10180102901038510450105100Run;例4:if嵌套data;inputXY@@;IFX=0THENIFY^=0THENPUT'XZERO,YNONZERO';ELSEPUT'XZERO,YZERO';ELSEPUT'XNONZERO';cards;01001003run;4.2GOTO(GOTO)语句格式:GOTOlabel;或GOTOlabel;说明:告诉SAS系统,立即跳向在GOTO语句中指出的语句,并从那一点开始接着执行。GOTO语句和跳向的目标都必须在同一个DATA步中跳向的目标语句由GOTO语句和目标语句中的标号来标明。label:标识GOTO目标的语句标号。DATAINFO;INPUTXY@@;IF1=X=5THENGOTOOK;X=3;COUNT+1;OK:SUMX+X;CARDS;35792.73.85910;PROCPRINT;Run;OBSXYCOUNTSUMX135032391632.73.818.74310211.74.3RETURN语句格式:RETURN;说明:RETURN语句的功能是将当前观测值输出到数据集,然后立即将程序流程返回DATA步的开始处,而不执行其后的语句。GOTO和RETURN语句经常被DO-END语句代替。DATARECORD;INPUTXY@@;IF1=X=5THENGOTOOK;X=3;COUNT+1;RETURN;OK:SUMX+X;CARDS;35792.73.85910PROCPRINT;OBSXYCOUNTSUMX135032391332.73.815.7431025.7DATARECORD;INPUTXY@@;IFX1ORX5THENDO;X=3;COUNT+1;END;ELSESUMX+X;CARDS;35792.73.85910PROCPRINT;DATARECORD;INPUTXY@@;IFX1ORX5THENDO;X=3;COUNT+1;END;SUMX+X;CARDS;35792.73.85910PROCPRINT;4.4循环(Cyclingprogram)设计在数据步的一次执行中反复地执行某一部分语句,这种程序的反复执行称为循环。例:DATA_NULL_;I=1;K:PUTI;I=I+1;IFI=10THENGOTOK;RUN;DATA_NULL_;DOI=1TO10;PUTI=;END;RUN;命名输出格式:DO指针变量=初值TO终值BY增量;END;说明:DO语句组第一次执行时,指针变量等于初值。每执行到END语句时,指针变量+增量作为新的指针变量,并与终值作比较,直到指针变量的值变化超过终值时才停止。最后一次执行完后,指针变量值超过终值。如果仅有初值,则直到一个语句指示跳出循环体才停止循环。如果初值终值均未规定,语句组执行一次。如果未规定增量,增量的缺省值为1。例:打印乘法九九表DATA_NULL_;DOI=1TO9;DOJ=1TOI;X=I*J;PUT@(J*5)X@;END;PUT;END;RUN;绝对列指针控制续行符,在一个数据步有多个input(put)时用换行例:打印乘法九九表DATA_NULL_;DOI=1TO9;DOJ=1TOI;X=I*J;PUTI‘*’J‘=’X‘’@;END;PUT;END;RUN;利用双重循环组织分类数据:例:研究某降糖药不同剂量的疗效,测量II型糖尿病患者治疗4周后餐后2小时血糖下降值(mmol/L),如表:编号高剂量低剂量对照组15.6-0.612.429.55.70.936.012.87.048.74.13.959.2-1.81.665.0-0.16.473.56.33.085.812.73.998.09.82.21015.512.61.11111.82.02.71216.35.67.81311.87.06.91414.67.91.5154.94.39.4168.16.43.8Dataa;Doi=1to16;Doj=1to3;Inputx@@;Output;*Output:直接将变量当前值写入数据集;End;End;Cards;5.6-0.612.49.55.70.96.012.87.08.74.13.99.2-1.81.65.0-0.16.43.56.33.05.812.73.98.09.82.215.512.61.111.82.02.716.35.67.811.87.06.914.67.91.54.94.39.48.16.43.8;Procanova;Classj;Modelx=j;Run;4.5其它程序设计中常用语句4.5.1DELETE语句格式:DELETE;说明:告诉SAS系统停止处理当前的观测值,且该观测值不被写入正在建立的数据集中,SAS系统返回DATA步的开始处进行下一次执行。DATASTUDENTS;INPUTID1-5ENGLISH6-8TEST114-16TEST218-20;IFENGLISH60THENDELETE;TOTAL=SUM(OFTEST1TEST2ENGLISH);CARDS;88011100789088012978610088013596888;RUN;4.5.2求子集的IF语句格式:IFexpression;说明:使用求子集IF语句,使SAS系统仅继续处理符合IF语句条件规定的观测值,所得到的数据集是原数据集的子集。如果表达式为真(非零且不缺项),SAS系统继续为正在建立的观测值执行DATA步中的语句。如果表达式的值是假(0或缺项),SAS系统马上返回到DATA步的开始,去进行另一次执行而不输出上一个观测值。如:IFSEX='F';例:建立Children的子集Baby和Girls。DATACHILDREN;INPUTNUM$SEX$MONTH@@;CARDS;1001F81002M91003F171004M14DATABABY;SETCHILDREN;IFMONTH=12;DATAGIRLS;SETCHILDREN;IFSEX='F';RUN;或用Delete语句实现:DataChildren;Inputnum$sex$month@@;Cards;1001F81002M91003F171004M14DataBaby;SetChildren;Ifmonth=12thendelete;DataGirls;SetChildren;Ifsex^=‘F’thendelete;Run;
本文标题:SAS软件应用基础第四章
链接地址:https://www.777doc.com/doc-3374228 .html