如果数据步骤中缺少列,则发出警告

时间:2015-07-08 17:11:52

标签: sas

我最近遇到一个问题,我使用数据步骤创建输出文件,其中一个列已重命名。执行的数据步骤通常用空值填充现在缺失的列,没有任何错误或警告。它确实在日志中添加了一个注释,表示变量未定义,但没有任何迹象表明存在任何错误。

是否有强制数据步骤出错或至少在这种情况下发出更明显的警告?

2 个答案:

答案 0 :(得分:1)

有一个未记录的系统选项可将有问题的注释转换为错误,包括未初始化的注释。我发现它非常方便。

1    options dsoptions=note2err;
2    data a;
3     y=x;
4    run;

ERROR: Variable x is uninitialized.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.A may be incomplete.  When this step was stopped there were 0 observations and 2 variables.

答案 1 :(得分:0)

将输出文件中的预期变量列表放在数据步骤中的keep语句中(或输出数据集上的keep =子句),并在运行数据步骤之前设置option dkrocond = error;。这是一个非常古老的选择(它至少可以回溯到SAS 9.1.3),所以它应该适用于你的场景。

如果输入数据集中缺少变量,您也可以通过设置option dkricond = error;来触发类似的错误消息。

如果您愿意,也可以将其中任何一个设置为warn

此外,如果您想要一种更通用的方法来检测数据集中是否存在变量,您可以尝试这样的方法:

data _null_;
    dsid = open('sashelp.class');
    vnum1 = varnum(dsid,'varname');
    vnum2 = varnum(dsid,'sex');
    rc = close(dsid);
    put vnum1= vnum2=;
run;

这里的关键行为是varnum函数为打开的数据集中不存在的变量返回0。上面使用的所有函数都可以与%sysfunc一起使用,因此甚至可以在纯宏代码中执行此类检查,即无需实际运行数据步骤或proc。