SAS Programming

DATA Step, Macro, Functions and more
BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
maroulator
Obsidian | Level 7

 

My data currently looks like this:

 

LoanID    Cycle_Year    Default_Year  Payoff_Year

54364          2008                2008             .

54364          2010                2010             .

76943          2008                2008             .

76943          2012                  .              2012

 

Is there any way that I can "unroll" my data to look like this? Basically, I need the full spectrum of years from 2006 to 2012.

 

LoanID    Cycle_Date    Default_Date  Payoff_Date

54364           2006                 .                      .

54364           2007                 .                      .

54364           2008              2008                  .

54364           2009                 .                      .

54364           2010              2010                  .

54364           2011                 .                      .

54364           2012                 .                      .

76943           2006                 .                      .

76943           2007                 .                      .

76943           2008              2008                  .

76943           2009                  .                     .

76943           2010                  .                     .

76943           2011                  .                     .

76943           2012                  .                  2012

1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

%let start=2006;

%let end=2012;

 

data have;
infile cards;
input loanid cycle_year default_year payoff_year;
cards;
54364 2008 2008 .
54364 2010 2010 .
76943 2008 2008 .
76943 2012 . 2012
;
run;

 

data int (keep=loanid cycle_date); *create all years from every input record;

set have;

do cycle_date = &start to &end;

  output;

end;

run;

 

proc sql;

create table want as

select distinct a.loanid, a.cycle_date, b.default_year as default_date, b.payoff_year as payoff_date

from int a left join have b on a.loanid = b.loanid and a.cycle_date = b.cycle_year;

quit;

 

View solution in original post

1 REPLY 1
Kurt_Bremser
Super User

%let start=2006;

%let end=2012;

 

data have;
infile cards;
input loanid cycle_year default_year payoff_year;
cards;
54364 2008 2008 .
54364 2010 2010 .
76943 2008 2008 .
76943 2012 . 2012
;
run;

 

data int (keep=loanid cycle_date); *create all years from every input record;

set have;

do cycle_date = &start to &end;

  output;

end;

run;

 

proc sql;

create table want as

select distinct a.loanid, a.cycle_date, b.default_year as default_date, b.payoff_year as payoff_date

from int a left join have b on a.loanid = b.loanid and a.cycle_date = b.cycle_year;

quit;

 

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

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