楼主: zsm4444
2744 15

[问答] 如何创建各个年份的累计数值!!!大神求教!! [推广有奖]

11
chenys625 发表于 2013-10-8 15:15:10
zsm4444 发表于 2013-9-30 21:31
能不能具体写出个编码给我,谢谢了啊!大神!
去看一下sum+的用法  很容易的

12
Actree 发表于 2013-10-8 16:58:19
data one;
        input Date $ Tele Fuel Elec;
cards;
01Jan89   40.27   151.23  50.44
01Feb89   49.29  144.29  44.50
01Mar89   91.50   72.75  40.67
01Apr89   93.71   49.63  36.04
01May89   16.64   33.22  39.79
01Jun89   34.15   22.04  26.47
01Jul89  172.48  118.30  44.86
01Aug89   79.44   18.45  29.28
01Sep89   69.02   23.72  33.53
01Oct89   29.00   27.62  30.07
01Nov89   82.75   65.40  29.99
01Dec89   61.50   99.62  36.88
01Jan90  139.13  122.43  77.90
01Feb90   92.83  105.94  26.58
01Mar90  104.50   69.06  22.75
01Apr90  137.95   44.77  22.00
01May90  120.63   39.09  22.87
01Jun90  145.17  125.01  63.39
01Jul90   58.56   16.45  27.28
01Aug90   78.68   17.22  23.17
01Sep90   21.79   18.78  32.51
01Oct90  195.02   81.05  59.97
01Nov90   71.52   58.76  38.19
01Dec90   72.85  106.69  33.48
01Jan91  123.68  157.71  36.02
01Feb91  111.39  109.77  99.08
01Mar91   70.92   90.58  26.98
01Apr91  118.07   62.41  30.51
01May91   57.80   53.98  33.63
01Jun91   69.11   27.24  24.35
01Jul91  269.06   19.02  26.13
01Aug91   56.79   18.53  23.24
01Sep91   21.17   23.13  21.46
01Oct91   50.00   80.78  28.44
01Nov91   52.57   80.78  28.44
01Dec91  141.12  117.84  42.99
01Jan92   39.39  141.13  28.66
01Feb92   57.86  107.21  28.51
01Mar92   53.69   74.86  21.84
01Apr92  151.33   71.36  82.99
01May92   47.50   24.69  28.22
01Jun92   45.32   23.06  18.69
01Jul92   60.98   16.21  32.52
01Aug92   45.25   19.60  30.20
01Sep92   44.21   19.60  27.59
01Oct92   43.20   27.40  26.03
01Nov92   18.51   60.17  34.29
01Dec92   62.96  134.99  38.11
;

data two;
        set one;
        year=substr(Date,6,2);
        Total=sum(Tele,Fuel,Elec);
run;

data three;
        set two;
        retain teletotal fueltotal Electotal gtotal 0;
        by year;
        if first.year then do;
                teletotal=0;
                fueltotal=0;
                Electotal=0;
                gtotal=0;
        end;
        teletotal+tele;
        Fueltotal+Fuel;
        Electotal+Elec;
        Gtotal+Total;
        if last.year then output;
        keep Date teletotal fueltotal Electotal gtotal;
run;

13
chinaeu 发表于 2013-10-9 12:02:56
牛人啊,榜样!

14
chinaeu 发表于 2013-10-9 12:03:57
顶贴是个好习惯

15
龙潭丰乐 学生认证  发表于 2013-10-9 22:01:51
  1. data quan1;
  2. set quan;
  3. year=year(date);
  4. array x(3)        Telephone_cost  Fuel_cost Electricity_cost;
  5.   array y(3)Telephone_Cumulative  Fuel_Cumulative  Electricity_Cumulative(0 0 0);
  6.      if mod(_n_,12)^=0 then  do;
  7.             do i=1 to 3;
  8.                  y(i)+x(i);
  9.              end;
  10.                          end;
  11.     else do ;       
  12.          do i=1 to 3;
  13.                  y(i)+x(i);
  14.              end;
  15.      output;
  16.           y(1)=0;y(2)=0;y(3)=0;
  17.          end;
  18.          drop i  date Telephone_cost  Fuel_cost Electricity_cost;
  19. run;
  20. data quan2;
  21. set quan1;
  22.   Totalcost_Cumulative=Telephone_Cumulative+ Fuel_Cumulative+ Electricity_Cumulative;
  23. run;
复制代码

16
龙潭丰乐 学生认证  发表于 2013-10-9 22:46:03
利用转置的方法求得,虽然方法比较拙略,但也是一种思路吧
  1. data quan1;
  2. set quan;
  3.   year=year(date);
  4.   month=month(date);
  5.   drop date;
  6. run;
  7. proc transpose data=quan1 out=quan2;
  8.   var Telephone_cost  Fuel_cost Electricity_cost;
  9.    id month;
  10.     by year;
  11. run;
  12. data quan3;
  13.   set quan2;
  14.    _sum=_1+_2+_3+_4+_5+_6+_7+_8+_9+_10+_11+_12;
  15. run;
  16. proc transpose data=quan3 out=quan4;
  17. var _sum;
  18. id  _NAME_;
  19. by year;
  20. run;
  21. data quan4;
  22.   set quan4(rename=( Telephone_cost=Telephone_Cumulative  Fuel_cost= Fuel_Cumulative
  23.                  Electricity_cost= Electricity_Cumulative));
  24.    drop _NAME_;
  25.       Totalcost_Cumulative=Telephone_Cumulative+ Fuel_Cumulative+ Electricity_Cumulative;
  26. run;
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 06:13