在SAS中,当SET有零条记录时,如何在一个数据步骤中至少输出一行?

In SAS, how to output at least one line in a data step when SET has zero records?

读取包含零条记录的数据集时,数据步骤不会运行任何 put 语句。

data test;
    set SASHELP.class end=eof;
    where 1=0;
    *output;
    if _N_=1 then put '[';
    put '"' name '",';
    if eof then put name ']';
    *output;
    run;

是否可以强制其中一些?

我这样做的原因是我正在使用 put 语句创建 json 文件
(我使用的是 SAS9.3,还没有访问 proc json 的权限。)

当数据集为空时,json 文件完全为空。我需要它们至少包含一个空数组 [].

这意味着我至少需要这两行 运行 :

if _N_=1 then put '[';
if eof then put name ']';

目前我不得不将其分为 3 个数据步骤,一个是头部 (_N_=1),一个是记录,最后一个是尾部 (eof=1) .也许有更短的解决方案?

这里发生的是,当 SAS 遇到没有记录可读入的 setinput 时,它会在 that 处终止数据步骤观点。因此,由于 set 位于循环的顶部,它会立即终止。

如果你将你想要的两个条件移到顶部,这将起作用,例如:

data test;
  if _n_=1 then put '[';
  if eof then put ']';
  set SASHELP.class end=eof;
  where 1=0;
  *output;
  put '"' name '",';
  *output;
run;

然后不管有没有数据他们都会操作。

我喜欢的另一个选项是循环读取数据集,但在这种情况下,它可能比有用的工作更多。