第四章数据步程序设计 Program Design of Data Step 主讲人:李桥
第四章 数据步程序设计 Program Design of Data Step 主讲人:李桥
主要内容 ■循环程序设计-DO语句 ·分支程序设计-F语句
主要内容 ◼ 循环程序设计 – DO 语句 ◼ 分支程序设计 – IF 语句
循环程序设计 循环:在数据步的一次执行中,某些语句需要反复执行许 多遍,称为循环。 ■ Do-End语句: ■格式:DOI=A to B by C; Loop Body > END; 说明: DO语句组第一次执行时,指针变量I等于初值A。当终值B 和增量C都存在时,则每执行到END语句时,指针变量+增量 作为新的指针变量,并与终值作比较,直到指针变量的值变化超 过终值时才停止执行DO语句组。最后一次执行完后,指针变量值 超过终值
循环程序设计 ◼ 循环:在数据步的一次执行中,某些语句需要反复执行许 多遍,称为循环。 ◼ Do – End 语句: ◼ 格式:DO I = A to B by C; ; END; ◼ 说明: DO语句组第一次执行时,指针变量I 等于初值A。当终值B 和增量C 都存在时,则每执行到END语句时,指针变量+增量 作为新的指针变量,并与终值作比较,直到指针变量的值变化超 过终值时才停止执行DO语句组。最后一次执行完后,指针变量值 超过终值
■例1:循环10次。 Data a; do i=0 to 9; puti; *Put语句:将变量值显示在日志窗口; end; run; ■ 注意:如果初值终值均未规定,语句组仅执行一次 (DO END相当于括号)。如果未规定增量,增量的 缺省值为1。初值和终值是在第一次执行循环以前计算 的
◼ 例1:循环10次。 Data a; do i=0 to 9; put i; * Put语句:将变量值显示在日志窗口; end; run; ◼ 注意:如果初值终值均未规定,语句组仅执行一次 (DO END 相当于括号)。如果未规定增量,增量的 缺省值为 1。初值和终值是在第一次执行循环以前计算 的
■ 双重循环:循环体中嵌套循环 ■例2:打印乘法口决表 Data a; Do I=1to 9; *被乘数从1循环到9; Doj=1to I; *乘数从1循环到被乘数; S=I*j为 PutI“*”j“=“S““@@;*@@表示输出后不换行; End; Put *Put语句使输出完一个被乘数后换行; End; Run;
◼ 双重循环:循环体中嵌套循环 ◼ 例2:打印乘法口诀表 Data a; Do I = 1 to 9; * 被乘数从1 循环到9 ; Do j = 1 to I; * 乘数从1 循环到被乘数; S = I * j; Put I “*” j “=“ S “ “ @@; * @@表示输出后不换行 ; End ; Put; * Put 语句使输出完一个被乘数后换行; End; Run;
编号 高剂量 低剂量 对照组 5.6 -0.6 12.4 利用双重循环组织分类数据: 2 9.5 5.7 0.9 3 6.0 12.8 7.0 ■ 例:研究某降糖药不同剂量的 4 8.7 4.1 3.9 疗效,测量Ⅱ型糖尿病患者治 5 9.2 -1.8 1.6 疗4周后餐后2小时血糖下降值 6 5.0 -0.1 6.4 (mmol/L),如表: 7 3.5 6.3 3.0 8 5.8 12.7 3.9 8.0 9.8 2.2 10 15.5 12.6 1.1 11 11.8 2.0 2.7 12 16.3 5.6 7.8 13 11.8 7.0 6.9 14 14.6 7.9 1.5 15 4.9 4.3 9.4 16 8.1 6.4 3.8
◼ 利用双重循环组织分类数据: ◼ 例:研究某降糖药不同剂量的 疗效,测量II型糖尿病患者治 疗4周后餐后2小时血糖下降值 (mmol/L),如表: 编号 高剂量 低剂量 对照组 1 5.6 -0.6 12.4 2 9.5 5.7 0.9 3 6.0 12.8 7.0 4 8.7 4.1 3.9 5 9.2 -1.8 1.6 6 5.0 -0.1 6.4 7 3.5 6.3 3.0 8 5.8 12.7 3.9 9 8.0 9.8 2.2 10 15.5 12.6 1.1 11 11.8 2.0 2.7 12 16.3 5.6 7.8 13 11.8 7.0 6.9 14 14.6 7.9 1.5 15 4.9 4.3 9.4 16 8.1 6.4 3.8
Data a; Do i=1 to 16; Doj月1to3; Input x @@ Output屿 *Output::直接将变量当前值写入数据集, End; End; Cards; 5.6-0.612.49.55.70.96.012.87.0 8.74.13.99.2-1.81.65.0-0.16.4 3.56.33.05.812.73.98.09.82.2 15.512.61.111.82.02.716.35.67.8 11.87.06.914.67.91.54.94.39.4 8.16.43.8 proc freq; tables ij; weight x; Proc anova; Class i j:为 Model x=j; Run;
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.0 8.7 4.1 3.9 9.2 -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.2 15.5 12.6 1.1 11.8 2.0 2.7 16.3 5.6 7.8 11.8 7.0 6.9 14.6 7.9 1.5 4.9 4.3 9.4 8.1 6.4 3.8 ; proc freq; tables i*j; weight x; Proc anova; Class i j; Model x=j; Run;
分支程序设计 分支: 根据某种条件的满足与否来执行不同的操 作, 称为分支,常用F语句完成。 IF-Then/Else语句: 语句格式: IF Expression Then Statement1>; Else Statement2>] 说明:首先对IF后面的表达式(Expression)求值, 如果表达式值为真(非0),则执行Then后面跟的语 句(Statement 1),而忽略Else子句;如果表达式值 为假(0),则忽略Then子句,转而去执行Else子句, 如果没有E1se子句,则不做任何操作,转而执行IF 语句组后面的语句
分支程序设计 ◼ 分支:根据某种条件的满足与否来执行不同的操 作,称为分支,常用 IF 语句完成。 ◼ IF – Then / Else 语句: ◼ 语句格式: IF Then ; [ Else ]; ◼ 说明:首先对IF 后面的表达式(Expression)求值, 如果表达式值为真(非 0),则执行Then 后面跟的语 句(Statement 1),而忽略Else 子句;如果表达式值 为假(0),则忽略 Then 子句,转而去执行 Else 子句, 如果没有 Else 子句,则不做任何操作,转而执行IF 语句组后面的语句
■ 例1:在程序执行时显示总成绩>280的观测。 Data a; Input num s1-s3 @@ Total=sum(of s1-s3); If Total 280 then put num Total; Cards; 100179968710028996981003876981 Run;
◼ 例1:在程序执行时显示总成绩>280的观测。 Data a; Input num s1-s3 @@; Total=sum( of s1-s3); If Total > 280 then put num Total; Cards; 1001 79 96 87 1002 89 96 98 1003 87 69 81 ; Run;
例2:通过牙齿状态调查判断患龋齿与失牙病情。 口腔科体检,记录检查值为:0-正常,1-龋齿,2龋齿已填充, 3-因龋齿失牙,4-其他原因失牙。 Data a; Inputx@@; If 1=1&x=3&x<=4; Else sy=0; Cards; 01234 5 Proc print; Run;
◼ 例2:通过牙齿状态调查判断患龋齿与失牙病情。 口腔科体检,记录检查值为:0-正常,1-龋齿,2-龋齿已填充, 3-因龋齿失牙,4-其他原因失牙。 Data a; Input x @@; If 1=1 & x=3 & x<=4; Else sy=0; Cards; 0 1 2 3 4 ; Proc print; Run;