在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 遇到没有记录可读入的 set
或 input
时,它会在 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;
然后不管有没有数据他们都会操作。
我喜欢的另一个选项是循环读取数据集,但在这种情况下,它可能比有用的工作更多。
读取包含零条记录的数据集时,数据步骤不会运行任何 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 遇到没有记录可读入的 set
或 input
时,它会在 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;
然后不管有没有数据他们都会操作。
我喜欢的另一个选项是循环读取数据集,但在这种情况下,它可能比有用的工作更多。