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