我有一个SAS数据集(change_detail),该数据集维护着更改变量并且看起来像这样(除了实际表中有200多个更改变量):
Reference Chg1Code Chg1Desc Chg2Code Chg2Desc Chg3Code Chg3Desc
--------- -------- -------- -------- -------- -------- --------
1234 C Change2
1234 C Change1 C Change2
1234 C Change1 C Change3
2345 C Change1 C Change3
2345 C Change3
3456 C Change2 C Change3
3456 C Change1 C Change2
3456 C Change1
3456 C Change1 C Change3
我需要将此信息提取为每个参考编号发生的更改的摘要。当我在SAS中使用以下PROC SQL时:
proc sql;
create table work.changedata_summary as
select distinct
a.Reference,
catx(',',a.Chg1Desc,a.Chg2Desc,a.Chg3Desc) as Changes length=1000
from
work.change_detail a
;
quit;
它串联了各个“变更描述”变量,但保留了每个“参考编号”的原始观察值数量。我得到的结果是:
Reference Changes
--------- -------
1234 Change2
1234 Change1,Change2
1234 Change1,Change3
2345 Change1,Change3
2345 Change3
3456 Change2,Change3
3456 Change1,Change2
3456 Change1
3456 Change1,Change3
在整理数据方面(使用PROC SQL或DATA步骤)时,我需要一些帮助,以按不同的参考号仅显示摘要结果。预期结果是:
Reference Changes
--------- -----------------------
1234 Change1,Change2,Change3
2345 Change1,Change3
3456 Change1,Change2,Change3
任何提供的帮助将不胜感激!谢谢!
答案 0 :(得分:0)
如果您的数据是这样的,则可以在代码中添加group by和max,应该可以
proc sql;
create table work.changedata_summary as
select
Reference,
catx(',',max(chg1Desc),max(Chg2Desc), max(Chg3Desc)) as Changes length=1000
from
have
group by Reference
;
quit;
答案 1 :(得分:0)
我什至不会尝试在PROC SQL中做这样的事情。如果您只想查看每个变量的最后一个非空更改,则可以使用带有UPDATE语句的数据步骤将数据折叠为每个组一个观察值。
data want ;
update have (obs=0) have ;
by reference ;
length changes $500 ;
changes=catx(',',of change1-change3);
run;
答案 2 :(得分:0)
我将使用“数据”步骤进行此类操作
尝试一下
data want;
length change_tot $200.;
do until (last.Reference);
set have;
by Reference notsorted;
change_tot=catx(',',change_tot,Chg1Desc, Chg2Desc, Chg3Desc);
end;
Keep reference change_tot;
run;