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

Posted

技术标签:

【中文标题】从具有不同列的多个数据集创建模板数据集【英文标题】:Creating a template dataset from multiple datasets with different columns 【发布时间】:2013-07-17 08:56:18 【问题描述】:

目前,我想将几​​组业务单位数据放入标准模板格式中。一些业务单位数据包含其他人没有的列。我想检查某些列是否存在,如果不存在则创建它们。我知道实现类似功能的技术已经在前面讨论过,here 和here。但是,我想知道是否存在更好的方法。

我当前的代码是:

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

【问题讨论】:

我已经编辑了您的问题,使其不那么主观。如果您觉得我大大改变了您帖子的含义,请随时回滚或应用您自己的编辑。 我想指出,要使这一点产生任何显着差异,您需要一台速度非常慢的计算机,或者一个非常大的数据集。而且非常大,我猜测有数万亿条记录。我猜这个数字,但我相信有人可以证实它。您的时间可能最好花在优化其他地方。 太棒了,好多了。现在清理 cmets。 【参考方案1】:

使用 RETAIN 语句应该是执行此操作的最快和最简单的方法。如果您要检查的字段是数字,则输入 .而不是“”。

data Source_Data4;
set Interm.Source_Data3;
retain a b "";
run;

【讨论】:

RETAIN 将是最快的,因为它可以防止 SAS 在每次迭代时将变量设置为空。对效率的影响应该几乎为零。【参考方案2】:

如果您有多个具有不同列的数据集,并且您想使用模板,那么执行此操作的一个很好的方法是:

data want;
if 0 then set template;
set have2;
run;

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

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

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

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

【讨论】:

以上是关于从具有不同列的多个数据集创建模板数据集的主要内容,如果未能解决你的问题,请参考以下文章

访问记录集(从 2 列)到 Word 模板(或空文档)

我需要使用 python 在具有 144 列的数据集上创建 corr 矩阵

从 MySQL 中具有不同列的表的多个连接结果中删除重复项

如何从带有向量列的 DataFrame 创建张量流数据集?

自定义数据集,例如通用列表的容器

在 ggplot2 中创建具有不同数据集的图例