在SAS中,如果不存在,是否有更快的方法来创建空变量?

时间:2013-06-17 06:20:22

标签: templates variables sas

目前我正在使用类似于上一个问题中使用的方法

Test if a variable exists

但经过一些小修改,使其能够更轻松地处理大量变量。以下代码确保n6与dsid2引用的数据集具有相同的变量。

data n6;
set n5;
dsid=open('n5');
dsid2=open(/*empty template dataset*/);
varsn=attrn(dsid2,nvars);
i=1;
do until i = varsn;
    if varnum(dsid,varname(dsid2,i))=0 then do; 
      varname(dsid2,i)=""; 
      format varname(dsid2,i) varfmt(dsid2,i); 
     end;
    i=i+1;
end;
run;

如果我理解正确,SAS将针对每个观察执行整个do循环。当我开始使用更大的数据集时,我开始经历慢的运行时间,我想知道是否有人有更好的技术?

1 个答案:

答案 0 :(得分:2)

如果可能,最简单的方法是将常规逻辑应用于新数据集。担心以后匹配变量。完成处理后,您可以创建模板数据集的空版本,如下所示:

data empty;
    set template(obs=0);
run;

然后merge empty和您的新数据集:

data template; 
    input var1 var2 var3;
    datalines;
    7 2 2
    5 5 3
    7 2 7
; 
data empty;
    set template(obs=0);
run;

data todo;
    input var1 var2;
    datalines;
1 2
;

data merged;
    merge todo empty;
run;

在此示例中,merged数据集将包含缺少值的var3。