根据指标或其他行的状态动态更新行

时间:2013-12-15 18:50:28

标签: sas

在这个精彩的论坛成员的大力帮助下, 我的计划取得了一些进展, 但不幸的是我真的需要你的帮助......

我需要使用delta行更新源表。 问题是, 当RK已经存在于目标表中时, 很有可能需要更新一些变量。

假设目标表是empy,我有一个与此类似的数据,我用一段代码计算:

DATA HAVE;
RK = 1;
VERSION = 0;
ACT_DAILY_AMT_START_DT ="01jan1990"d ;
ACT_DAILY_AMT_END_DT    = "01feb1990"d ;
POLICY_EXPIRATION_DT = "22feb1990"d ;
ACT_DAILY_NET_PREMIUM_V_AMT = 1;
VERSION_EXPOSURE_DAYS_NO =30 ;
EXPOSED_NET_PREMIUM_V_AMT    = 12;
CALCULATED_NET_PREMIUM_V_AMT    = 4;
GAINED_NET_PREMIUM_V_AMT = 8;
REMAINING_NET_PREMIUM_AMT = 15;
ACT_DAILY_NET_PREMIUM_FX_V_AMT = 26;
ACT_DAILY_NET_PREMIUM_IB_V_AMT = 34;
DDS_ROW_IND = .;
CANCELLATION_IND = .;
FREEZED_IND =. ;
 STORNO_IND = .;
UNFREEZED_IND = .;
format ACT_DAILY_AMT_START_DT ACT_DAILY_AMT_END_DT POLICY_EXPIRATION_DT date9. ;
run;

现在,此行将插入DDS上的目标表中。

当源表中有更多相同RK的行时, 我从DDS上的taget表中获取所有行(在此示例中为1行),使用DDS_ROW_IND = 1标记它, 对它进行排序并将其添加到需要完成的整个计算中;

无需长时间或复杂阅读, 让我们说同一个RK的另一行到达源表:

DATA HAVE1;
RK = 1;
VERSION = 0;
ACT_DAILY_AMT_START_DT ="01jan1990"d ;
ACT_DAILY_AMT_END_DT    = "01feb1990"d ;
POLICY_EXPIRATION_DT = "22feb1990"d ;
ACT_DAILY_NET_PREMIUM_V_AMT = 1;
VERSION_EXPOSURE_DAYS_NO =30 ;
EXPOSED_NET_PREMIUM_V_AMT    = 12;
CALCULATED_NET_PREMIUM_V_AMT    = 4;
GAINED_NET_PREMIUM_V_AMT = 8;
REMAINING_NET_PREMIUM_AMT = 15;
ACT_DAILY_NET_PREMIUM_FX_V_AMT = 26;
ACT_DAILY_NET_PREMIUM_IB_V_AMT = 34;
DDS_ROW_IND = 1;
CANCELLATION_IND = .;
FREEZED_IND =. ;
STORNO_IND = .;
UNFREEZED_IND = .;

output;

RK = 1;
VERSION = 1;
ACT_DAILY_AMT_START_DT ="01feb1990"d ;
ACT_DAILY_AMT_END_DT    = "19mar1990"d ;
POLICY_EXPIRATION_DT = "22apr1990"d ;
ACT_DAILY_NET_PREMIUM_V_AMT = 8;
VERSION_EXPOSURE_DAYS_NO =1 ;
EXPOSED_NET_PREMIUM_V_AMT    = 5;
CALCULATED_NET_PREMIUM_V_AMT    =3;
GAINED_NET_PREMIUM_V_AMT = 1;
REMAINING_NET_PREMIUM_AMT = 6;
ACT_DAILY_NET_PREMIUM_FX_V_AMT = 44;
ACT_DAILY_NET_PREMIUM_IB_V_AMT = 8;
DDS_ROW_IND = 0;
CANCELLATION_IND = 1;
FREEZED_IND =. ;
STORNO_IND = .;
UNFREEZED_IND = .;
output;
format ACT_DAILY_AMT_START_DT ACT_DAILY_AMT_END_DT POLICY_EXPIRATION_DT date9. ;
run;

注意我将第一行的DDS_ROW_IND更新为等于1;

现在, 因为第二行有变量CANCELLATION_IND = 1, 假设我需要从前一行取消一些逻辑, 重新计算并保留结果。

例如,

变量ACT_DAILY_AMT_START_DT应该是第二行的POLICY_EXPIRATION_DT的结果,第一行的减号ACT_DAILY_AMT_START_DT,GAINED_NET_PREMIUM_V_AMT应该等于ACT_DAILY_AMT_START_DT / ACT_DAILY_NET_PREMIUM_FX_V_AMT的结果,并且应该保留。 让我们说, 下一个delta(第三行)有一个指标STORNO_IND = 1,基本上说第二行是一个错误, 让我们撤消到目前为止的计算......

请记住,我有8个不同的状态(指标),其中一些只是取消了其他状态......

更重要的是, 第二行和第三行可以在源表中一起显示,并且可以单独出现,每个都在不同的运行中...

有人可以给我一个提示如何开始编写这个任务....?

非常感谢您的帮助。

0 个答案:

没有答案
相关问题