Help using Base SAS procedures

Converting data to other columns

Accepted Solution Solved
Reply
Contributor
Posts: 33
Accepted Solution

Converting data to other columns

How do I use the lag function or any other function for that matter... I want to convert my data from column a to column b c d depending upon the data in  a :

abcd
1
2
3
411
5
6
721
81
9
1021
111
12
1331
141
151
16
17

Accepted Solutions
Solution
‎06-13-2014 08:31 AM
Respected Advisor
Posts: 3,124

Re: Converting data to other columns

Something like this?

data have;

     infile cards dlm='09'x truncover;

     input ID a;

     cards;

1         

2         

3         

4    1   

5         

6         

7    2   

8         

9         

10   2   

11        

12        

13   3   

14        

15        

;

data want;

     set have;

     retain _c _d;

     if a=1 then

           b=1;

     if a=2 then

           _c=_n_;

     if _n_<=_c+1 then

           c=1;

     if a=3 then

           _d=_N_;

     if _n_<=_d+2 then

           d=1;

     drop _:;

run;

Haikuo

View solution in original post


All Replies
Solution
‎06-13-2014 08:31 AM
Respected Advisor
Posts: 3,124

Re: Converting data to other columns

Something like this?

data have;

     infile cards dlm='09'x truncover;

     input ID a;

     cards;

1         

2         

3         

4    1   

5         

6         

7    2   

8         

9         

10   2   

11        

12        

13   3   

14        

15        

;

data want;

     set have;

     retain _c _d;

     if a=1 then

           b=1;

     if a=2 then

           _c=_n_;

     if _n_<=_c+1 then

           c=1;

     if a=3 then

           _d=_N_;

     if _n_<=_d+2 then

           d=1;

     drop _:;

run;

Haikuo

Super User
Posts: 9,657

Re: Converting data to other columns

data have;
     infile cards  truncover;
     input ID a ;
     cards;
1         
2         
3         
4    1   
5         
6         
7    2   
8         
9         
10   2   
11        
12        
13   3   
14        
15        
;
run;
proc sql noprint;
 select count(a) into : n from have;
quit;
data want(drop=i id n);
 set have;
 array x{*} n1-n%left(&n) ;
 if not missing(a) then do;
  n+1;
  do i=1 to a;
   x{n}=1;output; a=.;
  end; end;
else output;
run;


Xia Keshan

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 160 views
  • 0 likes
  • 3 in conversation