【问题标题】:Fill Missing Values for a certain range with only Non-Missing Observation仅使用非缺失观测值填充特定范围的缺失值
【发布时间】:2015-11-02 13:49:40
【问题描述】:

您好,我想知道如何将其放入 SAS 代码中:

我的数据如下所示:

Balance | Month | Outstanding
--------+-------+-------------- 
1000    | 0     |
200     | 1     |   
300     | 2     |
400     | 3     |
500     | 4     |
800     | 5     |
750     | 6     |
650     | 7     |
740     | 8     |
580     | 9     |
650     | 10    |
523     | 11    | 7093
654     | 12    |
458     | 0     |
789     | 1     |
852     | 2     |
236     | 3     |
1258    | 4     |
4528    | 5     |
78520   | 6     |
1258    | 7     |
4821    | 8     |
15870   | 9     |
1587    | 10    |
1599    | 11    | 111776
6520    | 12    |   

我希望它看起来像这样:

Balance | Month | Outstanding
--------+-------+------------
1000    | 0     | 7093
200     | 1     | 7093
300     | 2     | 7093
400     | 3     | 7093
500     | 4     | 7093
800     | 5     | 7093
750     | 6     | 7093
650     | 7     | 7093
740     | 8     | 7093
580     | 9     | 7093
650     | 10    | 7093
523     | 11    | 7093
654     | 12    | 7093
458     | 0     | 111776
789     | 1     | 111776
852     | 2     | 111776
236     | 3     | 111776
1258    | 4     | 111776
4528    | 5     | 111776
78520   | 6     | 111776
1258    | 7     | 111776
4821    | 8     | 111776
15870   | 9     | 111776
1587    | 10    | 111776
1599    | 11    | 111776
6520    | 12    | 111776

基本上,我想用 0-11 个月的余额总和填充整个 0-12 个月范围内的空白单元格,并为下一组 0-12 个月执行此操作。

在 Excel 中,我可以使用这个公式来做到这一点。这里假设 balance 的列号是 A,Month 是 B,outstanding 是 C:

=IF(B2=0,SUM(A2:A13),C1)

然后只需将公式向下拖动即可获得移动总和

我只是不确定如何在 SAS 代码中创建等效项。

【问题讨论】:

    标签: excel sas formula


    【解决方案1】:

    我已将输入数据设置为:

    data have;
      input balance month outstanding;
      datalines;
    1000     0      .
    200      1      .   
    300      2      .
    400      3      .
    500      4      .
    800      5      .
    750      6      .
    650      7      .
    740      8      .
    580      9      .
    650      10     .
    523      11     7093
    654      12     .
    458      0      .
    789      1      .
    852      2      .
    236      3      .
    1258     4      .
    4528     5      .
    78520    6      .
    1258     7      .
    4821     8      .
    15870    9      .
    1587     10     .
    1599     11     111776
    6520     12     .  
    ;
    

    您可以将数据与自身组合以获得所需的结果,如下所示:

    data want;
      set have(where=(outstanding ne .));
    
      do until (month=12);
        set have(drop=outstanding);
        output;
      end;
    run;
    

    【讨论】:

      【解决方案2】:

      移动总和可以用PROC EXPAND:

      proc expand data=have
                  out=want;
         by <by variables>;
         convert balance = outstanding / transform=(movsum 12);
      run;
      

      您的问题并不完全清楚,需要重新格式化,但proc expand 会做您想做的事。你可以阅读SAS website上的语法。

      【讨论】:

      • 嗨,我尝试使用 proc expand,但是,我希望所有单元格都具有相似的值,而不是累积总数。你知道我应该怎么做吗?谢谢。
      猜你喜欢
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多