有条件地跳过SAS DIS中的转换

时间:2015-06-10 17:03:14

标签: sas sas-dis

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

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

非常感谢

2 个答案:

答案 0 :(得分:3)

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

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

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

%end;
%mend dummy;
%dummy;

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

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

答案 1 :(得分:2)

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

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

例如:

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

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