早上好,我正在浏览政策档案,并想要创建一个变量(列),以显示一年前的政策价格。
每个策略都有一个策略ID,存档中有每个策略(包括续订)。因此,同一策略ID可以在归档中出现多次,但每隔一列具有不同的值。例如,说我有这个
Policy_ID Start_Date End_Date Premium LYPremium15 LYPremium16
1 01/01/2015 31/12/2015 500 . .
2 04/03/2015 03/03/2016 450 . .
3 03/02/2015 02/02/2016 600 . .
4 07/04/2015 06/04/2016 470 . .
5 01/01/2015 31/12/2015 500 . .
2 04/03/2016 03/03/2017 510 . .
我想用上一年的溢价填充LYPremium15,LYPremium16,LYPremium17列。所以看起来像这样,
Policy_ID Start_Date End_Date Premium LYPremium15 LYPremium16
1 01/01/2015 31/12/2015 500 . .
2 04/03/2015 03/03/2016 450 . .
3 03/02/2015 02/02/2016 600 . .
4 07/04/2015 06/04/2016 470 . .
5 01/01/2015 31/12/2015 500 . .
2 04/03/2016 03/03/2017 510 450 .
因为策略ID 2是续订,所以它确实有去年的数据。 我是SAS的新手,不确定如何编写此代码。我正在考虑将其中与 if 和包含结合使用,但是我不确定这是一个选择。 我可以使用创建变量的标准方法吗?
data mylib.van_LYprem;
set mylib.van_combined_total;
LYPrem15=...;
run;
还是我必须以更高级的方式来解决这个问题?
答案 0 :(得分:1)
SAS将按记录处理您的数据集记录。因此,您必须保留旧的年份值。
我认为开始日期决定了年份。 如果我们像这样对数据集进行排序:
proc sort data=work.van_combined_total;
by Policy_ID start_date;
run;
我们可以使用by语句并保留值;
data work.van_LYprem;
set work.van_combined_total;
by Policy_ID start_date;
retain LYPrem15 LYPrem16 LYPrem17;
if (first.Policy_ID) then do;
LYPrem15=.;
LYPrem16=.;
LYPrem17=.;
end;
output;
if(year(start_date) eq 2015) then do;
LYPrem15=Premium;
end;
if(year(start_date) eq 2016) then do;
LYPrem16=Premium;
end;
if(year(start_date) eq 2017) then do;
LYPrem17=Premium;
end;
run;
此后,您将获得带有premium和LYPremiumXX的记录。如果一年内有更多续订,您将只有LYPremiumXX中的最后一个值... 您可以使用宏的...使它更具动态性。