4

我想知道是否可以在 SAS DIS 中使用条件启动转换来根据给定表是否为空(无行)有条件地绕过另一个转换。链接似乎表明条件必须基于参数变量的值。

我的一个想法是在用户编写的代码转换中创建一个参数值,并根据表的状态为其分配不同的值,但这似乎很复杂且不优雅,我不确定它是否会起作用。有没有更简单的方法?

非常感谢

4

2 回答 2

3

要在不添加任何用户编写的转换的情况下完成此操作,也许可以优雅地尝试我通常使用的方法。首先,复制@cmjohns ( https://stackoverflow.com/a/5664379/4653284 )发布的 numobs 宏,并将其添加到作业流的 precode 中。之后转到需要根据观察跳过的起始转换,然后右键单击以获取该转换的属性选项卡。然后转到“预编码和邮政编码”选项卡并添加以下代码:

%macro dummy;
%if %nobs(&SYSLAST) gt 0 %then %do;

完成后,根据观察计数转到最后一个要跳过的转换,然后右键单击以获取转换的属性,然后转到 Precode Postcode 选项卡并添加以下代码:

%end;
%mend dummy;
%dummy;

如果只需要跳过 1 个转换,那么您可以在该单个转换的相同预编码和邮政编码选项卡中添加上面提供的邮政编码和预编码,以根据观察计数跳过它。

注意:SAS DI Studio 4.8 有条件转换可以解决同样的问题。但是对于之前的 DI 工作室版本,我们必须编写代码来获得转换的条件排除。

于 2015-06-11T06:30:25.823 回答
2

最初的问题询问如何判断一个表是否根本不存在,这个答案解决了这个问题。它无助于判断数据集是否有零行。


由于您的链接表明它只是%eval您放入该框中的任何内容,因此您可以使用该exist功能。

例如:

%put %sysfunc(exist(sashelp.class));
%put %sysfunc(exist(sashelp.classzas));

第一个在我的机器上返回 1(真),后一个返回 0(假)。

于 2015-06-10T17:26:42.790 回答