BookmarkSubscribeRSS Feed
bollibompa
Quartz | Level 8

I think I am doing something wrong with the retain statement.

I hope someone can guide me.

I have a table like this and I want to carry forward the last observed date

ID     date

1     01jan2013

1     .

1     .

1     12mar2013

1     .

1     .

2     07feb2013

2     .

2     .

2     25apr2013

2     .

2.     .

The result should look like this:

ID     date

1     01jan2013

1     01jan2013

1     01jan2013

1     12mar2013

1     12mar2013

1     12mar2013

2     07feb2013

2     07feb2013

2     07feb2013

2     25apr2013

2     25apr2013

2.     25apr2013

Thanks

Thomas

5 REPLIES 5
data_null__
Jade | Level 19

You could use the update trick.  Vertical coalesce.

data have;
   input ID  date :date.;
  
format date date9.;
  
cards;
1     01jan2013
1     .
1     .
1     12mar2013
1     .
1     .
2     07feb2013
2     .
2     .
2     25apr2013
2     .
2.     .
;;;;
   run;
data locf;
   update have(obs=0) have;
   by id;
   output;
  
run;
proc print;
  
run;

Obs    ID         date

 
1     1    01JAN2013
 
2     1    01JAN2013
 
3     1    01JAN2013
 
4     1    12MAR2013
 
5     1    12MAR2013
 
6     1    12MAR2013
 
7     2    07FEB2013
 
8     2    07FEB2013
 
9     2    07FEB2013
10     2    25APR2013
11     2    25APR2013
12     2    25APR2013
bollibompa
Quartz | Level 8

Thanks!

Works fine!

Just curious, would it be possible to do the same operation with retain? Just trying to understand the retain statement

/Thomas

RW9
Diamond | Level 26 RW9
Diamond | Level 26

Hi,

data want (drop=lstdate);

  set have;

  retain lstdate;

  if date ne . then lstdate=date;

  else date=lstdate;

run;

Ksharp
Super User
data have;
   input ID  date :date.; 
   format date date9.; 
   cards; 
1     01jan2013
1     .
1     .
1     12mar2013
1     .
1     .
2     07feb2013
2     .
2     .
2     25apr2013
2     .
2.     .
;;;;
   run; 
data want(drop=d);
 set have(rename=(date=d));
 by id;
 retain date;
 if first.id or not missing(d) then date=d;
 format date date9.;
run;

Xia Keshan

data_null__
Jade | Level 19

bollibompa wrote:

Just curious, would it be possible to do the same operation with retain? Just trying to understand the retain statement

/Thomas

As you can see from the other replies it NOT possible to do Vertical Coalesce with retain. 

CFC_SAS_Communities_400x225.jpg

Call for content now open!

It's your turn to help shape SAS Innovate 2027. Share your expertise and inspire the SAS community.

Submit your proposal →

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

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
  • 5 replies
  • 3083 views
  • 0 likes
  • 4 in conversation