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

Sas 如果数据步骤中缺少列,则发出警告,sas,Sas,我最近遇到一个问题,我使用数据步骤创建输出文件,其中一列被重命名。正常执行的数据步骤使用空值填充现在缺失的列,没有任何错误或警告。它确实在日志中添加了一条注释,指出某个变量未定义,但除此之外,没有任何迹象表明有任何错误 在这种情况下,是否有必要强制数据步骤出错,或者至少给出更明显的警告 将输出文件中的预期变量列表放入数据步骤中的keep语句(或输出数据集上的keep=子句),并设置选项dkrocond=error在运行数据步骤之前。这是一个非常古老的选项(它至少可以追溯到SAS 9.1.3),因

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


在这种情况下,是否有必要强制数据步骤出错,或者至少给出更明显的警告

将输出文件中的预期变量列表放入数据步骤中的keep语句(或输出数据集上的keep=子句),并设置
选项dkrocond=error在运行数据步骤之前。这是一个非常古老的选项(它至少可以追溯到SAS 9.1.3),因此它应该在您的场景中工作

如果输入数据集中缺少变量,也可以通过设置
选项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
一起使用,因此甚至可以在纯宏代码中执行此类检查,即不实际运行数据步骤或过程。

有一个未记录的系统选项,它会将有问题的注释变成错误,包括未初始化的注释。我觉得它很方便

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.

若不初始化变量,则会发出带有默认设置的注释。也许会对你有所帮助。使用sas宏如何?这似乎很简单。不幸的是,我使用的是9.3,所以varinitchk不存在,但我将尝试使用dsoptions。谢谢此选项适用于哪些版本的SAS?@user667489所有这些,至少是当前使用的所有。此选项会将哪些注释转换为错误?我不怀疑它会在这种情况下触发,但我担心它也会在其他不一定会给提问者带来问题的笔记上触发。@user667489查看Joe刚才在问题答案中添加的列表,这是一个重复的列表。默认情况下,我将note2err保持为打开状态,并清除任何未通过的内容。干净的原木是值得的。