SAS: Do 实现循环

SAS中使用DO END可以实现执行一组语句,或者实现循环。

 

1. 实现执行一组语句

语法如下:

DO;

 SAS statements

END;

在DO和END之间可以有多条SAS语句

 

2. 循环

比如有一项复利投资,每年的收益是4%,初始资金为1000元,问10年后回报是多少?

程序如下:

data tmp1;
   Amount=1000;
   Rate=0.04;
   do year=1 to 10;
     Amount+Amount*Rate;
   end;
run;

proc print data=tmp1;
run;

其中do和end之间的是循环体,循环条件是year=1 to 10,即year会遍历1至10之间的所有值。最后year变成11的时候,不满足循环条件,结束。

 

输出如下:

ObsAmountRateyear
11480.240.0411

现在有一个问题就是结果数据集中只有一条观测,如果想把每一次循环时的值都存起来怎么办? 可以在循环体中加一个output语句,示例如下:

data tmp1;
   Amount=1000;
   Rate=0.04;
   do year=1 to 10;
     Amount+Amount*Rate;
	 output;
   end;
run;

proc print data=tmp1;
run;

输出如下:

ObsAmountRateyear
11040.000.041
21081.600.042
31124.860.043
41169.860.044
51216.650.045
61265.320.046
71315.930.047
81368.570.048
91423.310.049
101480.240.0410

注意,输出中只有10条记录,Year最大值为10,其实是output语句将原来的结果覆盖了。

 

倒序循环条件

循环条件可以倒序的,语法为 index-variable=5 to 1 by -1,示例如下:

 

index-variabel为给定值

可以指定index-variable为固定某些值,示例:

注意,这些给定值可以是字符,也可以数字,如果是字符必须加引号。 多个值之间用逗号隔开。

 

嵌套循环

DO END可以嵌套在DO END之中,比如下面的3*3乘法表

 

do until和do while

循环条件可以是do until(express) 或者 do while(express)。

其中前者表示达到条件时,循环结束,这里的循环体至少执行一次(它是先执行循环体,再判断条件);

后者表示,只要满足条件,就继续循环,这里的循环体可能一次都不会执行(它是先判断条件,再执行循环体)。

例如计算从1加到100,两种方法如下:

 

其中while(i <= 100)表示只要 i 小于等于100,就继续循环; unilt(i > 100)表示只要 i 大于100就停止循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值