【问题标题】:How to sum a variable and record the total in the last row using SAS如何使用 SAS 对变量求和并在最后一行记录总数
【发布时间】:2015-10-31 14:54:03
【问题描述】:

我有一个如下所示的数据集:

Name   Number
a      1
b      2
c      9
d      6
e      5.5
Total  ???

我想计算变量Number的总和,并将总和记录在最后一行(对应于Name = 'total')。我知道我可以使用 proc 方法执行此操作,然后将输出合并回此文件。但这似乎不是很有效。谁能告诉我是否有更好的方法。

【问题讨论】:

    标签: sas


    【解决方案1】:

    您可以在数据集中执行以下操作:

    data test2;
    drop sum;
    set test end = last;
    retain sum;
    if _n_ = 1 then sum = 0;
    sum = sum + number;
    output;
    if last then do;
    NAME = 'TOTAL';
    number = sum;
    output;
    end;
    run;
    

    只需要遍历数据集一次

    【讨论】:

      【解决方案2】:

      通过报告程序很容易得到。

      data have;
      input Name $  Number ;
      cards;
      a      1
      b      2
      c      9
      d      6
      e      5.5
      ;
      
      proc report data=have out=want(drop=_:);
      rbreak after/ summarize ;
        compute after;
           name='Total';
        endcomp;
      run;
      

      【讨论】:

        【解决方案3】:

        以下代码使用DOW-Loop(DO-Whitlock)通过读取一次观察结果,输出每个结果,最后输出总数:

        data want(drop=tot);
          do until(lastrec);
            set have end=lastrec;
            tot+number;
            output;
          end;
          
          name='Total';
          number=tot;
          output;
        run;
        

        【讨论】:

          【解决方案4】:

          对于提供的所有数据步解决方案,请务必牢记“长度”因素。确保它同时容纳“总计”和原始值。

          proc sql;
          select max(5,length) into :len trimmed from dictionary.columns WHERE LIBNAME='WORK' AND MEMNAME='TEST' AND UPCASE(NAME)='NAME';
          QUIT;
          
          data test2;
          length name $ &len;
          set test end=last;
          ...
          run;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-27
            • 1970-01-01
            • 2021-10-21
            • 2015-08-28
            • 1970-01-01
            相关资源
            最近更新 更多