What I think you want is beyond the scope of the macro, but can be accomplished by adding a proc sort and data step before running the macro. e.g.:
data have ;
infile datalines missover dlm=',';
length ID text_id $12 value $12 details $12;
input ID text_id $ value $ details $;
datalines;
14555, first_name, john
14555, last_name, smith
14555, var1, white
14555, sex, m, male
14555, var3, colt
14555, var3, colt
14555, var3, colt
14555, var 4, hollywood
15555, first_name, Janne
15555, last_name, gray
15555, birht_date, 10091950, 10/9/1950
15555, var1, orange
15555, var1, orange
15555, var1, orange
15555, var1, orange
15555, sex, f, female
15555, var2, Xmen
15555, var5, light*yellow
16666, first_name, bruce
16666, last_name, banner
16666, var1, green
16666, var1, gray
16666, var1, red
;
proc sort data=have out=need nodupkey;
by id text_id value;
run;
data need (drop=_:);
length value $36;
retain value;
set need(rename=(value=_value));
by id text_id;
if first.text_id then value=_value;
else value=catx(',',value,_value);
run;
%transpose(data=need, out=need, by=id, var=value,
id=text_id, use_varname=no, convertid=yes)
proc format;
value $sex
'm'='Male'
'f'='Female'
;
run;
data want(drop=_:);
set need(rename=(birht_date=_birht_date));
birth_date=input(_birht_date,mmddyy8.);
format birth_date date9.;
format sex $sex.;
run;
proc print data=want;
run;
That should come close to what I think you want.
Art, CEO, AnalystFinder.com
... View more