2014-12-29 47 views
0

我的数据集有以下变量:SAS:Do Until循环和删除观察

实际
预计

首先,我想创建一个新的变量“比” = SUM(实际)/总和(预期)。对于第一个观察,我希望这个表达式包含Actual和Expected的所有值。对于第二次迭代,我只想使用第二次观察和之后的重复这个表达式。然后对于第三次迭代,我想包括第三次观察和之后。

这是数据和公式在Excel中的示例。

actual expected ratio 
15  33   =SUM(A2:$A$6)/SUM(B2:$B$6) 
10  50   =SUM(A3:$A$6)/SUM(B3:$B$6) 
20  64   =SUM(A4:$A$6)/SUM(B4:$B$6) 
60  77   =SUM(A5:$A$6)/SUM(B5:$B$6) 
45  81   =SUM(A6:$A$6)/SUM(B6:$B$6) 

其次,数据集可以有任何若干意见,所以我想表达将持续到“比”低于我手动指定的值。理想情况下,该计划还将包含创建第四个变量,其中包含从表达式中排除的观测值数量。因此,对于第一次观察,它将是'0',第二次观察'1',第三次观察'2'等等。

我想这也需要一个数组呢?提前致谢。

回答

0

你要求为你写代码,这是脱离主题(而不是要求你写代码的帮助);然而,就技术而言,你的确有一部分有一个有趣的问题;我会解释这种技巧,如果你需要技巧方面的帮助,请调整你的问题或问一个新问题。

如果可能的话,您要在这里执行的操作是对数据进行反向排序。如果它没有什么排序,您可以添加一个观察计数器:

data temp; 
    set have; 
    obs=_n_; 
run; 

或者你可以使用点逆序数据集,虽然这是有点慢。这是后一种技术的基本形式 - 如果您可以反向排序,那么您不需要执行循环或设置选项。

data want; 
    do obsnum = nobs to 1 by -1; 
    set have nobs=nobs point=obsnum; 
    act_sum+actual; *accumulator for actual; 
    exp_sum+expected; *accumulator for expected; 
    ratio=act_sum/exp_sum; 
    end; 
run; 

从这里你应该能够解决你的问题的其余部分。之后,您当然必须通过适当的排序方法重新排序。

+0

谢谢。我没有发布我的代码,因为我担心我采取了错误的做法。我会再次尝试你所描述的技术。 – kjay

+1

@kjay总是发布你的代码。寻求代码帮助是可以的,但从头开始寻求代码不是。 – Joe