sas - 如何计算每年的观测值
问题描述
大家好,
我今天带着一个我无法解决的问题来,因为我不知道从哪里开始。
我想计算过去 x 年每个特定年份和每个 YearXmonth 的投资组合的总敞口。
例如,如果合约从 2018 年 1 月 1 日开始,到 2018 年 11 月 15 日结束,则该合约在 2018 年已被曝光 11 个月或 11/12 年或 318 天。在 2018 年 1 月,合约已被曝光 1 个月,1/ 12年或31天,...
2019年,合约完全没有曝光。
这是我掌握的信息:
data have;
length ID Status $ 40;
input Id Status $ Date_of_effect Date_Status ;
informat Date_of_effect Date_Status date9.;
format Date_of_effect Date_Status date9.;
infile datalines missover;
datalines;
1 Ongoing 05jul2015 05jul2015
1 Transformation 23Oct2014 05jul2015
2 Death 07jan2017 02dec2018
3 Finished 13feb2005 13feb2015
4 NoEffect 06nov2016 06nov2016
5 Cancellation 08MAR2014 19dec2018
6 Pending 21oct2018 21oct2018
;
run;
ID是合同号
状态是合约的当前状态
Date_of_effect 是合同生效并开始公开的日期。
Date_Status 是更改状态的日期。
对于状态为“Noeffect”、“Ongoing”或“Pending”的合同,date_of_effect 等于 Status_date。对于正在进行和未决的合同,我需要计算今天的风险敞口。所以,我认为我需要为这些合同应用不同的规则。对于其他状态,合约已经暴露在 Date_of_effect 和 Date_Status 之间。
我想创建 3 个不同的表,其中第一个表总结了每年以天数和年数表示的总暴露量。
data Want_1;
input Year Sum_Exposition_in_year Sum_Exposition_in_months Sum_Exposition_in_days;
infile datalines missover;
datalines;
2014
2015
2016
2017
2018
2019
;
run;
第二张表基本相同,只是我引入了一个额外的分段:
data Want_2;
input Year month Sum_Exposition_in_year Sum_Exposition_in_months Sum_Exposition_in_days;
infile datalines missover;
datalines;
2014 1
2014 2
2014 3
2014 4
2014 5
2014 6
2014 7
2014 8
2014 9
2014 10
2014 11
2014 12
2015 1
2015 2
2015 3
2015 4
2015 5
2015 6
2015 7
2015 8
2015 9
2015 10
2015 11
2015 12
... ...
;
run;
最后,我想计算以日和月表示的几年内每份合约的风险敞口。
data Want_3;
length ID Status $ 40;
input Id Status $ Date_of_effect Date_Status Expo_days_2015 Expo_days_2016 Expo_days_2017 Expo_days_2018 Expo_days_2019 Expo_month_2015 Expo_month_2016 Expo_month_2017 Expo_month_2018 Expo_month_2019 ;
informat Date_of_effect Date_Status date9.;
format Date_of_effect Date_Status date9.;
infile datalines missover;
datalines;
1 Ongoing 05jul2015 05jul2015 179 365 365 365 153 6 12 12 12 6
1 Transformation 23Oct2014 05jul2015
2 Death 07jan2017 02dec2018
3 Finished 13feb2005 13feb2015
4 NoEffect 06nov2016 06nov2016
5 Cancellation 08MAR2014 19dec2018
6 Pending 21oct2018 21oct2018
;
run;
如果我不够清楚,我很抱歉。不要犹豫,问我更多细节。
先感谢您。
解决方案
我几乎实现了我想要的,但是在宏语句中创建宏变量时我被卡住了。
感谢您对我的帖子发表评论。我更喜欢自学以提高我在 sas 方面的知识。:)
%let a=2015;
%let b=2019;
data Want_0 (drop=i) ;
set have;
array Expo_d_ (&a.:&b.) Expo_d_&a.-Expo_d_&b.;
array Expo_m_ (&a.:&b.) Expo_m_&a.-Expo_m_&b.;
if Status = "Ongoing" or Status="Pending" then
Date_Status=today();
do i=&a. to &b.;
Expo_d_(i) = max(0,min(mdy(01,01,i+1),Date_Status)-max(Date_of_effect,mdy(1,1,i)));
Expo_m_(i) = max(0,round((min(mdy(01,01,i+1),Date_Status)-max(Date_of_effect,mdy(1,1,i)))/(365.25/12),1));
end;
run;
%macro Do_stock;
proc sql noprint;
%do i=&a. %to &b.;
select sum(Expo_d_&i.) into: Expo_d_&i.
from work.Want_0;
select sum(Expo_m_&i.) into: Expo_m_&i.
from work.Want_0;
%end;
quit;
run;
%do i=&a. %to &b.;
%put Expo_d_&i.;
%put Expo_m_&i.;
%end;
%mend;
%Do_stock;
data Want_1 ( drop=i);
do i = &a. to &b.;
year= i;
Expo_day=&Expo_d_&i.;
Expo_month=&Expo_m_&i.;
end;
run;
推荐阅读
- azure - 提取和解析文件的最佳技术是什么
- c# - 调用 C++/CLI 包装器时出现外部异常 E0434352
- vb.net - VB 2019 以给定格式打印表单的内容(不是打印表单)
- php - 为什么我的 Facades 在更新到 Laravel 7.3 后停止工作?
- excel - Excel - 条件格式特殊
- apache-spark - Spark中的K折目标编码
- reactjs - 没有它 React.forwardRef 已经是可能的了,那它有什么用呢?
- null - Null : AssertionConsumerService => saml2AuthnResponse.CreateSession 期间的对象引用
- scala - 为什么Scala PartialFunction isDefinedAt 方法总是返回true?
- alpine.js - 使用 Alpine.js 和 new FormData() 返回提交的 POST 数据