我想通过创建一个向量来总结数据集,该向量提供有关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。但是主要的问题是该代码不健壮。有没有一种方法可以对此进行编码,使其适用于任何部门?
答案 0 :(得分:1)
使用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;