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

Hi, everyone. 

I have a dataset with 3 columns, as shown above. The first column, COD_SEG, represents the internal code for each person. The second column, DT_OCORR, represents the date of a specific event (format yymmd7.). The last column,, CIA_ESCOLHIDA, provides a reference for the corresponding COD_SEG and DT_OCORR. 

My date variable (DT_OCORR) is skipping (jumping) months. I need to insert the missing dates for each COD_SEG. When doing this, I need to fill the other 2 columns with the information from the previous row. Like this.

I have: 

COD_SEGDT_OCORRCIA_ESCOLHIDA
371922021-081806
371922022-021806
371922022-031806
371922022-041806
371922022-061806
371922022-071806
371922022-081806
371922022-091806
371922022-102110
371922022-122110
371922023-012110

 

I need (I have bolded the lines that need to be inserted):

COD_SEGDT_OCORRCIA_ESCOLHIDA
371922021-081806
371922021-091806
371922021-101806
371922021-111806
371922021-121806
371922022-011806
371922022-021806
371922022-031806
371922022-041806
371922022-051806
371922022-061806
371922022-071806
371922022-081806
371922022-091806
371922022-102110
371922022-112110
371922022-122110
371922023-012110

 

My database have so many rows. I need an way to do this for a lot of records. 

Anyone can help me? I'm using SAS Enterprise Guide.

1 ACCEPTED SOLUTION

Accepted Solutions
PeterClemmensen
Tourmaline | Level 20

 

data have;
infile cards expandtabs truncover;
input COD_SEG	DT_OCORR :anydtdte.	CIA_ESCOLHIDA;
format DT_OCORR yymmd7.;
cards;
37192	2021-08 1806
37192	2022-02 1806
37192	2022-03 1806
37192	2022-04 1806
37192	2022-06 1806
37192	2022-07 1806
37192	2022-08 1806
37192	2022-09 1806
37192	2022-10 2110
37192	2022-12 2110
37192	2023-01 2110
;

proc timeseries data = have out = want;
   by COD_SEG;
   id DT_OCORR interval = month
               setmiss  = prev;
   var CIA_ESCOLHIDA;
   format DT_OCORR yymmd7.;
run;

 

 

Result:

 

COD_SEG  DT_OCORR  CIA_ESCOLHIDA
37192    2021-08   1806
37192    2021-09   1806
37192    2021-10   1806
37192    2021-11   1806
37192    2021-12   1806
37192    2022-01   1806
37192    2022-02   1806
37192    2022-03   1806
37192    2022-04   1806
37192    2022-05   1806
37192    2022-06   1806
37192    2022-07   1806
37192    2022-08   1806
37192    2022-09   1806
37192    2022-10   2110
37192    2022-11   2110
37192    2022-12   2110
37192    2023-01   2110

View solution in original post

3 REPLIES 3
Ksharp
Super User
data have;
infile cards expandtabs truncover;
input COD_SEG	DT_OCORR :anydtdte.	CIA_ESCOLHIDA;
format DT_OCORR :yymmd7.;
cards;
37192	2021-08 1806
37192	2022-02 1806
37192	2022-03 1806
37192	2022-04 1806
37192	2022-06 1806
37192	2022-07 1806
37192	2022-08 1806
37192	2022-09 1806
37192	2022-10 2110
37192	2022-12 2110
37192	2023-01 2110
;

proc sort data=have out=temp;
by COD_SEG	DT_OCORR;
run;
data want;
 merge temp temp(firstobs=2 keep=COD_SEG DT_OCORR rename=(COD_SEG=_COD_SEG DT_OCORR=_DT_OCORR));
 output;
 if COD_SEG=_COD_SEG then do;
   do i=1 to intck('month',DT_OCORR,_DT_OCORR)-1;
    DT_OCORR=intnx('month',DT_OCORR,1);output;
   end;
 end;
drop i _COD_SEG _DT_OCORR;
run;
PeterClemmensen
Tourmaline | Level 20

 

data have;
infile cards expandtabs truncover;
input COD_SEG	DT_OCORR :anydtdte.	CIA_ESCOLHIDA;
format DT_OCORR yymmd7.;
cards;
37192	2021-08 1806
37192	2022-02 1806
37192	2022-03 1806
37192	2022-04 1806
37192	2022-06 1806
37192	2022-07 1806
37192	2022-08 1806
37192	2022-09 1806
37192	2022-10 2110
37192	2022-12 2110
37192	2023-01 2110
;

proc timeseries data = have out = want;
   by COD_SEG;
   id DT_OCORR interval = month
               setmiss  = prev;
   var CIA_ESCOLHIDA;
   format DT_OCORR yymmd7.;
run;

 

 

Result:

 

COD_SEG  DT_OCORR  CIA_ESCOLHIDA
37192    2021-08   1806
37192    2021-09   1806
37192    2021-10   1806
37192    2021-11   1806
37192    2021-12   1806
37192    2022-01   1806
37192    2022-02   1806
37192    2022-03   1806
37192    2022-04   1806
37192    2022-05   1806
37192    2022-06   1806
37192    2022-07   1806
37192    2022-08   1806
37192    2022-09   1806
37192    2022-10   2110
37192    2022-11   2110
37192    2022-12   2110
37192    2023-01   2110

sas-innovate-white.png

Missed SAS Innovate in Orlando?

Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.

 

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
  • 3 replies
  • 789 views
  • 1 like
  • 3 in conversation