我想知道是否有一种方法可以检测数据集是否为空,即它没有观察值。或者换句话说,如何获得特定数据集中的观察值数量。
这样我就可以写一个If语句来设置一些条件。
谢谢。
发布于 2011-04-14 18:07:14
使用PROC SQL很容易。执行计数并将结果放入宏变量中。
proc sql noprint;
select count(*) into :observations from library.dataset;
quit;
发布于 2011-04-14 21:59:03
有很多不同的方法,我倾向于在open()
和attrn()
中使用宏函数。下面是一个简单的例子,大多数情况下效果都很好。如果您要处理数据视图或更复杂的情况,如具有标记为删除或活动where子句的记录的数据集,则可能需要更健壮的逻辑。
%macro nobs(ds);
%let DSID=%sysfunc(OPEN(&ds.,IN));
%let NOBS=%sysfunc(ATTRN(&DSID,NOBS));
%let RC=%sysfunc(CLOSE(&DSID));
&NOBS
%mend;
/* Here is an example */
%put %nobs(sashelp.class);
发布于 2013-06-29 15:00:10
当我们有很大的数据集时,Proc sql的效率很低。虽然使用ATTRN是一种很好的方法,但这可以在基本sas内完成,下面是一个有效的解决方案,只需读取一行即可提供数十亿行的of:
data DS1;
set DS nobs=i;
if _N_ =2 then stop;
No_of_obs=i;
run;
https://stackoverflow.com/questions/5658994
复制相似问题