首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将信息组合成一个部门向量

将信息组合成一个部门向量
EN

Stack Overflow用户
提问于 2019-06-05 23:36:29
回答 2查看 109关注 0票数 0

我想通过创建一个向量来总结一个数据集,该向量提供了在哪些部门中找到id的信息。例如,

代码语言:javascript
代码运行次数:0
运行
复制
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;

我想要

代码语言:javascript
代码运行次数:0
运行
复制
id dept_vect
1  1111
2  0010
3  0001
4  1000
5  1001

dept_vect元素的位置是按字母顺序排列的。因此,第一个位置中的'1‘表示id在第A部分中找到,而'1’在第二个位置表示id在B部门中找到。‘A '0’表示在部门中找不到id。

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

代码语言:javascript
代码运行次数:0
运行
复制
proc transpose data = test out = test1(drop = _NAME_);
by id;
var dept;
run;

data test2;
  set test1;
  array x[4] $ col1-col4;
  array d[4] $ d1-d4;

  do i = 1 to 4;
        if not missing(x[i]) then do;
              if x[i] = 'A' then d[1] = 1;
                 else if x[i] = 'B' then d[2] = 1;     
                 else if x[i] = 'C' then d[3] = 1;
                 else if x[i] = 'D' then d[4] = 1;
              end;
        else leave;
    end;

  do i = 1 to 4;
       if missing(d[i]) then d[i] = 0;
  end;

  dept_id = compress(d1) || compress(d2) || compress(d3) || compress(d4);

  keep id dept_id;
 run;

这是可行的,但也有一些问题。要使col4出现,我至少需要在所有部门中找到一个id,但是可以通过创建一个虚拟id来修复这个id,以便在所有部门上找到id。但是主要的问题是这段代码不健壮。是否有一种方法对此进行编码,使其能够适用于任意数量的部门?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-06 01:26:08

  1. 添加一个1以获得一个计数变量
  2. 转置
  3. 将缺失替换为0
  4. 使用CATT()创建所需的结果。 数据有;输入id data=test $;count = 1;datalines;1A1D1B1C2C3D4A5C5D;运行;proc转置data=test out=wide prefix=dept;by id;id dept;var计数;运行;数据需要;set wide;数组_d(*) dept:;执行i=1到dim(_d);如果缺少( _d(i) ),则_d(I)= 0;结束;end= catt(of _d(*));运行;
票数 1
EN

Stack Overflow用户

发布于 2019-06-06 15:32:40

也许TRANSREG能帮上忙。

代码语言:javascript
代码运行次数:0
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56469317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档