【问题标题】:In SAS, is there a faster way to create an empty variable if it doesn't exist?在 SAS 中,如果空变量不存在,是否有更快的方法来创建它?
【发布时间】:2013-06-17 06:20:22
【问题描述】:

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

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 循环。随着我开始使用更大的数据集,我开始感到运行时间变慢,我想知道是否有人有更好的技术?

【问题讨论】:

    标签: templates variables sas


    【解决方案1】:

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

    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。

    【讨论】:

    • 嗨,Leo,谢谢您的回答。数据步的 MERGE 或 SQL 的 JOIN 函数不会忽略将空变量添加到新数据集中吗?这就是我尝试时发生的情况。
    • 你好暮光之城。谢谢你的评论。我添加了一个适合我的示例。这是你的想法吗?
    • 亲爱的 Leo,我刚试了一下,效果很好。我昨天一定做了什么傻事。非常感谢!
    • 我的荣幸。希望它会造福于其他人。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多