在 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 中,如果空变量不存在,是不是有更快的方法来创建它?的主要内容,如果未能解决你的问题,请参考以下文章