【问题标题】:combining 2 sas dataset结合 2 个 sas 数据集
【发布时间】:2015-10-20 09:21:29
【问题描述】:

我想合并两个数据集 t1 和 t2:

数据集 1(一个变量 X)

 X
 1
 2
 3 
 4

数据集 2(一个变量 Y)

 Y
 A
 B
 C

进入一个新的数据集 数据集1+2 t3

 X  Y
 1  A
 1  B
 1  C
 2  A
 2  B
 2  C
 3  A
 3  B
 3  C
 4  A
 4  B
 4  C

如你所见,我没有公共变量,我尝试了不同风格的集合和合并组合

data t3 ; merge t1 t2 ; run ;
data t3 ; set t1 ; set t2 ; run ;
data t3 ; set t1 ; if _n_  then set t2 ; run ;
data t3 ; set t1 t2  ; run ;

非常感谢任何帮助(SAS 或 SQL)

问候

SW

【问题讨论】:

    标签: sql sas


    【解决方案1】:

    这将起作用并产生预期的结果,基本上您正在查看 SAS 中的笛卡尔积,

    proc sql;
      select t1.*,t2.*
      from t1 ,t2
      ;
    quit;
    

    Output of above Code

    【讨论】:

    • 谢谢。直而简单。它就像一个魅力!
    • 很高兴,您能否将答案标记为有用:)
    【解决方案2】:

    使用CROSS JOIN:

    CREATE TABLE #tab1(X INT);
    
    CREATE TABLE #tab2(Y NVARCHAR(12));
    
    INSERT INTO #tab1
    VALUES (1), (2), (3), (4);
    
    INSERT INTO #tab2
    VALUES ('A'), ('B'), ('C');
    
    SELECT X, Y
    FROM #tab1
    CROSS JOIN #tab2
    ORDER BY X, Y;
    

    LiveDemo

    【讨论】:

    • @Utsav 实际上 SEDE 是用于查询 SE 数据库(请参阅侧边栏上的表格),但我们可以创建临时表和临时变量,所以为什么不在这里使用它:)
    【解决方案3】:

    不确定在 DB 上,所以这应该适用于大多数情况

     select a.X,b.Y from 
     dataset1 a , dataset2 b
     where 1=1
    

    【讨论】:

      【解决方案4】:
      DECLARE @Table1 TABLE 
          (X int)
      ;
      
      INSERT INTO @Table1
          (X)
      VALUES
          (1),
          (2),
          (3),
          (4)
      ;
      
      DECLARE @Table2 TABLE 
          (Y varchar(1))
      ;
      
      INSERT INTO @Table2
          (Y)
      VALUES
          ('A'),
          ('B'),
          ('C')
      ;
      select * from @Table1 T cross apply (select * from @Table2)TT
      
      ORDER BY t.X
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 2020-12-10
        相关资源
        最近更新 更多