SAS proc sql,如何找出每个索赔案例的年表中缺失的行?

问题描述 投票:0回答:1

我正在制定索赔案件的年度表格。目标是对于每个现有索赔,每年年底应该有一行来反映该索赔案例的情况。例如索赔A已于2020年开放并于2020年关闭,在数据库中我只会有一行是日期为 31/12/2020 的行。我应该为 2021-2024 年添加 2020 年的重复项,这样每年就有一行。经理将汇总所有索赔案件的所有费用。现在我已经弄清楚如果这个案例最终结束的话如何添加 2021-2024 年的行。

我没有找到解决方案的具体案例是重新审理的案例。以此为例,假设索赔 A 于 2023 年重新提出。因为现在状态为活动状态,所以数据库中存在 2023 年和 2024 年的行。但缺少 2021 年和 2022 年的行。由于我们需要累计总数,所以首先需要解决的是缺少哪一年,然后重复哪一年的情况?在这种情况下,该计划应该在 2021 年和 2022 年重复 2020 年的情况。社区能否给我一个可以进一步工作的方向?提前谢谢您!

PROC SQL ;
CREATE TABLE ClosedClaims_LatestRecordw AS
SELECT     *, 1 AS JOIN_KEY
FROM ClosedClaimsw
WHERE DATE = MAXMAXDATE;
quit;

proc sql;
   create table year_table (YEAR num , JOIN_KEY num);
/*insert values into table*/         
   insert into year_table
    values( 2020 , 1 )
    values( 2021 , 1 )
    values( 2022 , 1 )
    values( 2023 , 1 )
    values( 2024 , 1 );
/*display table*/
   select * from year_table;
quit;

Proc sql;
CREATE TABLE ClosedClaims_Joinw AS
SELECT     CC.*, YT.YEAR AS YEAR_ADDEDRECORD
FROM ClosedClaims_LatestRecordw CC
INNER JOIN year_table YT ON CC.JOIN_KEY = YT.JOIN_KEY;
quit;

* in this code, keep only the extra lines that is newer than the maxdate of the claim;
proc sql;
CREATE TABLE ClosedClaims_NewRecordsw AS
SELECT     * FROM     ClosedClaims_Joinw
WHERE YEAR( DATE ) < YEAR_ADDEDRECORD;
quit;
sas proc-sql
1个回答
0
投票

不要使用 SQL 来做在普通 SAS 代码中容易得多的事情。

因此,假设您有一个名为 CLAIM_CASES 的数据集,其中包含变量 OPENED_DATE 和 CLOSED_DATE,那么您可以创建一个数据集,将其扩展为每年有一个观察结果,索赔与这样的简单数据步骤相交叉:

data expand;
  set claim_cases;
  do year=year(opened_date) to year(closed_date);
    output;
  end;
run;

要制作 YEAR_TABLE 数据集,只需使用简单的 DO 循环。

data year_table;
  do year=2020 to 2024;
    output;
  end;
run;
© www.soinside.com 2019 - 2024. All rights reserved.