SAS删除表(如果观测值为0)

SAS删除表(如果观测值为0),sas,Sas,是否有一个程序可以检查一个表是否有0个观察值,如果有,则将其删除?我认为除了手动检查和删除每个表之外,还有更简单的方法。我正在使用一个loop命令,我用它生成的大多数表都有数据,但有几个表的观测值为0 如果有人能提供帮助,谢谢。假设您没有任何理由不信任元数据,您可以查看dictionary.tables: proc sql; select memname from dictionary.tables where libname='WORK' and nobs=0; quit; 例如,您可

是否有一个程序可以检查一个表是否有0个观察值,如果有,则将其删除?我认为除了手动检查和删除每个表之外,还有更简单的方法。我正在使用一个loop命令,我用它生成的大多数表都有数据,但有几个表的观测值为0


如果有人能提供帮助,谢谢。

假设您没有任何理由不信任元数据,您可以查看dictionary.tables:

proc sql;
select memname from dictionary.tables 
  where libname='WORK' and nobs=0;
quit;
例如,您可以将其拉入宏变量并删除PROC SQL或PROC DATASETS语句中的表

proc sql;
select memname into :dellist separated by ' ' from dictionary.tables 
  where libname='WORK' and nobs=0;
quit;

proc datasets nolist;
delete &dellist;
quit;

假设您没有任何理由不信任元数据,可以查看dictionary.tables:

proc sql;
select memname from dictionary.tables 
  where libname='WORK' and nobs=0;
quit;
例如,您可以将其拉入宏变量并删除PROC SQL或PROC DATASETS语句中的表

proc sql;
select memname into :dellist separated by ' ' from dictionary.tables 
  where libname='WORK' and nobs=0;
quit;

proc datasets nolist;
delete &dellist;
quit;

您可能有比循环和创建空表更好的解决方案,这取决于您正在做什么;通常,分组处理优于循环代码。根据您所做的工作,您可能有比循环和创建空表更好的解决方案;通常,按组处理优于循环代码。如果在proc sql中使用“delete from”删除行,或者在数据步骤中使用“remove”和“modify”,则应使用NLOB(逻辑观察数)而不是NOB。这就是我最终使用的。很抱歉格式化了。proc-sql-noprint;从libname='WORK'和nobs eq 0的dictionary.tables中选择memname-to:deletelist,以“”分隔;退出proc数据集nolist;删除&删除列表;退出如果在proc sql中使用“delete from”删除了行,或者在带有modify的数据步骤中使用“remove”,那么应该使用NLOB(逻辑观察数)而不是NOB。这就是我最后使用的。很抱歉格式化了。proc-sql-noprint;从libname='WORK'和nobs eq 0的dictionary.tables中选择memname-to:deletelist,以“”分隔;退出proc数据集nolist;删除&删除列表;退出