【发布时间】:2021-12-28 14:40:28
【问题描述】:
我正在尝试加入两个基于变量 office_id 和 office_id_flag 的数据集,每个数据集都有 50,000 个观察值。
data1 变量
- grp
- 年龄
- 西班牙裔
- 身份证
- 种族
- 性
- 精神疾病
- mental_ill_dx
- office_id
- office_id_flag
data2 变量
- er_vis
- adm_hr
- psych_hosp
- psych_vis
- 地区
- region_rpc
- 收费
- office_id
- office_id_flag
我首先在数据步骤合并过程中尝试了这个,因为我知道它是如何工作的,结果数据集有 50,000 个观察值和 17 个变量,这对我来说很有意义。 合并代码:
proc sort data=data1; by office_id; run;
proc sort data=data2; by office_id; run;
data work.merge_datastep;
merge data1 (in=dem) data2 (in=hosp);
by office_id;
if dem and hosp;
run;
*53000 observations and 17 variables;
我尝试了很多 SQL 合并类型,每一种都生成一个包含 56000 个观察值和 17 个变量的数据集,这没有任何意义。
这是我在 SQL 中尝试过的:
proc sql;
create table sql_outerjoin as
select *
from data1 full outer join data2 on data1.office_id=data2.office_id;
quit;
proc sql;
create table sql_leftjoin as
select * from data1 left outer join data2 on data1.office_id=data2.office_id;
quit;
proc sql;
create table work.sql_innerjoin as
select data1.*, data2.*
from work.data1, work.data2
where data1.office_id=data2.office_id;
quit;
proc sql ;
create table sql_try1 as
select one.*, two.*
from data1 as one
left join data2 as two
on (one.office_id = two.office_id and one.office_id_flag= two.office_id_flag);
quit;
proc sql;
create table sql_try3 as
select coalesce(a.office_id, b.office_id) as ID
from data1 a
full join data2 b
on a.ID = b.ID;
quit;
proc sql;
create table sparcs_1 as
select *
from data1, data2
where data1.office_id=data2.office_id;
quit;
proc sql;
create table work.sql_leftjoin2 as
select s.*, d.*
from work.data1 as s left join work.data2 as d
on s.office_id=d.office_id;
quit;
此外,这些 proc sql 尝试中的每一个都导致了这些错误:
- 警告:变量 office_id 已存在于文件 WORK 中。whatever_table_name。
- 警告:变量 office_id_flag 已存在于文件 WORK 中。whatever_table_name。
我希望最终结果与 datastep 合并过程相同,并包含所有变量和 50,000 个观察值,在 office_id 和 office_id_flag 上匹配。
我已经超出了我的深度,显然是在黑暗中拍摄。有人有什么建议吗?
【问题讨论】:
-
为什么对同一个 OFFICE_ID 值有多个观察值?在每个输入数据集中唯一标识观察的变量是什么?它变大了多少?重复项是否可能仅针对 OFFICE_ID 的一个值?也许是缺少值或意味着 id 未知的代码?