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;
我希望每次我 运行 代码时,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;