【问题标题】:How to combine non matching datasets horizontally in SAS/SQL?如何在 SAS/SQL 中水平组合不匹配的数据集?
【发布时间】:2018-07-11 14:35:35
【问题描述】:

我在 SAS 工作,编写 SAS 基本语句和 SQL 语句。

我的问题是,我有两个要水平组合的数据集。

一个数据集叫做Code,有一个变量:Code_value 它有 55 个观测值,没有重复值。

另一个数据集叫做 Persons 并且有一个变量:Person_id 它有 167 个唯一的 person_id 值。

我想创建一个数据集,在其中加入这些数据集。 - 两个数据集中没有匹配的值。 我想强制将数据集放在一起,所以我有一个针对每个 person_id 的数据集,每个 code_value 都有一行。

所以我有这些值组合的组合:

代码1 Pid1

代码1 Pid2

代码1 Pid3

...

代码2 Pid1

代码2 Pid2

代码2 Pid3

... 等等。最终得到一个包含 2 个变量和总共 9185 行的数据集。

我已经尝试过使用合并的数据步骤,也尝试过编写带有完全连接的 sql,但没有运气。

谁能帮忙?

亲切的问候 玛丽亚

【问题讨论】:

  • 你说你试过了,但问题没有显示你试过的代码。

标签: merge sas dataset


【解决方案1】:

这称为交叉连接。我更喜欢明确列出交叉连接。

proc sql;
  create table want as
  select *
  from code
  CROSS JOIN
  persons;
quit;

或者没有任何规格:

proc sql;
create table want as
select *
from one, two;

两者都应该给你相同的答案。

【讨论】:

  • 感谢您的回答。这就是我要找的:)
【解决方案2】:

连接的ON 条件应为1=1。这将导致one 中的所有行匹配two 中的所有行。

例如,one 3 行,two 5 行,crossings 15 行:

data one;
  do i = 1 to 3;
    output;
  end;
run;

data two;
  do j = 1 to 5;
    output;
  end;
run;

proc sql;
  create table crossings as
  select * 
  from one full join two on 1=1
  ;
quit;

如果有任何共同的列名,您应该重命名它们或合并()它们。

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2023-03-31
    相关资源
    最近更新 更多