SAS初学者笔记---004---循环与判断结构

SAS初学者笔记---004---循环结构与判断结构


关于循环与判断的语句在所有程序设计中十分重要,在SAS程序中也不例外。逻辑清晰的循环与判断结构是日后进行数据清洗、数据构造的必要前提。(反正就是很重要就对了)

循环结构

关于循环结构,常见的有三种类型

  1. DO Index. 索引循环,此语句是DO循环语句中最为简单的一种类型,其指定一组数据作为一个单元执行的语句(这句话是翻译官方文档的,个人理解就是DO后面伴随的执行语句往往是用一组数据为某变量赋值,并借此赋值循环执行DO~END之间的语句,循环次数受此组数据长度而定)
  2. DO UNTIL ,DO UNTIL语句重复执行DO循环中的语句,直到条件为真,并在DO循环的每次迭代后检查条件。
  3. DO WHILE,DO WHILE语句在条件为真时重复执行DO循环中的语句,在DO循环的每次迭代之前检查条件。(注意与DO UNTIL语句的区别)

注意事项:完整的DO语句以END作为整个DO语句的结尾,待执行的语句在DO与END语句中间

DO Index

常见的DO语句有以下几种

  1. 使用列表数据为变量赋值: do month='JAN','FEB','MAR'; do count=2,3,5,7,11,13,17; do i=5; do i=var1, var2, var3;
  2. 起始值 TO 结束值:do i=1 to 10; do i=1 to exit; do i=1 to x-5; do i=1 to k-1, k+1 to n; do i=k+1 to n-1;
  3. 起始值 TO 结束值 BY 步长:do i=n to 1 by -1; do i=1 to 10 by 1, ; do count=2 to 8 by 2;
  4. 使用UNTIL/WHILE语句结束循环:do i=2 to 20 by 2 until((x/3)>y);

俗话说得好——Talk is cheap,show me your code !
举个例子看看
在这里插入图片描述
图中的DO循环意为:起始值为1,停止值为9,步长0.5,当且仅当 i < 4时执行循环
其中output语句意为在每次 ix的迭代之前,将其输出到数据集中作为一个观测(对象),循环一共执行了六次,所以xi被输出了六次。
在这里插入图片描述
UNTIL 以及 WHILE的作用在上图可见一斑,接下来仔细解释以上二者

DO UNTIL

关于DO UNTIL的特点如下:

  1. UNTIL后的条件为真时,循环结束
  2. 每次循环结束后检查条件是否为真
    在这里插入图片描述

DO WHILE

关于DO WHILE的特点如下:

  1. WHILE后的条件为真时,执行循环
  2. 在每次循环开始之前检查条件是否为真
    举个例子:
    在这里插入图片描述

注: 这里需要注意的是UNTIL与WHILE的检查条件的时机——UNTIL为结束后、WHILE为结束前,如上述两个例子中,当n累加到4并准备进入下一个循环时
UNTIL会在n+1后进行检查条件(n>=5),故UNTIL输出到4即截止,此时循环结束后n=5未被输出到数据集中。
而在WHILE循环中,n=4进入循环时首先接受一次检查,输出n=4后n+1,再次检查条件(n<=5)为真,即能进入循环并输出n=5,此时循环结束后n=6未被输出到数据集中(output在n+1前)

判断结构

IF THEN/ELSE

SAS程序中的循环结构通常为以下句式:

IF expression THEN statement;
<ELSEstatement;>

其中 expression 指代判断条件,statement指代执行语句,可以是一句或者由DO-END结构所包围的执行语句
ELSE及其之后的执行语句可以不存在。
举个例子:
在这里插入图片描述
解释一下:Input语句指示程序连续读取cards后的数据作为x的变量值,每次读取时执行下列语:判断x是否大于五,如果是就输出y变量(x的平方)。判断结束后输出z变量(x+3),put语句为提示将x与y的值输出到LOG窗口中

注意事项:IF后的判断语句可以是一个判断句或者是多个由逻辑词链接的判断句组成的判断句(如:if status='OK' and type=3 then count+1

此外,IF语句还有选择观测(对象)的作用,通常用于SET语句后。因为此部分不属于严格意义上的判断结构,个人将其理解为对数据的选择,所以不在此章多讲。关于此部分内容(数据的分割、筛选等等)我会在下一节仔细讲述。
下节再见,这次我不会鸽了

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值