对于这种性质的东西我已经看了很多,大多数来源都给出了计算观察量等的例子。
但我实际上只是一段简单的代码,它将检查数据集中是否有任何观察结果,如果满足该条件则程序需要正常继续,但如果条件不满足那么我想用一个变量来创建一个新的记录,说明数据集是空的。
我已经看到了可以实现这一目标的宏和SQL代码,但我想知道的是在SAS代码中可以做同样的事情吗?我知道下面的代码不起作用,但任何见解都会受到赞赏。
Data TEST;
length VAR1 $200.;
set sashelp.class nobs=n;
call symputx('nrows',n);
obs= &nrows;
if obs = . then VAR1= "Dataset is empty"; output;
Run;
答案 0 :(得分:1)
您可以通过始终附加带有空数据集消息的1行数据集来执行此操作,然后删除该消息(如果不适用)。
data empty_marker;
length VAR1 $200;
VAR1='Dataset is empty';
run;
Data TEST;
length VAR1 $200.;
set
sashelp.class nobs=n
empty_marker (in=marker)
;
if (marker) and _n_ > 1 then delete;
Run;
答案 1 :(得分:0)
我能想到的最简单的方法是使用nobs语句来检查记录的数量。诀窍是你不想实际读取空数据集。这将终止DATA Step并且不会设置nobs值。因此,您使用始终为false的if语句来检查观察次数。
data test1;
format x best. msg $32.;
stop;
run;
data test1;
if _n_ = 0 then
set test1 nobs=nobs;
if ^nobs then do;
msg = "NO RECORDS";
output;
stop;
end;
set test1;
/*Normal code here*/
output;
run;
因此,这将使用0填充nobs值.if子句看到0并允许您设置消息并输出该值。使用stop
然后终止DATA Step。在该检查之外,执行正常的数据步骤代码。由于第一个,您需要结束output
语句。一旦编译器看到output
,它就不会自动为你做。
此处适用于具有值的数据集。
data test2;
format x best. msg $32.;
do x=1 to 5;
msg="Yup";
output;
end;
run;
data test2;
if _n_ = 0 then
set test2 nobs=nobs;
if ^nobs then do;
msg = "NO RECORDS";
output;
stop;
end;
set test2;
y=x+1;
output;
run;