将信息合并为部门向量

时间:2019-06-05 23:36:29

标签: sas

我想通过创建一个向量来总结数据集,该向量提供有关ID所在部门的信息。例如,

foo1

我想要

... (): IStore => ...

dept_vect元素的位置按字母顺序组织。因此,第一个位置的“ 1”表示在部门A中找到了该ID,第二个位置的“ 1”意味着在部门B中找到了该ID。“ 0”表示在部门中找不到该ID。 。

我可以使用蛮力方法解决这个问题

data test;
    input id dept $;
    datalines;
    1 A
    1 D
    1 B
    1 C
    2 C
    3 D
    4 A
    5 C
    5 D
    ;
run;

这可行,但是有两个问题。为了使col4出现,我需要在所有部门中至少找到一个ID,但是可以通过创建一个虚拟ID来解决该问题,以便在所有部门中都可以找到ID。但是主要的问题是该代码不健壮。有没有一种方法可以对此进行编码,使其适用于任何部门?

2 个答案:

答案 0 :(得分:1)

  1. 添加1以获得计数变量
  2. 使用PROC TRANSPOSE进行转置
  3. 用0代替丢失
  4. 使用CATT()创建所需的结果。

    data have;
    input id dept $;
    count = 1;
    datalines;
    1 A
    1 D
    1 B
    1 C
    2 C
    3 D
    4 A
    5 C
    5 D
    ;
    run;
    
    proc transpose data=test out=wide prefix=dept; 
    by id;
    id dept;
    var count;
    run;
    
    data want;
    set wide;
    array _d(*) dept:;
    do i=1 to dim(_d);
          if missing(_d(i)) then _d(i) = 0;
    end;
    want = catt(of _d(*));
    run;
    

答案 1 :(得分:1)

也许TRANSREG可以为此提供帮助。

data test;
    input id dept $;
    datalines;
    1 A
    1 D
    1 B
    1 C
    2 C
    3 D
    4 A
    5 C
    5 D
    ;
run;
proc transreg;
   id id;
   model class(dept / zero=none);
   output design out=dummy(drop=dept);
   run;
proc print;
   run;
proc summary nway;
   class id;
   output out=want(drop=_type_) max(dept:)=;
   run;
proc print;
   run;