Hello,
I have a dataset with the following structure:
data have;
input data_set variable_name$ DATA_A$ DATA_B$ DATA_C$ DATA_D$ ;
cards;
1 A num . . .
1 B num . . .
1 C char . . .
1 D num . . .
2 A . num . .
2 B . num . .
2 C . char . .
2 D . num . .
3 A . . num .
3 B . . num .
3 C . . char .
3 D . . num .
4 A . . . num
4 B . . . num
4 C . . . char
4 D . . . num
;;;;;
run;
I want to end up with this:
data want;
input variable_name$ DATA_A$ DATA_B$ DATA_C$ DATA_D$ ;
cards;
A num num num num
B num num num num
C char char char char
D num num num num num
;;;;
run;
Which means that I want to summarize or align my dataset to make it more compact and remove the blank spaces.
Thanks for you help
Here is one way
proc sort data=have;
by variable_name;
run;
data want(drop=data_set);
update have(obs=0) have;
by variable_name;
run;
Result:
variable_name DATA_A DATA_B DATA_C DATA_D A num num num num B num num num num C char char char char D num num num num
Here is one way
proc sort data=have;
by variable_name;
run;
data want(drop=data_set);
update have(obs=0) have;
by variable_name;
run;
Result:
variable_name DATA_A DATA_B DATA_C DATA_D A num num num num B num num num num C char char char char D num num num num
Without a SORT
data have;
input data_set variable_name$ DATA_A$ DATA_B$ DATA_C$ DATA_D$ ;
cards;
1 A num . . .
1 B num . . .
1 C char . . .
1 D num . . .
2 A . num . .
2 B . num . .
2 C . char . .
2 D . num . .
3 A . . num .
3 B . . num .
3 C . . char .
3 D . . num .
4 A . . . num
4 B . . . num
4 C . . . char
4 D . . . num
;;;;;
run;
data _null_;
if _n_=1 then do;
dcl hash H (dataset:'have(obs=0)',ordered: "A") ;
h.definekey ("variable_name") ;
h.definedata ("variable_name","DATA_A", "DATA_B", "DATA_C","DATA_D") ;
h.definedone () ;
end;
set have end=l;
array t(*) DATA_A--DATA_D;
array u(4)$ _temporary_;
do _n_=1 to dim(t);
u(_n_)=t(_n_);
end;
_n_=whichc(coalescec(of u(*)),of u(*));
rc=h.find();
t(_n_)=u(_n_);
h.replace();
if l;
h.output(dataset:'want');
run;
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.