具有多个键值对的 sas hash table

sas hash table with multiple key value pairs

我有一个查找 table 看起来像这样(名称:LOOKUP_TABLE):

Obs  Member_id   plan_id    Plan_desc       group_id    Group_name
1   164-234      XYZ        HMO_Salaried    G123      Umbrellas, Inc.
2   297-123      ABC        PPO_Hourly      G123      Umbrellas, Inc.
3   344-123      JKL        HMO_Executive   G456      Toy Company
4   395-123      XYZ        HMO_Salaried    G123      Umbrellas, Inc.
5   495-987      ABC        PPO_Hourly      G456      Toy Company
6   562-987      ABC        PPO_Hourly      G123      Umbrellas, Inc.
7   697-123      XYZ        HMO_Salaried    G456      Toy Company

我有另一个 table 具有以下数据(名称:MAIN_TABLE):

Obs  Member_id   zip       income   svc_dt      dx    plan_id group_id Obs old_id new_id
1    164-234    04021      ,000  2005/01/01  250   XYZ     G123      1 164-234 N164-234
2    297-123    22003-1234 ,999  2005/02/03  4952  ABC     G123      2 297-123 N297-123
3    344-123    45459-0306 ,999  2005/03/15  78910 JKL     G456      3 344-123 C344-123
4    395-123    03755      ,000  2005/04/14  250   XYZ     G123      4 N164-234 M164-234
5    495-987    94305      ,000  2005/08/19  12345 ABC     G456      5 N297-123 B297-123 
6    562-987    78277-8310 ,999  2005/09/13  250   ABC     G123      6 M164-234 P164-234
7    697-123    88044-3760 ,999  2005/11/01  4952  XYZ     G456      7 P164-234 A164-234

我的SAS数据步骤如下:

data MAIN_TABLE_1.
set MAIN_TABLE;
declare hash pd_lookup(dataset:"&LOOKUP_TABLE.");
            rc_pd_definekey = pd_lookup.definekey 
                (
                    'plan_id', 
                    'group_id'
                );
            rc_pd_definedata = pd_lookup.definedata 
                (
                    'Plan_desc', 
                    'Group_name'
                );
            rc_pd_definedone = pd_lookup.definedone();
             call missing (
                Plan_desc, 
                Group_name
            );
            put "rc_pd_definekey is "  rc_pd_definekey;
            put "rc_pd_definedata is " rc_pd_definedata;
            put "rc_pd_definedone is " rc_pd_definedone;
            drop rc_pd_definekey rc_pd_definedata rc_pd_definedone;
            rc_pd_lookup  = pd_lookup.find();

            run

我的问题是了解此查找的幕后情况,主要是关于生成的键值对。 即,是否生成了单独的键值对。 如在 中,键值对的示例将是

: "plan_id" -> "Plan_desc"

: "plan_id" -> "Group_name"

: "group_id" -> "Plan_desc"

: "group_id" -> "Group_name"

或者是把键连在一起,值也连在一起,然后我们做对。 就像这样

:"plan_id"+"group_id" -> "Plan_desc" + "Group_name"

我问这个问题是因为我要将相同的代码逻辑转换成R,如果我理解错了,那么整个R代码都是错误的

plan_idgroup_id 的每个组合用于从包含 plan_descgroup_name 的值的散列 table 中检索唯一条目。

但是,目前在查找 table 中存在具有相同这些 ID 组合的重复行,这可能会导致错误或意外行为 - 例如obs 1 和 4。您应该创建查找的去重副本 table 并使用它来声明哈希对象。