在SAS

时间:2017-07-25 23:23:25

标签: arrays sas accumulator

我有一个数据文件,有20个学生的五个考试成绩。每个考试成绩分别为68,70,72,74,76。

我从.dat文件中读取此数据,但需要计算每个学生传递的测试数量。这很容易使用if语句,但我需要在这里使用数组。所以我的代码看起来像

data test_scores;
infile '---------------------------------';
input t1 t2 t3 t4 t5;
array test_scores{5} t1 t2 t3 t4 t5;
do n=1 to 5;
    if tests[i] =

这是我被困的地方。我意识到我可以说,如果索引是1并且测试分数大于68,则添加到累加器变量tests_passed然后为所有5做,但这似乎是多余的,我开始的地方。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

由于您的得分截止值均匀分布,您可以这样做:

do n=1 to 5;
    if test_scores[n] >= 66 + 2 * n

但那不是那么可扩展,所以也许更好的方法是获得一系列截止分数:

array pass_cutoff{5} 68 70 72 74 76;
do n=1 to 5;
    if test_scores[n] >= pass_cutoff[n]

这样,如果截止值发生变化,您只需更新数组初始化,一切仍然有效。