SAS中文论坛
标题:
SAS 循环语句应用实例
[打印本页]
作者:
BioSas
时间:
2016-5-16 03:14
标题:
SAS 循环语句应用实例
SAS 循环运算例子
假设2块钱可买一瓶啤酒,把酒喝完后,2个空啤酒瓶或4个啤酒瓶盖可换1瓶啤酒,1个空啤酒瓶加上2个啤酒盖也可换1瓶啤酒。在一群人不断喝酒换酒的情况下,请计算从2元到1000元每递增2元可喝到的最大啤酒数目。注:最后仅剩下无法交换的1个空瓶和1个瓶盖。
data LoopingOutput (keep=Dollar BeerTotal);
do Dollar=2 to 1000 by 2;
Beer=floor(Dollar/2);
EmptyBottle=Beer;
Cap=Beer;
BeerTotal=Beer;
*** 处理2空瓶或4瓶盖换1瓶酒之情形: ;
do while (EmptyBottle>=2 or Cap >=4);
*** 计算上次剩下的空瓶和盖子换的新啤酒瓶数: ;
Beer=floor(EmptyBottle/2);
Beer=Beer+floor(Cap/4);
*** 累加啤酒总数: ;
BeerTotal=BeerTotal+Beer:
*** 计算新增加的空瓶加上前一次没交换成的老空瓶数,及盖子数: ;
EmptyBottle=EmptyBottle - floor(EmptyBottle/2) * 2 + Beer;
Cap=Cap - floor(Cap/4)*4 + Beer;
end;
*** 处理1空瓶加2瓶盖换1瓶酒之情形: ;
do while (EmptyBottle=1 and Cap>=2);
Beer=0.5 + floor(Cap/2)*0.5;
EmptyBottle=Beer;
Cap=Cap - floor(Cap/2)*2 + Beer;
BeerTotal=BeerTotal+Beer;
end;
*** 输出结果: ;
output;
end;
run;
SAS 软件在我办公室微机上用时不到 0.01秒完成计算并输出 500行结果。下面是部分结果:
钱数 (元) 最大啤酒数
2 1
4 5
6 9
8 13
10 17
50 97
100 197
500 997
1000 1997
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2