1

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

测试变量是否存在

但稍作修改使其能够更轻松地处理大量变量。以下代码确保 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 循环。当我开始使用更大的数据集时,我开始经历缓慢的运行时间,我想知道是否有人有更好的技术?

4

1 回答 1

2

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

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

然后合并 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。

于 2013-06-17T06:47:19.310 回答