仅使用非缺失观察值填充特定范围的缺失值

时间:2015-11-02 13:49:41

标签: excel sas formula

您好我想知道如何将其添加到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-12个月范围内的空单元格,其中0-11月份的余额总和为0-12个月的下一个集合。

在Excel中,我可以使用此格式来完成此操作。这里假设余额的列号是A,月份是B,而未完成的是C:

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

然后只需将公式拖动到移动总和

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

2 个答案:

答案 0 :(得分:0)

可以使用$anomius = "your_file.php"; /** @define "$anomius" "/absolute/path/to/your/php/file" */ require_once($anomius);

完成移动总和
PROC EXPAND

你的问题并不完全清楚,需要重新格式化,但proc expand data=have out=want; by <by variables>; convert balance = outstanding / transform=(movsum 12); run; 会做你想做的事。您可以阅读SAS website上的语法。

答案 1 :(得分:0)

我已将输入数据设置为:

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;

此致 阿米尔。