Arrays SAS:直到循环和下降观察
我的数据集具有以下变量: 实际值Arrays SAS:直到循环和下降观察,arrays,loops,sas,Arrays,Loops,Sas,我的数据集具有以下变量: 实际值 期望 首先,我想创建一个新变量“Ratio”=sum(实际)/sum(预期)。对于第一个观察,我希望这个表达式包括实际值和预期值的所有值。对于第二次迭代,我只想使用第二次观察和以后的结果重复这个表达式。然后对于第三次迭代,我想包括第三次观察和以后的观察 这是数据和公式的一个示例,它将在Excel中显示 actual expected ratio 15 33 =SUM(A2:$A$6)/SUM(B2:$B$6) 10
期望 首先,我想创建一个新变量“Ratio”=sum(实际)/sum(预期)。对于第一个观察,我希望这个表达式包括实际值和预期值的所有值。对于第二次迭代,我只想使用第二次观察和以后的结果重复这个表达式。然后对于第三次迭代,我想包括第三次观察和以后的观察 这是数据和公式的一个示例,它将在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”,依此类推
我想这也需要一个数组?提前感谢。您要求为自己编写代码,这是离题的(而不是要求帮助编写代码);然而,就技术而言,你确实有一个有趣的问题;我会解释这个技巧,如果你需要技巧方面的帮助,调整你的问题或者问一个新问题 如果可能的话,您希望在这里对数据进行反向排序。如果没有任何排序依据,您可以添加观察计数器:
data temp;
set have;
obs=_n_;
run;
或者,您可以使用点来反转数据集的顺序,尽管这稍微慢一些。这是后一种技术的基本形式——如果可以反向排序,则不需要do循环或set选项
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;
从这里你应该能够解决你的问题的其余部分。当然,之后您必须使用正确的排序方法重新排序。谢谢。我没有发布我的代码,因为我担心我采取了错误的方法。我将用您在脑海中描述的技巧再试一次。@kjay总是发布您的代码。请求代码方面的帮助是可以的,但请求从头开始的代码则不行。