我最近遇到一个问题,我使用数据步骤创建输出文件,其中一个列已重命名。执行的数据步骤通常用空值填充现在缺失的列,没有任何错误或警告。它确实在日志中添加了一个注释,表示变量未定义,但没有任何迹象表明存在任何错误。
是否有强制数据步骤出错或至少在这种情况下发出更明显的警告?
答案 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。