使用 do until 循环将数值增加到刚好高于标准值并停止增加到低于 SAS 中的值

Increment Numeric Value to just above criterion value and stop incrementing below the value in SAS using do until loop

我刚开始在 SAS 中使用宏和数组,是 SAS 的初学者。我需要你的指导和建议,以最有效的方式增加小于 65 分的分数。我有一个数据集,其中包含 10 个关于学生 ID 和考试分数的观察结果。我有以下代码来增加小于 65 的测试分数值。是否有另一种方法可以将小于 65 的测试分数值增加到略高于 65,以便在该值等于或大于 65 时停止。

data scores;
set scores;
array Test{i} Test_1-Test_5;
Test{i} = 1;
do i=1 to 5;
do until(Test{i}>65);
   Test{i} = Test{i}+0.1;
end;

我收到此代码的错误:

Mixing of implicit and explicit array subscripting not allowed
There was 1 unclosed DO unblock

如果此代码中有任何错误,请告诉我。 谢谢你的时间。

让我们看看你的代码

data scores;
  set scores;
  array Test{i} Test_1-Test_5;
  Test{i} = 1;
  do i=1 to 5;
    do until(Test{i}>65);
      Test{i} = Test{i}+0.1;
    end;
  ??
??

不正确的地方:

  • 数据步骤不完整。这 ??应该替换为一个循环终止 end 和一个步骤结束 run
  • array语句
    • 数组不能声明为基于变量值动态调整大小,因此
      array test{i} 不正确
    • 未指定大小的数组可以与显式 SAS variable list 相关联。数组的大小自动是列表中变量的数量。例如:
      array test test1-test5;推荐这个问题。
    • 指定大小的数组。这会自动创建变量或将变量与数组相关联,例如
      array test(5);

隐式数组下标是旧版本 SAS 的一个未记录的工件,它允许遗留代码继续 运行。

涉及变量的数组声明的遗留形式
array Test{i} Test_1-Test_5;
应该避免。这种形式告诉 SAS,当数组 test 被名称引用时,只有要使用的数组索引在变量 i 中找到。不允许显式引用 test(<index>)

已使用以下代码更正的一些问题:

  1. 您声明的数组使用变量 i 作为维度。 i 直到外部 do 循环才被赋值。请改用通配符 *。这将告诉 SAS 根据数组中指定的变量数自动生成维度。

  2. Test[i]已赋值,但i尚未赋值。将 test[i] 放在外 do 循环中

  3. 您缺少外 do 循环的 end 语句。

代码:

data test;
    array Test[*] Test_1-Test_5;

    do i=1 to 5;
        Test[i] = 1;
        do until(Test[i]>65);
            Test[i] = Test[i]+0.1;
        end;
    end;

run;