具有多个键值对的 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_id
和 group_id
的每个组合用于从包含 plan_desc
和 group_name
的值的散列 table 中检索唯一条目。
但是,目前在查找 table 中存在具有相同这些 ID 组合的重复行,这可能会导致错误或意外行为 - 例如obs 1 和 4。您应该创建查找的去重副本 table 并使用它来声明哈希对象。
我有一个查找 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_id
和 group_id
的每个组合用于从包含 plan_desc
和 group_name
的值的散列 table 中检索唯一条目。
但是,目前在查找 table 中存在具有相同这些 ID 组合的重复行,这可能会导致错误或意外行为 - 例如obs 1 和 4。您应该创建查找的去重副本 table 并使用它来声明哈希对象。