【问题标题】:SAS continuous loopSAS 连续循环
【发布时间】:2013-12-06 01:54:15
【问题描述】:
data m1;
set t1;
do i = 1 to 29;
    set t2 point=i;
end;
run;

data test;
do i=1 to 29;
    set t2 point=i;
end;
run;

我可以理解为什么它是数据测试的连续循环,但我不知道如何解释为什么数据 m1 不是无限循环。 (t1 有 29 条记录)

有人有什么想法吗?感谢您的帮助。

【问题讨论】:

    标签: loops sas continuous


    【解决方案1】:

    M1 步中的第一个 SET 语句定义了 DATA 步何时停止。它看到 T1 数据集的结尾并停止。

    【讨论】:

    • 那么,是不是意味着只有data step中的第一个SET会决定数据step的结束呢?谢谢。
    【解决方案2】:

    只要出现文件结束条件(当不再存在记录时尝试从文件或数据集读取),数据步骤就会“停止”。

    在您的第一个示例中,数据步骤从名为 t1 的表(数据集)中读取记录,然后从表 t2 中读取 29 条记录。输出表m1 将具有与t1 中相同数量的记录。一旦该步骤尝试从t1 读取新记录,该步骤将立即停止。

    您的第二个示例永远运行,因为它从未遇到文件结束条件。它将继续输出记录,直到您用完磁盘空间或中断该步骤。

    【讨论】:

      【解决方案3】:

      其他人说的都是对的。 SAS 数据步骤是一个隐式循环,将在满足特定条件时结束。我认为第二个数据步骤是连续无限的,因为在 do 循环之外没有 set dataset 语句。因此,数据步循环不知道关于文件结尾 (EOF) 的任何信息。 do 循环内的 point 没有观察到 EOF,因此它无法停止。

      data test 中,用于结束无限循环的条件触发器是set 语句在do 循环之外,因为数据集具有有限数量的条目。这意味着EOF是可达的。一旦数据集循环被告知已经到达 EOF 并且不能再读取,它将结束循环。

      此外,还可以使用其他触发器,例如stop; 语句或提示用户按下某些键以结束循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 2020-03-24
        • 2014-04-22
        • 2016-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多