在SAS中合并时,是否有一种简单的方法可以从其中一个数据集中删除所有变量?

在SAS中合并时,是否有一种简单的方法可以从其中一个数据集中删除所有变量?,sas,Sas,假设我已经按照变量“sticks”、“stones”和“bones”对set1和set2进行了排序,然后我这样做: data merged; merge set1(in=a) set2(in=b); by sticks stones bones; if a and b then output; *else we don't want to do anything; run; 有没有一种简单的方法可以从合并数据集中的set2中删除所有变量,而不必全部键入它们?我一

假设我已经按照变量“sticks”、“stones”和“bones”对set1和set2进行了排序,然后我这样做:

data merged;
    merge set1(in=a) set2(in=b);
    by sticks stones bones;
    if a and b then output;
    *else we don't want to do anything;
run;
有没有一种简单的方法可以从合并数据集中的set2中删除所有变量,而不必全部键入它们?我一直遇到这样的问题,我有两个数据集——都有很多变量——我只想通过几个变量合并它们,然后只保留其中一个数据集的变量

我通常只使用procsql来处理类似的事情,但是有一些情况(比上面更复杂)我认为合并更好


此外,SAS要求您在合并数据集之前“手动”排序,这让我感到很恼火。如果它不允许您合并数据集,除非它们被正确排序,为什么它不在您使用merge时为您这样做呢?思想?也许有一种方法我不知道。

对于merge语句和PDV在其中的工作方式,排序的需求是存在的。 真的没有办法

不过,这里基本上是在查找set2,以确保通过等效的内部联接来匹配键变量(棒和骨头),通过哈希表或键集(当然,如果您有索引的话),这样做可能会更有效

在这里,最简单、更方便的方法是在set2中使用keep语句,以便只将by变量加载到PDV中。 大概是这样的:

data merged;
merge set1(in=a) set2(in=b keep=sticks stones bones);
by sticks stones bones;
if a and b then output;
*else we don't want to do anything;

run;
如果哈希表不会吓到您,并且想了解更多关于如何实现它们的信息,请随时与我联系以获取更多帮助

编辑:

这是一篇关于使用哈希表的好文章 记住,使用散列你应该知道你在做什么,如果你不知道引擎盖下发生了什么,它们可能会产生意想不到的结果。 不管怎样,这里的问题是使用一个非常简单和基本的哈希表解决的

data merged2;
set set1;
if _N_ = 1 then do;
  declare hash h(dataset:"set2");
  h.defineKey('sticks','stones','bones');
  h.defineData('sticks','stones','bones');
  h.defineDone();
end;
rc = h.find();
if rc=0;
drop rc;
run;

这段代码的主要优点是不需要对数据集进行排序,在set2特别大的情况下,这样做可以节省大量时间。

对merge语句和PDV在其中的工作方式有排序要求。 真的没有办法

不过,这里基本上是在查找set2,以确保通过等效的内部联接来匹配键变量(棒和骨头),通过哈希表或键集(当然,如果您有索引的话),这样做可能会更有效

在这里,最简单、更方便的方法是在set2中使用keep语句,以便只将by变量加载到PDV中。 大概是这样的:

data merged;
merge set1(in=a) set2(in=b keep=sticks stones bones);
by sticks stones bones;
if a and b then output;
*else we don't want to do anything;

run;
如果哈希表不会吓到您,并且想了解更多关于如何实现它们的信息,请随时与我联系以获取更多帮助

编辑:

这是一篇关于使用哈希表的好文章 记住,使用散列你应该知道你在做什么,如果你不知道引擎盖下发生了什么,它们可能会产生意想不到的结果。 不管怎样,这里的问题是使用一个非常简单和基本的哈希表解决的

data merged2;
set set1;
if _N_ = 1 then do;
  declare hash h(dataset:"set2");
  h.defineKey('sticks','stones','bones');
  h.defineData('sticks','stones','bones');
  h.defineDone();
end;
rc = h.find();
if rc=0;
drop rc;
run;

这段代码的主要优点是不需要对数据集进行排序,在set2特别大的情况下,这非常节省时间。

man非常简单和容易。我觉得自己很笨!:)谢谢我不介意学习更多关于SAS中哈希表的知识。如果你有一个好的链接,请随意发送给我。SPDE数据集实际上允许你忽略手动排序,并在合并过程中根据需要为你排序数据集,但这些肯定不是我想象中的大多数用例……这是如此简单和容易。我觉得自己很笨!:)谢谢我不介意学习更多关于SAS中哈希表的知识。如果你有一个好的链接,请随意按我的方式发送。SPDE数据集实际上允许你忽略手动排序,并在合并过程中根据需要为你排序数据集,但我认为这些肯定不是大多数用例。。。