BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
pkopersk
Fluorite | Level 6

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

1 ACCEPTED SOLUTION

Accepted Solutions
PeterClemmensen
Tourmaline | Level 20

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

 

View solution in original post

2 REPLIES 2
PeterClemmensen
Tourmaline | Level 20

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

 

novinosrin
Tourmaline | Level 20

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;

sas-innovate-white.png

Special offer for SAS Communities members

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.

 

View the full agenda.

Register now!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 759 views
  • 1 like
  • 3 in conversation