0

所以,我对proc compare有一个很大的问题。我有两个包含两列的数据集。一列列出表名,另一列列出与第一列中的表名相对应的变量名称。我想根据第一列的值比较其中一个的值。我在某种程度上使它起作用,但问题是这些数据集由于其中一个数据集的附加值而具有不同的大小。这意味着在数据集的中间添加了一些新变量(新变量已添加到表中)。不幸的是,proc compare 水平比较来自两个数据集的值并相互检查它们的值,所以在我的例子中它看起来像这样:

ds 1 | ds 2

cost | box_nr

other | cost_total

如您所见,box_nr第二个数据集添加了一个新值,该值显示在我希望它与cost( cost_total) 进行比较的值之上。所以我想知道是否可以比较至少具有最小相似性的值(检查字符序列中的差异) - 例如3个字母(cos),或者是否可以将值box_nr放在最后暗示它们不'不会出现在某个数据集中。

我的代码:

PROC Compare base=USERSPDS.MIzew compare=USERSPDS.MIwew
    out=USERSPDS.result outbase outcomp outdif noprint; 
    id 'TABLE  HD'n;
    where ;
run; 

proc print data=USERSPDS.result noobs;
   by 'TABLE  HD'n;
   id 'TTABLE  HD'n;
   title 'COMPARISON:';
run; 
4

2 回答 2

0

未经测试,但这应该可以帮助您。

proc sql;
   create table compare as
   select 
      coalesce(a.cola, b.cola) as cola,
      a.colb as acolb,
      b.colb as bcolb
   from dataa as a
   full outer join datab as b
      on 
         a.cola = b.cola and
         compged(a.colb, b.colb) <= 100;
quit;

查看compged 文档以获取更多信息。

于 2014-09-17T11:16:07.270 回答
0

听起来您可以在两个数据集中创建一个新变量 VAR3chars=substr(var,1,3) ,然后将该变量添加到您的 ID 语句中。我认为这应该有效,除非有重复的值。

因此,如果一个数据集具有 var="cost" 而另一个具有 var="cost_total",它们将在 id 上匹配,因此它们将被比较并发现它们不同。

如果一个数据集具有 var="box_nr" 而另一个数据集没有任何以“box”开头的值,则它们不会在 id 上匹配,因此比较会发现在一个数据集中存在该 id 的记录,但在另一个数据集中不存在该记录。

于 2014-09-18T03:10:08.977 回答