user1828464
user1828464

Reputation: 11

nested for...loop in SAS

I'm quite new in SAS and there is latest code in sql that I have been stucked for a while to convert it in SAS platform. I also try with do..while loop in SAS but it didn't work.

for c in (select * from risk.mv_closed_deals d) loop    
  for DatesToInsert in (select distinct(T1.ACTUAL_DATE) as ACTUAL_DATE from VINTAGE_MTD T1 where T1.Actual_Date>c.closed_date) loop
     insert into VINTAGE_MTD (dealdate, actual_date, deal_month, mob, dealno, balance, loanamount, overduedays, status, server)
     values (c.issue_date, DatesToInsert.Actual_Date, to_char(c.issue_date,'yyyy/mm'),
     (to_char(DatesToInsert.actual_date,'yyyy')-to_char(c.issue_date,'yyyy'))*12 + to_char(DatesToInsert.actual_date,'mm') - to_char(c.issue_date,'mm') - 1,
     c.dealno, 0, c.loanamount, 0, 0, 'B2');
  end loop; 
end loop;

Upvotes: 1

Views: 417

Answers (1)

Dejan Peretin
Dejan Peretin

Reputation: 12089

I would try something like this:

proc sql;

create table vintage_mdt_new as
select c.issue_date as dealdate
      ,DatesToInsert.Actual_Date as actual_date
      ,put(c.issue_date, yymms.) as deal_month
      ,intck('month', DatesToInsert.actual_date, c.issue_date) as mob
      ,c.dealno as dealno
      ,0 as balance
      ,c.loanamount as loanamount
      ,0 as overduedays
      ,0 as status
      ,'B2' as server
from (select * from risk.mv_closed_deals) as c
     ,(select distinct(T1.ACTUAL_DATE) as ACTUAL_DATE 
       from VINTAGE_MTD T1) as DatesToInsert
where DatesToInsert.Actual_Date > c.closed_date;

quit;

proc append base=VINTAGE_MTD data=vintage_mdt_new;

Haven't tried it so I'm not sure if would work.

Upvotes: 1

Related Questions