我有一个包含三个变量的数据集:应用程序编号,拒绝代码和序列。现在,单个应用程序可能有多个拒绝代码(具有不同的序列号)。所以数据如下:
Application No Decline Code Sequence
1234 FG 1
1234 FK 3
1234 AF 2
1256 AF 2
1256 FK 1
.
.
.
.
等等
所以,我必须把它放在宽格式中,这样第一列包含唯一的应用程序编号,并且每个对应的代码都是它们的拒绝代码(我不需要序列号,只是拒绝代码应该按顺序出现它们的序列号从左到右,用逗号分隔)。像下面的东西
Application Number Decline Code
1234 FG, AF, FK
1256 FK, AF
..........
.........
等等
现在我尝试通过SAS上的应用程序编号破坏proc转置。但问题是它会创建多列,列出所有拒绝代码,然后如果某个拒绝代码不适用于某个应用程序,它将显示。在那里面。所以他们有许多缺失值,并不是我期望的格式。有没有办法在SAS或sql中执行此操作?
答案 0 :(得分:2)
PROC TRANSPOSE
当然可以提供帮助;如果你真的只想要一个变量,那么你可以将变量一起CATX:
data have;
input ApplicationNo DeclineCode $ Sequence ;
datalines;
1234 FG 1
1234 FK 3
1234 AF 2
1256 AF 2
1256 FK 1
;;;;
run;
proc sort data=have;
by ApplicationNo Sequence;
run;
proc transpose data=have out=want_pre;
by ApplicationNo;
var DeclineCode;
run;
data want;
set want_pre;
length decline_codes $1024;
decline_codes = catx(', ',of col:);
keep ApplicationNo decline_codes;
run;
您还可以使用first
和last
检查在一个datastep中轻松完成此操作。
data want_ds;
set have;
by ApplicationNo Sequence;
retain decline_codes;
length decline_codes $1024; *or whatever you need;
if first.ApplicationNo then call missing(decline_codes);
decline_codes = catx(',',decline_codes, DeclineCode);
if last.ApplicationNo then output;
run;