On Feb 10, 5:56 pm, "ajs2
...@bigfoot.com" <ajs2
...@bigfoot.com> wrote:
> data have;
> input id group value $;
> datalines;
> 111 1 ABC
> 111 1 DEF
> 111 2 GHI
> 222 1 ABC
> 222 2 DEF
> 222 3 GHI
> 333 1 ABC
> 333 1 XYZ
> ;
> run;
> data want;
> set have;
> length newvar $32; /* make sure it's long enough */
> by id group;
> if (first.group) then newvar = value;
> else newvar = cats(newvar, '/', value);
> if (last.group);
> retain newvar;
> run;
> proc print data=want;
> run;
> On Feb 9, 11:48 pm, Al <ali6...@gmail.com> wrote:
> > All:
> > This is the data i have ,per ID and per group, i want to create a new
> > field (newvar) by concatenating values in Value field. desired output
> > pasted below
> > ID Group value
> > 111 1 ABC
> > 111 1 DEF
> > 111 2 GHI
> > 222 1 ABC
> > 222 2 DEF
> > 222 3 GHI
> > 333 1 ABC
> > 333 1 XYZ
> > Desired Output
> > ID Group value newvar
> > 111 1 ABC ABC/DEF
> > 111 2 GHI GHI
> > 222 1 ABC ABC
> > 222 2 DEF DEF
> > 222 3 GHI GHI
> > 333 1 ABC ABC/XYZ
> > Thanks in advance
> > Al- Hide quoted text -
> - Show quoted text -
For retaining the first obs of value:-
data inp;
input ID Group Value $;
datalines;
111 1 ABC
111 1 DEF
111 2 GHI
222 1 ABC
222 2 DEF
222 3 GHI
333 1 ABC
333 1 XYZ
;
run;
proc sort data = inp ;
by id group;
run;
data new2(rename = (test = value));
set inp;
retain test newvar;
by id group;
if first.group then do ;
newvar = value;
test = value;
end;
else newvar = compress(newvar||'/'||value);
if last.group then output;
drop value;
run;