Sas 如果有观测数据,最简单的方法是显示数据,还是创建一个空记录,说明数据集是空的?

Sas 如果有观测数据,最简单的方法是显示数据,还是创建一个空记录,说明数据集是空的?,sas,Sas,我已经环顾了很多地方寻找这种性质的东西,大多数资料都给出了计算观察数量的例子等 但我实际上想要的是一段简单的代码,它将检查数据集中是否有任何观察结果,如果满足该条件,则程序需要继续正常运行,但如果不满足该条件,则我希望创建一个新记录,并使用一个变量声明数据集为空 我见过可以实现这一点的宏和SQL代码,但我想知道的是,在SAS代码中是否可以实现同样的功能?我知道我下面的代码不起作用,但如果您有任何见解,我们将不胜感激 Data TEST; length VAR1 $200.; se

我已经环顾了很多地方寻找这种性质的东西,大多数资料都给出了计算观察数量的例子等

但我实际上想要的是一段简单的代码,它将检查数据集中是否有任何观察结果,如果满足该条件,则程序需要继续正常运行,但如果不满足该条件,则我希望创建一个新记录,并使用一个变量声明数据集为空

我见过可以实现这一点的宏和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;

您可以通过始终将空数据集消息附加到一个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;

我能想到的最简单的方法是使用nobs语句来检查记录的数量。诀窍在于,您不希望实际读取空数据集。这将终止数据步骤,并且不会设置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并允许您设置消息并输出该值。使用
停止
,然后终止数据步骤。在该检查之外,执行正常的数据步骤代码。您需要结束
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;