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

Posted

技术标签:

【中文标题】在 SAS 中,如果空变量不存在,是不是有更快的方法来创建它?【英文标题】: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 循环。随着我开始使用更大的数据集,我开始感到运行时间变慢,我想知道是否有人有更好的技术?

【问题讨论】:

【参考方案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,我刚试了一下,效果很好。我昨天一定做了什么傻事。非常感谢! 我的荣幸。希望它会造福于其他人。

以上是关于在 SAS 中,如果空变量不存在,是不是有更快的方法来创建它?的主要内容,如果未能解决你的问题,请参考以下文章

检查sas的外部excel数据集中是不是存在一行

sas输出之后怎么回去

SAS:使用用户定义格式时,如果不匹配,“默认值”是未格式化的输入变量吗?

SAS笔记 FIRST.和LAST.临时变量

SAS中的宏变量开头和结尾分别是啥命令?

php中单引号和双引号的区别,哪个速度更快?为啥?