SAS哈希表(右连接/联盟)

时间:2016-04-30 20:09:03

标签: sas hashtable

我正在寻找一种在连接和联合之间进行混合的查找。我的主要数据集中有大量记录,因此我希望做一些不会成为多对多矩阵的“强力”方法。

这是我的主要数据集,名为“全部”,已包含所列每种产品的价格。

<script type="text/javascript">
    $(document).ready(function(){
        var submitClicked = false;
        $(".searchform").submit(function(e){
            if(submitClicked === false){
                e.preventDefault();
                var searchString = "#"+$("#s2").val();
                submitClicked = true;
                window.location = window.location.href+"?s="+searchString;
            }
        });
    });
</script>

我的其他数据数据集('价格' - 此处未显示,但包含相同的两个键,产品和日期)包含每个可能日期的所有产品的价格。我想要创建的哈希表查找基本上会查找“全部”表中的每个日期,并输出该日期的所有产品的价格,从而产生如下表格:

product date        price   
apple   1/1/2011    1.05    
apple   1/3/2011    1.02
apple   1/4/2011    1.07

pepper  1/2/2011    0.73
pepper  1/3/2011    0.75
pepper  1/6/2011    0.79

也就是说,只要一个产品的日期和价格指定为“全部”表,所有其他产品都应该从查询表中将其拉出来。 星号表示从价格表中查找价格,包含产品价格的新行基本上插入到新表中。

如果哈希表不是一个很好的解决方法,请告诉我其他方法。

1 个答案:

答案 0 :(得分:1)

嗯,这远非优雅,但如果下面给你想要的结果好奇吗?由于ALL中每个键都有多个记录(我假设您要维护),我基本上将ALL与日期为All的PRICES中的记录联合起来,但我添加了一个Except,以便排除已经在ALL中的记录。不知道这是否有意义,或者正在做你想做的事情。当然不具备“优雅”的资格。

data all;
  input product $7. date mmddyy10. price;
  Y=1;
  format date mmddyy10.;
  cards;
apple  01/01/2011  1.05
apple  01/01/2011  1.05
apple  01/03/2011  1.02
pepper 01/02/2011  0.73
pepper 01/03/2011  0.75
pepper 01/06/2011  0.79
;
run;
data prices;
  input product $7. date mmddyy10. price;
  format date mmddyy10.;
  cards;
apple  01/01/2011  1.05
apple  01/02/2011  1.04
apple  01/03/2011  1.02
apple  01/04/2011  1.07
apple  01/05/2011  1.01
pepper 01/01/2011  0.70
pepper 01/02/2011  0.73
pepper 01/03/2011  0.75
pepper 01/04/2011  0.76
pepper 01/05/2011  0.77
pepper 01/06/2011  0.79
;
run;

proc sql;
  create table want as 
  select * from all 
  union corr all
  ( (select product,date,price from
      prices
      where date IN (select distinct date from all)
    )
    except corr
    select product,date,price from all
  )
  ;
quit;