BookmarkSubscribeRSS Feed
hdg
Obsidian | Level 7 hdg
Obsidian | Level 7

Hi,

I have a dataset called security

dates                     security      index

04/04/2012               A               1.12

04/05/2012               A               1.13

04/06/2012               A               1.14

04/09/2012               A               1.15

04/05/2012               B               1

04/09/2012               B               1.04 

Hello, I am looking to fill in the missing data for the above table for example, for each security I would look at what the min and the max date is and fill it with all bus dates in the middle and if there is any missing date I would fill it with the previous available data so for example the above set would look like

dates                     security      index

04/04/2012               A               1.12

04/05/2012               A               1.13

04/06/2012               A               1.14

04/09/2012               A               1.15

04/05/2012               B               1

04/06/2012               B               1

04/09/2012               B               1.04  

I would not add the 04/04/2012 for B. I am not really sure what syntax I should be using for this any help is appreciated thanks!

1 REPLY 1
data_null__
Jade | Level 19

Some call this LOCF in PROC EXPAND it is call step interpolation.  You will need to define BUS day.  I used Mon-Fri. but you may want to account for holidays SAS has some tools to help with that.

data sec;
   input date:mmddyy. security:$1.  index;
   format date date9.;
  
cards;
04/04/2012               A               1.12
04/05/2012               A               1.13
04/06/2012               A               1.14
04/09/2012               A               1.15
04/05/2012               B               1
04/09/2012               B               1.04 
;;;;
   run;
proc summary data=sec nway;
  
class sec:;
   output out=mm(drop=_type_) min(date)=min max(date)=max;
  
run;
data frame(keep=security date) / view=frame;
   set mm;
   do date = min to max;
      if weekday(date) in(2:6) then output;
     
end;
  
format date date9.;
  
run;
data filled / view=filled;
   merge sec frame;
   by security date;
   run;
data locf;
   update filled(obs=0) filled;
   by security;
   output;
  
run;
     

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

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
  • 1 reply
  • 884 views
  • 0 likes
  • 2 in conversation