l***o 发帖数: 5337 | 1 请教:我有一个dataset,只有两个var: id 和 feature,都是character。 id有很多
重复
的,但重复几遍不一定。我想把同id的feature都连起来写在一行,就像下面这样:
原 data:
ID Feature
a dfdfd
a ddf
a dde
b dlk
b lk
...
想要的data:
ID feature
a dfdfd-ddf-dde
b dlk-lk
...
请问怎么做?谢谢! |
l*****8 发帖数: 483 | 2 proc sort data=aa;
by id;
run;
data bb;
length check $5500.;
set aa;
by id;
retain check;
if first.id then check='';
check =trim(check)||trim(feature)||'-';
run;
proc sort data=bb;
by id;
run;
data cc;
set bb;
by id;
if last.id then
check=substr(check,1,length(check)-1);
if last.id;
run; |
l***o 发帖数: 5337 | 3 大牛啊!
随手写来,解决了我想了一个小时也没头绪的问题。除了景仰,还有什么可说。。。
让我试着给个包子。。。从来没干过,干不成莫怪。。。 |
l*****8 发帖数: 483 | 4 包子收到,谢谢
另外可以少一个步骤
proc sort data=aa;
by id;
run;
data bb;
length check $5500.;
set aa;
by id;
retain check;
if first.id then check='';
check =trim(check)||trim(feature)||'-';
if last.id then
check=substr(check,1,length(check)-1);
if last.id;
run; |
l***o 发帖数: 5337 | 5 再谢!
【在 l*****8 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 包子收到,谢谢 : 另外可以少一个步骤 : proc sort data=aa; : by id; : run; : data bb; : length check $5500.; : set aa; : by id; : retain check;
|
N****n 发帖数: 1208 | 6 真牛逼!怪不得我面试总失败。
【在 l*****8 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 包子收到,谢谢 : 另外可以少一个步骤 : proc sort data=aa; : by id; : run; : data bb; : length check $5500.; : set aa; : by id; : retain check;
|
x******n 发帖数: 92 | |
d******9 发帖数: 404 | 8 Good job!
I modified the codes a little bit:
if first.id then check="$";
check =trim(check)||"-"||trim(feature);
if last.id then N_feature=substr(check,3);
if last.id;
run;
It also works.
【在 l*****8 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 包子收到,谢谢 : 另外可以少一个步骤 : proc sort data=aa; : by id; : run; : data bb; : length check $5500.; : set aa; : by id; : retain check;
|
d*******o 发帖数: 493 | 9 本大猫惨绝人寰的hash object写法,发个包子吧。
data have;
input id $ Feature $;
cards;
a dfdfd
a ddf
a dde
b dlk
b lk
;
run;
data _null_;
length newfeature $50;
if _n_ =1 then do;
declare hash h();
h.defineKey('id');
h.defineData('id', 'newfeature');
h.defineDone();
end;
set have end = eof ;
if h.find() ne 0 then do;
newfeature = feature;
h.add();
end;
else do;
newfeature = cats(newfeature, '-', feature);
h.replace();
end;
if eof then h.output(dataset: 'want');
run; |
l***o 发帖数: 5337 | 10 大猫,真是惨绝人寰啊。。。你也要照顾一下在下的接受能力。。。看不懂啊。
但想到做人要厚道,还是给你发点猫粮吧。。。:)
【在 d*******o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 本大猫惨绝人寰的hash object写法,发个包子吧。 : data have; : input id $ Feature $; : cards; : a dfdfd : a ddf : a dde : b dlk : b lk : ;
|
|
|
d********h 发帖数: 2048 | 11 proc transpose data=test out=test1;
var feature;
by id;
data test2;
length c $ 1000;
set test1 ;
array tmp col1-col3;
do over tmp;
c=catx("_",of c tmp);
end;
proc print;
【在 l***o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 请教:我有一个dataset,只有两个var: id 和 feature,都是character。 id有很多 : 重复 : 的,但重复几遍不一定。我想把同id的feature都连起来写在一行,就像下面这样: : 原 data: : ID Feature : a dfdfd : a ddf : a dde : b dlk : b lk
|
l***o 发帖数: 5337 | 12 高手如云,破产也甘心。。。再发包子。。。
【在 d********h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : proc transpose data=test out=test1; : var feature; : by id; : data test2; : length c $ 1000; : set test1 ; : array tmp col1-col3; : do over tmp; : c=catx("_",of c tmp); : end;
|
d******9 发帖数: 404 | 13 Nice idea.
Proc transpose 这个思路我也想到过,先 transpose , Array, 然后再合并字符串。
不过,写到半途而废了。
Array tmp col1-col3; 这里有一个问题,如果transpose 后不止3个 column,5,7个
或者更多怎么办???这里应该定义一个可变的变量才好。
【在 d********h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : proc transpose data=test out=test1; : var feature; : by id; : data test2; : length c $ 1000; : set test1 ; : array tmp col1-col3; : do over tmp; : c=catx("_",of c tmp); : end;
|
s******r 发帖数: 1524 | 14 还有包子吗?
sorry. A typo. Just fixed.
proc sort data=aa;by id;run;
data bb;
length check $5500.;
set aa;
by id;
retain check;
check=catx('-',check,feature);
if last.id then do;output;check='';end;
run;
【在 l***o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 请教:我有一个dataset,只有两个var: id 和 feature,都是character。 id有很多 : 重复 : 的,但重复几遍不一定。我想把同id的feature都连起来写在一行,就像下面这样: : 原 data: : ID Feature : a dfdfd : a ddf : a dde : b dlk : b lk
|
l***o 发帖数: 5337 | 15 众位真以为我有钱啊。。。
马上发给你。
【在 s******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 还有包子吗? : sorry. A typo. Just fixed. : proc sort data=aa;by id;run; : data bb; : length check $5500.; : set aa; : by id; : retain check; : check=catx('-',check,feature); : if last.id then do;output;check='';end;
|
d********h 发帖数: 2048 | 16 应该用 array temp col:;
【在 d******9 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Nice idea. : Proc transpose 这个思路我也想到过,先 transpose , Array, 然后再合并字符串。 : 不过,写到半途而废了。 : Array tmp col1-col3; 这里有一个问题,如果transpose 后不止3个 column,5,7个 : 或者更多怎么办???这里应该定义一个可变的变量才好。
|
d******9 发帖数: 404 | 17 "array temp col:"= ???????
I do not know about this, can you explain? Thanks.
【在 d********h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 应该用 array temp col:;
|