table 1
policy start_date end_date total_premium
p1 jan-19 jan-20 120
p2 jan-19 oct-19 100
p3 jan-19 may-19 50
table2
policy start_date end_date premium
p1 jan-19 feb-19 10
p1 feb-19 mar-19 10
p1 mar-19 apr-19 10
p1 apr-19 may-19 10
p1 may-19 jun-19 10
p1 jun-19 jul-19 10
p1 jul-19 aug-19 10
p1 aug-19 sep-19 10
p1 sep-19 oct-19 10
p1 oct-19 nov-19 10
p1 nov-19 dec-19 10
Is this like Jeopardy? Are we supposed to supply the question that leads to your given answer?
Looks like you want to count the number of months and divide the premium by that number.
data have;
input policy $ (start_date end_date) (:anydtdte.) total_premium ;
format start_date end_date yymmdd10.;
cards;
p1 jan-19 jan-20 120
p2 jan-19 oct-19 100
p3 jan-19 may-19 50
;
data want;
set have;
months=intck('month',start_date,end_date);
premium=total_premium/months;
do month=1 to months;
date=intnx('month',start_date,month-1,'b');
output;
end;
format date yymmdd10.;
run;
total_ Obs policy start_date end_date premium months premium month date 1 p1 2019-01-01 2020-01-01 120 12 10.0000 1 2019-01-01 2 p1 2019-01-01 2020-01-01 120 12 10.0000 2 2019-02-01 3 p1 2019-01-01 2020-01-01 120 12 10.0000 3 2019-03-01 4 p1 2019-01-01 2020-01-01 120 12 10.0000 4 2019-04-01 5 p1 2019-01-01 2020-01-01 120 12 10.0000 5 2019-05-01 6 p1 2019-01-01 2020-01-01 120 12 10.0000 6 2019-06-01 7 p1 2019-01-01 2020-01-01 120 12 10.0000 7 2019-07-01 8 p1 2019-01-01 2020-01-01 120 12 10.0000 8 2019-08-01 9 p1 2019-01-01 2020-01-01 120 12 10.0000 9 2019-09-01 10 p1 2019-01-01 2020-01-01 120 12 10.0000 10 2019-10-01 11 p1 2019-01-01 2020-01-01 120 12 10.0000 11 2019-11-01 12 p1 2019-01-01 2020-01-01 120 12 10.0000 12 2019-12-01 13 p2 2019-01-01 2019-10-01 100 9 11.1111 1 2019-01-01 14 p2 2019-01-01 2019-10-01 100 9 11.1111 2 2019-02-01 15 p2 2019-01-01 2019-10-01 100 9 11.1111 3 2019-03-01 16 p2 2019-01-01 2019-10-01 100 9 11.1111 4 2019-04-01 17 p2 2019-01-01 2019-10-01 100 9 11.1111 5 2019-05-01 18 p2 2019-01-01 2019-10-01 100 9 11.1111 6 2019-06-01 19 p2 2019-01-01 2019-10-01 100 9 11.1111 7 2019-07-01 20 p2 2019-01-01 2019-10-01 100 9 11.1111 8 2019-08-01 21 p2 2019-01-01 2019-10-01 100 9 11.1111 9 2019-09-01 22 p3 2019-01-01 2019-05-01 50 4 12.5000 1 2019-01-01 23 p3 2019-01-01 2019-05-01 50 4 12.5000 2 2019-02-01 24 p3 2019-01-01 2019-05-01 50 4 12.5000 3 2019-03-01 25 p3 2019-01-01 2019-05-01 50 4 12.5000 4 2019-04-01
Is this like Jeopardy? Are we supposed to supply the question that leads to your given answer?
Looks like you want to count the number of months and divide the premium by that number.
data have;
input policy $ (start_date end_date) (:anydtdte.) total_premium ;
format start_date end_date yymmdd10.;
cards;
p1 jan-19 jan-20 120
p2 jan-19 oct-19 100
p3 jan-19 may-19 50
;
data want;
set have;
months=intck('month',start_date,end_date);
premium=total_premium/months;
do month=1 to months;
date=intnx('month',start_date,month-1,'b');
output;
end;
format date yymmdd10.;
run;
total_ Obs policy start_date end_date premium months premium month date 1 p1 2019-01-01 2020-01-01 120 12 10.0000 1 2019-01-01 2 p1 2019-01-01 2020-01-01 120 12 10.0000 2 2019-02-01 3 p1 2019-01-01 2020-01-01 120 12 10.0000 3 2019-03-01 4 p1 2019-01-01 2020-01-01 120 12 10.0000 4 2019-04-01 5 p1 2019-01-01 2020-01-01 120 12 10.0000 5 2019-05-01 6 p1 2019-01-01 2020-01-01 120 12 10.0000 6 2019-06-01 7 p1 2019-01-01 2020-01-01 120 12 10.0000 7 2019-07-01 8 p1 2019-01-01 2020-01-01 120 12 10.0000 8 2019-08-01 9 p1 2019-01-01 2020-01-01 120 12 10.0000 9 2019-09-01 10 p1 2019-01-01 2020-01-01 120 12 10.0000 10 2019-10-01 11 p1 2019-01-01 2020-01-01 120 12 10.0000 11 2019-11-01 12 p1 2019-01-01 2020-01-01 120 12 10.0000 12 2019-12-01 13 p2 2019-01-01 2019-10-01 100 9 11.1111 1 2019-01-01 14 p2 2019-01-01 2019-10-01 100 9 11.1111 2 2019-02-01 15 p2 2019-01-01 2019-10-01 100 9 11.1111 3 2019-03-01 16 p2 2019-01-01 2019-10-01 100 9 11.1111 4 2019-04-01 17 p2 2019-01-01 2019-10-01 100 9 11.1111 5 2019-05-01 18 p2 2019-01-01 2019-10-01 100 9 11.1111 6 2019-06-01 19 p2 2019-01-01 2019-10-01 100 9 11.1111 7 2019-07-01 20 p2 2019-01-01 2019-10-01 100 9 11.1111 8 2019-08-01 21 p2 2019-01-01 2019-10-01 100 9 11.1111 9 2019-09-01 22 p3 2019-01-01 2019-05-01 50 4 12.5000 1 2019-01-01 23 p3 2019-01-01 2019-05-01 50 4 12.5000 2 2019-02-01 24 p3 2019-01-01 2019-05-01 50 4 12.5000 3 2019-03-01 25 p3 2019-01-01 2019-05-01 50 4 12.5000 4 2019-04-01
Please explain the logic you want applied and post the data in usable form. Is the second table complete? Should the first obs of table be processed, only?
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Lock in the best rate now before the price increases on April 1.
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.