SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3291|回复: 1
打印 上一主题 下一主题

SAS 循环语句应用实例

[复制链接]

2

主题

13

帖子

40

积分

新手上路

Rank: 1

积分
40
跳转到指定楼层
楼主
发表于 2016-5-16 03:14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

点评

海!外直播 t.cn/RxmJTrC 禁闻视频 t.cn/RxlbueX 人们对斯大林的评价:一个连言论都能治罪的政权,不要去相信它的任何宣传;一个连良心都能判刑的政权,不要去相信它的任何口号;一个枪口能对准平民的政权,不要去相信它   发表于 2017-4-30 15:39
分享到:  微信微信
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2024-11-22 08:30 , Processed in 0.112788 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表