Sas 从具有不同列的多个数据集创建模板数据集

Sas 从具有不同列的多个数据集创建模板数据集,sas,Sas,目前,我有几组业务单元数据,希望将它们转换为标准模板格式。某些业务单元数据包含其他业务单元数据不包含的列。我想检查某些列是否存在,如果不存在,则创建它们。我知道实现类似功能的技术已经在前面讨论过,并且。然而,我想知道是否存在更好的方法 我目前的代码是: data Source_Data4; set Interm.Source_Data3; if 0 then do; a=""; b=""; end; run; 使用RETAIN语句应该是最快、最简单的方法。如果要检查的字段是数

目前,我有几组业务单元数据,希望将它们转换为标准模板格式。某些业务单元数据包含其他业务单元数据不包含的列。我想检查某些列是否存在,如果不存在,则创建它们。我知道实现类似功能的技术已经在前面讨论过,并且。然而,我想知道是否存在更好的方法

我目前的代码是:

data Source_Data4;
set Interm.Source_Data3;
if 0 then do;
    a="";
    b=""; 
end;
run;

使用RETAIN语句应该是最快、最简单的方法。如果要检查的字段是数字,请输入一个。而不是“


如果您有多个具有不同列的数据集,您希望使用一个模板来处理这些数据集,最好的方法如下:

data want;
if 0 then set template;
set have2;
run;
这比一堆retain/length语句更容易编码。它实现了与保留解决方案相同的结果(它定义了PDV),只有一个例外;它将根据
模板
(保留不影响长度或格式)定义变量的长度和格式。这可能是可取的,也可能不是,这取决于您的用例。当组合多个数据集时,它非常有用,因为它提供了一个可以测试长度/格式差异的单一点;一旦执行此步骤,您就可以确信您的各种数据集在可变长度/格式上都是相同的

创建此数据集可以通过多种方式完成。一个简单的方法是:

data template;
if 0 then set have;
if 0 then set have2;
stop;
run;

这将创建一个带有
have1
顺序的空白数据集,后跟
have2
中的任何新变量。如果不希望这样做,您可能希望在从数据字典中提取的If 0之前添加RETAIN语句。

将是最快的,因为它可以防止SAS在每次迭代时甚至费心将变量设置为空。应该会对效率产生近乎零的影响。我对你的问题进行了编辑,使其不那么主观。如果你觉得我已经实质性地改变了你文章的意思,请随时回滚或应用你自己的编辑。我想指出的是,要使这篇文章产生任何明显的变化,你需要一台速度非常慢的计算机,或者一个非常大的数据集。而且难以置信的大,我猜数万亿的记录。我在猜测这个数字,但我相信有人能证实这一点。你的时间最好花在其他地方优化。太棒了,好多了。现在清理评论。
data template;
if 0 then set have;
if 0 then set have2;
stop;
run;