SQL 如何在每次 运行 我的代码时添加新列

SQL How to add new columns each time I run my code

我希望每次我 运行 代码时,POLICY_VINTAGE 数据集都会添加计数 (NRB) 处理结果作为另一列,例如 Week2 和 next week3。 SAS 中是否有任何附加功能?

PROC SQL;   
   create table POLICY_VINTAGE as
   select distinct 
   POLICY_VINTAGE
  ,count(NRB) as Week1
   from PolisyEnd
   where POLIS ="A"
   group by 
   POLICY_VINTAGE

;
Quit;
data POLICY_VINTAGE ;
set _work.POLICY_VINTAGE 
;
run; 

为此,您需要将历史数据集与新数据集合并。将您的历史数据以长格式存储,并根据需要以宽格式呈现会更有效。

首先,为了回答您的问题,让我们创建一些完全符合您要求的代码。您的初始历史数据集将被称为 policy_vintage_historical,所有新数据都将合并到它。

由于您将通过合并内容来修改永久数据集,因此使用 genmax 选项自动创建数据集备份可能是个好主意。请记住,如果您的数据集很大,这可能不可行并且您不想使用它。

data lib.policy_vintage_historical;
    merge lib.policy_vintage_historical
              policy_vintage
    ;

    by policy_vintage;
run;

更高效的方式:以长格式存储。请注意,周数需要动态生成。您可以按照自己喜欢的任何方式执行此操作。

下面的代码将计算总数,然后将其附加到长数据集。

PROC SQL;   
   create table POLICY_VINTAGE as
       select distinct 
            POLICY_VINTAGE
          , 1 as week
          , count(nrb) as total
       from PolisyEnd
       where POLIS ="A"
       group by 
       POLICY_VINTAGE
quit;

proc append base=lib.policy_vintage_historical
            data=policy_vintage
            force;
run;

如果要以长格式显示,请使用 proc transpose。请注意,在转置之前,您需要在 lib.policy_vintage_historical 内对 policy_vintage 进行排序或索引。

proc transpose data   = lib.policy_vintage_historical
               out    = policy_vintage_tpose(drop=_NAME_)
               prefix = Week;
    by policy_vintage;
    id week;
    var Total;
run;