首页 > 解决方案 > Biderectional Vlookup - 同一张表中的标志 - Sas

问题描述

我需要这样做:

表格1:

    ID   Cod.
    1     20
    2     102
    4     30
    7     10
    9     201
    10    305

表2:

    ID    Cod.
    1     20
    2     50
    3     15
    4     30
    5     25
    7     10
    10    300

现在,我得到了一个像这样带有外部连接的表:

   ID    Cod.    ID1    Cod1.
    1     20      1      20
    2     50      .      .
    .      .      2      102
    3     15      .      .
    4     30      4      30
    5     25      .      .
    7     10      7      10
    .     .       9      201
    10    300     .      .
    .     .       10     305

现在我想添加一个标志,告诉我 ID 是否有共同值,所以:

   ID    Cod.    ID1    Cod1.   FLag_ID  Flag_cod:
    1     20      1      20      0         0
    2     50      .      .       0         1
    .      .      2      102     0         1 
    3     15      .      .       1         1
    4     30      4      30      0         0
    5     25      .      .       1         1
    7     10      7      10      0         0
    .     .       9      201     1         1
    10    300     .      .       0         1
    .     .       10     305     0         1

我想知道如何获得 flag_ID,特别是涵盖 ID = 2 或 ID = 10 的情况。

谢谢

标签: sasvlookup

解决方案


您可以按合并进行分组,id以便计算和比较详细信息。

例子

data table1;
  input id code @@; datalines;
1 20 2 102 4 30 7 10 9 201 10 305
;

data table2;
  input id code @@; datalines;
1 20 2 50 3 15 4 30 5 25 7 10 10 300
;

proc sql;
  create table got as
  select 
    table2.id, table2.code
  , table1.id as id1, table1.code as code1 
  , case 
      when count(table1.id) = 1 and count(table2.id) = 1 then 0 else 1 
    end as flag_id
  , case
      when table1.code - table2.code ne 0 then 1 else 0
    end as flag_code
  from 
    table1
  full join 
    table2
  on 
    table2.id=table1.id and table2.code=table1.code
  group by 
    coalesce(table2.id,table1.id)
  ;

您可能还想研究

  • Proc COMPAREBY

推荐阅读