1.DO 循环的基本格式如下:
do index-variable=start TO stop BY increment
sas statements
end;
index-variable 存储的是当前循环的值,默认increment是1,每次循环的增量是1;
如下:do i=1 to 5,i的取值分别是1,2,3,4,5
do j=2 to 12 by 2,j的取值分别是2,4,6,8,10,12;
也可以反向读取,如do i=5 to 1 by -1;
举例如下:
data finance;
Amount=1000;
Rate=.075/12;
do month= 1 to 12;
Earned+(amount+earned)*rate;
end;
runl
结果如下:
在上述程序中earned由于链接的是“+”,因此值都是保留到下一行,到第12月份仍然在执行循环,该循环完毕后month增至13,此时终止循环,因此输出的month=13;
do index-variable=value1,value2,value3.......;
sas statement;
end;
value1,value2,value3........要么全部是数值变量,要么全部是字符变量或者变量名(如果是变量值则取变量名里面每行的值进行计算)
举例如下:
结果如下:
2.DO loop循环嵌套
3.DO UNTIL 循环
do until(condition)
sas statement;
end;
condition直到循环的底部才进行评估;所以do until循环至少循环一次;如果condition评估为真,则循环终止。
举例如下:
4.DO WHILE循环
do while(condition)
sas statement;
end;
与do unitl 循环不同的是,do while循环是在每次循环开始前进行评估,评估为真才开始执行循环。
举例说明:
如上所示,如果初始的capital小于5000,则该循环不会执行
5.可以将do index-variable=start to stop 和unitl或者while条件联用,类似于and的关系都满足执行标准则执行循环,任意条件满足终止即终止循环,基本格式如下:
如果选择用until(expression)在do循环底部进行评估,循环至少执行一次;选择用while(expression)在do循前评估,则如果不满足条件一次循环都不执行。
如上程序所示,循环超过10次或在capital超过5000均停止执行循环。
6.创建样本数据
可以使用do loop循环来执行对读取数据进行抽样
当使用point来指定行数读取的时候,需要使用stop避免结束读入数据的指针而引起连续读入该行数据,由于STOP会停止执行DATA步则不会将PDV的数据输出至输出数据集,因此需要加上OUTPUT来输出数据,将OUTPUT放入循环中则每次循环的数据都输出,如果放至循环外则只有最后一行数据输出。