显示数据的最简单方法是什么,如果有观察,或创建一个空记录,说明数据集是空的?

时间:2013-11-19 14:12:49

标签: sas

对于这种性质的东西我已经看了很多,大多数来源都给出了计算观察量等的例子。

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

我已经看到了可以实现这一目标的宏和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;

2 个答案:

答案 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;