Sas 如何将多行中的一个变量收集到现有表中的新变量中
我遇到了如何解决以下情况的SAS问题: 初始数据:Sas 如何将多行中的一个变量收集到现有表中的新变量中,sas,Sas,我遇到了如何解决以下情况的SAS问题: 初始数据: gvkey lender 000001 citigroup 000001 abn group 000001 jpmorgan 000002 jpmorgan 000003 morgan stanely 000003 cibc 我希望得到的结果是: gvkey lender
gvkey lender
000001 citigroup
000001 abn group
000001 jpmorgan
000002 jpmorgan
000003 morgan stanely
000003 cibc
我希望得到的结果是:
gvkey lender lender_set
000001 citigroup citigroup; abn group; jpmorgan
000001 abn group citigroup; abn group; jpmorgan
000001 jpmorgan citigroup; abn group; jpmorgan
000002 jpmorgan jpmorgan
000003 morgan stanely morgan stanely; cibc
000003 cibc morgan stanely; cibc
我可以问一下如何使用SAS来实现这个结果吗?提前谢谢。如下所示
data have;
input gvkey $ lender & $20.;
datalines;
000001 citigroup
000001 abn group
000001 jpmorgan
000002 jpmorgan
000003 morgan stanely
000003 cibc
;
proc sort data=have out =have1;
by gvkey;
run;
/* get the concataned value for gvkey_set*/
data have2;
do until(last.gvkey);
set have1;
by gvkey;
length gvkey_set $100.;
gvkey_set= catx('; ', gvkey_set,lender);
if last.gvkey then output;
end;
run;
/* join back concatenated values*/
proc sql;
create table want as
select a.* ,b.gvkey_set
from have a
inner join
have2 b
on a.gvkey = b.gvkey;
由于您希望为一个组的所有观测值的新列生成相同的值,因此最好使用双道循环。第一个循环将计算新列,第二个循环将重新读取数据并输出结果
data want;
do until (last.gvkey);
set have;
by gvkey ;
length lender_set $200 ;
lender_set=catx('; ',lender_set,lender);
end;
do until (last.gvkey);
set have;
by gvkey ;
output;
end;
run;
确保您定义了足够长的时间来保存可能的结果。还要确保输入数据集中不存在该结果集。能否格式化所需的结果集,使其更具可读性?