【问题标题】:SAS base programmingSAS基础编程
【发布时间】:2018-09-04 18:57:14
【问题描述】:

有没有办法加入/合并两个数据集/表,数据集 B 中的一个寄存器同时引用数据集 A 的行(条件 1)和列(条件 2)?:

条件一:b.City = b.getColumnName() AND

条件2:b.Part_code = a.Part_code

我正在寻找的是与 getColumnName() 等效的东西,以便能够同时按行和按列进行比较。

数据集如下(简化示例):

数据集 A:

Part_code     Miami    LA

A_1             60000    38000

A_2             5000     2000

A_3             1000     60000

数据集 B:

Part_code     City

A_1           Miami

期望的输出(加入):

Part_code     City       Part_stock

A_1           Miami      60000

非常感谢您!

【问题讨论】:

    标签: join merge sas


    【解决方案1】:

    您真正想做的是旋转 A 数据集,然后根据 B 数据集中的城市对其进行过滤。

    Proc Transpose 旋转表格:

    proc sort data=a;
    by part_code;
    run;
    
    proc transpose data=A out=A(rename=(_name_=city col1=part_stock));
    by part_code;
    run;
    

    然后使用内连接根据B进行过滤

    Proc sql noprint;
    create table want as
    select a.*
       from A as a
          inner join
            B as b
          on a.part_code = b.part_code
         and a.city = b.city;
    quit;
    

    【讨论】: